Разработаны модули извлечения и сохранения статистических данных, разработан набросок веб-приложения
This commit is contained in:
		
							
								
								
									
										1
									
								
								database/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								database/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| from .main import connect, get_sensors, get_sensor_values | ||||
							
								
								
									
										190
									
								
								database/main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								database/main.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,190 @@ | ||||
| import os | ||||
| import sqlite3 | ||||
|  | ||||
| from models import HardwareType, Hardware, SensorType, Sensor, SensorValue | ||||
|  | ||||
|  | ||||
| directory_path = os.path.join( | ||||
|     os.getenv('appdata'), | ||||
|     'csasq', | ||||
|     'Hardware Monitor', | ||||
| ) | ||||
| file_path = os.path.join( | ||||
|     directory_path, | ||||
|     'data.sql', | ||||
| ) | ||||
|  | ||||
|  | ||||
| def connect(): | ||||
|     os.makedirs( | ||||
|         name=directory_path, | ||||
|         exist_ok=True, | ||||
|     ) | ||||
|     return sqlite3.connect( | ||||
|         database=file_path, | ||||
|     ) | ||||
|  | ||||
|  | ||||
| with connect() as connection: | ||||
|     cursor = connection.cursor() | ||||
|     sql = ''' | ||||
|     create table if not exists settings ( | ||||
|         name, | ||||
|         value, | ||||
|         primary key (name) | ||||
|     ); | ||||
|      | ||||
|     create table if not exists hardware_types ( | ||||
|         id                  integer, | ||||
|         name, | ||||
|         primary key (id), | ||||
|         unique (name) | ||||
|     ); | ||||
|      | ||||
|     create table if not exists hardware ( | ||||
|         id                  integer, | ||||
|         identifier, | ||||
|         name, | ||||
|         hardware_type_id, | ||||
|         primary key (id), | ||||
|         foreign key (hardware_type_id) references hardware_types on delete cascade on update cascade, | ||||
|         unique (identifier) | ||||
|     ); | ||||
|      | ||||
|     create table if not exists sensor_types ( | ||||
|         id                  integer, | ||||
|         name, | ||||
|         primary key (id), | ||||
|         unique (name) | ||||
|     ); | ||||
|      | ||||
|     create table if not exists sensors ( | ||||
|         id                  integer, | ||||
|         hardware_id, | ||||
|         sensor_type_id, | ||||
|         identifier, | ||||
|         name, | ||||
|         'index', | ||||
|         is_default_hidden, | ||||
|         enabled, | ||||
|         primary key (id), | ||||
|         foreign key (hardware_id) references hardware on delete cascade on update cascade, | ||||
|         foreign key (sensor_type_id) references sensor_types on delete cascade on update cascade, | ||||
|         unique (identifier, sensor_type_id) | ||||
|     ); | ||||
|      | ||||
|     create table if not exists sensor_values ( | ||||
|         sensor_id, | ||||
|         timestamp, | ||||
|         value, | ||||
|         foreign key (sensor_id) references sensors | ||||
|     ); | ||||
|      | ||||
|     pragma foreign_keys = on; | ||||
|     ''' | ||||
|     cursor.executescript(sql) | ||||
|  | ||||
|  | ||||
| def get_sensors() -> list[Sensor]: | ||||
|     with connect() as connection: | ||||
|         cursor = connection.cursor() | ||||
|         sql = ''' | ||||
|         select | ||||
|             sensors.id, | ||||
|             hardware.id, | ||||
|             hardware.identifier, | ||||
|             hardware.name, | ||||
|             hardware_types.id, | ||||
|             hardware_types.name, | ||||
|             sensor_types.id, | ||||
|             sensor_types.name, | ||||
|             sensors.identifier, | ||||
|             sensors.name, | ||||
|             sensors.'index', | ||||
|             sensors.is_default_hidden, | ||||
|             sensors.enabled | ||||
|         from | ||||
|             sensors | ||||
|                 left outer join hardware on | ||||
|                     sensors.hardware_id = hardware.id | ||||
|                 left outer join hardware_types on | ||||
|                     hardware.hardware_type_id = hardware_types.id | ||||
|                 left outer join sensor_types on | ||||
|                     sensors.sensor_type_id = sensor_types.id; | ||||
|         ''' | ||||
|         cursor.execute(sql) | ||||
|         records = cursor.fetchall() | ||||
|     return list( | ||||
|         Sensor( | ||||
|             id=sensor_id, | ||||
|             hardware=Hardware( | ||||
|                 id=sensor_hardware_id, | ||||
|                 identifier=sensor_hardware_identifier, | ||||
|                 name=sensor_hardware_name, | ||||
|                 hardware_type=HardwareType( | ||||
|                     id=sensor_hardware_type_id, | ||||
|                     name=sensor_hardware_type_name, | ||||
|                 ), | ||||
|             ), | ||||
|             sensor_type=SensorType( | ||||
|                 id=sensor_type_id, | ||||
|                 name=sensor_type_name, | ||||
|             ), | ||||
|             identifier=sensor_identifier, | ||||
|             name=sensor_name, | ||||
|             index=sensor_index, | ||||
|             is_default_hidden=sensor_is_default_hidden, | ||||
|             enabled=sensor_enabled, | ||||
|         ) | ||||
|         for | ||||
|         sensor_id, | ||||
|         sensor_hardware_id, | ||||
|         sensor_hardware_identifier, | ||||
|         sensor_hardware_name, | ||||
|         sensor_hardware_type_id, | ||||
|         sensor_hardware_type_name, | ||||
|         sensor_type_id, | ||||
|         sensor_type_name, | ||||
|         sensor_identifier, | ||||
|         sensor_name, | ||||
|         sensor_index, | ||||
|         sensor_is_default_hidden, | ||||
|         sensor_enabled, | ||||
|         in | ||||
|         records | ||||
|     ) | ||||
|  | ||||
|  | ||||
| def get_sensor_values() -> list[SensorValue]: | ||||
|     with connect() as connection: | ||||
|         cursor = connection.cursor() | ||||
|         sql = ''' | ||||
|         select | ||||
|             sensor_values.sensor_id, | ||||
|             sensor_values.timestamp, | ||||
|             sensor_values.value | ||||
|         from | ||||
|             sensor_values | ||||
|         where | ||||
|             sensor_values.sensor_id in ?; | ||||
|         ''' | ||||
|         cursor.execute( | ||||
|             sql, | ||||
|             ( | ||||
|                 [15, 16, 17], | ||||
|             ), | ||||
|         ) | ||||
|         records, = cursor.fetchall() | ||||
|     return list( | ||||
|         SensorValue( | ||||
|             sensor_id=sensor_id, | ||||
|             timestamp=timestamp, | ||||
|             value=value, | ||||
|         ) | ||||
|         for | ||||
|         sensor_id, | ||||
|         timestamp, | ||||
|         value, | ||||
|         in | ||||
|         records | ||||
|     ) | ||||
		Reference in New Issue
	
	Block a user