toolkits 0.2.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. toolkits/3des/3des.py +93 -0
  2. toolkits/3des/__init__.py +0 -0
  3. toolkits/__init__.py +2 -0
  4. toolkits/basic/__init__.py +0 -0
  5. toolkits/basic/list_helper.py +26 -0
  6. toolkits/config/__init__.py +0 -0
  7. toolkits/config/config_demo.py +43 -0
  8. toolkits/databases/__init__.py +0 -0
  9. toolkits/databases/database_client_util.py +143 -0
  10. toolkits/databases/es_client.py +88 -0
  11. toolkits/databases/hive_client.py +72 -0
  12. toolkits/databases/hive_cmd.py +113 -0
  13. toolkits/databases/hive_helper.py +220 -0
  14. toolkits/databases/redis_mgmt.py +95 -0
  15. toolkits/databases/sql_helper.py +291 -0
  16. toolkits/databases/sqlalchemy_helper.py +71 -0
  17. toolkits/databases/status_check.py +162 -0
  18. toolkits/db_query_demo.py +72 -0
  19. toolkits/libs_core/__init__.py +0 -0
  20. toolkits/libs_core/config_groups_helper.py +60 -0
  21. toolkits/libs_core/config_helper.py +22 -0
  22. toolkits/libs_core/env_prepare.py +145 -0
  23. toolkits/libs_core/load_module.py +46 -0
  24. toolkits/libs_core/mysql_helper.py +151 -0
  25. toolkits/network/__init__.py +0 -0
  26. toolkits/network/ip_helper.py +32 -0
  27. toolkits/network/pdi_helper.py +206 -0
  28. toolkits/network/send_mail.py +105 -0
  29. toolkits/system/__init__.py +0 -0
  30. toolkits/system/aes_cipher.py +44 -0
  31. toolkits/system/basic_utils.py +20 -0
  32. toolkits/system/collections_helper.py +72 -0
  33. toolkits/system/crpyt_helper.py +39 -0
  34. toolkits/system/dict2xml.py +416 -0
  35. toolkits/system/dict_helper.py +29 -0
  36. toolkits/system/excel_helper.py +101 -0
  37. toolkits/system/file_helper.py +52 -0
  38. toolkits/system/load_module.py +47 -0
  39. toolkits/system/priority_tasks.py +199 -0
  40. toolkits/system/process_monitor/__init__.py +0 -0
  41. toolkits/system/process_monitor/process_monitor.py +349 -0
  42. toolkits/system/shell_helper.py +263 -0
  43. toolkits/system/str_helper.py +187 -0
  44. toolkits/system/tasks_deamon/__init__.py +0 -0
  45. toolkits/system/tasks_deamon/tasks_controller.py +70 -0
  46. toolkits/system/tasks_deamon/tasks_multiprocessing.py +134 -0
  47. toolkits/system/tasks_deamon/tasks_process.py +137 -0
  48. toolkits/system/test_shell_helper.py +2 -0
  49. toolkits/system/time_helper.py +175 -0
  50. toolkits/system/win32_env.py +49 -0
  51. toolkits/tookits_app.py +17 -0
  52. toolkits/tookits_cli.py +126 -0
  53. toolkits-0.2.7.dist-info/METADATA +35 -0
  54. toolkits-0.2.7.dist-info/RECORD +56 -0
  55. toolkits-0.2.7.dist-info/WHEEL +4 -0
  56. toolkits-0.2.7.dist-info/entry_points.txt +5 -0
@@ -0,0 +1,199 @@
1
+ # -*- coding: utf-8 -*-
2
+ import argparse
3
+ import pprint
4
+ import sys
5
+ import time
6
+ from copy import deepcopy
7
+
8
+ import arrow
9
+ import redis
10
+ import json
11
+
12
+ from arrow import Arrow
13
+ from log4python.Log4python import log
14
+ import traceback
15
+ import importlib
16
+
17
+ importlib.reload(sys)
18
+ logger = log("PriorityTasks")
19
+
20
+
21
+ class PriorityTasks:
22
+ '''
23
+ ServerDemo:
24
+ def init_worker(task):
25
+ pass # process task
26
+ if __name__ == '__main__':
27
+ task = PriorityTasks("Test")
28
+ task.worker(init_worker)
29
+ ClientDemo:
30
+ # priority in ["high", "mid", "low"]
31
+ PriorityTasks("Test").send_task(priority, task_params_json)
32
+ '''
33
+ def __init__(self, redis_conn_info, queue_key=None, work_status_queue_name="txt_redis_working_flag"):
34
+ self.redis_conn_info = redis_conn_info
35
+ self.queue_key = queue_key
36
+ self.work_status_queue_name = work_status_queue_name
37
+ self.key_file_tasks = self.queue_key+"_%s"
38
+ logger.info("PriorityTasksKey:[%s]" % self.queue_key)
39
+ self.keys_file_tasks = [self.queue_key+"_high", self.queue_key+"_mid", self.queue_key+"_low"]
40
+ self.redisCli = redis.StrictRedis(host=redis_conn_info['host'],
41
+ port=redis_conn_info['port'], password=redis_conn_info['password'],
42
+ db=redis_conn_info['db'], decode_responses=True)
43
+
44
+ def get_tasks_by_priority(self):
45
+ task = None
46
+ for key_task in self.keys_file_tasks:
47
+ # logger.debug("FetchKey:[%s]" % key_task)
48
+ line = self.redisCli.lpop(key_task)
49
+ if line:
50
+ logger.debug("Key:[%s]; line:[%s]" % (key_task, line))
51
+ task = line
52
+ break
53
+ return task
54
+
55
+ def get_tasks_stat(self):
56
+ for priority in ["high", "mid", "low"]:
57
+ key_process_priority = self.key_file_tasks % priority
58
+ print(("TaskQueue-%s-Number: [%s]" % (priority.capitalize(), str(self.redisCli.llen(key_process_priority)))))
59
+
60
+ @staticmethod
61
+ def get_worker_process():
62
+ print("No implement, Wait ...")
63
+
64
+ def stop_tasks(self):
65
+ self.redisCli.set(self.work_status_queue_name, "off")
66
+
67
+ def start_tasks(self):
68
+ self.redisCli.set(self.work_status_queue_name, "on")
69
+
70
+ def __send_task(self, priority, task_params):
71
+ if not self.queue_key:
72
+ tip = "The QueueKey is None, Nothing to Do."
73
+ logger.error(tip)
74
+ print(tip)
75
+ return None
76
+
77
+ queue_key = self.get_priority_queue(priority)
78
+ conn_info = deepcopy(self.redis_conn_info)
79
+ conn_info['password'] = "******"
80
+ logger.info("RedisInfo:[%s]; QueueKey:[%s]" % (json.dumps(conn_info, ensure_ascii=False), queue_key))
81
+ self.redisCli.rpush(queue_key, task_params)
82
+
83
+ def send_high_task(self, task_params):
84
+ self.__send_task("high", task_params)
85
+
86
+ def send_mid_task(self, task_params):
87
+ self.__send_task("mid", task_params)
88
+
89
+ def send_low_task(self, task_params):
90
+ self.__send_task("low", task_params)
91
+
92
+ def get_priority_queue(self, priority):
93
+ key_process_priority = self.key_file_tasks % "high"
94
+ if priority in ["high", "mid", "low"]:
95
+ key_process_priority = self.key_file_tasks % priority
96
+ else:
97
+ logger.error("Log priority Level Not Found [%s]" % priority)
98
+ return key_process_priority
99
+
100
+ def worker(self, task_func, func_records_check=None, records_count=1, time_out=30):
101
+ if not self.queue_key:
102
+ tip = "The QueueKey is None, Nothing to Do."
103
+ logger.error(tip)
104
+ print(tip)
105
+ return None
106
+
107
+ work_status = False
108
+ work_flag = self.redisCli.get(self.work_status_queue_name)
109
+ conn_info = deepcopy(self.redis_conn_info)
110
+ conn_info['password'] = "******"
111
+ logger.info("TasksRedisInfo:[%s]" % json.dumps(conn_info, ensure_ascii=False))
112
+ if str(work_flag).lower() == "on":
113
+ work_status = True
114
+ logger.info("CurrentTaskSwitchKey:[%s]; InitWork: Status is ON!!! " % self.work_status_queue_name)
115
+ else:
116
+ work_status = False
117
+ logger.info("CurrentTaskSwitchKey:[%s]; InitWork: Status is OFF!!! Nothing to do...." %
118
+ self.work_status_queue_name)
119
+
120
+ record_list = []
121
+ flag_fetch_data = False
122
+ time_idle_begin = 0
123
+ flag_start_to_wait_restart = "%s_pid_%s_status" % (self.work_status_queue_name, str(1))
124
+ while True:
125
+ work_flag = self.redisCli.get(self.work_status_queue_name)
126
+ if str(work_flag).lower() != "on":
127
+ if work_status:
128
+ logger.info("Work Status Change to OFF!!! ")
129
+ time_stop = arrow.now().format('YYYY-MM-DD HH:mm:ss')
130
+ self.redisCli.set(flag_start_to_wait_restart, "wait_to_restart:[%s]" % time_stop)
131
+ work_status = False
132
+ time.sleep(1)
133
+ continue
134
+ else:
135
+ if work_status is False:
136
+ logger.info("Work Status Change to ON!!! ")
137
+ self.redisCli.set(flag_start_to_wait_restart, "ok_now_to_start_process_task", 0.5)
138
+ work_status = True
139
+
140
+ task = self.get_tasks_by_priority()
141
+ if task is None:
142
+ if flag_fetch_data is True:
143
+ flag_fetch_data = False
144
+ time_idle_begin = Arrow.now().timestamp
145
+ else:
146
+ if len(record_list) > 0:
147
+ time_cur = Arrow.now().timestamp
148
+ time_used = time_cur - time_idle_begin
149
+ if time_used >= time_out:
150
+ task_func(record_list)
151
+ record_list = []
152
+ time.sleep(1)
153
+ continue
154
+ else:
155
+ flag_fetch_data = True
156
+
157
+ if records_count == 1:
158
+ task_func(task)
159
+ else:
160
+ if func_records_check is not None:
161
+ ret_data = func_records_check(task)
162
+ if isinstance(ret_data, list):
163
+ record_list.extend(ret_data)
164
+ else:
165
+ record_list.append(ret_data)
166
+ else:
167
+ record_list.append(task)
168
+
169
+ if len(record_list) >= records_count:
170
+ record_list = self.process_data(task_func, record_list, records_count)
171
+
172
+ @staticmethod
173
+ def process_data(func_process, arr, count):
174
+ unprocess_list = []
175
+ len_arr = len(arr)
176
+ len_range = len_arr / count
177
+
178
+ for item in range(len_range + 1):
179
+ index_begin = item * count
180
+ index_end = index_begin + count
181
+ if index_end > len_arr:
182
+ index_end = len_arr
183
+ unprocess_list = arr[index_begin: index_end]
184
+ break
185
+ else:
186
+ func_process(arr[index_begin: index_end])
187
+
188
+ return unprocess_list
189
+
190
+
191
+ if __name__ == '__main__':
192
+ try:
193
+ parser = argparse.ArgumentParser()
194
+ parser.add_argument("logFile", type=str, help="specify the log file's path")
195
+ args = parser.parse_args()
196
+ print((args.logFile))
197
+ except Exception as ex:
198
+ logger.error("Error: %s" % ex)
199
+ logger.error(traceback.format_exc())
File without changes
@@ -0,0 +1,349 @@
1
+ # -*- coding: utf-8 -*-
2
+ import importlib
3
+ import json
4
+ import os
5
+ import sys
6
+
7
+ import fire
8
+ from log4python.Log4python import log
9
+ from unipath import Path
10
+
11
+ from toolkits.databases.database_client_util import DatabaseClientUtil
12
+ from toolkits.system.priority_tasks import PriorityTasks
13
+ from toolkits.system.shell_helper import exec_shell
14
+
15
+ importlib.reload(sys)
16
+ logger = log("ProcessMonitor")
17
+
18
+
19
+ class ProcessMonitor:
20
+ """
21
+ config_monitor = {
22
+ "circus_config_path": "/circus/circus.conf",
23
+ "monitor_queue_name": "process_monitor",
24
+ "monitor_queue_switch": "process_monitor_switch",
25
+ "redis_info": {
26
+ "password": "just_your_redis_password",
27
+ "host": "your_redis_ip",
28
+ "port": 8081,
29
+ "db": 6
30
+ }
31
+ }
32
+
33
+ task_monitor_config =
34
+ {
35
+ "name": "TmpMonitor",
36
+ "cmd": "python",
37
+ "args": "tmp_monitor.py",
38
+ "working_dir": ".",
39
+ "copy_env": "true",
40
+ "numprocesses": "1",
41
+ "stdout_stream.class": "FileStream",
42
+ "stdout_stream.filename": "tmp_monitor.log",
43
+ "stdout_stream.max_bytes": "1073741824",
44
+ "stdout_stream.backup_count": "5"
45
+ }
46
+
47
+ :param config_file_path:
48
+ :param monitor_config_filename:
49
+ """
50
+
51
+ def __init__(self, config_file_path, monitor_config_filename="monitor.json"):
52
+ self.__base_path = self.__get_script_dir()
53
+ self.__work_path = self.__get_run_dir()
54
+ self.__monitor_config_filename = monitor_config_filename
55
+ self.__config_file_path = config_file_path
56
+ self.__config_path = None
57
+ self.__redis_info = None
58
+ self.__monitor_queue_switch = None
59
+ self.__monitor_queue_name = None
60
+ self.__task_name = ""
61
+ self.__task_config = ""
62
+ self.__task_queue_client = None
63
+ self.__init_global_config()
64
+
65
+ def __init_global_config(self):
66
+ if Path(self.__config_file_path).exists():
67
+ file_path_final = self.__config_file_path
68
+ else:
69
+ relative_path = "%s/%s" % (self.__work_path, self.__config_file_path)
70
+
71
+ if Path(relative_path).exists():
72
+ file_path_final = relative_path
73
+ else:
74
+ msg = "global config file was not Found!!!"
75
+ print(msg)
76
+ raise Exception(msg)
77
+
78
+ logger.debug("GlobalConfigPath:[%s]" % file_path_final)
79
+ fp = open(file_path_final)
80
+ lines = fp.readlines()
81
+ fp.close()
82
+
83
+ config_monitor = json.loads("".join(lines))
84
+ self.__config_path = config_monitor['circus_config_path']
85
+ self.__redis_info = config_monitor['redis_info']
86
+ self.__monitor_queue_switch = config_monitor['monitor_queue_switch']
87
+ self.__monitor_queue_name = config_monitor['monitor_queue_name']
88
+
89
+ @staticmethod
90
+ def __get_run_dir():
91
+ script_path = sys.argv[0]
92
+ process_id = os.getpid()
93
+ link_path = "/proc/%s/cwd" % process_id
94
+ read_link_path = "ls -la %s|awk -F'->' '{print $2}'" % link_path
95
+ ret = exec_shell(read_link_path)
96
+ if str(ret['exit_code']) == "0":
97
+ full_path = str(ret['stdout'][0]).strip()
98
+ else:
99
+ if script_path[0] != "/":
100
+ path_tmp = "%s/%s" % (os.getcwd(), script_path)
101
+ else:
102
+ path_tmp = script_path
103
+ full_path = os.path.dirname(path_tmp)
104
+ return full_path
105
+
106
+ @staticmethod
107
+ def __get_script_dir():
108
+ return os.path.dirname(os.path.realpath(__file__))
109
+
110
+ def __get_monitor_config(self):
111
+ file_path = "%s/%s" % (self.__work_path, self.__monitor_config_filename)
112
+ config_info = None
113
+ if Path(file_path).exists():
114
+ fp = open(file_path)
115
+ lines = fp.readlines()
116
+ config_info = "".join(lines)
117
+ return config_info
118
+
119
+ def __prepare_config(self):
120
+ name_tasks = None
121
+ config_task = []
122
+ config_info = self.__get_monitor_config()
123
+ log_info = ['cmd', 'args', 'working_dir', 'copy_env',
124
+ 'numprocesses', 'stdout_stream.class',
125
+ 'stdout_stream.filename',
126
+ 'stdout_stream.max_bytes',
127
+ 'stdout_stream.backup_count']
128
+
129
+ if config_info:
130
+ config_obj = json.loads(config_info)
131
+ name_tasks = config_obj['name']
132
+ config_task = ["[watcher:%s]" % name_tasks]
133
+
134
+ work_path = self.__get_run_dir()
135
+ logs_path = "%s/logs/" % work_path
136
+ if not Path(logs_path).exists():
137
+ Path(logs_path).mkdir(parents=True)
138
+
139
+ for item in log_info:
140
+ if item in config_obj:
141
+ if ("working_dir" == item and item in config_obj) \
142
+ and (config_obj['working_dir'] == "." or config_obj['working_dir'] == ""):
143
+ config_task.append("%s = %s" % (item, work_path))
144
+ continue
145
+
146
+ if "stdout_stream.filename" == item and item in config_obj:
147
+ file_name = config_obj['stdout_stream.filename']
148
+ if file_name != "":
149
+ logs_file_path = file_name
150
+ if file_name.find("\\") < 0 and file_name.find("/") < 0:
151
+ logs_file_path = "%s/%s" % (logs_path, file_name)
152
+ config_task.append("%s = %s" % (item, logs_file_path))
153
+ else:
154
+ logs_file_path = "%s/%s" % (logs_path, "%s.log" % name_tasks)
155
+ config_task.append("%s = %s" % (item, logs_file_path))
156
+ continue
157
+
158
+ config_task.append("%s = %s" % (item, config_obj[item]))
159
+
160
+ for item in config_obj:
161
+ if item not in log_info:
162
+ if item == "name":
163
+ continue
164
+ dict_val = config_obj[item]
165
+ if config_obj[item] is None:
166
+ dict_val = ""
167
+ config_task.append("%s = %s" % (item, dict_val))
168
+ else:
169
+ msg_err = "No config be found!!!!"
170
+ print(msg_err)
171
+ logger.debug(msg_err)
172
+ raise Exception(msg_err)
173
+
174
+ return name_tasks, config_task
175
+
176
+ def __init_env(self):
177
+ self.__task_name, self.__task_config = self.__prepare_config()
178
+ self.__task_queue_client = self.__init_tasks_queue_client(self.__redis_info, self.__monitor_queue_name)
179
+ cmd = {
180
+ 'type': 'start', # install, start, restart, stop, remove
181
+ 'name': self.__task_name,
182
+ 'config': "\n".join(self.__task_config),
183
+ }
184
+ return cmd
185
+
186
+ def __switch_process(self, status):
187
+ database_init = DatabaseClientUtil(None)
188
+ redis_client = database_init.get_redis_client(self.__redis_info['db'], self.__redis_info)
189
+ redis_client.set(self.__monitor_queue_switch, status)
190
+
191
+ def switch_tasks_queue_on(self):
192
+ self.__switch_process("on")
193
+
194
+ def switch_tasks_queue_off(self):
195
+ self.__switch_process("off")
196
+
197
+ def get_switch_tasks_status(self):
198
+ database_init = DatabaseClientUtil(None)
199
+ redis_client = database_init.get_redis_client(self.__redis_info['db'], self.__redis_info)
200
+ return redis_client.get(self.__monitor_queue_switch)
201
+
202
+ def start_daemon_server(self):
203
+ """
204
+ CMD:
205
+ circusd --daemon --pidfile /home/vagrant/dev/circus/circus.pid --log-level debug --log-output /home/vagrant/dev/circus/circus.log /home/vagrant/dev/circus/circus.conf
206
+ :return:
207
+ """
208
+ self.switch_tasks_queue_on()
209
+ self.__init_tasks_queue_server(self.__redis_info, self.__exec_cmd_list,
210
+ self.__monitor_queue_switch,
211
+ self.__monitor_queue_name)
212
+
213
+ def get_task_status(self, task_name):
214
+ """
215
+ error| stopped| active
216
+ :param task_name:
217
+ :return:
218
+ """
219
+ cmd_exec = "circusctl status %s" % task_name
220
+ ret = exec_shell(cmd_exec)
221
+ status = "error"
222
+ if str(ret['exit_code']) == "0":
223
+ status = str(ret['stdout'][0]).strip()
224
+ return status
225
+
226
+ def __write_monitor_config(self, task_config):
227
+ fp = open(self.__config_path, "a+")
228
+ fp.write("\n")
229
+ fp.write(task_config)
230
+ fp.close()
231
+
232
+ def __process_install(self, task_name, task_config):
233
+ status = self.get_task_status(task_name)
234
+ if status in ["active", "stopped"]:
235
+ msg = "Task[%s] was exists!! please check the configure info" % task_name
236
+ logger.error(msg)
237
+ print(msg)
238
+ elif status == "error":
239
+ self.__write_monitor_config(task_config)
240
+ cmd_exec = "circusctl reloadconfig | circusctl start %s" % task_name
241
+ ret = exec_shell(cmd_exec)
242
+ if ret['exit_code'] == 0:
243
+ logger.debug("Task[%s] was ready!!" % task_name)
244
+ else:
245
+ logger.error("Task[%s] was execute wrong!!" % task_name)
246
+ else:
247
+ msg = "Task[%s] status was wrong!!!! please check the configure info" % task_name
248
+ logger.error(msg)
249
+
250
+ def __process_uninstall(self, task_name):
251
+ self.__process_cmd(task_name, "stop")
252
+
253
+ @staticmethod
254
+ def __process_cmd(task_name, cmd_type):
255
+ cmd_exec = "circusctl %s %s" % (cmd_type, task_name)
256
+ logger.debug("CMD:[%s]" % cmd_exec)
257
+ ret = exec_shell(cmd_exec)
258
+ if str(ret['exit_code']) != "0":
259
+ logger.error("Error:[%s]" % "\n".join(ret['stderr']))
260
+
261
+ def __exec_cmd(self, cmd_obj):
262
+ logger.debug("CMD_INFO:[%s]" % json.dumps(cmd_obj, ensure_ascii=False))
263
+ status = self.get_task_status(cmd_obj['name'])
264
+ logger.debug("Task[%s] current status:[%s]" % (cmd_obj['name'], status))
265
+
266
+ if cmd_obj['type'] == "install":
267
+ self.__process_install(cmd_obj['name'], cmd_obj['config'])
268
+ elif cmd_obj['type'] == "uninstall":
269
+ self.__process_uninstall(cmd_obj['name'])
270
+ else:
271
+ if status != "error":
272
+ self.__process_cmd(cmd_obj['name'], cmd_obj['type'])
273
+ else:
274
+ msg = "Task[%s] status is unknown!!!" % cmd_obj['name']
275
+ logger.error(msg)
276
+ print(msg)
277
+
278
+ def __exec_cmd_list(self, cmd_info):
279
+ """
280
+ redis_info['db'] = 8
281
+ cmd_info = {
282
+ 'type': 'start', # install, start, restart, stop, remove
283
+ 'name': 'task_name',
284
+ 'config': 'task_config',
285
+ }
286
+ :return:
287
+ """
288
+ entity_list = []
289
+ if isinstance(cmd_info, str):
290
+ entity_list.append(json.loads(cmd_info))
291
+ elif isinstance(cmd_info, list):
292
+ for item in cmd_info:
293
+ entity_list.append(json.loads(item))
294
+ else:
295
+ logger.debug("Error:[%s]" % json.dumps(cmd_info, ensure_ascii=False))
296
+
297
+ for item_cmd in entity_list:
298
+ self.__exec_cmd(item_cmd)
299
+
300
+ @staticmethod
301
+ def __send_tasks(task_client, cmd_data, level="high"):
302
+ if level == "high":
303
+ task_client.send_high_task(cmd_data)
304
+
305
+ @staticmethod
306
+ def __init_tasks_queue_server(redis_conn_info, task_process_worker,
307
+ task_switch_name, tasks_queue_name="process_monitor"):
308
+ task = PriorityTasks(redis_conn_info, tasks_queue_name, work_status_queue_name=task_switch_name)
309
+ task.worker(task_process_worker, records_count=100, time_out=10)
310
+
311
+ @staticmethod
312
+ def __init_tasks_queue_client(redis_conn_info, tasks_queue_name="process_monitor"):
313
+ task_client = PriorityTasks(redis_conn_info, tasks_queue_name)
314
+ return task_client
315
+
316
+ def __process_cmd_info(self, cmd_type):
317
+ cmd = self.__init_env()
318
+ cmd['type'] = cmd_type
319
+ self.__send_tasks(self.__task_queue_client, json.dumps(cmd, ensure_ascii=False))
320
+
321
+ def get_task_name(self):
322
+ self.__init_env()
323
+ return self.__task_name
324
+
325
+ def get_task_config(self):
326
+ self.__init_env()
327
+ return self.__task_config
328
+
329
+ def monitor_start(self):
330
+ self.__process_cmd_info("start")
331
+
332
+ def monitor_restart(self):
333
+ self.__process_cmd_info("restart")
334
+
335
+ def monitor_stop(self):
336
+ self.__process_cmd_info("stop")
337
+
338
+ def monitor_install(self):
339
+ self.__process_cmd_info("install")
340
+
341
+ def monitor_uninstall(self):
342
+ self.__process_cmd_info("uninstall")
343
+
344
+ def __worker(self):
345
+ pass
346
+
347
+
348
+ if __name__ == '__main__':
349
+ fire.Fire(ProcessMonitor)