Разработаны модули извлечения и сохранения статистических данных, разработан набросок веб-приложения
This commit is contained in:
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