| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env python
- import time
- import socket
- import json
- import subprocess
- import re
- from threading import Thread
- from twspy import websocket, TextMessage
- def status_message():
- with open('/proc/uptime', 'r') as f:
- uptime, idletime = map(float, f.read().split(' '))
- temps = []
- for line in subprocess.check_output('sensors').split('\n'):
- m = re.match(r'^Core \d+:\s*\+(\d+\.\d+)', line)
- if m:
- temps.append(float(m.group(1)))
- cpu_idle = float(subprocess.check_output('mpstat').rsplit(' ', 1)[-1])
- data = {
- 'uptime': uptime,
- 'temps': temps,
- 'cpu_usage': max(round(100 - cpu_idle, 2), 0)
- }
- return TextMessage(json.dumps(data))
- if __name__ == '__main__':
- server = websocket()
- server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- server.bind(('', 12345))
- server.listen(5)
- clients = []
- def connect():
- while True:
- sock, address = server.accept()
- print 'Client connected at %s:%d' % address
- clients.append(sock)
- t = Thread(target=connect)
- t.daemon = True
- t.start()
- try:
- while True:
- if len(clients):
- status = status_message()
- for client in list(clients):
- try:
- client.send(status.frame())
- except socket.error:
- print 'Client disconnected'
- clients.remove(client)
- else:
- time.sleep(5)
- time.sleep(1)
- except KeyboardInterrupt:
- print 'Stopping server'
- server.close()
|