66 lines
1.4 KiB
Python
66 lines
1.4 KiB
Python
|
|
#!/usr/bin/python3
|
||
|
|
|
||
|
|
import argparse
|
||
|
|
import json
|
||
|
|
import socket
|
||
|
|
import time
|
||
|
|
from ws4py.client import threadedclient
|
||
|
|
|
||
|
|
|
||
|
|
parser = argparse.ArgumentParser(description='iconograph fetcher')
|
||
|
|
parser.add_argument(
|
||
|
|
'--server',
|
||
|
|
dest='server',
|
||
|
|
action='store',
|
||
|
|
required=True)
|
||
|
|
parser.add_argument(
|
||
|
|
'--https-ca-cert',
|
||
|
|
dest='https_ca_cert',
|
||
|
|
action='store',
|
||
|
|
required=True)
|
||
|
|
parser.add_argument(
|
||
|
|
'--https-client-cert',
|
||
|
|
dest='https_client_cert',
|
||
|
|
action='store',
|
||
|
|
required=True)
|
||
|
|
parser.add_argument(
|
||
|
|
'--https-client-key',
|
||
|
|
dest='https_client_key',
|
||
|
|
action='store',
|
||
|
|
required=True)
|
||
|
|
FLAGS = parser.parse_args()
|
||
|
|
|
||
|
|
|
||
|
|
class Client(threadedclient.WebSocketClient):
|
||
|
|
|
||
|
|
def Loop(self):
|
||
|
|
self.daemon = True
|
||
|
|
self.connect()
|
||
|
|
while True:
|
||
|
|
self.send(json.dumps({
|
||
|
|
'type': 'report',
|
||
|
|
'data': {
|
||
|
|
'hostname': socket.gethostname(),
|
||
|
|
'uptime_seconds': self._Uptime(),
|
||
|
|
},
|
||
|
|
}), False)
|
||
|
|
time.sleep(5.0)
|
||
|
|
|
||
|
|
def _Uptime(self):
|
||
|
|
with open('/proc/uptime', 'r') as fh:
|
||
|
|
return int(float(fh.readline().split(' ', 1)[0]))
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
ssl_options = {
|
||
|
|
'keyfile': FLAGS.https_client_key,
|
||
|
|
'certfile': FLAGS.https_client_cert,
|
||
|
|
'ca_certs': FLAGS.https_ca_cert,
|
||
|
|
}
|
||
|
|
client = Client('wss://%s/ws' % FLAGS.server, protocols=['http-only', 'chat'], ssl_options=ssl_options)
|
||
|
|
client.Loop()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
main()
|