# Pipeline de mensagens - SenseUp
1) Toda mensagem é produzida por um ***datasource*** ou injetada para um ***datasource***.
1) Todas as mensagens da plataforma, seja encaminhada via ingestão de dados externa ou produzidas por flows de usuários são enviadas para um **entry point unificado** (*unified ingestion entrypoint*).
3) Do entrypoint unificado, uma função é responsável por consumir e distribuir cada mensagem para a fila do ***datasource*** correto.
* A função deve recorrer a um mapeamento de tópico-datasource:
```json
TOPIC
<topic> => {
"eventhub": "<topic>",
"endpoint": "senseup-ns3.servicebus.windows.net",
"namespace": "senseup-ns3"
}
```
* [ ] Um **job recorrente** deve ser criado para garantir sincronia entre o *cache* e o *master data*.
5) Dentro de um flow é possível utilizar um node de consumidor de ***datasource***. O usuário deve selecionar de um dropdown o Datasource de onde quer consumir.
6) Dentro de um flow é possível utilizar um node produtor para ***datasource***. O usuário deve selecionar de um dropdown o Datasource para o qual quer injetar eventos.
7) O plugin deve obter informação de ***datasources*** através de cache mantido no Redis (**DATASOURCES**)
```json
DATASOURCES
"1" => { id: 1, description: "Corredor Sul - Pontos Alarmados", "topic": "pontos-alarmados", "endpoint": "senseup-ns3.servicebus.windows.net", "ns": "senseup-ns3" }
"2" => { id: 2, description: "Corredor Sul - Pontos Alarmados", "topic": "...", "endpoint": "...", "ns": "" }
```

```json=
{
"topic": "",
"timestamp": "",
"payload": {},
"origin": ""
"flow_id": ""
}
```
* Example
```json=
{
"topic": "topictesting3",
"timestamp": "2021-04-09T00:00:00Z",
"payload": {
"deviceId": "2",
"Foo": "Bar",
"field1": [
{
"field2": "value1",
"field3": "value2"
},
{
"field4": "value3"
}
]
}
"origin": "flow",
"flow_id": "123asda2-asdas23asda-123as",
}
```