Bonjour,
J'ai un bug qui persiste en lien avec l'aggregate.
Description du problème initial : j'ai des logs de types request et d'autres de type response. Les logs ne se succèdent pas, entre ces deux requêtes il y a toujours d'autres logs. j'ai besoin de calculer la durée de traitement, qui est la date de la request - la date de la response.
La solution que j'ai mise en place est la suivante :
if [request]
{ aggregate
{
task_id => "%{RequestId}"
code => " map['request-time'] = event.get('request-time')"
map_action => "create"
}
)
if [response]
{
aggregate
{
task_id => "%{RequestId}"
code => "event.set('request-time', map['request-time'])"
map_action => "update"
end_of_task => true
timeout => 30
timeout_tags => ['_aggregatetimeout']
}
}
Je récupère la request-time et je l'ajoute au log de reponse pour ensuite faire un calcul simple à l'aide de ruby ( service-time = request-time - response-time)
les logs sont de ce format :
2020-01-17 00:04:01,259 INFO [lean.kernel.impl.utils.PayloadLoggerImpl] (default task-91)
LEAN-REQUEST > Service : LoginService {" RequestHeader" : { "Date" : "Fri Jan 17 00:04:01 WET 2020", "SessionId" : "", "RequestId" : "157921" }
2020-01-17 00:04:13,098 ERROR [lean.kernel.impl.dao.controls.MessageDaoImpl] (default task-91) WARNING/Error : FIND_BY_CODE >> Table : MESSAGE >> Code = app_release_control NOT FOUND
2020-01-17 00:04:13,098 INFO [lean.kernel.impl.utils.PayloadLoggerImpl] (default task-91)
LEAN-RESPONSE > Service : LoginService {" ResponseHeader" : { "Date" : "Fri Jan 17 00:04:13 WET 2020", "SessionId" : "", "RequestId" : "157921", "Response" : "Declined" } }
Sauf que le problème est que sur des petites quantités de logs ça fonctionne très bien mais sur des grandes quantités, il arrive qu'un moment il ne calcule pas le service time parceque il ne récupère pas la request-time du map. J'ai une perte de presque 10% (c’est-à-dire que le calcul est fait correctement sur 90% des logs et n'est pas fait du tout sur les 10%).
Aussi quand j'ai varié le timeout, le nombre de logs non traités varie (parfois, c'est plus que 10% parfois c'est moins, 5%, 6% mais jamais moins)
Ps : quand j'isole les logs non traités et je les teste séparément le service-time est calculé, en sachant que la requestId est une clé unique.
Je vous remercie par avance pour vos réponses.