-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdream_control.py
More file actions
executable file
·136 lines (107 loc) · 5.78 KB
/
dream_control.py
File metadata and controls
executable file
·136 lines (107 loc) · 5.78 KB
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
#!/usr/bin/python3
import argparse
import daemon
from os.path import basename
from subprocess import call
from daemon import *
from backup import make_backup
from config import CONFIGS, DEFAULT_CONFIG, PATH_TO_CRONTAB
from update import update_daemon
def list_configs(args):
count = 0
for config in CONFIGS:
print("Config {0}:".format(count))
for (key, value) in config.items():
print(" {0}: {1}".format(key, value))
print("\n")
count += 1
def list_daemons(args):
daemons = running_dreamdaemons()
for daemon in daemons:
print("Daemon: {0}".format(" ".join(daemon.cmdline())))
def start_daemon(args):
config = CONFIGS[args.config]
call(["crontab", PATH_TO_CRONTAB])
print("Starting daemon running {0}".format(config.dmb))
start_daemon_if_stopped(config.get_dmb_path(), config.port, config.args)
def start_default_daemon(args):
args.config = DEFAULT_CONFIG
start_daemon(args)
def stop_daemon(args):
config = CONFIGS[args.config]
call(["crontab", "-r"])
print("Stopping daemon running {0}".format(config.dmb))
daemon.stop_daemon(config.dmb, args.force)
def stop_default_daemon(args):
args.config = DEFAULT_CONFIG
stop_daemon(args)
def restart_default_daemon(args):
stop_default_daemon(args)
start_default_daemon(args)
def edit_admins(args):
call(["nano", os.path.join(CONFIGS[DEFAULT_CONFIG].path, "config/admins.txt")])
def backup(args):
config = CONFIGS[args.config]
print("Beginning backup of {0} to {1}".format(str(config.backup_files), config.backup_dest))
if make_backup(config.path, config.backup_files, config.backup_dest):
print("Backup successful")
else:
print("Backup failed, destination is probably a file")
def update(args):
config = CONFIGS[args.config]
print("Beginning update of config {0}. If the server is still running, shutdown is recommended.".format(args.config))
update_daemon(config)
def stop_and_update(args):
stop_daemon(args)
update(args)
start_daemon(args)
def _main():
parser = argparse.ArgumentParser(description="Commands for controlling DreamDaemon instances")
parser.set_defaults(func=None)
subparsers = parser.add_subparsers()
parser_list_daemons = subparsers.add_parser("list_daemons", help="Lists all running daemons")
parser_list_daemons.set_defaults(func=list_daemons)
parser_list_configs = subparsers.add_parser("list_configs", help="Lists all available configurations")
parser_list_configs.set_defaults(func=list_configs)
parser_list = subparsers.add_parser("list", help="Lists all running daemons")
parser_list.set_defaults(func=list_daemons)
parser_start = subparsers.add_parser("start", help="Starts (if not currently running) the DreamDaemon instance specified by the config number.")
parser_start.add_argument("config", type=int, help="Config number of the chosen configuration, e.g 1, 2, 3.")
parser_start.set_defaults(func=start_daemon)
parser_stop = subparsers.add_parser("stop", help="Stops the DreamDaemon instance specified by the config number.")
parser_stop.add_argument("config", type=int, help="Config number of the chosen configuration, e.g 1, 2, 3.")
parser_stop.add_argument("-force", action="store_true", help="Sends SIGKILL instead of SIGTERM - Kills it outright")
parser_stop.set_defaults(func=stop_daemon)
parser_stop_default = subparsers.add_parser("stop_default",
help="""Stops the default daemon running and prevents autorestart.
Currently configured to: """ + CONFIGS[DEFAULT_CONFIG].path)
parser_stop_default.add_argument("-force", action="store_true", help="Sends SIGKILL instead of SIGTERM - Kills it outright")
parser_stop_default.set_defaults(func=stop_default_daemon)
parser_restart_default = subparsers.add_parser("restart_default",
help="""Immediately kills (SIGKILL) the default daemon and starts
it again. Currently configured to: """ + CONFIGS[DEFAULT_CONFIG].path)
parser_restart_default.add_argument("-force", action="store_true", help="Sends SIGKILL instead of SIGTERM - Kills it outright")
parser_restart_default.set_defaults(func=restart_default_daemon)
parser_start_default = subparsers.add_parser("start_default",
help="""Starts the default daemon.
Currently configured to: """ + CONFIGS[DEFAULT_CONFIG].path)
parser_start_default.set_defaults(func=start_default_daemon)
parser_edit_admins = subparsers.add_parser("edit_admins", help="Opens admins.txt in nano.")
parser_edit_admins.set_defaults(func=edit_admins)
parser_backup = subparsers.add_parser("backup", help="Backs up the DreamDaemon instance specified by the config number.")
parser_backup.add_argument("config", type=int, help="Config number of the chosen configuration, e.g 1, 2, 3.")
parser_backup.set_defaults(func=backup)
parser_update = subparsers.add_parser("update", help="Updates a specific config to the latest version (as per git tag vX.Y)")
parser_update.add_argument("config", type=int, help="Config number of the chosen configuration, e.g 1, 2, 3.")
parser_update.set_defaults(func=update)
parser_stop = subparsers.add_parser("update_and_restart", help="Stops the DreamDaemon instance specified by the config number, updates it and starts it again")
parser_stop.add_argument("config", type=int, help="Config number of the chosen configuration, e.g 1, 2, 3.")
parser_stop.add_argument("-force", action="store_true", help="Sends SIGKILL instead of SIGTERM - Kills it outright")
parser_stop.set_defaults(func=stop_and_update)
args = parser.parse_args()
if args.func:
args.func(args)
else:
parser.print_help()
if __name__ == "__main__":
_main()