1"""
2This module provides REST API handlers for accessing the final sensor readings
3(e.g. pressure, flow rate, etc.).
4"""
5import warnings
6import falcon
7
8from .handlers import ScadaDataBaseHandler
9
10
[docs]
11class ScadaDataPressuresHandler(ScadaDataBaseHandler):
12 """
13 Class for handling GET requests for the pressure sensor readings of a given SCADA data instance.
14 """
[docs]
15 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
16 """
17 Gets the pressure sensor readings of a given SCADA data instance.
18
19 Parameters
20 ----------
21 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
22 Response instance.
23 data_id : `str`
24 UUID of the SCADA data.
25 """
26 try:
27 if self.scada_data_mgr.validate_uuid(data_id) is False:
28 self.send_invalid_resource_id_error(resp)
29 return
30
31 data_pressures = self.scada_data_mgr.get(data_id).get_data_pressures().tolist()
32 self.send_json_response(resp, data_pressures)
33 except Exception as ex:
34 warnings.warn(str(ex))
35 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
36
37
[docs]
38class ScadaDataFlowsHandler(ScadaDataBaseHandler):
39 """
40 Class for handling GET requests for the flow sensor readings of a given SCADA data instance.
41 """
[docs]
42 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
43 """
44 Gets the flow sensor readings of a given SCADA data instance.
45
46 Parameters
47 ----------
48 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
49 Response instance.
50 data_id : `str`
51 UUID of the SCADA data.
52 """
53 try:
54 if self.scada_data_mgr.validate_uuid(data_id) is False:
55 self.send_invalid_resource_id_error(resp)
56 return
57
58 data_flows = self.scada_data_mgr.get(data_id).get_data_flows().tolist()
59 self.send_json_response(resp, data_flows)
60 except Exception as ex:
61 warnings.warn(str(ex))
62 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
63
64
[docs]
65class ScadaDataDemandsHandler(ScadaDataBaseHandler):
66 """
67 Class for handling GET requests for the demand sensor readings of a given SCADA data instance.
68 """
[docs]
69 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
70 """
71 Gets the demand sensor readings of a given SCADA data instance.
72
73 Parameters
74 ----------
75 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
76 Response instance.
77 data_id : `str`
78 UUID of the SCADA data.
79 """
80 try:
81 if self.scada_data_mgr.validate_uuid(data_id) is False:
82 self.send_invalid_resource_id_error(resp)
83 return
84
85 data_demands = self.scada_data_mgr.get(data_id).get_data_demands().tolist()
86 self.send_json_response(resp, data_demands)
87 except Exception as ex:
88 warnings.warn(str(ex))
89 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
90
91
[docs]
92class ScadaDataValveStatesHandler(ScadaDataBaseHandler):
93 """
94 Class for handling GET requests for the valve state sensor readings
95 of a given SCADA data instance.
96 """
[docs]
97 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
98 """
99 Gets the valve state sensor readings of a given SCADA data instance.
100
101 Parameters
102 ----------
103 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
104 Response instance.
105 data_id : `str`
106 UUID of the SCADA data.
107 """
108 try:
109 if self.scada_data_mgr.validate_uuid(data_id) is False:
110 self.send_invalid_resource_id_error(resp)
111 return
112
113 data_demands = self.scada_data_mgr.get(data_id).get_data_valves_state().tolist()
114 self.send_json_response(resp, data_demands)
115 except Exception as ex:
116 warnings.warn(str(ex))
117 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
118
119
[docs]
120class ScadaDataPumpStatesHandler(ScadaDataBaseHandler):
121 """
122 Class for handling GET requests for the pump state sensor readings
123 of a given SCADA data instance.
124 """
[docs]
125 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
126 """
127 Gets the pump state sensor readings of a given SCADA data instance.
128
129 Parameters
130 ----------
131 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
132 Response instance.
133 data_id : `str`
134 UUID of the SCADA data.
135 """
136 try:
137 if self.scada_data_mgr.validate_uuid(data_id) is False:
138 self.send_invalid_resource_id_error(resp)
139 return
140
141 data_demands = self.scada_data_mgr.get(data_id).get_data_pumps_state().tolist()
142 self.send_json_response(resp, data_demands)
143 except Exception as ex:
144 warnings.warn(str(ex))
145 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
146
147
[docs]
148class ScadaDataTankVolumesHandler(ScadaDataBaseHandler):
149 """
150 Class for handling GET requests for the tank volume sensor readings
151 of a given SCADA data instance.
152 """
[docs]
153 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
154 """
155 Gets the tank volume sensor readings of a given SCADA data instance.
156
157 Parameters
158 ----------
159 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
160 Response instance.
161 data_id : `str`
162 UUID of the SCADA data.
163 """
164 try:
165 if self.scada_data_mgr.validate_uuid(data_id) is False:
166 self.send_invalid_resource_id_error(resp)
167 return
168
169 data_demands = self.scada_data_mgr.get(data_id).get_data_tanks_water_volume().tolist()
170 self.send_json_response(resp, data_demands)
171 except Exception as ex:
172 warnings.warn(str(ex))
173 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
174
175
[docs]
176class ScadaDataNodesQualityHandler(ScadaDataBaseHandler):
177 """
178 Class for handling GET requests for the node quality sensor readings
179 of a given SCADA data instance.
180 """
[docs]
181 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
182 """
183 Gets the node quality sensor readings of a given SCADA data instance.
184
185 Parameters
186 ----------
187 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
188 Response instance.
189 data_id : `str`
190 UUID of the SCADA data.
191 """
192 try:
193 if self.scada_data_mgr.validate_uuid(data_id) is False:
194 self.send_invalid_resource_id_error(resp)
195 return
196
197 data_nodes_quality = self.scada_data_mgr.get(data_id).get_data_nodes_quality().tolist()
198 self.send_json_response(resp, data_nodes_quality)
199 except Exception as ex:
200 warnings.warn(str(ex))
201 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
202
203
[docs]
204class ScadaDataLinksQualityHandler(ScadaDataBaseHandler):
205 """
206 Class for handling GET requests for the link quality sensor readings
207 of a given SCADA data instance.
208 """
[docs]
209 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
210 """
211 Gets the link/pipe quality sensor readings of a given SCADA data instance.
212
213 Parameters
214 ----------
215 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
216 Response instance.
217 data_id : `str`
218 UUID of the SCADA data.
219 """
220 try:
221 if self.scada_data_mgr.validate_uuid(data_id) is False:
222 self.send_invalid_resource_id_error(resp)
223 return
224
225 data_links_quality = self.scada_data_mgr.get(data_id).get_data_links_quality().tolist()
226 self.send_json_response(resp, data_links_quality)
227 except Exception as ex:
228 warnings.warn(str(ex))
229 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
230
231
[docs]
232class ScadaDataNodeBulkSpeciesHandler(ScadaDataBaseHandler):
233 """
234 Class for handling GET requests for the bulk species node concentration sensor readings
235 of a given SCADA data instance.
236 """
[docs]
237 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
238 """
239 Gets the bulk species node concentrations sensor readings of a given SCADA data instance.
240
241 Parameters
242 ----------
243 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
244 Response instance.
245 data_id : `str`
246 UUID of the SCADA data.
247 """
248 try:
249 if self.scada_data_mgr.validate_uuid(data_id) is False:
250 self.send_invalid_resource_id_error(resp)
251 return
252
253 data_conc = self.scada_data_mgr.get(data_id).\
254 get_data_bulk_species_node_concentration().tolist()
255 self.send_json_response(resp, data_conc)
256 except Exception as ex:
257 warnings.warn(str(ex))
258 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
259
260
[docs]
261class ScadaDataLinkBulkSpeciesHandler(ScadaDataBaseHandler):
262 """
263 Class for handling GET requests for the bulk species link/pipe concentration sensor readings
264 of a given SCADA data instance.
265 """
[docs]
266 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
267 """
268 Gets the bulk species link/pipe concentrations sensor readings of a
269 given SCADA data instance.
270
271 Parameters
272 ----------
273 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
274 Response instance.
275 data_id : `str`
276 UUID of the SCADA data.
277 """
278 try:
279 if self.scada_data_mgr.validate_uuid(data_id) is False:
280 self.send_invalid_resource_id_error(resp)
281 return
282
283 data_conc = self.scada_data_mgr.get(data_id).\
284 get_data_bulk_species_link_concentration().tolist()
285 self.send_json_response(resp, data_conc)
286 except Exception as ex:
287 warnings.warn(str(ex))
288 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
289
290
[docs]
291class ScadaDataSurfaceSpeciesHandler(ScadaDataBaseHandler):
292 """
293 Class for handling GET requests for the surface species concentration sensor readings
294 of a given SCADA data instance.
295 """
[docs]
296 def on_get(self, _, resp: falcon.Response, data_id: str) -> None:
297 """
298 Gets the surface species concentrations sensor readings of a given SCADA data instance.
299
300 Parameters
301 ----------
302 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
303 Response instance.
304 data_id : `str`
305 UUID of the SCADA data.
306 """
307 try:
308 if self.scada_data_mgr.validate_uuid(data_id) is False:
309 self.send_invalid_resource_id_error(resp)
310 return
311
312 data_links_quality = self.scada_data_mgr.get(data_id).\
313 get_data_surface_species_concentration().tolist()
314 self.send_json_response(resp, data_links_quality)
315 except Exception as ex:
316 warnings.warn(str(ex))
317 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR