Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Duda sobre Relational Agent

31 views
Skip to first unread message

jaum...@gmail.com

unread,
Nov 12, 2020, 9:11:43 AM11/12/20
to Sentilo
Hola,
¿Hay alguna manera para que con el Relational Agent se pueda pasar la información del campo Descripción de cada sensor a la tabla MySQL?

Gracias,
Jaume

Sentilo IO

unread,
Nov 16, 2020, 2:19:38 AM11/16/20
to Sentilo
Hola Jaume,

Para conseguirlo deberías modificar el agente para recuperar esa información del catálogo.
No obstante, debes tener en cuenta consideraciones de rendimiento, quizás habilitando un cache o similar para que no sea necesario recuperar esa información por cada dato del sensor.

Saludos,
Sentilo Team.

jaum...@gmail.com

unread,
Nov 17, 2020, 11:26:33 AM11/17/20
to Sentilo
Hola,
¿Podéis darme alguna indicación de qué debo modificar o si tenéis alguna documentación dónde puedo verla?

Gracias,
Jaume

Sentilo IO

unread,
Nov 19, 2020, 8:09:42 AM11/19/20
to Sentilo
Hola Jaume:

El problema es que el agente Relational sólo tiene acceso a las observaciones que están guardadas en Redis, y éstas no llevan ese metadato. La descripción del componente está en MongoDB, que es donde se guardan todos los metadatos que se ven en el Catálogo.
Por otro lado, sí hay agentes que enriquecen el evento con la información de MongoDB, son entre otros el agente Activity Monitor también el agente Kafka.

Primero tedrías que crear un CatalogService y su implementación, que tenga un método que se llamaría por ejemplo getDescription(final String provider, final String sensor).

Sería muy similar al método getSensorType de la clase org.sentilo.agent.activity.monitor.service.impl.CatalogServiceImpl. Este método hace lo mismo pero con el tipo de sensor.  Si miras ese método, allí en vez de
query.fields().include("type");
Tendrías que usar
query.fields().include("description"); ,
así se llama el campo en la collection "sensor" en MongoDb.

Recomendamos usar también la cache LRU tal cómo lo hacen estos servicios, para no hacer una query a Mongo cada vez que nos llega una observación.

Ese nuevo servicio CatalogService lo podrías inyectar y usar ya directamente en la clase org.sentilo.agent.relational.listener.AbstractMessageListenerImpl, concretamente en el método doWithMessage(). De nuevo, puedes inspirarte en el objeto MessageListenerImpl, tanto en el agente Activity Monitor como en agente Kafka.

Obviamente, tendrías que adaptar el objeto de dominio org.sentilo.agent.relational.domain.Observation
 y también añadir una nueva columna a la BBDD.

También tendrías que añadir sentilo-agent-relational/src/main/resources/properties/catalog-config.properties, para que el agente tenga properties sobre el  acceso al MongoDB (recuerda modificar sentilo-agent-relational/src/main/resources/spring/relational-properties-context.xml para que incluya este nuevo properties). Finalmente habría que crear relational-persistence-context.xml (igual que por ejemplo /sentilo/sentilo-agent-activity-monitor/src/main/resources/spring/monitor-persistence-context.xml).


Saludos,
Sentilo Team.

Sentilo IO

unread,
Nov 19, 2020, 3:24:39 PM11/19/20
to Sentilo
Otra opción que no involucra programación en Java sería probar de sincronizar la BBDD de Mongo con MySQL.
Si es que logras que funcione alguna de las herramientas que supuestamente hacen esta tarea, al menos con la colección sensor. Incluso podrías crear un script que haga esta tarea.

Una vez tengas una tabla que se corresponda a esta colección, podrías hacer join, vista materializada, usar trigger o similar.

Saludos,
Sentilo Team.
Reply all
Reply to author
Forward
0 new messages