monitoring.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from __future__ import annotations
  2. from datetime import datetime
  3. from pydantic import BaseModel, Field
  4. from app.schemas.common import ORMModel
  5. class DataSourceRead(ORMModel):
  6. id: str
  7. mine_id: str | None
  8. code: str
  9. name: str
  10. source_type: str
  11. protocol: str
  12. endpoint: str
  13. status: str
  14. last_sync_at: datetime | None
  15. point_count: int
  16. latency_ms: int | None
  17. config: dict
  18. class SensorRead(ORMModel):
  19. id: str
  20. mine_id: str
  21. area_id: str | None
  22. data_source_id: str | None
  23. code: str
  24. name: str
  25. sensor_type: str
  26. unit: str
  27. location: str
  28. status: str
  29. warning_threshold: float | None
  30. alarm_threshold: float | None
  31. upper_bound: float | None
  32. lower_bound: float | None
  33. last_value: float | None
  34. last_seen_at: datetime | None
  35. properties: dict
  36. class SensorReadingCreate(BaseModel):
  37. sensor_id: str
  38. measured_at: datetime
  39. value: float
  40. quality: int = 100
  41. is_alarm: bool = False
  42. source: str = ""
  43. meta: dict = Field(default_factory=dict)
  44. class SensorReadingRead(ORMModel):
  45. id: str
  46. sensor_id: str
  47. measured_at: datetime
  48. value: float
  49. quality: int
  50. is_alarm: bool
  51. source: str
  52. meta: dict
  53. class VentilationFacilityRead(ORMModel):
  54. id: str
  55. mine_id: str
  56. area_id: str | None
  57. roadway_id: str | None
  58. code: str
  59. name: str
  60. facility_type: str
  61. location: str
  62. status: str
  63. open_state: str
  64. sensor_value: float | None
  65. video_confidence: float | None
  66. last_checked_at: datetime | None
  67. properties: dict
  68. class AlarmRead(ORMModel):
  69. id: str
  70. mine_id: str
  71. sensor_id: str | None
  72. alarm_no: str
  73. alarm_type: str
  74. level: str
  75. title: str
  76. content: str
  77. value: float | None
  78. threshold: float | None
  79. status: str
  80. occurred_at: datetime
  81. acknowledged_at: datetime | None
  82. closed_at: datetime | None
  83. metadata: dict = Field(validation_alias="metadata_json")
  84. class MonitoringOverview(BaseModel):
  85. data_source_count: int
  86. online_source_count: int
  87. sensor_count: int
  88. online_sensor_count: int
  89. facility_count: int
  90. abnormal_facility_count: int
  91. open_alarm_count: int
  92. high_alarm_count: int