From fb5b2f52c70eef9179d3a2992aefd74e7ddae421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Mon, 2 Jan 2023 11:33:47 +0100 Subject: [PATCH] fix: make wakatime relay middleware accept single heartbeat format (resolve #445) --- middlewares/custom/wakatime.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/middlewares/custom/wakatime.go b/middlewares/custom/wakatime.go index cea46cd..9e9e0ae 100644 --- a/middlewares/custom/wakatime.go +++ b/middlewares/custom/wakatime.go @@ -160,17 +160,23 @@ func (m *WakatimeRelayMiddleware) filterByCache(r *http.Request) error { newData := make([]interface{}, 0, len(heartbeats)) - for i, hb := range heartbeats { - hb = hb.Hashed() - + process := func(heartbeat *models.Heartbeat, rawData interface{}) { + heartbeat = heartbeat.Hashed() // we didn't see this particular heartbeat before - if _, found := m.hashCache.Get(hb.Hash); !found { - m.hashCache.SetDefault(hb.Hash, true) - newData = append(newData, rawData.([]interface{})[i]) - continue + if _, found := m.hashCache.Get(heartbeat.Hash); !found { + m.hashCache.SetDefault(heartbeat.Hash, true) + newData = append(newData, rawData) } } + if _, isList := rawData.([]interface{}); isList { + for i, hb := range heartbeats { + process(hb, rawData.([]interface{})[i]) + } + } else if len(heartbeats) > 0 { + process(heartbeats[0], rawData.(interface{})) + } + if len(newData) == 0 { return errors.New("no new heartbeats to relay") }