diff --git a/requirements.txt b/requirements.txt index fefe83c..4beb048 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ distro==1.8.0 -requests==2.28.1 \ No newline at end of file +requests==2.28.1 +websockets==12.0 +psutil==6.0.0 diff --git a/service/__main__.py b/service/__main__.py index 32351eb..2efa278 100644 --- a/service/__main__.py +++ b/service/__main__.py @@ -2,6 +2,8 @@ from service.windows import generic as genericWindows from api.metadata import get_metadata from log.initialize import * +from service.util import stats +import time logger = initialize_logger() @@ -10,15 +12,19 @@ #uuid = get_uuid() uuid = '97136816-d27e-63ed-17ba-acc64438ef4f' -metadata = get_metadata(uuid) -logger.info("Got metadata like below;") -logger.info("{}", metadata) +stats.init_stats_process() -if platform.system() == 'Linux': - genericLinux.start(metadata) -elif platform.system() == 'Windows': - genericWindows.start(metadata) -else: - logger.info("============== End of Execution at {} =============".format( - time.asctime())) \ No newline at end of file +while True: + metadata = get_metadata(uuid) + logger.info("Got metadata like below;") + logger.info("{}", metadata) + + if platform.system() == 'Linux': + genericLinux.start(metadata) + elif platform.system() == 'Windows': + genericWindows.start(metadata) + else: + logger.info("============== End of Execution at {} =============".format( + time.asctime())) + time.sleep(600) diff --git a/service/util/stats.py b/service/util/stats.py new file mode 100644 index 0000000..542440b --- /dev/null +++ b/service/util/stats.py @@ -0,0 +1,34 @@ +from multiprocessing import Process +import asyncio +import websockets +import psutil +import time + +async def websocket_handler(websocket, path): + try: + while True: + cpu_percentages = psutil.cpu_percent(interval=1, percpu=True) + memory = psutil.virtual_memory()[2] + + io_read = psutil.disk_io_counters()[3] + io_write = psutil.disk_io_counters()[4] + time.sleep(1) + io_read = (psutil.disk_io_counters()[3] - io_read)/1048576 + io_write = (psutil.disk_io_counters()[4] - io_write )/1048576 + + + await websocket.send(f'{{"cpu" : {cpu_percentages}, "ram" : {memory}, "io" : [{io_read:.2f}, {io_write:.2f}] }}') + + await asyncio.sleep(1) + except websockets.ConnectionClosed: + pass + +def init_websocket(): + start_websocket = websockets.serve(websocket_handler, "0.0.0.0", 5050) + + asyncio.get_event_loop().run_until_complete(start_websocket) + asyncio.get_event_loop().run_forever() + +def init_stats_process(): + proc = Process(target=init_websocket) + proc.start()