-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
357 lines (318 loc) · 15.9 KB
/
app.py
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
#-*- coding: UTF-8 -*-
import time
import rumps
import logging
import subprocess
import pyperclip
#配置日志
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
logging.basicConfig(filename='./logs/' + time.strftime('%Y%m%d', time.localtime(time.time())) + '.log', level=logging.DEBUG, format=LOG_FORMAT, encoding='utf-8')
# logging.basicConfig(filename='./logs/my.log', level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, encoding='utf-8')
# print(time.strftime('%Y%m%d',time.localtime(time.time())))
VERSION = '0.0.6'
STOP_ICON = '🔴'
START_ICON = '🟢'
BREW_PATH = '/opt/homebrew/bin/brew'
SERVE_HTTPD_NAME = ''
SERVE_HTTPD_STATA = ''
SERVE_PHP_NAME = ''
SERVE_PHP_STATA = ''
SERVE_MYSQL_NAME = ''
SERVE_MYSQL_STATA = ''
SERVE_REDIS_NAME = ''
SERVE_REDIS_STATA = ''
# brewPath = subprocess.Popen('which brew', shell=True, stdout=subprocess.PIPE)
# brewPath.wait()
# BREW_PATH = brewPath.stdout.readline().decode('utf-8').strip()
# if BREW_PATH == '':
# logging.error('brew路径找不到')
# logging.info('brew path:%s', BREW_PATH)
# print(BREW_PATH)
#延迟2秒加载程序,防止开机启动加载过快导致services list读取错误.
time.sleep(2)
state = subprocess.Popen(BREW_PATH + " services list", shell=True, stdout=subprocess.PIPE)
state.wait()
for line in state.stdout.readlines()[1:]:
result = str(line, 'utf-8').split()
# print(result)
# print(result[0], result[1])
if result[0].find('httpd') != -1:
SERVE_HTTPD_NAME = result[0]
SERVE_HTTPD_STATA = result[1]
logging.info('HTTPD NAME:%s HTTPD STATA:%s', result[0], result[1])
elif result[0].find('php') != -1:
SERVE_PHP_NAME = result[0]
SERVE_PHP_STATA = result[1]
logging.info('PHP NAME:%s PHP STATA:%s', result[0], result[1])
elif result[0].find('mysql') != -1:
SERVE_MYSQL_NAME = result[0]
SERVE_MYSQL_STATA = result[1]
logging.info('MySQL NAME:%s MySQL STATA:%s', result[0], result[1])
elif result[0].find('redis') != -1:
SERVE_REDIS_NAME = result[0]
SERVE_REDIS_STATA = result[1]
logging.info('Redis NAME:%s Redis STATA:%s', result[0], result[1])
else:
logging.warning('无法识别:%s', result[0])
class AwesomeStatusBarApp(rumps.App):
def __init__(self, *args, **kwargs):
super(AwesomeStatusBarApp, self).__init__(*args, **kwargs)
self.menu.add(rumps.MenuItem(title='brew MAMP Panel'))
self.menu.add(rumps.MenuItem(title=VERSION))
self.menu.add(rumps.separator)
self.menu.add(rumps.MenuItem(title='当前状态[单击控制启停]'))
httpdICON = START_ICON if SERVE_HTTPD_STATA == 'started' else STOP_ICON
self.menu.add(rumps.MenuItem(title='httpd', callback=self.httpd))
self.menu['httpd'].title = httpdICON + 'httpd'
phpICON = START_ICON if SERVE_PHP_STATA == 'started' else STOP_ICON
self.menu.add(rumps.MenuItem(title='PHP', callback=self.php))
self.menu['PHP'].title = phpICON + 'PHP'
mysqlICON = START_ICON if SERVE_MYSQL_STATA == 'started' else STOP_ICON
self.menu.add(rumps.MenuItem(title='MySQL', callback=self.mysql))
self.menu['MySQL'].title = mysqlICON + 'MySQL'
redisICON = START_ICON if SERVE_REDIS_STATA == 'started' else STOP_ICON
self.menu.add(rumps.MenuItem(title='Redis', callback=self.redis))
self.menu['Redis'].title = redisICON + 'Redis'
self.menu.add(rumps.separator)
self.menu.add(rumps.MenuItem(title='启动所有', callback=self.startAll))
self.menu.add(rumps.MenuItem(title='停止所有', callback=self.stopAll))
self.menu.add(rumps.MenuItem(title='重启所有', callback=self.restartAll, key='r'))
self.menu.add(rumps.separator)
self.menu.add(rumps.MenuItem(title='配置直达'))
self.menu.add(rumps.MenuItem(title='📂httpd', callback=self.Configure))
self.menu.add(rumps.MenuItem(title='📂PHP', callback=self.Configure))
self.menu.add(rumps.MenuItem(title='📝MySQL', callback=self.Configure))
self.menu.add(rumps.MenuItem(title='📝Redis', callback=self.Configure))
self.menu.add(rumps.MenuItem(title='📂Hosts', callback=self.Configure))
self.menu.add(rumps.separator)
self.menu.add(rumps.MenuItem(title='🔢取剪切板文本长度', callback=self.textLen))
self.menu.add(rumps.separator)
self.menu.add(rumps.MenuItem(title='关于', callback=self.about))
self.menu.add(rumps.separator)
def Configure(self, sender):
if sender.title == '📂httpd':
subprocess.call(['open', '/opt/homebrew/etc/httpd'])
if sender.title == '📂PHP':
subprocess.call(['open', '/opt/homebrew/etc/php'])
if sender.title == '📝MySQL':
subprocess.call(['open', '/opt/homebrew/etc/my.cnf'])
if sender.title == '📝Redis':
subprocess.call(['open', '/opt/homebrew/etc/redis.conf'])
if sender.title == '📂Hosts':
subprocess.call(['open', '/private/etc'])
def httpd(self, sender):
global SERVE_HTTPD_STATA
if SERVE_HTTPD_STATA == 'none':
httpdState = subprocess.Popen(BREW_PATH + " services start " + SERVE_HTTPD_NAME, shell=True, stdout=subprocess.PIPE)
httpdState.wait()
for line in httpdState.stdout.readlines():
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('httpd启动成功')
SERVE_HTTPD_STATA = 'started'
logging.info('httpd启动成功')
self.menu['httpd'].title = START_ICON + 'httpd'
else:
logging.error('httpd启动失败:' + r)
rumps.alert('httpd启动失败,请查找原因。')
else:
httpdState = subprocess.Popen(BREW_PATH + " services stop " + SERVE_HTTPD_NAME, shell=True, stdout=subprocess.PIPE)
for line in httpdState.stdout.readlines()[1:]:
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('httpd停止成功')
SERVE_HTTPD_STATA = 'none'
logging.info('httpd停止成功')
self.menu['httpd'].title = STOP_ICON + 'httpd'
else:
logging.error('httpd停止失败:' + r)
rumps.alert('httpd停止失败,请查找原因。')
def php(self, sender):
global SERVE_PHP_STATA
if SERVE_PHP_STATA == 'none':
phpState = subprocess.Popen(BREW_PATH + " services start " + SERVE_PHP_NAME, shell=True, stdout=subprocess.PIPE)
phpState.wait()
for line in phpState.stdout.readlines():
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('PHP启动成功')
SERVE_PHP_STATA = 'started'
logging.info('PHP启动成功')
self.menu['PHP'].title = START_ICON + 'PHP'
else:
logging.error('PHP启动失败:' + r)
rumps.alert('PHP启动失败,请查找原因。')
else:
phpState = subprocess.Popen(BREW_PATH + " services stop " + SERVE_PHP_NAME, shell=True, stdout=subprocess.PIPE)
for line in phpState.stdout.readlines()[1:]:
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('PHP停止成功')
SERVE_PHP_STATA = 'none'
logging.info('PHP停止成功')
self.menu['PHP'].title = STOP_ICON + 'PHP'
else:
logging.error('PHP停止失败:' + r)
rumps.alert('PHP停止失败,请查找原因。')
def mysql(self, sender):
global SERVE_MYSQL_STATA
if SERVE_MYSQL_STATA == 'none':
mysqlState = subprocess.Popen(BREW_PATH + " services start " + SERVE_MYSQL_NAME, shell=True, stdout=subprocess.PIPE)
mysqlState.wait()
for line in mysqlState.stdout.readlines():
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('MySQL启动成功')
SERVE_MYSQL_STATA = 'started'
logging.info('MySQL启动成功')
self.menu['MySQL'].title = START_ICON + 'MySQL'
else:
logging.error('MySQL启动失败:' + r)
rumps.alert('MySQL启动失败,请查找原因。')
else:
mysqlState = subprocess.Popen(BREW_PATH + " services stop " + SERVE_MYSQL_NAME, shell=True, stdout=subprocess.PIPE)
for line in mysqlState.stdout.readlines()[1:]:
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('MySQL停止成功')
SERVE_MYSQL_STATA = 'none'
logging.info('MySQL停止成功')
self.menu['MySQL'].title = STOP_ICON + 'MySQL'
else:
logging.error('MySQL停止失败:' + r)
rumps.alert('MySQL停止失败,请查找原因。')
def redis(self, sender):
global SERVE_REDIS_STATA
if SERVE_REDIS_STATA == 'none':
redisState = subprocess.Popen(BREW_PATH + " services start " + SERVE_REDIS_NAME, shell=True, stdout=subprocess.PIPE)
redisState.wait()
for line in redisState.stdout.readlines():
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('Redis启动成功')
SERVE_REDIS_STATA = 'started'
logging.info('Redis启动成功')
self.menu['Redis'].title = START_ICON + 'Redis'
else:
logging.error('Redis启动失败:' + r)
rumps.alert('Redis启动失败,请查找原因。')
else:
redisState = subprocess.Popen(BREW_PATH + " services stop " + SERVE_REDIS_NAME, shell=True, stdout=subprocess.PIPE)
for line in redisState.stdout.readlines()[1:]:
r = str(line, 'utf-8')
if r.find('Successfully') != -1:
print('Redis停止成功')
SERVE_REDIS_STATA = 'none'
logging.info('Redis停止成功')
self.menu['Redis'].title = STOP_ICON + 'Redis'
else:
logging.error('Redis停止失败:' + r)
rumps.alert('Redis停止失败,请查找原因。')
def startAll(self, sender):
global SERVE_HTTPD_STATA
global SERVE_PHP_STATA
global SERVE_MYSQL_STATA
global SERVE_REDIS_STATA
print('你点击了启动所有')
if SERVE_HTTPD_STATA == 'none':
print('正在启动httpd')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_HTTPD_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_HTTPD_STATA = 'started'
logging.info('启动所有正在启动httpd')
self.menu['httpd'].title = START_ICON + 'httpd'
if SERVE_PHP_STATA == 'none':
print('正在启动PHP')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_PHP_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_PHP_STATA = 'started'
logging.info('启动所有正在启动php')
self.menu['PHP'].title = START_ICON + 'PHP'
if SERVE_MYSQL_STATA == 'none':
print('正在启动MySQL')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_MYSQL_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_MYSQL_STATA = 'started'
logging.info('启动所有正在启动mysql')
self.menu['MySQL'].title = START_ICON + 'MySQL'
if SERVE_REDIS_STATA == 'none':
print('正在启动Redis')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_REDIS_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_REDIS_STATA = 'started'
logging.info('启动所有正在启动redis')
self.menu['Redis'].title = START_ICON + 'Redis'
def stopAll(self, sender):
global SERVE_HTTPD_STATA
global SERVE_PHP_STATA
global SERVE_MYSQL_STATA
global SERVE_REDIS_STATA
print('你点击了停止所有')
if SERVE_HTTPD_STATA == 'started':
print('正在停止httpd')
state = subprocess.Popen(BREW_PATH + " services stop " + SERVE_HTTPD_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_HTTPD_STATA = 'none'
logging.info('停止所有正在停止httpd')
self.menu['httpd'].title = STOP_ICON + 'httpd'
if SERVE_PHP_STATA == 'started':
print('正在停止PHP')
state = subprocess.Popen(BREW_PATH + " services stop " + SERVE_PHP_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_PHP_STATA = 'none'
logging.info('停止所有正在停止php')
self.menu['PHP'].title = STOP_ICON + 'PHP'
if SERVE_MYSQL_STATA == 'started':
print('正在停止MySQL')
state = subprocess.Popen(BREW_PATH + " services stop " + SERVE_MYSQL_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_MYSQL_STATA = 'none'
logging.info('停止所有正在停止mysql')
self.menu['MySQL'].title = STOP_ICON + 'MySQL'
if SERVE_REDIS_STATA == 'started':
print('正在停止Redis')
state = subprocess.Popen(BREW_PATH + " services stop " + SERVE_REDIS_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_REDIS_STATA = 'none'
logging.info('停止所有正在停止redis')
self.menu['Redis'].title = STOP_ICON + 'Redis'
def restartAll(self, sender):
global SERVE_HTTPD_STATA
global SERVE_PHP_STATA
global SERVE_MYSQL_STATA
global SERVE_REDIS_STATA
print('你点击了重启所有')
print('正在重启httpd')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_HTTPD_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_HTTPD_STATA = 'started'
logging.info('重启所有正在重启httpd')
self.menu['httpd'].title = START_ICON + 'httpd'
print('正在重启PHP')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_PHP_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_PHP_STATA = 'started'
logging.info('重启所有正在重启php')
self.menu['PHP'].title = START_ICON + 'PHP'
print('正在重启MySQL')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_MYSQL_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_MYSQL_STATA = 'started'
logging.info('重启所有正在重启mysql')
self.menu['MySQL'].title = START_ICON + 'MySQL'
print('正在重启Redis')
state = subprocess.Popen(BREW_PATH + " services start " + SERVE_REDIS_NAME, shell=True, stdout=subprocess.PIPE)
state.wait()
SERVE_REDIS_STATA = 'started'
logging.info('重启所有正在重启redis')
self.menu['Redis'].title = START_ICON + 'Redis'
def textLen(self, sender):
"""获取剪贴板数据"""
data = pyperclip.paste()
rumps.alert('剪切板长度:' + str(len(data)))
def about(self, sender):
rumps.alert('作者:张雷\n编译日期:2023年1月16日')
#rumps.quit_application(sender)#退出
if __name__ == '__main__':
AwesomeStatusBarApp('M', quit_button=rumps.MenuItem('退出', key='q')).run()