From ef9303e61efeeb4cf8d2e2a40eb10b1404a9d9e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Fri, 30 Apr 2021 16:20:08 +0200 Subject: [PATCH] feat: settings dialog for mail reports --- config/eventbus.go | 24 + coverage/coverage.out | 928 +++++++++++++++++++------------------ go.mod | 1 + go.sum | 2 + models/user.go | 5 +- routes/routes.go | 1 + routes/settings.go | 1 + services/mail/mail.go | 9 +- services/report.go | 33 +- services/services.go | 2 +- services/user.go | 27 +- utils/common.go | 6 +- views/mail/report.tpl.html | 4 +- views/settings.tpl.html | 21 +- views/summary.tpl.html | 2 +- 15 files changed, 584 insertions(+), 482 deletions(-) create mode 100644 config/eventbus.go diff --git a/config/eventbus.go b/config/eventbus.go new file mode 100644 index 0000000..bfa3657 --- /dev/null +++ b/config/eventbus.go @@ -0,0 +1,24 @@ +package config + +import "github.com/leandro-lugaresi/hub" + +type ApplicationEvent struct { + Type string + Payload interface{} +} + +const ( + TopicUser = "user.*" + EventUserUpdate = "user.update" + FieldPayload = "payload" +) + +var eventHub *hub.Hub + +func init() { + eventHub = hub.New() +} + +func EventBus() *hub.Hub { + return eventHub +} diff --git a/coverage/coverage.out b/coverage/coverage.out index 583e03b..3b0cc50 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,56 +1,4 @@ mode: set -github.com/muety/wakapi/models/heartbeat.go:32.34,34.2 1 1 -github.com/muety/wakapi/models/heartbeat.go:36.65,38.46 2 1 -github.com/muety/wakapi/models/heartbeat.go:38.46,39.108 1 1 -github.com/muety/wakapi/models/heartbeat.go:39.108,42.4 2 1 -github.com/muety/wakapi/models/heartbeat.go:46.50,47.11 1 1 -github.com/muety/wakapi/models/heartbeat.go:60.2,60.15 1 1 -github.com/muety/wakapi/models/heartbeat.go:64.2,64.12 1 1 -github.com/muety/wakapi/models/heartbeat.go:48.22,49.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:50.21,51.17 1 1 -github.com/muety/wakapi/models/heartbeat.go:52.23,53.19 1 1 -github.com/muety/wakapi/models/heartbeat.go:54.17,55.26 1 1 -github.com/muety/wakapi/models/heartbeat.go:56.22,57.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:60.15,62.3 1 1 -github.com/muety/wakapi/models/heartbeat.go:67.37,83.2 1 0 -github.com/muety/wakapi/models/heartbeat.go:91.41,93.16 2 0 -github.com/muety/wakapi/models/heartbeat.go:96.2,97.10 2 0 -github.com/muety/wakapi/models/heartbeat.go:93.16,95.3 1 0 -github.com/muety/wakapi/models/heartbeats.go:7.31,9.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:11.41,13.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:15.36,17.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:19.43,22.2 2 0 -github.com/muety/wakapi/models/heartbeats.go:24.41,26.18 1 0 -github.com/muety/wakapi/models/heartbeats.go:29.2,29.16 1 0 -github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 -github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 -github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 -github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 -github.com/muety/wakapi/models/mail.go:16.44,20.2 3 0 -github.com/muety/wakapi/models/mail.go:22.44,26.2 3 0 -github.com/muety/wakapi/models/mail.go:28.32,41.2 1 0 -github.com/muety/wakapi/models/mail.go:43.41,45.2 1 0 -github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 -github.com/muety/wakapi/models/shared.go:35.52,37.2 1 0 -github.com/muety/wakapi/models/shared.go:39.52,42.16 3 0 -github.com/muety/wakapi/models/shared.go:45.2,47.12 3 0 -github.com/muety/wakapi/models/shared.go:42.16,44.3 1 0 -github.com/muety/wakapi/models/shared.go:50.52,56.22 2 0 -github.com/muety/wakapi/models/shared.go:71.2,74.12 3 0 -github.com/muety/wakapi/models/shared.go:57.14,61.17 2 0 -github.com/muety/wakapi/models/shared.go:64.17,66.8 2 0 -github.com/muety/wakapi/models/shared.go:67.10,68.64 1 0 -github.com/muety/wakapi/models/shared.go:61.17,63.4 1 0 -github.com/muety/wakapi/models/shared.go:77.51,80.2 2 0 -github.com/muety/wakapi/models/shared.go:82.45,84.2 1 0 -github.com/muety/wakapi/models/shared.go:86.37,88.2 1 0 -github.com/muety/wakapi/models/shared.go:90.35,92.2 1 0 -github.com/muety/wakapi/models/shared.go:94.34,96.2 1 0 -github.com/muety/wakapi/models/alias.go:12.32,14.2 1 0 -github.com/muety/wakapi/models/alias.go:16.37,17.35 1 0 -github.com/muety/wakapi/models/alias.go:22.2,22.14 1 0 -github.com/muety/wakapi/models/alias.go:17.35,18.18 1 0 -github.com/muety/wakapi/models/alias.go:18.18,20.4 1 0 github.com/muety/wakapi/models/filters.go:16.56,17.16 1 0 github.com/muety/wakapi/models/filters.go:29.2,29.19 1 0 github.com/muety/wakapi/models/filters.go:18.22,19.32 1 0 @@ -69,13 +17,23 @@ github.com/muety/wakapi/models/filters.go:39.8,39.27 1 1 github.com/muety/wakapi/models/filters.go:39.27,41.3 1 0 github.com/muety/wakapi/models/filters.go:41.8,41.28 1 1 github.com/muety/wakapi/models/filters.go:41.28,43.3 1 0 -github.com/muety/wakapi/models/interval.go:39.47,40.23 1 0 -github.com/muety/wakapi/models/interval.go:45.2,45.14 1 0 -github.com/muety/wakapi/models/interval.go:40.23,41.13 1 0 -github.com/muety/wakapi/models/interval.go:41.13,43.4 1 0 -github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 -github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 -github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:32.34,34.2 1 1 +github.com/muety/wakapi/models/heartbeat.go:36.65,38.46 2 1 +github.com/muety/wakapi/models/heartbeat.go:38.46,39.108 1 1 +github.com/muety/wakapi/models/heartbeat.go:39.108,42.4 2 1 +github.com/muety/wakapi/models/heartbeat.go:46.50,47.11 1 1 +github.com/muety/wakapi/models/heartbeat.go:60.2,60.15 1 1 +github.com/muety/wakapi/models/heartbeat.go:64.2,64.12 1 1 +github.com/muety/wakapi/models/heartbeat.go:48.22,49.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:50.21,51.17 1 1 +github.com/muety/wakapi/models/heartbeat.go:52.23,53.19 1 1 +github.com/muety/wakapi/models/heartbeat.go:54.17,55.26 1 1 +github.com/muety/wakapi/models/heartbeat.go:56.22,57.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:60.15,62.3 1 1 +github.com/muety/wakapi/models/heartbeat.go:67.37,83.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:91.41,93.16 2 0 +github.com/muety/wakapi/models/heartbeat.go:96.2,97.10 2 0 +github.com/muety/wakapi/models/heartbeat.go:93.16,95.3 1 0 github.com/muety/wakapi/models/mail_address.go:15.13,18.2 2 1 github.com/muety/wakapi/models/mail_address.go:24.38,26.2 1 0 github.com/muety/wakapi/models/mail_address.go:28.35,30.21 2 1 @@ -94,6 +52,7 @@ github.com/muety/wakapi/models/mail_address.go:59.40,60.22 1 1 github.com/muety/wakapi/models/mail_address.go:65.2,65.13 1 1 github.com/muety/wakapi/models/mail_address.go:60.22,61.17 1 1 github.com/muety/wakapi/models/mail_address.go:61.17,63.4 1 1 +github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 github.com/muety/wakapi/models/summary.go:70.29,72.2 1 1 github.com/muety/wakapi/models/summary.go:74.37,81.2 6 1 github.com/muety/wakapi/models/summary.go:83.35,85.2 1 1 @@ -146,20 +105,238 @@ github.com/muety/wakapi/models/summary.go:244.33,246.2 1 1 github.com/muety/wakapi/models/summary.go:248.43,250.2 1 1 github.com/muety/wakapi/models/summary.go:252.38,254.2 1 1 github.com/muety/wakapi/models/user.go:8.13,10.2 1 1 -github.com/muety/wakapi/models/user.go:77.36,78.22 1 1 -github.com/muety/wakapi/models/user.go:81.2,82.16 2 1 -github.com/muety/wakapi/models/user.go:85.2,85.11 1 1 -github.com/muety/wakapi/models/user.go:78.22,80.3 1 1 -github.com/muety/wakapi/models/user.go:82.16,84.3 1 0 -github.com/muety/wakapi/models/user.go:88.41,91.2 2 1 -github.com/muety/wakapi/models/user.go:93.43,96.2 1 0 -github.com/muety/wakapi/models/user.go:98.45,101.2 1 0 -github.com/muety/wakapi/models/user.go:103.33,108.2 1 0 -github.com/muety/wakapi/models/user.go:110.41,112.2 1 0 -github.com/muety/wakapi/models/user.go:114.45,116.2 1 0 -github.com/muety/wakapi/models/user.go:118.45,120.2 1 0 -github.com/muety/wakapi/models/user.go:122.39,124.2 1 0 -github.com/muety/wakapi/models/user.go:126.39,129.2 2 0 +github.com/muety/wakapi/models/user.go:78.36,79.22 1 1 +github.com/muety/wakapi/models/user.go:82.2,83.16 2 1 +github.com/muety/wakapi/models/user.go:86.2,86.11 1 1 +github.com/muety/wakapi/models/user.go:79.22,81.3 1 1 +github.com/muety/wakapi/models/user.go:83.16,85.3 1 0 +github.com/muety/wakapi/models/user.go:89.41,92.2 2 1 +github.com/muety/wakapi/models/user.go:94.43,97.2 1 0 +github.com/muety/wakapi/models/user.go:99.45,102.2 1 0 +github.com/muety/wakapi/models/user.go:104.33,109.2 1 0 +github.com/muety/wakapi/models/user.go:111.41,113.2 1 0 +github.com/muety/wakapi/models/user.go:115.45,117.2 1 0 +github.com/muety/wakapi/models/user.go:119.45,121.2 1 0 +github.com/muety/wakapi/models/user.go:123.39,125.2 1 0 +github.com/muety/wakapi/models/user.go:127.39,130.2 2 0 +github.com/muety/wakapi/models/alias.go:12.32,14.2 1 0 +github.com/muety/wakapi/models/alias.go:16.37,17.35 1 0 +github.com/muety/wakapi/models/alias.go:22.2,22.14 1 0 +github.com/muety/wakapi/models/alias.go:17.35,18.18 1 0 +github.com/muety/wakapi/models/alias.go:18.18,20.4 1 0 +github.com/muety/wakapi/models/heartbeats.go:7.31,9.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:11.41,13.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:15.36,17.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:19.43,22.2 2 0 +github.com/muety/wakapi/models/heartbeats.go:24.41,26.18 1 0 +github.com/muety/wakapi/models/heartbeats.go:29.2,29.16 1 0 +github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 +github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 +github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 +github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 +github.com/muety/wakapi/models/interval.go:39.47,40.23 1 0 +github.com/muety/wakapi/models/interval.go:45.2,45.14 1 0 +github.com/muety/wakapi/models/interval.go:40.23,41.13 1 0 +github.com/muety/wakapi/models/interval.go:41.13,43.4 1 0 +github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 +github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 +github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 +github.com/muety/wakapi/models/mail.go:19.44,23.2 3 0 +github.com/muety/wakapi/models/mail.go:25.44,29.2 3 0 +github.com/muety/wakapi/models/mail.go:31.32,44.2 1 0 +github.com/muety/wakapi/models/mail.go:46.41,48.2 1 0 +github.com/muety/wakapi/models/shared.go:35.52,37.2 1 0 +github.com/muety/wakapi/models/shared.go:39.52,42.16 3 0 +github.com/muety/wakapi/models/shared.go:45.2,47.12 3 0 +github.com/muety/wakapi/models/shared.go:42.16,44.3 1 0 +github.com/muety/wakapi/models/shared.go:50.52,56.22 2 0 +github.com/muety/wakapi/models/shared.go:71.2,74.12 3 0 +github.com/muety/wakapi/models/shared.go:57.14,61.17 2 0 +github.com/muety/wakapi/models/shared.go:64.17,66.8 2 0 +github.com/muety/wakapi/models/shared.go:67.10,68.64 1 0 +github.com/muety/wakapi/models/shared.go:61.17,63.4 1 0 +github.com/muety/wakapi/models/shared.go:77.51,80.2 2 0 +github.com/muety/wakapi/models/shared.go:82.45,84.2 1 0 +github.com/muety/wakapi/models/shared.go:86.37,88.2 1 0 +github.com/muety/wakapi/models/shared.go:90.35,92.2 1 0 +github.com/muety/wakapi/models/shared.go:94.34,96.2 1 0 +github.com/muety/wakapi/utils/auth.go:16.79,18.54 2 0 +github.com/muety/wakapi/utils/auth.go:22.2,24.16 3 0 +github.com/muety/wakapi/utils/auth.go:28.2,30.45 3 0 +github.com/muety/wakapi/utils/auth.go:33.2,34.32 2 0 +github.com/muety/wakapi/utils/auth.go:18.54,20.3 1 0 +github.com/muety/wakapi/utils/auth.go:24.16,26.3 1 0 +github.com/muety/wakapi/utils/auth.go:30.45,32.3 1 0 +github.com/muety/wakapi/utils/auth.go:37.65,39.85 2 0 +github.com/muety/wakapi/utils/auth.go:43.2,44.30 2 0 +github.com/muety/wakapi/utils/auth.go:39.85,41.3 1 0 +github.com/muety/wakapi/utils/auth.go:47.94,49.16 2 0 +github.com/muety/wakapi/utils/auth.go:53.2,53.107 1 0 +github.com/muety/wakapi/utils/auth.go:57.2,57.22 1 0 +github.com/muety/wakapi/utils/auth.go:49.16,51.3 1 0 +github.com/muety/wakapi/utils/auth.go:53.107,55.3 1 0 +github.com/muety/wakapi/utils/auth.go:60.56,64.2 3 0 +github.com/muety/wakapi/utils/auth.go:66.55,69.16 3 0 +github.com/muety/wakapi/utils/auth.go:72.2,72.16 1 0 +github.com/muety/wakapi/utils/auth.go:69.16,71.3 1 0 +github.com/muety/wakapi/utils/color.go:8.90,10.32 2 0 +github.com/muety/wakapi/utils/color.go:15.2,15.15 1 0 +github.com/muety/wakapi/utils/color.go:10.32,11.50 1 0 +github.com/muety/wakapi/utils/color.go:11.50,13.4 1 0 +github.com/muety/wakapi/utils/common.go:18.73,19.58 1 0 +github.com/muety/wakapi/utils/common.go:22.2,22.87 1 0 +github.com/muety/wakapi/utils/common.go:25.2,25.64 1 0 +github.com/muety/wakapi/utils/common.go:19.58,21.3 1 0 +github.com/muety/wakapi/utils/common.go:22.87,24.3 1 0 +github.com/muety/wakapi/utils/common.go:28.40,30.2 1 0 +github.com/muety/wakapi/utils/common.go:32.44,34.2 1 0 +github.com/muety/wakapi/utils/common.go:36.49,38.2 1 0 +github.com/muety/wakapi/utils/common.go:40.45,42.2 1 0 +github.com/muety/wakapi/utils/common.go:44.24,46.2 1 0 +github.com/muety/wakapi/utils/common.go:48.56,51.45 3 1 +github.com/muety/wakapi/utils/common.go:54.2,54.40 1 1 +github.com/muety/wakapi/utils/common.go:51.45,53.3 1 1 +github.com/muety/wakapi/utils/filesystem.go:14.68,16.16 2 0 +github.com/muety/wakapi/utils/filesystem.go:20.2,21.15 2 0 +github.com/muety/wakapi/utils/filesystem.go:33.2,33.15 1 0 +github.com/muety/wakapi/utils/filesystem.go:16.16,18.3 1 0 +github.com/muety/wakapi/utils/filesystem.go:21.15,23.47 2 0 +github.com/muety/wakapi/utils/filesystem.go:23.47,25.23 2 0 +github.com/muety/wakapi/utils/filesystem.go:29.4,29.19 1 0 +github.com/muety/wakapi/utils/filesystem.go:25.23,27.5 1 0 +github.com/muety/wakapi/utils/http.go:9.90,12.58 3 0 +github.com/muety/wakapi/utils/http.go:12.58,14.3 1 0 +github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 +github.com/muety/wakapi/utils/strings.go:12.77,13.29 1 0 +github.com/muety/wakapi/utils/strings.go:18.2,18.19 1 0 +github.com/muety/wakapi/utils/strings.go:13.29,14.18 1 0 +github.com/muety/wakapi/utils/strings.go:14.18,16.4 1 0 +github.com/muety/wakapi/utils/template.go:8.41,10.16 2 0 +github.com/muety/wakapi/utils/template.go:13.2,13.23 1 0 +github.com/muety/wakapi/utils/template.go:10.16,12.3 1 0 +github.com/muety/wakapi/utils/template.go:16.37,17.30 1 0 +github.com/muety/wakapi/utils/template.go:20.2,20.10 1 0 +github.com/muety/wakapi/utils/template.go:17.30,19.3 1 0 +github.com/muety/wakapi/utils/date.go:8.43,10.2 1 1 +github.com/muety/wakapi/utils/date.go:12.48,14.2 1 0 +github.com/muety/wakapi/utils/date.go:16.41,18.21 2 1 +github.com/muety/wakapi/utils/date.go:21.2,21.23 1 1 +github.com/muety/wakapi/utils/date.go:18.21,20.3 1 0 +github.com/muety/wakapi/utils/date.go:24.46,26.2 1 0 +github.com/muety/wakapi/utils/date.go:28.51,30.2 1 0 +github.com/muety/wakapi/utils/date.go:32.44,35.2 2 1 +github.com/muety/wakapi/utils/date.go:37.52,39.2 1 0 +github.com/muety/wakapi/utils/date.go:41.45,43.2 1 0 +github.com/muety/wakapi/utils/date.go:45.51,47.2 1 0 +github.com/muety/wakapi/utils/date.go:49.44,51.2 1 0 +github.com/muety/wakapi/utils/date.go:54.42,56.2 1 1 +github.com/muety/wakapi/utils/date.go:59.41,61.21 2 1 +github.com/muety/wakapi/utils/date.go:64.2,64.36 1 1 +github.com/muety/wakapi/utils/date.go:61.21,63.3 1 1 +github.com/muety/wakapi/utils/date.go:68.63,70.2 1 0 +github.com/muety/wakapi/utils/date.go:73.62,79.2 5 0 +github.com/muety/wakapi/utils/date.go:82.67,85.33 2 1 +github.com/muety/wakapi/utils/date.go:94.2,94.18 1 1 +github.com/muety/wakapi/utils/date.go:85.33,87.19 2 1 +github.com/muety/wakapi/utils/date.go:90.3,91.10 2 1 +github.com/muety/wakapi/utils/date.go:87.19,89.4 1 1 +github.com/muety/wakapi/utils/date.go:97.50,103.2 5 0 +github.com/muety/wakapi/utils/date.go:106.79,109.36 3 1 +github.com/muety/wakapi/utils/date.go:113.2,113.21 1 1 +github.com/muety/wakapi/utils/date.go:117.2,117.21 1 1 +github.com/muety/wakapi/utils/date.go:121.2,121.13 1 1 +github.com/muety/wakapi/utils/date.go:109.36,112.3 2 0 +github.com/muety/wakapi/utils/date.go:113.21,116.3 2 1 +github.com/muety/wakapi/utils/date.go:117.21,120.3 2 1 +github.com/muety/wakapi/utils/summary.go:10.66,11.40 1 0 +github.com/muety/wakapi/utils/summary.go:16.2,16.48 1 0 +github.com/muety/wakapi/utils/summary.go:11.40,12.27 1 0 +github.com/muety/wakapi/utils/summary.go:12.27,14.4 1 0 +github.com/muety/wakapi/utils/summary.go:19.88,22.2 2 0 +github.com/muety/wakapi/utils/summary.go:24.95,26.16 2 0 +github.com/muety/wakapi/utils/summary.go:29.2,29.38 1 0 +github.com/muety/wakapi/utils/summary.go:26.16,28.3 1 0 +github.com/muety/wakapi/utils/summary.go:32.105,35.18 2 0 +github.com/muety/wakapi/utils/summary.go:70.2,70.22 1 0 +github.com/muety/wakapi/utils/summary.go:36.28,37.26 1 0 +github.com/muety/wakapi/utils/summary.go:38.32,40.24 2 0 +github.com/muety/wakapi/utils/summary.go:41.31,42.29 1 0 +github.com/muety/wakapi/utils/summary.go:43.31,45.27 2 0 +github.com/muety/wakapi/utils/summary.go:46.32,47.30 1 0 +github.com/muety/wakapi/utils/summary.go:48.32,50.28 2 0 +github.com/muety/wakapi/utils/summary.go:51.31,52.29 1 0 +github.com/muety/wakapi/utils/summary.go:53.32,54.44 1 0 +github.com/muety/wakapi/utils/summary.go:55.41,57.42 2 0 +github.com/muety/wakapi/utils/summary.go:58.33,59.45 1 0 +github.com/muety/wakapi/utils/summary.go:60.33,61.45 1 0 +github.com/muety/wakapi/utils/summary.go:62.35,63.45 1 0 +github.com/muety/wakapi/utils/summary.go:64.26,65.21 1 0 +github.com/muety/wakapi/utils/summary.go:66.10,67.39 1 0 +github.com/muety/wakapi/utils/summary.go:73.73,80.56 5 0 +github.com/muety/wakapi/utils/summary.go:96.2,103.8 2 0 +github.com/muety/wakapi/utils/summary.go:80.56,82.3 1 0 +github.com/muety/wakapi/utils/summary.go:82.8,82.54 1 0 +github.com/muety/wakapi/utils/summary.go:82.54,84.3 1 0 +github.com/muety/wakapi/utils/summary.go:84.8,86.17 2 0 +github.com/muety/wakapi/utils/summary.go:90.3,91.17 2 0 +github.com/muety/wakapi/utils/summary.go:86.17,88.4 1 0 +github.com/muety/wakapi/utils/summary.go:91.17,93.4 1 0 +github.com/muety/wakapi/utils/summary.go:106.48,110.51 2 0 +github.com/muety/wakapi/utils/summary.go:113.2,113.12 1 0 +github.com/muety/wakapi/utils/summary.go:110.51,112.3 1 0 +github.com/muety/wakapi/config/db.go:39.50,40.19 1 0 +github.com/muety/wakapi/config/db.go:53.2,53.12 1 0 +github.com/muety/wakapi/config/db.go:41.23,45.5 1 0 +github.com/muety/wakapi/config/db.go:46.26,49.5 1 0 +github.com/muety/wakapi/config/db.go:50.24,51.48 1 0 +github.com/muety/wakapi/config/db.go:56.53,66.2 1 1 +github.com/muety/wakapi/config/db.go:68.56,70.16 2 1 +github.com/muety/wakapi/config/db.go:74.2,81.3 1 1 +github.com/muety/wakapi/config/db.go:70.16,72.3 1 0 +github.com/muety/wakapi/config/db.go:84.54,86.2 1 1 +github.com/muety/wakapi/config/eventbus.go:18.13,20.2 1 1 +github.com/muety/wakapi/config/eventbus.go:22.26,24.2 1 0 +github.com/muety/wakapi/config/fs.go:9.56,10.19 1 0 +github.com/muety/wakapi/config/fs.go:13.2,13.19 1 0 +github.com/muety/wakapi/config/fs.go:10.19,12.3 1 0 +github.com/muety/wakapi/config/sentry.go:22.35,24.2 1 0 +github.com/muety/wakapi/config/sentry.go:26.62,29.2 2 0 +github.com/muety/wakapi/config/sentry.go:39.33,46.2 2 0 +github.com/muety/wakapi/config/sentry.go:48.79,51.2 2 0 +github.com/muety/wakapi/config/sentry.go:53.72,57.2 3 0 +github.com/muety/wakapi/config/sentry.go:59.71,63.2 3 0 +github.com/muety/wakapi/config/sentry.go:65.71,69.2 3 0 +github.com/muety/wakapi/config/sentry.go:71.72,75.2 3 0 +github.com/muety/wakapi/config/sentry.go:77.72,81.2 3 0 +github.com/muety/wakapi/config/sentry.go:83.67,88.18 4 0 +github.com/muety/wakapi/config/sentry.go:100.2,100.28 1 0 +github.com/muety/wakapi/config/sentry.go:88.18,89.65 1 0 +github.com/muety/wakapi/config/sentry.go:89.65,92.42 3 0 +github.com/muety/wakapi/config/sentry.go:95.4,96.10 2 0 +github.com/muety/wakapi/config/sentry.go:92.42,94.5 1 0 +github.com/muety/wakapi/config/sentry.go:110.50,114.91 1 0 +github.com/muety/wakapi/config/sentry.go:114.91,115.29 1 0 +github.com/muety/wakapi/config/sentry.go:119.4,122.38 3 0 +github.com/muety/wakapi/config/sentry.go:127.4,127.39 1 0 +github.com/muety/wakapi/config/sentry.go:130.4,130.69 1 0 +github.com/muety/wakapi/config/sentry.go:115.29,117.5 1 0 +github.com/muety/wakapi/config/sentry.go:122.38,123.38 1 0 +github.com/muety/wakapi/config/sentry.go:123.38,125.6 1 0 +github.com/muety/wakapi/config/sentry.go:127.39,129.5 1 0 +github.com/muety/wakapi/config/sentry.go:132.79,133.27 1 0 +github.com/muety/wakapi/config/sentry.go:140.4,140.16 1 0 +github.com/muety/wakapi/config/sentry.go:133.27,134.84 1 0 +github.com/muety/wakapi/config/sentry.go:134.84,135.42 1 0 +github.com/muety/wakapi/config/sentry.go:135.42,137.7 1 0 +github.com/muety/wakapi/config/sentry.go:142.17,144.3 1 0 +github.com/muety/wakapi/config/sentry.go:147.49,151.51 2 0 +github.com/muety/wakapi/config/sentry.go:154.2,154.12 1 0 +github.com/muety/wakapi/config/sentry.go:151.51,153.3 1 0 +github.com/muety/wakapi/config/utils.go:5.78,7.22 2 0 +github.com/muety/wakapi/config/utils.go:13.2,13.11 1 0 +github.com/muety/wakapi/config/utils.go:7.22,8.18 1 0 +github.com/muety/wakapi/config/utils.go:11.3,11.12 1 0 +github.com/muety/wakapi/config/utils.go:8.18,10.4 1 0 github.com/muety/wakapi/config/config.go:147.70,149.2 1 0 github.com/muety/wakapi/config/config.go:151.65,153.2 1 0 github.com/muety/wakapi/config/config.go:155.82,165.2 1 0 @@ -233,68 +410,6 @@ github.com/muety/wakapi/config/config.go:344.70,346.3 1 0 github.com/muety/wakapi/config/config.go:348.28,350.3 1 0 github.com/muety/wakapi/config/config.go:352.29,355.3 2 0 github.com/muety/wakapi/config/config.go:357.94,359.3 1 0 -github.com/muety/wakapi/config/db.go:39.50,40.19 1 0 -github.com/muety/wakapi/config/db.go:53.2,53.12 1 0 -github.com/muety/wakapi/config/db.go:41.23,45.5 1 0 -github.com/muety/wakapi/config/db.go:46.26,49.5 1 0 -github.com/muety/wakapi/config/db.go:50.24,51.48 1 0 -github.com/muety/wakapi/config/db.go:56.53,66.2 1 1 -github.com/muety/wakapi/config/db.go:68.56,70.16 2 1 -github.com/muety/wakapi/config/db.go:74.2,81.3 1 1 -github.com/muety/wakapi/config/db.go:70.16,72.3 1 0 -github.com/muety/wakapi/config/db.go:84.54,86.2 1 1 -github.com/muety/wakapi/config/fs.go:9.56,10.19 1 0 -github.com/muety/wakapi/config/fs.go:13.2,13.19 1 0 -github.com/muety/wakapi/config/fs.go:10.19,12.3 1 0 -github.com/muety/wakapi/config/sentry.go:22.35,24.2 1 0 -github.com/muety/wakapi/config/sentry.go:26.62,29.2 2 0 -github.com/muety/wakapi/config/sentry.go:39.33,46.2 2 0 -github.com/muety/wakapi/config/sentry.go:48.79,51.2 2 0 -github.com/muety/wakapi/config/sentry.go:53.72,57.2 3 0 -github.com/muety/wakapi/config/sentry.go:59.71,63.2 3 0 -github.com/muety/wakapi/config/sentry.go:65.71,69.2 3 0 -github.com/muety/wakapi/config/sentry.go:71.72,75.2 3 0 -github.com/muety/wakapi/config/sentry.go:77.72,81.2 3 0 -github.com/muety/wakapi/config/sentry.go:83.67,88.18 4 0 -github.com/muety/wakapi/config/sentry.go:100.2,100.28 1 0 -github.com/muety/wakapi/config/sentry.go:88.18,89.65 1 0 -github.com/muety/wakapi/config/sentry.go:89.65,92.42 3 0 -github.com/muety/wakapi/config/sentry.go:95.4,96.10 2 0 -github.com/muety/wakapi/config/sentry.go:92.42,94.5 1 0 -github.com/muety/wakapi/config/sentry.go:110.50,114.91 1 0 -github.com/muety/wakapi/config/sentry.go:114.91,115.29 1 0 -github.com/muety/wakapi/config/sentry.go:119.4,122.38 3 0 -github.com/muety/wakapi/config/sentry.go:127.4,127.39 1 0 -github.com/muety/wakapi/config/sentry.go:130.4,130.69 1 0 -github.com/muety/wakapi/config/sentry.go:115.29,117.5 1 0 -github.com/muety/wakapi/config/sentry.go:122.38,123.38 1 0 -github.com/muety/wakapi/config/sentry.go:123.38,125.6 1 0 -github.com/muety/wakapi/config/sentry.go:127.39,129.5 1 0 -github.com/muety/wakapi/config/sentry.go:132.79,133.27 1 0 -github.com/muety/wakapi/config/sentry.go:140.4,140.16 1 0 -github.com/muety/wakapi/config/sentry.go:133.27,134.84 1 0 -github.com/muety/wakapi/config/sentry.go:134.84,135.42 1 0 -github.com/muety/wakapi/config/sentry.go:135.42,137.7 1 0 -github.com/muety/wakapi/config/sentry.go:142.17,144.3 1 0 -github.com/muety/wakapi/config/sentry.go:147.49,151.51 2 0 -github.com/muety/wakapi/config/sentry.go:154.2,154.12 1 0 -github.com/muety/wakapi/config/sentry.go:151.51,153.3 1 0 -github.com/muety/wakapi/config/utils.go:5.78,7.22 2 0 -github.com/muety/wakapi/config/utils.go:13.2,13.11 1 0 -github.com/muety/wakapi/config/utils.go:7.22,8.18 1 0 -github.com/muety/wakapi/config/utils.go:11.3,11.12 1 0 -github.com/muety/wakapi/config/utils.go:8.18,10.4 1 0 -github.com/muety/wakapi/middlewares/security.go:19.62,20.43 1 0 -github.com/muety/wakapi/middlewares/security.go:20.43,22.3 1 0 -github.com/muety/wakapi/middlewares/security.go:25.80,26.36 1 0 -github.com/muety/wakapi/middlewares/security.go:31.2,31.27 1 0 -github.com/muety/wakapi/middlewares/security.go:26.36,27.30 1 0 -github.com/muety/wakapi/middlewares/security.go:27.30,29.4 1 0 -github.com/muety/wakapi/middlewares/sentry.go:15.60,16.43 1 0 -github.com/muety/wakapi/middlewares/sentry.go:16.43,20.3 1 0 -github.com/muety/wakapi/middlewares/sentry.go:23.78,26.54 3 0 -github.com/muety/wakapi/middlewares/sentry.go:26.54,27.43 1 0 -github.com/muety/wakapi/middlewares/sentry.go:27.43,29.4 1 0 github.com/muety/wakapi/middlewares/authenticate.go:19.91,25.2 1 1 github.com/muety/wakapi/middlewares/authenticate.go:27.90,30.2 2 0 github.com/muety/wakapi/middlewares/authenticate.go:32.90,35.2 2 0 @@ -367,143 +482,226 @@ github.com/muety/wakapi/middlewares/principal.go:54.52,56.3 1 0 github.com/muety/wakapi/middlewares/principal.go:59.49,60.52 1 0 github.com/muety/wakapi/middlewares/principal.go:63.2,63.12 1 0 github.com/muety/wakapi/middlewares/principal.go:60.52,62.3 1 0 -github.com/muety/wakapi/utils/summary.go:10.66,11.40 1 0 -github.com/muety/wakapi/utils/summary.go:16.2,16.48 1 0 -github.com/muety/wakapi/utils/summary.go:11.40,12.27 1 0 -github.com/muety/wakapi/utils/summary.go:12.27,14.4 1 0 -github.com/muety/wakapi/utils/summary.go:19.88,22.2 2 0 -github.com/muety/wakapi/utils/summary.go:24.95,26.16 2 0 -github.com/muety/wakapi/utils/summary.go:29.2,29.38 1 0 -github.com/muety/wakapi/utils/summary.go:26.16,28.3 1 0 -github.com/muety/wakapi/utils/summary.go:32.105,35.18 2 0 -github.com/muety/wakapi/utils/summary.go:70.2,70.22 1 0 -github.com/muety/wakapi/utils/summary.go:36.28,37.26 1 0 -github.com/muety/wakapi/utils/summary.go:38.32,40.24 2 0 -github.com/muety/wakapi/utils/summary.go:41.31,42.29 1 0 -github.com/muety/wakapi/utils/summary.go:43.31,45.27 2 0 -github.com/muety/wakapi/utils/summary.go:46.32,47.30 1 0 -github.com/muety/wakapi/utils/summary.go:48.32,50.28 2 0 -github.com/muety/wakapi/utils/summary.go:51.31,52.29 1 0 -github.com/muety/wakapi/utils/summary.go:53.32,54.44 1 0 -github.com/muety/wakapi/utils/summary.go:55.41,57.42 2 0 -github.com/muety/wakapi/utils/summary.go:58.33,59.45 1 0 -github.com/muety/wakapi/utils/summary.go:60.33,61.45 1 0 -github.com/muety/wakapi/utils/summary.go:62.35,63.45 1 0 -github.com/muety/wakapi/utils/summary.go:64.26,65.21 1 0 -github.com/muety/wakapi/utils/summary.go:66.10,67.39 1 0 -github.com/muety/wakapi/utils/summary.go:73.73,80.56 5 0 -github.com/muety/wakapi/utils/summary.go:96.2,103.8 2 0 -github.com/muety/wakapi/utils/summary.go:80.56,82.3 1 0 -github.com/muety/wakapi/utils/summary.go:82.8,82.54 1 0 -github.com/muety/wakapi/utils/summary.go:82.54,84.3 1 0 -github.com/muety/wakapi/utils/summary.go:84.8,86.17 2 0 -github.com/muety/wakapi/utils/summary.go:90.3,91.17 2 0 -github.com/muety/wakapi/utils/summary.go:86.17,88.4 1 0 -github.com/muety/wakapi/utils/summary.go:91.17,93.4 1 0 -github.com/muety/wakapi/utils/summary.go:106.48,110.51 2 0 -github.com/muety/wakapi/utils/summary.go:113.2,113.12 1 0 -github.com/muety/wakapi/utils/summary.go:110.51,112.3 1 0 -github.com/muety/wakapi/utils/template.go:8.41,10.16 2 0 -github.com/muety/wakapi/utils/template.go:13.2,13.23 1 0 -github.com/muety/wakapi/utils/template.go:10.16,12.3 1 0 -github.com/muety/wakapi/utils/template.go:16.37,17.30 1 0 -github.com/muety/wakapi/utils/template.go:20.2,20.10 1 0 -github.com/muety/wakapi/utils/template.go:17.30,19.3 1 0 -github.com/muety/wakapi/utils/auth.go:16.79,18.54 2 0 -github.com/muety/wakapi/utils/auth.go:22.2,24.16 3 0 -github.com/muety/wakapi/utils/auth.go:28.2,30.45 3 0 -github.com/muety/wakapi/utils/auth.go:33.2,34.32 2 0 -github.com/muety/wakapi/utils/auth.go:18.54,20.3 1 0 -github.com/muety/wakapi/utils/auth.go:24.16,26.3 1 0 -github.com/muety/wakapi/utils/auth.go:30.45,32.3 1 0 -github.com/muety/wakapi/utils/auth.go:37.65,39.85 2 0 -github.com/muety/wakapi/utils/auth.go:43.2,44.30 2 0 -github.com/muety/wakapi/utils/auth.go:39.85,41.3 1 0 -github.com/muety/wakapi/utils/auth.go:47.94,49.16 2 0 -github.com/muety/wakapi/utils/auth.go:53.2,53.107 1 0 -github.com/muety/wakapi/utils/auth.go:57.2,57.22 1 0 -github.com/muety/wakapi/utils/auth.go:49.16,51.3 1 0 -github.com/muety/wakapi/utils/auth.go:53.107,55.3 1 0 -github.com/muety/wakapi/utils/auth.go:60.56,64.2 3 0 -github.com/muety/wakapi/utils/auth.go:66.55,69.16 3 0 -github.com/muety/wakapi/utils/auth.go:72.2,72.16 1 0 -github.com/muety/wakapi/utils/auth.go:69.16,71.3 1 0 -github.com/muety/wakapi/utils/color.go:8.90,10.32 2 0 -github.com/muety/wakapi/utils/color.go:15.2,15.15 1 0 -github.com/muety/wakapi/utils/color.go:10.32,11.50 1 0 -github.com/muety/wakapi/utils/color.go:11.50,13.4 1 0 -github.com/muety/wakapi/utils/common.go:18.73,19.58 1 0 -github.com/muety/wakapi/utils/common.go:22.2,22.87 1 0 -github.com/muety/wakapi/utils/common.go:25.2,25.64 1 0 -github.com/muety/wakapi/utils/common.go:19.58,21.3 1 0 -github.com/muety/wakapi/utils/common.go:22.87,24.3 1 0 -github.com/muety/wakapi/utils/common.go:28.40,30.2 1 0 -github.com/muety/wakapi/utils/common.go:32.44,34.2 1 0 -github.com/muety/wakapi/utils/common.go:36.45,38.2 1 0 -github.com/muety/wakapi/utils/common.go:40.24,42.2 1 0 -github.com/muety/wakapi/utils/common.go:44.56,47.45 3 1 -github.com/muety/wakapi/utils/common.go:50.2,50.40 1 1 -github.com/muety/wakapi/utils/common.go:47.45,49.3 1 1 -github.com/muety/wakapi/utils/date.go:8.43,10.2 1 1 -github.com/muety/wakapi/utils/date.go:12.48,14.2 1 0 -github.com/muety/wakapi/utils/date.go:16.41,18.21 2 1 -github.com/muety/wakapi/utils/date.go:21.2,21.23 1 1 -github.com/muety/wakapi/utils/date.go:18.21,20.3 1 0 -github.com/muety/wakapi/utils/date.go:24.46,26.2 1 0 -github.com/muety/wakapi/utils/date.go:28.51,30.2 1 0 -github.com/muety/wakapi/utils/date.go:32.44,35.2 2 1 -github.com/muety/wakapi/utils/date.go:37.52,39.2 1 0 -github.com/muety/wakapi/utils/date.go:41.45,43.2 1 0 -github.com/muety/wakapi/utils/date.go:45.51,47.2 1 0 -github.com/muety/wakapi/utils/date.go:49.44,51.2 1 0 -github.com/muety/wakapi/utils/date.go:54.42,56.2 1 1 -github.com/muety/wakapi/utils/date.go:59.41,61.21 2 1 -github.com/muety/wakapi/utils/date.go:64.2,64.36 1 1 -github.com/muety/wakapi/utils/date.go:61.21,63.3 1 1 -github.com/muety/wakapi/utils/date.go:68.63,70.2 1 0 -github.com/muety/wakapi/utils/date.go:73.62,79.2 5 0 -github.com/muety/wakapi/utils/date.go:82.67,85.33 2 1 -github.com/muety/wakapi/utils/date.go:94.2,94.18 1 1 -github.com/muety/wakapi/utils/date.go:85.33,87.19 2 1 -github.com/muety/wakapi/utils/date.go:90.3,91.10 2 1 -github.com/muety/wakapi/utils/date.go:87.19,89.4 1 1 -github.com/muety/wakapi/utils/date.go:97.50,103.2 5 0 -github.com/muety/wakapi/utils/date.go:106.79,109.36 3 1 -github.com/muety/wakapi/utils/date.go:113.2,113.21 1 1 -github.com/muety/wakapi/utils/date.go:117.2,117.21 1 1 -github.com/muety/wakapi/utils/date.go:121.2,121.13 1 1 -github.com/muety/wakapi/utils/date.go:109.36,112.3 2 0 -github.com/muety/wakapi/utils/date.go:113.21,116.3 2 1 -github.com/muety/wakapi/utils/date.go:117.21,120.3 2 1 -github.com/muety/wakapi/utils/filesystem.go:14.68,16.16 2 0 -github.com/muety/wakapi/utils/filesystem.go:20.2,21.15 2 0 -github.com/muety/wakapi/utils/filesystem.go:33.2,33.15 1 0 -github.com/muety/wakapi/utils/filesystem.go:16.16,18.3 1 0 -github.com/muety/wakapi/utils/filesystem.go:21.15,23.47 2 0 -github.com/muety/wakapi/utils/filesystem.go:23.47,25.23 2 0 -github.com/muety/wakapi/utils/filesystem.go:29.4,29.19 1 0 -github.com/muety/wakapi/utils/filesystem.go:25.23,27.5 1 0 -github.com/muety/wakapi/utils/http.go:9.90,12.58 3 0 -github.com/muety/wakapi/utils/http.go:12.58,14.3 1 0 -github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 -github.com/muety/wakapi/utils/strings.go:12.77,13.29 1 0 -github.com/muety/wakapi/utils/strings.go:18.2,18.19 1 0 -github.com/muety/wakapi/utils/strings.go:13.29,14.18 1 0 -github.com/muety/wakapi/utils/strings.go:14.18,16.4 1 0 -github.com/muety/wakapi/services/report.go:22.122,30.2 1 0 -github.com/muety/wakapi/services/report.go:32.38,36.16 3 0 -github.com/muety/wakapi/services/report.go:40.2,41.26 2 0 -github.com/muety/wakapi/services/report.go:36.16,38.3 1 0 -github.com/muety/wakapi/services/report.go:41.26,43.3 1 0 -github.com/muety/wakapi/services/report.go:46.62,51.65 3 0 -github.com/muety/wakapi/services/report.go:59.2,59.65 1 0 -github.com/muety/wakapi/services/report.go:51.65,56.3 4 0 -github.com/muety/wakapi/services/report.go:59.65,69.3 4 0 -github.com/muety/wakapi/services/report.go:72.80,77.16 4 0 -github.com/muety/wakapi/services/report.go:82.2,89.65 2 0 -github.com/muety/wakapi/services/report.go:94.2,95.12 2 0 -github.com/muety/wakapi/services/report.go:77.16,80.3 2 0 -github.com/muety/wakapi/services/report.go:89.65,92.3 2 0 +github.com/muety/wakapi/middlewares/security.go:19.62,20.43 1 0 +github.com/muety/wakapi/middlewares/security.go:20.43,22.3 1 0 +github.com/muety/wakapi/middlewares/security.go:25.80,26.36 1 0 +github.com/muety/wakapi/middlewares/security.go:31.2,31.27 1 0 +github.com/muety/wakapi/middlewares/security.go:26.36,27.30 1 0 +github.com/muety/wakapi/middlewares/security.go:27.30,29.4 1 0 +github.com/muety/wakapi/middlewares/sentry.go:15.60,16.43 1 0 +github.com/muety/wakapi/middlewares/sentry.go:16.43,20.3 1 0 +github.com/muety/wakapi/middlewares/sentry.go:23.78,26.54 3 0 +github.com/muety/wakapi/middlewares/sentry.go:26.54,27.43 1 0 +github.com/muety/wakapi/middlewares/sentry.go:27.43,29.4 1 0 +github.com/muety/wakapi/services/language_mapping.go:18.118,24.2 1 0 +github.com/muety/wakapi/services/language_mapping.go:26.86,28.2 1 0 +github.com/muety/wakapi/services/language_mapping.go:30.96,31.53 1 0 +github.com/muety/wakapi/services/language_mapping.go:35.2,36.16 2 0 +github.com/muety/wakapi/services/language_mapping.go:39.2,40.22 2 0 +github.com/muety/wakapi/services/language_mapping.go:31.53,33.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:36.16,38.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:43.92,46.16 3 0 +github.com/muety/wakapi/services/language_mapping.go:50.2,50.33 1 0 +github.com/muety/wakapi/services/language_mapping.go:53.2,53.22 1 0 +github.com/muety/wakapi/services/language_mapping.go:46.16,48.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:50.33,52.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:56.109,58.16 2 0 +github.com/muety/wakapi/services/language_mapping.go:62.2,63.20 2 0 +github.com/muety/wakapi/services/language_mapping.go:58.16,60.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:66.82,67.26 1 0 +github.com/muety/wakapi/services/language_mapping.go:70.2,72.12 3 0 +github.com/muety/wakapi/services/language_mapping.go:67.26,69.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:75.74,78.2 1 0 +github.com/muety/wakapi/services/misc.go:23.126,30.2 1 0 +github.com/muety/wakapi/services/misc.go:42.50,44.48 1 0 +github.com/muety/wakapi/services/misc.go:48.2,50.19 3 0 +github.com/muety/wakapi/services/misc.go:44.48,46.3 1 0 +github.com/muety/wakapi/services/misc.go:53.51,59.40 4 0 +github.com/muety/wakapi/services/misc.go:63.2,66.56 2 0 +github.com/muety/wakapi/services/misc.go:77.2,77.12 1 0 +github.com/muety/wakapi/services/misc.go:59.40,61.3 1 0 +github.com/muety/wakapi/services/misc.go:66.56,67.27 1 0 +github.com/muety/wakapi/services/misc.go:67.27,72.4 1 0 +github.com/muety/wakapi/services/misc.go:73.8,75.3 1 0 +github.com/muety/wakapi/services/misc.go:80.116,81.24 1 0 +github.com/muety/wakapi/services/misc.go:81.24,82.151 1 0 +github.com/muety/wakapi/services/misc.go:91.3,91.48 1 0 +github.com/muety/wakapi/services/misc.go:82.151,84.4 1 0 +github.com/muety/wakapi/services/misc.go:84.9,90.4 2 0 +github.com/muety/wakapi/services/misc.go:91.48,94.4 2 0 +github.com/muety/wakapi/services/misc.go:98.86,101.30 3 0 +github.com/muety/wakapi/services/misc.go:106.2,109.17 1 0 +github.com/muety/wakapi/services/misc.go:113.2,116.17 1 0 +github.com/muety/wakapi/services/misc.go:101.30,104.3 2 0 +github.com/muety/wakapi/services/misc.go:109.17,111.3 1 0 +github.com/muety/wakapi/services/misc.go:116.17,118.3 1 0 +github.com/muety/wakapi/services/user.go:21.73,28.2 1 0 +github.com/muety/wakapi/services/user.go:30.74,31.40 1 0 +github.com/muety/wakapi/services/user.go:35.2,36.16 2 0 +github.com/muety/wakapi/services/user.go:40.2,41.15 2 0 +github.com/muety/wakapi/services/user.go:31.40,33.3 1 0 +github.com/muety/wakapi/services/user.go:36.16,38.3 1 0 +github.com/muety/wakapi/services/user.go:44.72,45.37 1 0 +github.com/muety/wakapi/services/user.go:49.2,50.16 2 0 +github.com/muety/wakapi/services/user.go:54.2,55.15 2 0 +github.com/muety/wakapi/services/user.go:45.37,47.3 1 0 +github.com/muety/wakapi/services/user.go:50.16,52.3 1 0 +github.com/muety/wakapi/services/user.go:58.76,60.2 1 0 +github.com/muety/wakapi/services/user.go:62.86,64.2 1 0 +github.com/muety/wakapi/services/user.go:66.58,68.2 1 0 +github.com/muety/wakapi/services/user.go:70.86,72.2 1 0 +github.com/muety/wakapi/services/user.go:74.61,77.2 2 0 +github.com/muety/wakapi/services/user.go:79.48,81.2 1 0 +github.com/muety/wakapi/services/user.go:83.102,93.93 2 0 +github.com/muety/wakapi/services/user.go:99.2,99.38 1 0 +github.com/muety/wakapi/services/user.go:93.93,95.3 1 0 +github.com/muety/wakapi/services/user.go:95.8,97.3 1 0 +github.com/muety/wakapi/services/user.go:102.73,106.2 3 0 +github.com/muety/wakapi/services/user.go:108.78,112.2 3 0 +github.com/muety/wakapi/services/user.go:114.99,117.2 2 0 +github.com/muety/wakapi/services/user.go:119.106,122.96 3 0 +github.com/muety/wakapi/services/user.go:127.2,127.68 1 0 +github.com/muety/wakapi/services/user.go:122.96,124.3 1 0 +github.com/muety/wakapi/services/user.go:124.8,126.3 1 0 +github.com/muety/wakapi/services/user.go:130.85,132.2 1 0 +github.com/muety/wakapi/services/user.go:134.57,141.2 4 0 +github.com/muety/wakapi/services/user.go:143.38,145.2 1 0 +github.com/muety/wakapi/services/user.go:147.57,152.2 1 0 +github.com/muety/wakapi/services/alias.go:17.77,22.2 1 1 +github.com/muety/wakapi/services/alias.go:26.60,27.43 1 1 +github.com/muety/wakapi/services/alias.go:30.2,30.14 1 1 +github.com/muety/wakapi/services/alias.go:27.43,29.3 1 1 +github.com/muety/wakapi/services/alias.go:33.62,35.16 2 1 +github.com/muety/wakapi/services/alias.go:38.2,38.12 1 1 +github.com/muety/wakapi/services/alias.go:35.16,37.3 1 1 +github.com/muety/wakapi/services/alias.go:41.76,43.16 2 0 +github.com/muety/wakapi/services/alias.go:46.2,46.21 1 0 +github.com/muety/wakapi/services/alias.go:43.16,45.3 1 0 +github.com/muety/wakapi/services/alias.go:49.113,51.16 2 0 +github.com/muety/wakapi/services/alias.go:54.2,54.21 1 0 +github.com/muety/wakapi/services/alias.go:51.16,53.3 1 0 +github.com/muety/wakapi/services/alias.go:57.108,58.32 1 1 +github.com/muety/wakapi/services/alias.go:64.2,65.46 2 1 +github.com/muety/wakapi/services/alias.go:70.2,70.19 1 1 +github.com/muety/wakapi/services/alias.go:58.32,59.52 1 1 +github.com/muety/wakapi/services/alias.go:59.52,61.4 1 1 +github.com/muety/wakapi/services/alias.go:65.46,66.48 1 1 +github.com/muety/wakapi/services/alias.go:66.48,68.4 1 1 +github.com/muety/wakapi/services/alias.go:73.77,75.16 2 0 +github.com/muety/wakapi/services/alias.go:78.2,79.20 2 0 +github.com/muety/wakapi/services/alias.go:75.16,77.3 1 0 +github.com/muety/wakapi/services/alias.go:82.60,83.24 1 0 +github.com/muety/wakapi/services/alias.go:86.2,88.12 3 0 +github.com/muety/wakapi/services/alias.go:83.24,85.3 1 0 +github.com/muety/wakapi/services/alias.go:91.69,94.28 3 0 +github.com/muety/wakapi/services/alias.go:102.2,104.31 2 0 +github.com/muety/wakapi/services/alias.go:108.2,108.12 1 0 +github.com/muety/wakapi/services/alias.go:94.28,95.21 1 0 +github.com/muety/wakapi/services/alias.go:98.3,99.16 2 0 +github.com/muety/wakapi/services/alias.go:95.21,97.4 1 0 +github.com/muety/wakapi/services/alias.go:104.31,106.3 1 0 +github.com/muety/wakapi/services/alias.go:111.52,112.51 1 0 +github.com/muety/wakapi/services/alias.go:112.51,114.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:17.141,23.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:25.72,27.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:29.80,34.32 3 0 +github.com/muety/wakapi/services/heartbeat.go:41.2,41.55 1 0 +github.com/muety/wakapi/services/heartbeat.go:34.32,35.36 1 0 +github.com/muety/wakapi/services/heartbeat.go:35.36,38.4 2 0 +github.com/muety/wakapi/services/heartbeat.go:44.53,46.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:48.76,50.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:52.96,54.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:56.111,58.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:61.2,61.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:58.16,60.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:64.92,66.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:68.116,70.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:72.78,74.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:76.62,78.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:80.116,82.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:86.2,86.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:90.2,90.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:82.16,84.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:86.28,88.3 1 0 +github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 +github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 +github.com/muety/wakapi/services/key_value.go:25.78,27.16 2 0 +github.com/muety/wakapi/services/key_value.go:33.2,33.11 1 0 +github.com/muety/wakapi/services/key_value.go:27.16,32.3 1 0 +github.com/muety/wakapi/services/key_value.go:36.72,38.2 1 0 +github.com/muety/wakapi/services/key_value.go:40.60,42.2 1 0 +github.com/muety/wakapi/services/aggregation.go:29.142,37.2 1 0 +github.com/muety/wakapi/services/aggregation.go:46.43,48.37 1 0 +github.com/muety/wakapi/services/aggregation.go:52.2,54.19 3 0 +github.com/muety/wakapi/services/aggregation.go:48.37,50.3 1 0 +github.com/muety/wakapi/services/aggregation.go:57.67,58.47 1 0 +github.com/muety/wakapi/services/aggregation.go:61.2,66.40 4 0 +github.com/muety/wakapi/services/aggregation.go:70.2,70.50 1 0 +github.com/muety/wakapi/services/aggregation.go:75.2,75.60 1 0 +github.com/muety/wakapi/services/aggregation.go:81.2,81.35 1 0 +github.com/muety/wakapi/services/aggregation.go:58.47,60.3 1 0 +github.com/muety/wakapi/services/aggregation.go:66.40,68.3 1 0 +github.com/muety/wakapi/services/aggregation.go:70.50,72.3 1 0 +github.com/muety/wakapi/services/aggregation.go:75.60,79.3 3 0 +github.com/muety/wakapi/services/aggregation.go:84.109,85.24 1 0 +github.com/muety/wakapi/services/aggregation.go:85.24,86.111 1 0 +github.com/muety/wakapi/services/aggregation.go:86.111,88.4 1 0 +github.com/muety/wakapi/services/aggregation.go:88.9,91.4 2 0 +github.com/muety/wakapi/services/aggregation.go:95.80,96.33 1 0 +github.com/muety/wakapi/services/aggregation.go:96.33,97.60 1 0 +github.com/muety/wakapi/services/aggregation.go:97.60,99.4 1 0 +github.com/muety/wakapi/services/aggregation.go:103.100,107.59 3 0 +github.com/muety/wakapi/services/aggregation.go:122.2,123.16 2 0 +github.com/muety/wakapi/services/aggregation.go:129.2,130.16 2 0 +github.com/muety/wakapi/services/aggregation.go:136.2,137.44 2 0 +github.com/muety/wakapi/services/aggregation.go:142.2,142.41 1 0 +github.com/muety/wakapi/services/aggregation.go:156.2,156.12 1 0 +github.com/muety/wakapi/services/aggregation.go:107.59,110.3 2 0 +github.com/muety/wakapi/services/aggregation.go:110.8,110.47 1 0 +github.com/muety/wakapi/services/aggregation.go:110.47,112.30 2 0 +github.com/muety/wakapi/services/aggregation.go:112.30,113.43 1 0 +github.com/muety/wakapi/services/aggregation.go:113.43,115.5 1 0 +github.com/muety/wakapi/services/aggregation.go:117.8,119.3 1 0 +github.com/muety/wakapi/services/aggregation.go:123.16,126.3 2 0 +github.com/muety/wakapi/services/aggregation.go:130.16,133.3 2 0 +github.com/muety/wakapi/services/aggregation.go:137.44,139.3 1 0 +github.com/muety/wakapi/services/aggregation.go:142.41,143.21 1 0 +github.com/muety/wakapi/services/aggregation.go:143.21,147.4 1 0 +github.com/muety/wakapi/services/aggregation.go:147.9,147.62 1 0 +github.com/muety/wakapi/services/aggregation.go:147.62,151.4 1 0 +github.com/muety/wakapi/services/aggregation.go:159.73,162.27 3 0 +github.com/muety/wakapi/services/aggregation.go:167.2,167.27 1 0 +github.com/muety/wakapi/services/aggregation.go:170.2,170.12 1 0 +github.com/muety/wakapi/services/aggregation.go:162.27,163.39 1 0 +github.com/muety/wakapi/services/aggregation.go:163.39,165.4 1 0 +github.com/muety/wakapi/services/aggregation.go:167.27,169.3 1 0 +github.com/muety/wakapi/services/aggregation.go:173.69,176.27 3 0 +github.com/muety/wakapi/services/aggregation.go:176.27,178.3 1 0 +github.com/muety/wakapi/services/aggregation.go:181.83,196.41 5 0 +github.com/muety/wakapi/services/aggregation.go:196.41,206.3 3 0 +github.com/muety/wakapi/services/aggregation.go:209.34,212.2 2 0 +github.com/muety/wakapi/services/report.go:24.122,35.33 3 0 +github.com/muety/wakapi/services/report.go:41.2,41.12 1 0 +github.com/muety/wakapi/services/report.go:35.33,36.31 1 0 +github.com/muety/wakapi/services/report.go:36.31,38.4 1 0 +github.com/muety/wakapi/services/report.go:44.38,48.16 3 0 +github.com/muety/wakapi/services/report.go:52.2,53.26 2 0 +github.com/muety/wakapi/services/report.go:48.16,50.3 1 0 +github.com/muety/wakapi/services/report.go:53.26,55.3 1 0 +github.com/muety/wakapi/services/report.go:60.61,65.65 3 0 +github.com/muety/wakapi/services/report.go:73.2,73.65 1 0 +github.com/muety/wakapi/services/report.go:85.2,85.24 1 0 +github.com/muety/wakapi/services/report.go:65.65,70.3 4 0 +github.com/muety/wakapi/services/report.go:73.65,83.3 4 0 +github.com/muety/wakapi/services/report.go:88.80,89.22 1 0 +github.com/muety/wakapi/services/report.go:93.2,93.29 1 0 +github.com/muety/wakapi/services/report.go:98.2,102.16 4 0 +github.com/muety/wakapi/services/report.go:107.2,114.65 2 0 +github.com/muety/wakapi/services/report.go:119.2,120.12 2 0 +github.com/muety/wakapi/services/report.go:89.22,91.3 1 0 +github.com/muety/wakapi/services/report.go:93.29,96.3 2 0 +github.com/muety/wakapi/services/report.go:102.16,105.3 2 0 +github.com/muety/wakapi/services/report.go:114.65,117.3 2 0 github.com/muety/wakapi/services/summary.go:28.149,36.2 1 1 github.com/muety/wakapi/services/summary.go:40.136,43.66 2 1 github.com/muety/wakapi/services/summary.go:48.2,48.44 1 1 @@ -597,189 +795,3 @@ github.com/muety/wakapi/services/summary.go:344.54,346.3 1 1 github.com/muety/wakapi/services/summary.go:351.59,353.25 2 1 github.com/muety/wakapi/services/summary.go:356.2,356.32 1 1 github.com/muety/wakapi/services/summary.go:353.25,355.3 1 1 -github.com/muety/wakapi/services/user.go:19.73,25.2 1 0 -github.com/muety/wakapi/services/user.go:27.74,28.40 1 0 -github.com/muety/wakapi/services/user.go:32.2,33.16 2 0 -github.com/muety/wakapi/services/user.go:37.2,38.15 2 0 -github.com/muety/wakapi/services/user.go:28.40,30.3 1 0 -github.com/muety/wakapi/services/user.go:33.16,35.3 1 0 -github.com/muety/wakapi/services/user.go:41.72,42.37 1 0 -github.com/muety/wakapi/services/user.go:46.2,47.16 2 0 -github.com/muety/wakapi/services/user.go:51.2,52.15 2 0 -github.com/muety/wakapi/services/user.go:42.37,44.3 1 0 -github.com/muety/wakapi/services/user.go:47.16,49.3 1 0 -github.com/muety/wakapi/services/user.go:55.76,57.2 1 0 -github.com/muety/wakapi/services/user.go:59.86,61.2 1 0 -github.com/muety/wakapi/services/user.go:63.58,65.2 1 0 -github.com/muety/wakapi/services/user.go:67.86,69.2 1 0 -github.com/muety/wakapi/services/user.go:71.61,74.2 2 0 -github.com/muety/wakapi/services/user.go:76.48,78.2 1 0 -github.com/muety/wakapi/services/user.go:80.102,90.93 2 0 -github.com/muety/wakapi/services/user.go:96.2,96.38 1 0 -github.com/muety/wakapi/services/user.go:90.93,92.3 1 0 -github.com/muety/wakapi/services/user.go:92.8,94.3 1 0 -github.com/muety/wakapi/services/user.go:99.73,102.2 2 0 -github.com/muety/wakapi/services/user.go:104.78,108.2 3 0 -github.com/muety/wakapi/services/user.go:110.99,113.2 2 0 -github.com/muety/wakapi/services/user.go:115.106,118.96 3 0 -github.com/muety/wakapi/services/user.go:123.2,123.68 1 0 -github.com/muety/wakapi/services/user.go:118.96,120.3 1 0 -github.com/muety/wakapi/services/user.go:120.8,122.3 1 0 -github.com/muety/wakapi/services/user.go:126.85,128.2 1 0 -github.com/muety/wakapi/services/user.go:130.57,133.2 2 0 -github.com/muety/wakapi/services/user.go:135.38,137.2 1 0 -github.com/muety/wakapi/services/aggregation.go:29.142,37.2 1 0 -github.com/muety/wakapi/services/aggregation.go:46.43,48.37 1 0 -github.com/muety/wakapi/services/aggregation.go:52.2,54.19 3 0 -github.com/muety/wakapi/services/aggregation.go:48.37,50.3 1 0 -github.com/muety/wakapi/services/aggregation.go:57.67,58.47 1 0 -github.com/muety/wakapi/services/aggregation.go:61.2,66.40 4 0 -github.com/muety/wakapi/services/aggregation.go:70.2,70.50 1 0 -github.com/muety/wakapi/services/aggregation.go:75.2,75.60 1 0 -github.com/muety/wakapi/services/aggregation.go:81.2,81.35 1 0 -github.com/muety/wakapi/services/aggregation.go:58.47,60.3 1 0 -github.com/muety/wakapi/services/aggregation.go:66.40,68.3 1 0 -github.com/muety/wakapi/services/aggregation.go:70.50,72.3 1 0 -github.com/muety/wakapi/services/aggregation.go:75.60,79.3 3 0 -github.com/muety/wakapi/services/aggregation.go:84.109,85.24 1 0 -github.com/muety/wakapi/services/aggregation.go:85.24,86.111 1 0 -github.com/muety/wakapi/services/aggregation.go:86.111,88.4 1 0 -github.com/muety/wakapi/services/aggregation.go:88.9,91.4 2 0 -github.com/muety/wakapi/services/aggregation.go:95.80,96.33 1 0 -github.com/muety/wakapi/services/aggregation.go:96.33,97.60 1 0 -github.com/muety/wakapi/services/aggregation.go:97.60,99.4 1 0 -github.com/muety/wakapi/services/aggregation.go:103.100,107.59 3 0 -github.com/muety/wakapi/services/aggregation.go:122.2,123.16 2 0 -github.com/muety/wakapi/services/aggregation.go:129.2,130.16 2 0 -github.com/muety/wakapi/services/aggregation.go:136.2,137.44 2 0 -github.com/muety/wakapi/services/aggregation.go:142.2,142.41 1 0 -github.com/muety/wakapi/services/aggregation.go:156.2,156.12 1 0 -github.com/muety/wakapi/services/aggregation.go:107.59,110.3 2 0 -github.com/muety/wakapi/services/aggregation.go:110.8,110.47 1 0 -github.com/muety/wakapi/services/aggregation.go:110.47,112.30 2 0 -github.com/muety/wakapi/services/aggregation.go:112.30,113.43 1 0 -github.com/muety/wakapi/services/aggregation.go:113.43,115.5 1 0 -github.com/muety/wakapi/services/aggregation.go:117.8,119.3 1 0 -github.com/muety/wakapi/services/aggregation.go:123.16,126.3 2 0 -github.com/muety/wakapi/services/aggregation.go:130.16,133.3 2 0 -github.com/muety/wakapi/services/aggregation.go:137.44,139.3 1 0 -github.com/muety/wakapi/services/aggregation.go:142.41,143.21 1 0 -github.com/muety/wakapi/services/aggregation.go:143.21,147.4 1 0 -github.com/muety/wakapi/services/aggregation.go:147.9,147.62 1 0 -github.com/muety/wakapi/services/aggregation.go:147.62,151.4 1 0 -github.com/muety/wakapi/services/aggregation.go:159.73,162.27 3 0 -github.com/muety/wakapi/services/aggregation.go:167.2,167.27 1 0 -github.com/muety/wakapi/services/aggregation.go:170.2,170.12 1 0 -github.com/muety/wakapi/services/aggregation.go:162.27,163.39 1 0 -github.com/muety/wakapi/services/aggregation.go:163.39,165.4 1 0 -github.com/muety/wakapi/services/aggregation.go:167.27,169.3 1 0 -github.com/muety/wakapi/services/aggregation.go:173.69,176.27 3 0 -github.com/muety/wakapi/services/aggregation.go:176.27,178.3 1 0 -github.com/muety/wakapi/services/aggregation.go:181.83,196.41 5 0 -github.com/muety/wakapi/services/aggregation.go:196.41,206.3 3 0 -github.com/muety/wakapi/services/aggregation.go:209.34,212.2 2 0 -github.com/muety/wakapi/services/alias.go:17.77,22.2 1 1 -github.com/muety/wakapi/services/alias.go:26.60,27.43 1 1 -github.com/muety/wakapi/services/alias.go:30.2,30.14 1 1 -github.com/muety/wakapi/services/alias.go:27.43,29.3 1 1 -github.com/muety/wakapi/services/alias.go:33.62,35.16 2 1 -github.com/muety/wakapi/services/alias.go:38.2,38.12 1 1 -github.com/muety/wakapi/services/alias.go:35.16,37.3 1 1 -github.com/muety/wakapi/services/alias.go:41.76,43.16 2 0 -github.com/muety/wakapi/services/alias.go:46.2,46.21 1 0 -github.com/muety/wakapi/services/alias.go:43.16,45.3 1 0 -github.com/muety/wakapi/services/alias.go:49.113,51.16 2 0 -github.com/muety/wakapi/services/alias.go:54.2,54.21 1 0 -github.com/muety/wakapi/services/alias.go:51.16,53.3 1 0 -github.com/muety/wakapi/services/alias.go:57.108,58.32 1 1 -github.com/muety/wakapi/services/alias.go:64.2,65.46 2 1 -github.com/muety/wakapi/services/alias.go:70.2,70.19 1 1 -github.com/muety/wakapi/services/alias.go:58.32,59.52 1 1 -github.com/muety/wakapi/services/alias.go:59.52,61.4 1 1 -github.com/muety/wakapi/services/alias.go:65.46,66.48 1 1 -github.com/muety/wakapi/services/alias.go:66.48,68.4 1 1 -github.com/muety/wakapi/services/alias.go:73.77,75.16 2 0 -github.com/muety/wakapi/services/alias.go:78.2,79.20 2 0 -github.com/muety/wakapi/services/alias.go:75.16,77.3 1 0 -github.com/muety/wakapi/services/alias.go:82.60,83.24 1 0 -github.com/muety/wakapi/services/alias.go:86.2,88.12 3 0 -github.com/muety/wakapi/services/alias.go:83.24,85.3 1 0 -github.com/muety/wakapi/services/alias.go:91.69,94.28 3 0 -github.com/muety/wakapi/services/alias.go:102.2,104.31 2 0 -github.com/muety/wakapi/services/alias.go:108.2,108.12 1 0 -github.com/muety/wakapi/services/alias.go:94.28,95.21 1 0 -github.com/muety/wakapi/services/alias.go:98.3,99.16 2 0 -github.com/muety/wakapi/services/alias.go:95.21,97.4 1 0 -github.com/muety/wakapi/services/alias.go:104.31,106.3 1 0 -github.com/muety/wakapi/services/alias.go:111.52,112.51 1 0 -github.com/muety/wakapi/services/alias.go:112.51,114.3 1 0 -github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 -github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 -github.com/muety/wakapi/services/key_value.go:25.78,27.16 2 0 -github.com/muety/wakapi/services/key_value.go:33.2,33.11 1 0 -github.com/muety/wakapi/services/key_value.go:27.16,32.3 1 0 -github.com/muety/wakapi/services/key_value.go:36.72,38.2 1 0 -github.com/muety/wakapi/services/key_value.go:40.60,42.2 1 0 -github.com/muety/wakapi/services/misc.go:23.126,30.2 1 0 -github.com/muety/wakapi/services/misc.go:42.50,44.48 1 0 -github.com/muety/wakapi/services/misc.go:48.2,50.19 3 0 -github.com/muety/wakapi/services/misc.go:44.48,46.3 1 0 -github.com/muety/wakapi/services/misc.go:53.51,59.40 4 0 -github.com/muety/wakapi/services/misc.go:63.2,66.56 2 0 -github.com/muety/wakapi/services/misc.go:77.2,77.12 1 0 -github.com/muety/wakapi/services/misc.go:59.40,61.3 1 0 -github.com/muety/wakapi/services/misc.go:66.56,67.27 1 0 -github.com/muety/wakapi/services/misc.go:67.27,72.4 1 0 -github.com/muety/wakapi/services/misc.go:73.8,75.3 1 0 -github.com/muety/wakapi/services/misc.go:80.116,81.24 1 0 -github.com/muety/wakapi/services/misc.go:81.24,82.151 1 0 -github.com/muety/wakapi/services/misc.go:91.3,91.48 1 0 -github.com/muety/wakapi/services/misc.go:82.151,84.4 1 0 -github.com/muety/wakapi/services/misc.go:84.9,90.4 2 0 -github.com/muety/wakapi/services/misc.go:91.48,94.4 2 0 -github.com/muety/wakapi/services/misc.go:98.86,101.30 3 0 -github.com/muety/wakapi/services/misc.go:106.2,109.17 1 0 -github.com/muety/wakapi/services/misc.go:113.2,116.17 1 0 -github.com/muety/wakapi/services/misc.go:101.30,104.3 2 0 -github.com/muety/wakapi/services/misc.go:109.17,111.3 1 0 -github.com/muety/wakapi/services/misc.go:116.17,118.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:17.141,23.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:25.72,27.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:29.80,34.32 3 0 -github.com/muety/wakapi/services/heartbeat.go:41.2,41.55 1 0 -github.com/muety/wakapi/services/heartbeat.go:34.32,35.36 1 0 -github.com/muety/wakapi/services/heartbeat.go:35.36,38.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:44.53,46.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:48.76,50.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:52.96,54.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:56.111,58.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:61.2,61.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:58.16,60.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:64.92,66.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:68.116,70.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:72.78,74.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:76.62,78.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:80.116,82.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:86.2,86.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:90.2,90.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:82.16,84.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:86.28,88.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:18.118,24.2 1 0 -github.com/muety/wakapi/services/language_mapping.go:26.86,28.2 1 0 -github.com/muety/wakapi/services/language_mapping.go:30.96,31.53 1 0 -github.com/muety/wakapi/services/language_mapping.go:35.2,36.16 2 0 -github.com/muety/wakapi/services/language_mapping.go:39.2,40.22 2 0 -github.com/muety/wakapi/services/language_mapping.go:31.53,33.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:36.16,38.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:43.92,46.16 3 0 -github.com/muety/wakapi/services/language_mapping.go:50.2,50.33 1 0 -github.com/muety/wakapi/services/language_mapping.go:53.2,53.22 1 0 -github.com/muety/wakapi/services/language_mapping.go:46.16,48.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:50.33,52.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:56.109,58.16 2 0 -github.com/muety/wakapi/services/language_mapping.go:62.2,63.20 2 0 -github.com/muety/wakapi/services/language_mapping.go:58.16,60.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:66.82,67.26 1 0 -github.com/muety/wakapi/services/language_mapping.go:70.2,72.12 3 0 -github.com/muety/wakapi/services/language_mapping.go:67.26,69.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:75.74,78.2 1 0 diff --git a/go.mod b/go.mod index 717337f..869b3d5 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/gorilla/schema v1.1.0 github.com/gorilla/securecookie v1.1.1 github.com/jinzhu/configor v1.2.0 + github.com/leandro-lugaresi/hub v1.1.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect github.com/mitchellh/hashstructure/v2 v2.0.1 diff --git a/go.sum b/go.sum index 5e4b7dc..aaa5f3a 100644 --- a/go.sum +++ b/go.sum @@ -191,6 +191,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leandro-lugaresi/hub v1.1.1 h1:zqp0HzFvj4HtqjMBXM2QF17o6PNmR8MJOChgeKl/aw8= +github.com/leandro-lugaresi/hub v1.1.1/go.mod h1:XEFWanhHv6Rt3XlteHMxuNDYi8dJcpJjodpqkU+BtIo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= diff --git a/models/user.go b/models/user.go index 32c9dbc..79ecc9e 100644 --- a/models/user.go +++ b/models/user.go @@ -60,8 +60,9 @@ type CredentialsReset struct { } type UserDataUpdate struct { - Email string `schema:"email"` - Location string `schema:"location"` + Email string `schema:"email"` + Location string `schema:"location"` + ReportsWeekly bool `schema:"reports_weekly"` } type TimeByUser struct { diff --git a/routes/routes.go b/routes/routes.go index dcd1e79..f425b0e 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -27,6 +27,7 @@ func DefaultTemplateFuncs() template.FuncMap { return template.FuncMap{ "json": utils.Json, "date": utils.FormatDateHuman, + "datetime": utils.FormatDateTimeHuman, "simpledate": utils.FormatDate, "simpledatetime": utils.FormatDateTime, "duration": utils.FmtWakatimeDuration, diff --git a/routes/settings.go b/routes/settings.go index 0a3eac7..f98d938 100644 --- a/routes/settings.go +++ b/routes/settings.go @@ -167,6 +167,7 @@ func (h *SettingsHandler) actionUpdateUser(w http.ResponseWriter, r *http.Reques user.Email = payload.Email user.Location = payload.Location + user.ReportsWeekly = payload.ReportsWeekly if _, err := h.userSrvc.Update(user); err != nil { return http.StatusInternalServerError, "", conf.ErrInternalServerError diff --git a/services/mail/mail.go b/services/mail/mail.go index b5b19bd..c27e854 100644 --- a/services/mail/mail.go +++ b/services/mail/mail.go @@ -6,6 +6,7 @@ import ( "github.com/muety/wakapi/models" "github.com/muety/wakapi/routes" "github.com/muety/wakapi/services" + "github.com/muety/wakapi/utils" "html/template" "io/ioutil" "time" @@ -18,9 +19,9 @@ const ( tplNamePasswordReset = "reset_password" tplNameImportNotification = "import_finished" tplNameReport = "report" - subjectPasswordReset = "Wakapi – Password Reset" - subjectImportNotification = "Wakapi – Data Import Finished" - subjectReport = "Wakapi – Your Latest Report" + subjectPasswordReset = "Wakapi - Password Reset" + subjectImportNotification = "Wakapi - Data Import Finished" + subjectReport = "Wakapi - Report from %s" ) type SendingService interface { @@ -89,7 +90,7 @@ func (m *MailService) SendReport(recipient *models.User, report *models.Report) mail := &models.Mail{ From: models.MailAddress(m.config.Mail.Sender), To: models.MailAddresses([]models.MailAddress{models.MailAddress(recipient.Email)}), - Subject: subjectReport, + Subject: fmt.Sprintf(subjectReport, utils.FormatDateHuman(time.Now().In(recipient.TZ()))), } mail.WithHTML(tpl.String()) return m.sendingService.Send(mail) diff --git a/services/report.go b/services/report.go index ba7479b..f5d140c 100644 --- a/services/report.go +++ b/services/report.go @@ -3,6 +3,7 @@ package services import ( "github.com/emvi/logbuch" "github.com/go-co-op/gocron" + "github.com/leandro-lugaresi/hub" "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" "sync" @@ -13,6 +14,7 @@ var reportLock = sync.Mutex{} type ReportService struct { config *config.Config + eventBus *hub.Hub summaryService ISummaryService userService IUserService mailService IMailService @@ -20,13 +22,23 @@ type ReportService struct { } func NewReportService(summaryService ISummaryService, userService IUserService, mailService IMailService) *ReportService { - return &ReportService{ + srv := &ReportService{ config: config.Get(), + eventBus: config.EventBus(), summaryService: summaryService, userService: userService, mailService: mailService, schedulersWeekly: map[string]*gocron.Scheduler{}, } + + sub := srv.eventBus.Subscribe(0, config.EventUserUpdate) + go func(sub *hub.Subscription) { + for m := range sub.Receiver { + srv.SyncSchedule(m.Fields[config.FieldPayload].(*models.User)) + } + }(&sub) + + return srv } func (srv *ReportService) Schedule() { @@ -39,11 +51,13 @@ func (srv *ReportService) Schedule() { logbuch.Info("scheduling reports for %d users", len(users)) for _, u := range users { - srv.UpdateUserSchedule(u) + srv.SyncSchedule(u) } } -func (srv *ReportService) UpdateUserSchedule(u *models.User) { +// SyncSchedule syncs the currently active schedulers with the user's wish about whether or not to receive reports. +// Returns whether a scheduler is active after this operation has run. +func (srv *ReportService) SyncSchedule(u *models.User) bool { reportLock.Lock() defer reportLock.Unlock() @@ -52,7 +66,7 @@ func (srv *ReportService) UpdateUserSchedule(u *models.User) { s.Stop() s.Clear() delete(srv.schedulersWeekly, u.ID) - return + return false } // schedule @@ -67,9 +81,20 @@ func (srv *ReportService) UpdateUserSchedule(u *models.User) { s.StartAsync() srv.schedulersWeekly[u.ID] = s } + + return u.ReportsWeekly } func (srv *ReportService) Run(user *models.User, duration time.Duration) error { + if user.Email == "" { + logbuch.Warn("not generating report for '%s' as no e-mail address is set") + } + + if !srv.SyncSchedule(user) { + logbuch.Info("reports for user '%s' were turned off in the meanwhile since last report job ran") + return nil + } + end := time.Now().In(user.TZ()) start := time.Now().Add(-1 * duration) diff --git a/services/services.go b/services/services.go index 8ed920d..6b3f9fe 100644 --- a/services/services.go +++ b/services/services.go @@ -70,7 +70,7 @@ type ISummaryService interface { type IReportService interface { Schedule() - UpdateUserSchedule(user *models.User) + SyncSchedule(user *models.User) bool Run(*models.User, time.Duration) error } diff --git a/services/user.go b/services/user.go index 69a21fc..575378b 100644 --- a/services/user.go +++ b/services/user.go @@ -1,6 +1,7 @@ package services import ( + "github.com/leandro-lugaresi/hub" "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" "github.com/muety/wakapi/repositories" @@ -11,16 +12,18 @@ import ( ) type UserService struct { - Config *config.Config + config *config.Config cache *cache.Cache + eventBus *hub.Hub repository repositories.IUserRepository } func NewUserService(userRepo repositories.IUserRepository) *UserService { return &UserService{ - Config: config.Get(), - repository: userRepo, + config: config.Get(), + eventBus: config.EventBus(), cache: cache.New(1*time.Hour, 2*time.Hour), + repository: userRepo, } } @@ -69,7 +72,7 @@ func (srv *UserService) GetAllByReports(reportsEnabled bool) ([]*models.User, er } func (srv *UserService) GetActive() ([]*models.User, error) { - minDate := time.Now().Add(-24 * time.Hour * time.Duration(srv.Config.App.InactiveDays)) + minDate := time.Now().Add(-24 * time.Hour * time.Duration(srv.config.App.InactiveDays)) return srv.repository.GetByLastActiveAfter(minDate) } @@ -87,7 +90,7 @@ func (srv *UserService) CreateOrGet(signup *models.Signup, isAdmin bool) (*model IsAdmin: isAdmin, } - if hash, err := utils.HashBcrypt(u.Password, srv.Config.Security.PasswordSalt); err != nil { + if hash, err := utils.HashBcrypt(u.Password, srv.config.Security.PasswordSalt); err != nil { return nil, false, err } else { u.Password = hash @@ -98,6 +101,7 @@ func (srv *UserService) CreateOrGet(signup *models.Signup, isAdmin bool) (*model func (srv *UserService) Update(user *models.User) (*models.User, error) { srv.cache.Flush() + srv.notifyUpdate(user) return srv.repository.Update(user) } @@ -115,7 +119,7 @@ func (srv *UserService) SetWakatimeApiKey(user *models.User, apiKey string) (*mo func (srv *UserService) MigrateMd5Password(user *models.User, login *models.Login) (*models.User, error) { srv.cache.Flush() user.Password = login.Password - if hash, err := utils.HashBcrypt(user.Password, srv.Config.Security.PasswordSalt); err != nil { + if hash, err := utils.HashBcrypt(user.Password, srv.config.Security.PasswordSalt); err != nil { return nil, err } else { user.Password = hash @@ -129,9 +133,20 @@ func (srv *UserService) GenerateResetToken(user *models.User) (*models.User, err func (srv *UserService) Delete(user *models.User) error { srv.cache.Flush() + + user.ReportsWeekly = false + srv.notifyUpdate(user) + return srv.repository.Delete(user) } func (srv *UserService) FlushCache() { srv.cache.Flush() } + +func (srv *UserService) notifyUpdate(user *models.User) { + srv.eventBus.Publish(hub.Message{ + Name: config.EventUserUpdate, + Fields: map[string]interface{}{config.FieldPayload: user}, + }) +} diff --git a/utils/common.go b/utils/common.go index 94d3a82..0bd392f 100644 --- a/utils/common.go +++ b/utils/common.go @@ -33,10 +33,14 @@ func FormatDateTime(date time.Time) string { return date.Format(config.SimpleDateTimeFormat) } -func FormatDateHuman(date time.Time) string { +func FormatDateTimeHuman(date time.Time) string { return date.Format("Mon, 02 Jan 2006 15:04") } +func FormatDateHuman(date time.Time) string { + return date.Format("Mon, 02 Jan 2006") +} + func Add(i, j int) int { return i + j } diff --git a/views/mail/report.tpl.html b/views/mail/report.tpl.html index b8c5645..60b4dac 100644 --- a/views/mail/report.tpl.html +++ b/views/mail/report.tpl.html @@ -110,8 +110,8 @@
-

Your Stats from {{ .Report.From | simpledate }} to {{ .Report.To | simpledate }}

-

You have coded a total of {{ .Report.Summary.TotalTime | duration }} between {{ .Report.From | simpledate }} and {{ .Report.To | simpledate }}.

+

Your Stats from {{ .Report.From | date }} to {{ .Report.To | date }}

+

You have coded a total of {{ .Report.Summary.TotalTime | duration }} between {{ .Report.From | date }} and {{ .Report.To | date }}.

Projects

diff --git a/views/settings.tpl.html b/views/settings.tpl.html index 4f5eb80..c208791 100644 --- a/views/settings.tpl.html +++ b/views/settings.tpl.html @@ -46,19 +46,34 @@
- +
+
- +
-
E-Mail address is optional, but required for some features + + {{ if .User.Email }} +
+ Weekly E-Mail Reports +
+ +
+
+ {{ end }} + +
E-Mail address is optional, but required for some features that you cannot use else. Also, if you do not add an e-mail address, you will not be able to reset your password in case you forget it.
diff --git a/views/summary.tpl.html b/views/summary.tpl.html index 993cfe5..e5c3370 100644 --- a/views/summary.tpl.html +++ b/views/summary.tpl.html @@ -85,7 +85,7 @@ ️  Showing a total of - (from {{ .FromTime.T | date }} to {{ .ToTime.T | date }}) + (from {{ .FromTime.T | datetime }} to {{ .ToTime.T | datetime }})