xjf6b commited on
Commit
a92d6bd
·
verified ·
1 Parent(s): 86ac7b8

Update vps_monitor.py

Browse files
Files changed (1) hide show
  1. vps_monitor.py +12 -10
vps_monitor.py CHANGED
@@ -23,6 +23,9 @@ logging.basicConfig(
23
  )
24
  logger = logging.getLogger()
25
 
 
 
 
26
  def get_vps_configs():
27
  configs = []
28
  index = 1
@@ -116,7 +119,7 @@ def check_and_run_script(config):
116
  vps_status[key] = {
117
  'index': config['index'],
118
  'status': status,
119
- 'last_check': time.strftime('%Y-%m-%d %H:%M:%S'),
120
  'username': config['username'],
121
  'script_name': script_name,
122
  'runtime': runtime,
@@ -129,7 +132,7 @@ def check_and_run_script(config):
129
  vps_status[key] = {
130
  'index': config['index'],
131
  'status': f"Error: {str(e)}",
132
- 'last_check': time.strftime('%Y-%m-%d %H:%M:%S'),
133
  'username': config['username'],
134
  'script_name': script_name,
135
  'runtime': "N/A",
@@ -153,12 +156,13 @@ def check_all_vps():
153
  # 添加每个VPS的状态
154
  for key, status in vps_status.items():
155
  hostname, script_name = key.split(':')
 
156
  table += "| {:<7} | {:<21} | {:<16} | {:<8} | {:<23} | {:<8} | {:<8} | {:<5} |\n".format(
157
  status['index'],
158
  hostname[:21],
159
  script_name[:16],
160
  status['status'][:8],
161
- status['last_check'],
162
  status['username'][:8],
163
  status['runtime'][:8],
164
  status['pid'][:5]
@@ -188,7 +192,7 @@ def index():
188
  <td><a href="/status/{{ key }}">{{ key.split(':')[0] }}</a></td>
189
  <td>{{ data.script_name }}</td>
190
  <td>{{ data.status }}</td>
191
- <td>{{ data.last_check }}</td>
192
  <td>{{ data.username }}</td>
193
  <td>{{ data.runtime }}</td>
194
  <td>{{ data.pid }}</td>
@@ -196,7 +200,7 @@ def index():
196
  {% endfor %}
197
  </table>
198
  '''
199
- return render_template_string(html, vps_status=vps_status)
200
 
201
  @app.route('/status/<path:key>')
202
  def vps_status_detail(key):
@@ -207,15 +211,12 @@ def vps_status_detail(key):
207
 
208
  @app.route('/health')
209
  def health_check():
210
- return jsonify({"status": "healthy", "uptime": time.time() - start_time}), 200
211
 
212
  def run_flask():
213
  app.run(host='0.0.0.0', port=8080)
214
 
215
  def main():
216
- global start_time
217
- start_time = time.time()
218
-
219
  logger.info("===== VPS monitoring script is starting =====")
220
 
221
  flask_thread = Thread(target=run_flask)
@@ -236,7 +237,8 @@ def main():
236
  time.sleep(60)
237
  heartbeat_count += 1
238
  if heartbeat_count % 5 == 0: # 每5分钟输出一次心跳信息
239
- logger.info(f"Heartbeat: Script is still running. Uptime: {heartbeat_count} minutes")
 
240
 
241
  if __name__ == "__main__":
242
  main()
 
23
  )
24
  logger = logging.getLogger()
25
 
26
+ # 记录脚本启动时间
27
+ script_start_time = datetime.now()
28
+
29
  def get_vps_configs():
30
  configs = []
31
  index = 1
 
119
  vps_status[key] = {
120
  'index': config['index'],
121
  'status': status,
122
+ 'last_check': (datetime.now() - script_start_time).total_seconds(),
123
  'username': config['username'],
124
  'script_name': script_name,
125
  'runtime': runtime,
 
132
  vps_status[key] = {
133
  'index': config['index'],
134
  'status': f"Error: {str(e)}",
135
+ 'last_check': (datetime.now() - script_start_time).total_seconds(),
136
  'username': config['username'],
137
  'script_name': script_name,
138
  'runtime': "N/A",
 
156
  # 添加每个VPS的状态
157
  for key, status in vps_status.items():
158
  hostname, script_name = key.split(':')
159
+ last_check = timedelta(seconds=int(status['last_check']))
160
  table += "| {:<7} | {:<21} | {:<16} | {:<8} | {:<23} | {:<8} | {:<8} | {:<5} |\n".format(
161
  status['index'],
162
  hostname[:21],
163
  script_name[:16],
164
  status['status'][:8],
165
+ str(last_check),
166
  status['username'][:8],
167
  status['runtime'][:8],
168
  status['pid'][:5]
 
192
  <td><a href="/status/{{ key }}">{{ key.split(':')[0] }}</a></td>
193
  <td>{{ data.script_name }}</td>
194
  <td>{{ data.status }}</td>
195
+ <td>{{ timedelta(seconds=data.last_check|int) }}</td>
196
  <td>{{ data.username }}</td>
197
  <td>{{ data.runtime }}</td>
198
  <td>{{ data.pid }}</td>
 
200
  {% endfor %}
201
  </table>
202
  '''
203
+ return render_template_string(html, vps_status=vps_status, timedelta=timedelta)
204
 
205
  @app.route('/status/<path:key>')
206
  def vps_status_detail(key):
 
211
 
212
  @app.route('/health')
213
  def health_check():
214
+ return jsonify({"status": "healthy", "uptime": (datetime.now() - script_start_time).total_seconds()}), 200
215
 
216
  def run_flask():
217
  app.run(host='0.0.0.0', port=8080)
218
 
219
  def main():
 
 
 
220
  logger.info("===== VPS monitoring script is starting =====")
221
 
222
  flask_thread = Thread(target=run_flask)
 
237
  time.sleep(60)
238
  heartbeat_count += 1
239
  if heartbeat_count % 5 == 0: # 每5分钟输出一次心跳信息
240
+ uptime = datetime.now() - script_start_time
241
+ logger.info(f"Heartbeat: Script is still running. Uptime: {uptime}")
242
 
243
  if __name__ == "__main__":
244
  main()