Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @startuml
- actor Time
- box External APIs
- actor MINTS
- actor OpenAQ
- actor Breezometer
- end box
- box Database Hook
- participant Main
- participant FetchDataTask
- participant APIClient
- participant CapturedPollutant
- participant APIRepository
- end box
- participant ":System\nDatabase" as Database
- title Fetch 3rd Party Sensor Data
- Main ->> APIRepository : initialize API clients associated with supported pollutants
- Main ->> Time : schedule fetch data task
- loop database hook is active
- opt 5 minutes have passed since the last scheduled event
- Time ->> FetchDataTask : scheduled event triggered
- FetchDataTask -> Database : fetchListOfSensors()
- Database -->> FetchDataTask : sensors
- loop for each sensor in sensors
- loop pollutant ∈ {co, no2, o3, pm2.5, pm10, so2}
- FetchDataTask -> CapturedPollutant ** : create
- FetchDataTask -> APIRepository : findAPIsFor(pollutant)
- APIRepository -->> FetchDataTask : APIs
- opt MINTS ∈ APIs
- FetchDataTask -> APIClient : getLatestData(since, sensor, pollutant)
- note right: since = last timestamp since\ndatabase has been queried
- APIClient -> MINTS : getLatestData(since, sensor, pollutant)
- MINTS -->> APIClient : latestData
- APIClient -->> FetchDataTask : latestData
- opt latestData is not blank
- FetchDataTask ->> CapturedPollutant : setValue(value)
- end opt
- end opt
- opt OpenAQ ∈ APIs ^ data is blank
- FetchDataTask -> APIClient : getLatestData(since, sensor, pollutant)
- APIClient -> OpenAQ : getLatestData(since, sensor, pollutant)
- OpenAQ -->> APIClient : latestData
- APIClient -->> FetchDataTask : latestData
- opt latestData is not blank
- FetchDataTask ->> CapturedPollutant : setValue(value)
- end opt
- end
- opt Breezometer ∈ APIs ^ data is blank
- FetchDataTask -> APIClient : getLatestData(since, sensor, pollutant)
- APIClient -> Breezometer : getLatestData(since, sensor, pollutant)
- Breezometer -->> APIClient : latestData
- APIClient -->> FetchDataTask : latestData
- FetchDataTask ->> CapturedPollutant : setValue(value)
- end
- FetchDataTask ->> Database : add(capturedPollutant)
- end
- end
- end
- end
- @enduml
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement