/
system_manager.py
106 lines (87 loc) · 3.5 KB
/
system_manager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import os
import json
import logging
import time
import atexit
from device_manager import DeviceManager
from communication_manager import CommunicationManager
from security_communication.secure_communication_enum import SecurityEnum, CommunicationEnum, security_constructors, communication_constructors
dir_path = os.path.dirname(os.path.realpath(__file__))
config_file_directory = dir_path+"/config.json"
class SystemManager:
config_file_directory = None
config = {}
device_manager, communication_manager = None, None
#Updates config according to config file
def update_config(self):
logging.info("Config updated")
with open(self.config_file_directory) as config_file:
self.config = json.loads(config_file.read())
logging.debug("New config : " + json.dumps(self.config))
def device_manager_callback(self, data):
self.communication_manager.send_all(data)
def communication_manager_send_callback(self):
pass
def communication_manager_receive_callback(self, data):
pass
def __init__(self, config_file_directory):
self.config_file_directory = config_file_directory
self.update_config()
if self.config["board_type"] == "raspberry_pi":
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
self.device_manager = DeviceManager(self.config["devices"], self.config["board_type"], self.device_manager_callback)
if self.device_manager.connected > 0:
self.communication_manager = CommunicationManager(self.config["communication_protocols"], self.communication_manager_send_callback, self.communication_manager_receive_callback)
else:
print('no sensor initiated')
exit()
time.sleep(5)
self.device_manager.read_all()
def log_worker(server):
with open(config_file_directory) as config_file:
config = json.loads(config_file.read())
web_server = security_constructors[SecurityEnum.PlainText.value] \
({}, \
communication_constructors[CommunicationEnum.HTTP.value] \
(server))
login_response = web_server.send( \
{"msg":{"username": config["username"], "password": config["password"]}, \
"http_header":{"Content-Type": "application/json"}, "http_method": "POST", \
"http_selector": "/api/users/authenticate", \
"http_body_type": web_server.communication_protocol.BodyTypes.RAW})
token = json.loads(login_response.read().decode("utf-8"))["token"]
for root, dirs, files in os.walk(config["log_directory"], topdown=False):
for name in files:
old_log=os.path.join(root, name)
response = web_server.send( \
{"fields":{"id": config["id"]}, \
"files":{"file":old_log}, \
"http_header":{"Authorization": "Bearer "+token}, "http_method": "POST", \
"http_selector": "/api/devices/upload", \
"http_body_type": web_server.communication_protocol.BodyTypes.MULTIPART})
print(response.read())
status = response.status
if status == 200:
os.remove(old_log)
logging.basicConfig(filename= config["log_directory"] + "log_" + str(int(time.time())) + ".txt", \
filemode= "w", level=logging.DEBUG, \
format="%(asctime)s - %(funcName)-25s:%(filename)-30s:%(thread)d - %(levelname)-5s - %(message)s")
logging.info("Started")
def main():
log_server = {"ip": "141.40.254.150", "port": 80}
#log_worker(log_server)
system_manager = SystemManager(config_file_directory)
while True:
pass
def exit_handler():
with open(config_file_directory) as config_file:
config = json.loads(config_file.read())
logging.info("Stopped")
logging.shutdown()
if config["board_type"] == "raspberry_pi":
import RPi.GPIO as GPIO
GPIO.cleanup()
atexit.register(exit_handler)
if __name__ == "__main__":
main()