From ea47b82d7553012b39f6ab6a836a1832da40ca4e Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Fri, 15 Nov 2019 14:04:03 +0100 Subject: Add fetcher skeleton --- .../pl/edu/mimuw/cloudatlas/fetcher/config.ini | 5 + .../edu/mimuw/cloudatlas/fetcher/data_fetcher.py | 136 +++++++++++++++++++++ .../pl/edu/mimuw/cloudatlas/fetcher/fetcher.policy | 3 + 3 files changed, 144 insertions(+) create mode 100644 src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/config.ini create mode 100644 src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/data_fetcher.py create mode 100644 src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/fetcher.policy (limited to 'src/main/resources/pl/edu/mimuw/cloudatlas/fetcher') diff --git a/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/config.ini b/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/config.ini new file mode 100644 index 0000000..14af0af --- /dev/null +++ b/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/config.ini @@ -0,0 +1,5 @@ +[AttributeParams] + +CollectionInterval=5 +AveragingPeriod=5 +AveragingMethod=arithmetic \ No newline at end of file diff --git a/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/data_fetcher.py b/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/data_fetcher.py new file mode 100644 index 0000000..d69c498 --- /dev/null +++ b/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/data_fetcher.py @@ -0,0 +1,136 @@ +import json +import subprocess +import sys +import time + +import schedule +import psutil +import platform +import socket +import configparser +# import sqlite3 + +# Pipe +pipe = None + +# Attribute params +collectionInterval = 1 +averagingPeriod = 1 +averagingMethod = "" + +""" + Attributes + + the average CPU load (over all cores) as cpu_load + the free disk space (in bytes) as free_disk + the total disk space (in bytes) as total_disk + the free RAM (in bytes) as free_ram + the total RAM (in bytes) as total_ram + the free swap (in bytes) as free_swap + the total swap (in bytes) as total_swap + the number of active processes as num_processes + the number of CPU cores as num_cores + the kernel version as kernel_ver + the number of users logged in as logged_users + a set of up to three DNS names of the machine dns_names + +""" + + +def setup_database(): + conn = sqlite3.connect('attributes.db') + c = conn.cursor() + c.execute('''CREATE TABLE attrib + (timestamp integer, + avg_cpu_load integer, + free_disk integer, + total_disk integer, + free_ram integer, + total_ram integer, + free_swap integer, + total_swap integer, + num_processes integer, + num_cores integer, + kernel_ver text, + logged_users integer, + dns_names text) + ''') + # TODO format dns_names + conn.commit() + conn.close() + + +def get_data(): + avg_cpu_load = psutil.cpu_percent(interval=1) # TODO better? + free_disk = psutil.disk_usage("/").free + total_disk = psutil.disk_usage("/").total + free_ram = psutil.virtual_memory().available + total_ram = psutil.virtual_memory().total + free_swap = psutil.swap_memory().free + total_swap = psutil.swap_memory().total + num_processes = len(psutil.pids()) + num_cores = psutil.cpu_count(False) + kernel_ver = platform.release() # TODO ew. version() + logged_users = len(psutil.users()) + + hostname = socket.gethostbyaddr("127.0.0.1") # TODO czy dziala + dns_names = ([hostname[0]] + hostname[1])[:3] + # https://stackoverflow.com/questions/2575760/python-lookup-hostname-from-ip-with-1-second-timeout + + sys.stdout.write("[{},{},{},{},{},{},{},{},{},{},{},{}]\n".format( + #print("[{},{},{},{},{},{},{},{},{},{},{},{}]\r\n".format( + avg_cpu_load, + free_disk, + total_disk, + free_ram, + total_ram, + free_swap, + total_swap, + num_processes, + num_cores, + kernel_ver, + logged_users, + json.dumps(dns_names))) #.encode()) # TODO ten string + sys.stdout.flush() + # TODO error control and pipe restart + +""" + conn = sqlite3.connect('attributes.db') + c = conn.cursor() + c.execute("INSERT INTO attrib VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )", + avg_cpu_load, + free_disk, + total_disk, + free_ram, + total_ram, + free_swap, + total_swap, + num_processes, + num_cores, + kernel_ver, + logged_users, + dns_names.__str__()) # TODO ten string + conn.commit() + conn.close() +""" + +# TODO funkcja do usuwania zbendych +def remove_historical_data(): + pass + + +if __name__ == '__main__': + # config = configparser.ConfigParser() + # config.read("config.ini") + collectionInterval = int(5) # int(config["AttributeParams"]["collectionInterval"]) + averagingPeriod = int(5) # int(config["AttributeParams"]["averagingPeriod"]) + averagingMethod = "arithmetic" # config["AttributeParams"]["averagingMethod"] + + # setup_database() + + # TODO some condition for this? + while True: + get_data() + time.sleep(collectionInterval) + + # schedule.every(collectionInterval).seconds.do(get_data) diff --git a/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/fetcher.policy b/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/fetcher.policy new file mode 100644 index 0000000..5d74bde --- /dev/null +++ b/src/main/resources/pl/edu/mimuw/cloudatlas/fetcher/fetcher.policy @@ -0,0 +1,3 @@ +grant { + permission java.security.AllPermission; +}; \ No newline at end of file -- cgit v1.2.3