_supervisorctl 4.69 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#compdef supervisorctl

typeset -A opt_args
local context state line

_supervisorctl() {
    _arguments -s -S \
        {--configuration,-c}"[configuration file path (default /etc/supervisor.conf)]:FILENAME:_files" \
        {--help,-h}"[print usage message and exit]:" \
        {--interactive,-i}"[start an interactive shell after executing commands]" \
        {--serverurl,-s}"[URL on which supervisord server is listening (default "http://localhost:9001").]" \
        {--username,-u}"[username to use for authentication with server]:USERNAME:_users" \
        {--password,-p}"[password to use for authentication with server]:PASSWORD:" \
        {--history-file,-r}"[keep a readline history (if readline is available)]:FILENAME:_files" \
        "*::supervisorctl commands:_supervisorctl_command"
}

(( $+functions[_supervisorctl_command] )) ||
_supervisorctl_command() {
    local cmd ret=1

    (( $+supervisorctl_cmds )) || _supervisorctl_cmds=(
        "add:Activates any updates in config for process/group" \
        "avail:Display all configured processes" \
        "clear:Clear process/multiple-process/all-process log files" \
        "exit:Exit the supervisor shell." \
        "fg:Connect to a process in foreground mode" \
        "maintail:tail of supervisor main log file" \
        "open:Connect to a remote supervisord process. (for UNIX domain socket, use unix:///socket/path)" \
        "pid:Get the PID of supervisord." \
        "quit:Exit the supervisor shell." \
        "reload:Restart the remote supervisord." \
        "remove:Removes process/group from active config" \
        "reread:Reload the daemon's configuration files" \
        "restart:Restart process or group." \
        "shutdown:Shut the remote supervisord down." \
        "start:Start process or groups." \
        "status:Get process status info." \
        "stop:Stop process or group." \
        "tail:tail of process stdout" \
        "update:Reload config and add/remove as necessary" \
        "version:Show the version of the remote supervisord process" \
        "help:Show help" \
        )

    if (( CURRENT == 1 )); then
        _describe -t commands 'supervisorctl subcommand' _supervisorctl_cmds \
            || compadd "$@" - ${(s.:.)${(j.:.)_supervisorctl_syns}}
    else
        local curcontext="$curcontext"

        cmd="${${_supervisorctl_cmds[(r)$words[1]:*]%%:*}:-${(k)_supervisorctl_syns[(r)(*:|)$words[1](:*|)]}}"
        if (( $#cmd )); then
            curcontext="${curcontext%:*:*}:supervisorctl-${cmd}:"
            _call_function ret _supervisorctl_$cmd || _message 'no more arguments'
        else
            _message "unknown supervisorctl command: $words[1]"
        fi
        return ret
    fi
}

# get supervisor contoroll processes
(( $+functions[_get_supervisor_procs] )) ||
_get_supervisor_procs() {
    local cache_policy
    zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
    if [[ -z "$cache_policy" ]]; then
        zstyle ":completion:${curcontext}:" cache-policy _supervisor_procs_caching_policy
    fi

    if ( [[ ${+_supervisor_procs} -eq 0 ]] || _cache_invalid supervisor_procs ) \
        && ! _retrieve_cache supervisor_procs; then

        _supervisor_procs=(${${(f)"$(supervisorctl status >/dev/null 2>&1 | awk -F' ' '{print $1}')"}})
        _store_cache supervisor_procs _supervisor_procs
    fi

    local expl
    _wanted supervisor_procs expl 'supervisor processes' compadd -a _supervisor_procs
}

_supervisor_procs_caching_policy() {
    local -a oldp
    oldp=( "$1"(Nmw+1) )
    (( $#oldp ))
}

(( $+functions[_supervisorctl_add] )) ||
_supervisorctl_add() {
    _arguments -s \
        "--help[use help system]" \
        "*::supervisorctl commands:_supervisorctl"
}

(( $+functions[_supervisorctl_help] )) ||
_supervisorctl_help() {
    _arguments -s \
        "*:supervisorctl commands:_supervisorctl"
}

(( $+functions[_supervisorctl_maintail] )) ||
_supervisorctl_maintail() {
    _arguments -s \
        '-f[Continuous tail of supervisor main log file (Ctrl-C to exit)]'
}

(( $+functions[_supervisorctl_start] )) ||
_supervisorctl_start() {
    # TODO: add 'all'
    _arguments -s \
        '*::supvervisor process:_get_supervisor_procs'
}

(( $+functions[_supervisorctl_status] )) ||
_supervisorctl_status() {
    _arguments \
        '*::supvervisor process:_get_supervisor_procs'
}

(( $+functions[_supervisorctl_stop] )) ||
_supervisorctl_stop() {
    # TODO: add 'all'
    _arguments -s \
        '*::supvervisor process:_get_supervisor_procs'
}

(( $+functions[_supervisorctl_tail] )) ||
_supervisorctl_tail() {
    # TODO: add 'stderr'
    _arguments -s \
        '-f[Continuous tail of named process stdout Ctrl-C to exit.]' \
        '*::supvervisor process:_get_supervisor_procs'
}

_supervisorctl "$@"