180 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| #compdef pm2
 | |
| # ------------------------------------------------------------------------------
 | |
| # Description
 | |
| # -----------
 | |
| #
 | |
| #  Completion script for pm2 (http://pm2.keymetrics.io/).
 | |
| #
 | |
| # ------------------------------------------------------------------------------
 | |
| # Authors
 | |
| # -------
 | |
| #
 | |
| #  * Myoungdo Park <mdo.park@gmail.com>
 | |
| #
 | |
| # ------------------------------------------------------------------------------
 | |
| 
 | |
| 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
 |