|
@@ -0,0 +1,168 @@
|
|
|
+#!/bin/zsh -f
|
|
|
+#compdef pm2
|
|
|
+#autoload
|
|
|
+
|
|
|
+local -a _1st_arguments
|
|
|
+
|
|
|
+_1st_arguments=(
|
|
|
+ "start:start and daemonize an app"
|
|
|
+ "trigger:trigger process action"
|
|
|
+ "deploy:deploy your json"
|
|
|
+ "startOrRestart:start or restart JSON file"
|
|
|
+ "startOrReload:start or gracefully reload JSON file"
|
|
|
+ "pid:return pid of [app_name] or all"
|
|
|
+ "stop:stop a process"
|
|
|
+ "restart:restart a process"
|
|
|
+ "scale:scale up/down a process in cluster mode depending on total_number param"
|
|
|
+ "profile\:mem:Sample PM2 heap memory"
|
|
|
+ "profile\:cpu:Profile PM2 cpu"
|
|
|
+ "reload:reload processes (note that its for app using HTTP/HTTPS)"
|
|
|
+ "id:get process id by name"
|
|
|
+ "inspect:inspect a process"
|
|
|
+ "delete:stop and delete a process from pm2 process list"
|
|
|
+ "sendSignal:send a system signal to the target process"
|
|
|
+ "ping:ping pm2 daemon - if not up it will launch it"
|
|
|
+ "updatePM2:update in-memory PM2 with local PM2"
|
|
|
+ "install:install or update a module and run it forever"
|
|
|
+ "module\:update:update a module and run it forever"
|
|
|
+ "module\:generate:Generate a sample module in current folder"
|
|
|
+ "uninstall:stop and uninstall a module"
|
|
|
+ "package:Check & Package TAR type module"
|
|
|
+ "publish:Publish the module you are currently on"
|
|
|
+ "set:sets the specified config <key> <value>"
|
|
|
+ "multiset:multiset eg \"key1 val1 key2 val2\""
|
|
|
+ "get:get value for <key>"
|
|
|
+ "config:get / set module config values"
|
|
|
+ "unset:clears the specified config <key>"
|
|
|
+ "report:give a full pm2 report for https\://github.com/Unitech/pm2/issues"
|
|
|
+ "link:link with the pm2 monitoring dashboard"
|
|
|
+ "unlink:unlink with the pm2 monitoring dashboard"
|
|
|
+ "monitor:monitor target process"
|
|
|
+ "unmonitor:unmonitor target process"
|
|
|
+ "open:open the pm2 monitoring dashboard"
|
|
|
+ "plus:enable pm2 plus"
|
|
|
+ "login:Login to pm2 plus"
|
|
|
+ "logout:Logout from pm2 plus"
|
|
|
+ "web:launch a health API on 0.0.0.0\:9615"
|
|
|
+ "dump:dump all processes for resurrecting them later"
|
|
|
+ "cleardump:Create empty dump file"
|
|
|
+ "send:send stdin to <pm_id>"
|
|
|
+ "attach:attach stdin/stdout to application identified by <pm_id>"
|
|
|
+ "resurrect:resurrect previously dumped processes"
|
|
|
+ "unstartup:disable the pm2 startup hook"
|
|
|
+ "startup:enable the pm2 startup hook"
|
|
|
+ "logrotate:copy default logrotate configuration"
|
|
|
+ "ecosystem:generate a process conf file. (mode = null or simple)"
|
|
|
+ "reset:reset counters for process"
|
|
|
+ "describe:describe all parameters of a process id"
|
|
|
+ "list:list all processes"
|
|
|
+ "jlist:list all processes in JSON format"
|
|
|
+ "prettylist:print json in a prettified JSON"
|
|
|
+ "monit:launch termcaps monitoring"
|
|
|
+ "imonit:launch legacy termcaps monitoring"
|
|
|
+ "dashboard:launch dashboard with monitoring and logs"
|
|
|
+ "flush:flush logs"
|
|
|
+ "reloadLogs:reload all logs"
|
|
|
+ "logs:stream logs file. Default stream all logs"
|
|
|
+ "kill:kill daemon"
|
|
|
+ "pull:updates repository for a given app"
|
|
|
+ "forward:updates repository to the next commit for a given app"
|
|
|
+ "backward:downgrades repository to the previous commit for a given app"
|
|
|
+ "deepUpdate:performs a deep update of PM2"
|
|
|
+ "serve:serve a directory over http via port"
|
|
|
+ "examples:display pm2 usage examples"
|
|
|
+)
|
|
|
+
|
|
|
+local -a id_names
|
|
|
+
|
|
|
+_id_names() {
|
|
|
+ local app_list
|
|
|
+ app_list=`pm2 list -m`
|
|
|
+
|
|
|
+ local -a names ids
|
|
|
+ names=(`echo $app_list | grep '+---' | awk '{print $2}'`)
|
|
|
+ ids=(`echo $app_list | grep 'pm2 id' | awk '{print $4}'`)
|
|
|
+
|
|
|
+ if (( ${#ids} > 0 )); then
|
|
|
+ for i in {1..${#ids}}; do
|
|
|
+ id_names+=( "${ids[i]}:${names[i]}" )
|
|
|
+ done
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+_arguments \
|
|
|
+ '(-v --version)'{-v,--version}'[output version]' \
|
|
|
+ '(-h --help)'{-h,--help}'[output usage information]' \
|
|
|
+ '*:: :->subcmds' && return 0
|
|
|
+
|
|
|
+if (( CURRENT == 1 )); then
|
|
|
+ _describe "command" _1st_arguments
|
|
|
+ return
|
|
|
+fi
|
|
|
+
|
|
|
+local -a id_comp id_all_comp id_all_files_comp start_options logs_options
|
|
|
+id_comp=('1: :->id_comp')
|
|
|
+id_all_comp=('1: :->id_all_comp')
|
|
|
+id_all_files_comp=('1: :->id_all_files_comp')
|
|
|
+start_options=(
|
|
|
+ '--watch[Watch folder for changes]'
|
|
|
+ '--fresh[Rebuild Dockerfile]'
|
|
|
+ '--daemon[Run container in Daemon mode (debug purposes)]'
|
|
|
+ '--container[Start application in container mode]'
|
|
|
+ '--dist[with --container; change local Dockerfile to containerize all files in current directory]'
|
|
|
+ '--image-name[with --dist; set the exported image name]'
|
|
|
+ '--node-version[with --container, set a specific major Node.js version]'
|
|
|
+ '--dockerdaemon[for debugging purpose]'
|
|
|
+ '(-h --help)'{-h,--help}'[output usage information]'
|
|
|
+ $id_all_files_comp
|
|
|
+)
|
|
|
+logs_options=(
|
|
|
+ '--json[json log output]'
|
|
|
+ '--format[formated log output]'
|
|
|
+ '--raw[raw output]'
|
|
|
+ '--err[only shows error output]'
|
|
|
+ '--out[only shows standard output]'
|
|
|
+ '--lines[output the last N lines, instead of the last 15 by default]'
|
|
|
+ '--timestamp[add timestamps (default format YYYY-MM-DD-HH:mm:ss)]'
|
|
|
+ '--nostream[print logs without lauching the log stream]'
|
|
|
+ '(-h --help)'{-h,--help}'[output usage information]'
|
|
|
+ $id_all_comp
|
|
|
+)
|
|
|
+
|
|
|
+case "$words[1]" in
|
|
|
+ start)
|
|
|
+ _arguments $start_options && return 0
|
|
|
+ ;;
|
|
|
+ logs)
|
|
|
+ _arguments $logs_options && return 0
|
|
|
+ ;;
|
|
|
+ stop|restart|delete|reload|reset)
|
|
|
+ _arguments $id_all_comp && return 0
|
|
|
+ ;;
|
|
|
+ env|inspect|monitor|unmonitor|discribe)
|
|
|
+ _arguments $id_comp && return 0
|
|
|
+ ;;
|
|
|
+ deploy|startOrRestart|startOrReload)
|
|
|
+ _files ;;
|
|
|
+esac
|
|
|
+
|
|
|
+case "$state" in
|
|
|
+ id_comp)
|
|
|
+ _id_names
|
|
|
+ _alternative \
|
|
|
+ 'args:app args:(($id_names))'
|
|
|
+ ;;
|
|
|
+ id_all_comp)
|
|
|
+ _id_names
|
|
|
+ id_names+=(all)
|
|
|
+ _alternative \
|
|
|
+ 'args:app args:(($id_names))'
|
|
|
+ ;;
|
|
|
+ id_all_files_comp)
|
|
|
+ _id_names
|
|
|
+ id_names+=(all)
|
|
|
+ _alternative \
|
|
|
+ 'args:app args:(($id_names))' \
|
|
|
+ 'files:filename:_files'
|
|
|
+ ;;
|
|
|
+esac
|