feat(timeseries): unify element history queries
This commit is contained in:
@@ -9,7 +9,7 @@ from app.native.wndb.core.database import read_all, try_read
|
||||
|
||||
_SCADA_VIEW_SELECT = """
|
||||
SELECT id AS device_id, device_type, node_id, link_id, api_query_id,
|
||||
transmission_mode, transmission_frequency, reliability, x, y,
|
||||
measurement_unit, transmission_mode, transmission_frequency, reliability, x, y,
|
||||
ST_X(ST_Transform(geom, 4326)) AS longitude,
|
||||
ST_Y(ST_Transform(geom, 4326)) AS latitude
|
||||
FROM gis.scada_devices
|
||||
@@ -57,6 +57,7 @@ def _device(record: dict[str, Any]) -> dict[str, Any]:
|
||||
"node_id": _optional_text(record["node_id"]),
|
||||
"link_id": _optional_text(record["link_id"]),
|
||||
"api_query_id": _optional_text(record["api_query_id"]),
|
||||
"measurement_unit": str(record["measurement_unit"]).strip(),
|
||||
"transmission_mode": record["transmission_mode"],
|
||||
"transmission_frequency": record["transmission_frequency"],
|
||||
"reliability": _optional_int(record["reliability"]),
|
||||
@@ -105,6 +106,22 @@ class ScadaInfoRepository:
|
||||
)
|
||||
return {str(row["device_id"]).strip() for row in await cur.fetchall()}
|
||||
|
||||
@staticmethod
|
||||
async def get_scadas_for_elements(
|
||||
conn: AsyncConnection,
|
||||
node_ids: list[str],
|
||||
link_ids: list[str],
|
||||
) -> list[dict[str, Any]]:
|
||||
if not node_ids and not link_ids:
|
||||
return []
|
||||
async with conn.cursor() as cur:
|
||||
await cur.execute(
|
||||
_SCADA_VIEW_SELECT
|
||||
+ " WHERE node_id = ANY(%s) OR link_id = ANY(%s) ORDER BY device_id",
|
||||
(node_ids, link_ids),
|
||||
)
|
||||
return [_device(record) for record in await cur.fetchall()]
|
||||
|
||||
|
||||
def get_scada_info_schema(name: str) -> dict[str, dict[str, Any]]:
|
||||
return {
|
||||
@@ -113,6 +130,7 @@ def get_scada_info_schema(name: str) -> dict[str, dict[str, Any]]:
|
||||
"node_id": {"type": "str", "optional": True, "readonly": True},
|
||||
"link_id": {"type": "str", "optional": True, "readonly": True},
|
||||
"api_query_id": {"type": "str", "optional": True, "readonly": True},
|
||||
"measurement_unit": {"type": "str", "optional": False, "readonly": True},
|
||||
"transmission_mode": {"type": "str", "optional": False, "readonly": True},
|
||||
"transmission_frequency": {"type": "str", "optional": False, "readonly": True},
|
||||
"reliability": {"type": "int", "optional": False, "readonly": True},
|
||||
|
||||
Reference in New Issue
Block a user