Advertisement
Arham-4

White-Box SSD for Fetch 3rd Party Sensor Data UC

Apr 13th, 2023
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. @startuml
  2. actor Time
  3.  
  4. box External APIs
  5. actor MINTS
  6. actor OpenAQ
  7. actor Breezometer
  8. end box
  9.  
  10. box Database Hook
  11. participant Main
  12. participant FetchDataTask
  13. participant APIClient
  14. participant CapturedPollutant
  15. participant APIRepository
  16. end box
  17.  
  18. participant ":System\nDatabase" as Database
  19.  
  20. title Fetch 3rd Party Sensor Data
  21.  
  22. Main ->> APIRepository : initialize API clients associated with supported pollutants
  23. Main ->> Time : schedule fetch data task
  24.  
  25. loop database hook is active
  26. opt 5 minutes have passed since the last scheduled event
  27. Time ->> FetchDataTask : scheduled event triggered
  28.  
  29. FetchDataTask -> Database : fetchListOfSensors()
  30. Database -->> FetchDataTask : sensors
  31.  
  32. loop for each sensor in sensors
  33. loop pollutant ∈ {co, no2, o3, pm2.5, pm10, so2}
  34. FetchDataTask -> CapturedPollutant ** : create
  35.  
  36. FetchDataTask -> APIRepository : findAPIsFor(pollutant)
  37. APIRepository -->> FetchDataTask : APIs
  38.  
  39. opt MINTS ∈ APIs
  40. FetchDataTask -> APIClient : getLatestData(since, sensor, pollutant)
  41. note right: since = last timestamp since\ndatabase has been queried
  42. APIClient -> MINTS : getLatestData(since, sensor, pollutant)
  43. MINTS -->> APIClient : latestData
  44. APIClient -->> FetchDataTask : latestData
  45. opt latestData is not blank
  46. FetchDataTask ->> CapturedPollutant : setValue(value)
  47. end opt
  48. end opt
  49.  
  50. opt OpenAQ ∈ APIs ^ data is blank
  51. FetchDataTask -> APIClient : getLatestData(since, sensor, pollutant)
  52. APIClient -> OpenAQ : getLatestData(since, sensor, pollutant)
  53. OpenAQ -->> APIClient : latestData
  54. APIClient -->> FetchDataTask : latestData
  55. opt latestData is not blank
  56. FetchDataTask ->> CapturedPollutant : setValue(value)
  57. end opt
  58. end
  59.  
  60. opt Breezometer ∈ APIs ^ data is blank
  61. FetchDataTask -> APIClient : getLatestData(since, sensor, pollutant)
  62. APIClient -> Breezometer : getLatestData(since, sensor, pollutant)
  63. Breezometer -->> APIClient : latestData
  64. APIClient -->> FetchDataTask : latestData
  65. FetchDataTask ->> CapturedPollutant : setValue(value)
  66. end
  67.  
  68. FetchDataTask ->> Database : add(capturedPollutant)
  69. end
  70. end
  71. end
  72. end
  73. @enduml
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement