Revize 0b96f10c
Přidáno uživatelem Pultak před asi 3 roky(ů)
client/config.ini | ||
---|---|---|
8 | 8 |
end_point = /api/v1/usb-logs |
9 | 9 |
|
10 | 10 |
[logger] |
11 |
file = logger.conf |
|
11 | 12 |
format = %(asctime)s %(levelname)s : %(message)s |
12 | 13 |
level = INFO |
13 | 14 |
|
client/config_manager.py | ||
---|---|---|
18 | 18 |
server_port = config[server_section]["port"] |
19 | 19 |
server_endpoint = config[server_section]["end_point"] |
20 | 20 |
|
21 |
logger_config = config[logger_section]["file"] |
|
21 | 22 |
logger_format = config[logger_section]["format"] |
22 | 23 |
logger_level_str = config[logger_section]["level"] |
23 | 24 |
logger_level = 0 |
client/logger.conf | ||
---|---|---|
1 |
[loggers] |
|
2 |
keys=root |
|
3 |
|
|
4 |
[handlers] |
|
5 |
keys=consoleHandler,logFileHandler |
|
6 |
|
|
7 |
[formatters] |
|
8 |
keys=simpleFormatter |
|
9 |
|
|
10 |
[logger_root] |
|
11 |
level=DEBUG |
|
12 |
handlers=consoleHandler |
|
13 |
|
|
14 |
[handler_consoleHandler] |
|
15 |
class=StreamHandler |
|
16 |
level=DEBUG |
|
17 |
formatter=simpleFormatter |
|
18 |
args=(sys.stdout,) |
|
19 |
|
|
20 |
[handler_logFileHandler] |
|
21 |
class=handlers.RotatingFileHandler |
|
22 |
level=NOTSET |
|
23 |
args=('app_info.log','a',10000,1) |
|
24 |
formatter=simpleFormatter |
|
25 |
|
|
26 |
[formatter_simpleFormatter] |
|
27 |
format=%(asctime)s - %(levelname)s - %(message)s |
client/main.py | ||
---|---|---|
1 | 1 |
import logging |
2 |
import logging.config |
|
3 |
from os.path import exists |
|
2 | 4 |
from threading import Thread |
3 | 5 |
from tendo import singleton |
4 | 6 |
|
5 |
from config_manager import logger_format, logger_level |
|
7 |
from config_manager import logger_format, logger_level, logger_config
|
|
6 | 8 |
from usb_detector.detector import register_listener, usb_detector_run |
7 | 9 |
from usb_detector.event_listener import usb_connected_callback, usb_disconnected_callback |
8 | 10 |
from api_client import api_client_run |
9 | 11 |
|
12 |
def init_logging(): |
|
13 |
if exists(logger_config): |
|
14 |
logging.config.fileConfig(fname=logger_config) |
|
15 |
else: |
|
16 |
print(f"Cant find logger configuration \"{logger_config}\"! Please specify valid path or define new.") |
|
17 |
exit(1) |
|
18 |
|
|
10 | 19 |
|
11 | 20 |
if __name__ == "__main__": |
12 | 21 |
app_instance = singleton.SingleInstance() |
13 |
|
|
14 |
logging.basicConfig(format=logger_format, level=logger_level) |
|
22 |
init_logging() |
|
15 | 23 |
|
16 | 24 |
register_listener(callback=usb_connected_callback, connected=True) |
17 | 25 |
register_listener(callback=usb_disconnected_callback, connected=False) |
... | ... | |
22 | 30 |
api_thread = Thread(target=api_client_run) |
23 | 31 |
api_thread.setDaemon(True) |
24 | 32 |
|
33 |
logging.info('starting USB detector.') |
|
25 | 34 |
usb_detector_thread.start() |
35 |
|
|
36 |
logging.info('starting API communication manager.') |
|
26 | 37 |
api_thread.start() |
27 | 38 |
|
28 | 39 |
usb_detector_thread.join() |
29 | 40 |
api_thread.join() |
41 |
|
|
42 |
logging.info('application exit.') |
client/usb_detector/detector.py | ||
---|---|---|
11 | 11 |
|
12 | 12 |
|
13 | 13 |
def register_listener(callback, connected: bool = True): |
14 |
logging.info(f'Registering callback: {callback}.') |
|
15 |
|
|
14 | 16 |
if connected is True: |
15 | 17 |
_listeners_connected.append(callback) |
16 | 18 |
else: |
... | ... | |
24 | 26 |
|
25 | 27 |
|
26 | 28 |
def _store_connected_devices(devices: list): |
29 |
logging.debug('storing newly connected devices') |
|
27 | 30 |
with open(connected_devices_filename, "w") as file: |
28 | 31 |
json.dump(devices, file) |
29 | 32 |
|
30 | 33 |
|
31 | 34 |
def _load_last_connected_devices() -> list: |
35 |
logging.debug('loading last connected devices') |
|
32 | 36 |
try: |
33 | 37 |
with open(connected_devices_filename, "r") as file: |
34 | 38 |
return json.loads(file.read()) |
35 | 39 |
except IOError: |
40 |
logging.error('loading of last connected devices failed') |
|
36 | 41 |
return [] |
37 | 42 |
|
38 | 43 |
|
client/usb_detector/event_listener.py | ||
---|---|---|
7 | 7 |
|
8 | 8 |
|
9 | 9 |
def _get_metadata() -> dict: |
10 |
logging.debug('getting computer metadata') |
|
10 | 11 |
return { |
11 | 12 |
"username": getpass.getuser(), |
12 | 13 |
"hostname": platform.uname().node, |
... | ... | |
15 | 16 |
|
16 | 17 |
|
17 | 18 |
def _send_payload_to_server(device: dict, status: str): |
19 |
logging.debug('payload send preparation') |
|
18 | 20 |
payload = _get_metadata() |
19 | 21 |
payload["device"] = device |
20 | 22 |
payload["status"] = status |
client/usb_detector/usb_reader.py | ||
---|---|---|
1 |
import logging |
|
2 |
|
|
1 | 3 |
import usb.core |
2 | 4 |
import usb.util |
3 | 5 |
|
4 | 6 |
|
5 | 7 |
def read_connected_devices(): |
8 |
logging.debug(f'reading all currently connected devices') |
|
6 | 9 |
detected_devices = [] |
7 | 10 |
|
8 | 11 |
busses = usb.busses() |
... | ... | |
16 | 19 |
serial_number = usb.util.get_string(device_info, device_info.iSerialNumber) |
17 | 20 |
except: |
18 | 21 |
# Failed to retrieve information from device |
22 |
logging.info(f"device idVendor:{dev.idVendor} idProduct:{dev.idProduct} has invalid format") |
|
19 | 23 |
pass |
20 | 24 |
|
21 | 25 |
if serial_number is not None: |
Také k dispozici: Unified diff
re #9360 Added logging system -> log config, logging messages