From 2088987a0c8a44fc9665af4b918410977347b19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sat, 7 Aug 2021 10:16:50 +0200 Subject: [PATCH] chore: implement diagnostics endpoint (resolve #225) --- config/config.go | 4 + coverage/coverage.out | 1076 +++++++++++++++++----------------- main.go | 6 + models/diagnostics.go | 13 + repositories/diagnostics.go | 18 + repositories/repositories.go | 4 + routes/api/diagnostics.go | 71 +++ routes/api/heartbeat.go | 1 + services/diagnostics.go | 23 + services/services.go | 4 + static/docs/docs.go | 60 ++ static/docs/swagger.json | 60 ++ static/docs/swagger.yaml | 39 ++ 13 files changed, 843 insertions(+), 536 deletions(-) create mode 100644 models/diagnostics.go create mode 100644 repositories/diagnostics.go create mode 100644 routes/api/diagnostics.go create mode 100644 services/diagnostics.go diff --git a/config/config.go b/config/config.go index eece686..35cda95 100644 --- a/config/config.go +++ b/config/config.go @@ -33,6 +33,7 @@ const ( SimpleDateTimeFormat = "2006-01-02 15:04:05" ErrUnauthorized = "401 unauthorized" + ErrBadRequest = "400 bad request" ErrInternalServerError = "500 internal server error" ) @@ -203,6 +204,9 @@ func (c *Config) GetMigrationFunc(dbDialect string) models.MigrationFunc { if err := db.AutoMigrate(&models.ProjectLabel{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } + if err := db.AutoMigrate(&models.Diagnostics{}); err != nil && !c.Db.AutoMigrateFailSilently { + return err + } return nil } } diff --git a/coverage/coverage.out b/coverage/coverage.out index ba5a2c9..28b4fa2 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,21 +1,47 @@ 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/filters.go:17.56,18.16 1 0 +github.com/muety/wakapi/models/filters.go:32.2,32.19 1 0 +github.com/muety/wakapi/models/filters.go:19.22,20.32 1 0 +github.com/muety/wakapi/models/filters.go:21.17,22.27 1 0 +github.com/muety/wakapi/models/filters.go:23.23,24.33 1 0 +github.com/muety/wakapi/models/filters.go:25.21,26.31 1 0 +github.com/muety/wakapi/models/filters.go:27.22,28.32 1 0 +github.com/muety/wakapi/models/filters.go:29.20,30.30 1 0 +github.com/muety/wakapi/models/filters.go:35.47,36.21 1 1 +github.com/muety/wakapi/models/filters.go:49.2,49.21 1 1 +github.com/muety/wakapi/models/filters.go:36.21,38.3 1 1 +github.com/muety/wakapi/models/filters.go:38.8,38.23 1 1 +github.com/muety/wakapi/models/filters.go:38.23,40.3 1 0 +github.com/muety/wakapi/models/filters.go:40.8,40.29 1 1 +github.com/muety/wakapi/models/filters.go:40.29,42.3 1 1 +github.com/muety/wakapi/models/filters.go:42.8,42.27 1 1 +github.com/muety/wakapi/models/filters.go:42.27,44.3 1 0 +github.com/muety/wakapi/models/filters.go:44.8,44.28 1 1 +github.com/muety/wakapi/models/filters.go:44.28,46.3 1 0 +github.com/muety/wakapi/models/filters.go:46.8,46.26 1 1 +github.com/muety/wakapi/models/filters.go:46.26,48.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/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 +github.com/muety/wakapi/models/mail_address.go:36.2,36.11 1 1 +github.com/muety/wakapi/models/mail_address.go:30.21,31.21 1 1 +github.com/muety/wakapi/models/mail_address.go:34.3,34.18 1 1 +github.com/muety/wakapi/models/mail_address.go:31.21,33.4 1 1 +github.com/muety/wakapi/models/mail_address.go:39.35,41.2 1 1 +github.com/muety/wakapi/models/mail_address.go:43.43,45.22 2 0 +github.com/muety/wakapi/models/mail_address.go:48.2,48.12 1 0 +github.com/muety/wakapi/models/mail_address.go:45.22,47.3 1 0 +github.com/muety/wakapi/models/mail_address.go:51.46,53.22 2 1 +github.com/muety/wakapi/models/mail_address.go:56.2,56.12 1 1 +github.com/muety/wakapi/models/mail_address.go:53.22,55.3 1 1 +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/project_label.go:11.39,13.2 1 0 github.com/muety/wakapi/models/summary.go:74.29,76.2 1 1 github.com/muety/wakapi/models/summary.go:78.35,80.2 1 0 @@ -83,6 +109,18 @@ github.com/muety/wakapi/models/summary.go:287.50,291.2 1 1 github.com/muety/wakapi/models/summary.go:293.33,295.2 1 1 github.com/muety/wakapi/models/summary.go:297.43,299.2 1 1 github.com/muety/wakapi/models/summary.go:301.38,303.2 1 1 +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/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/user.go:8.13,10.2 1 1 github.com/muety/wakapi/models/user.go:79.36,80.22 1 1 github.com/muety/wakapi/models/user.go:83.2,84.16 2 1 @@ -98,24 +136,6 @@ github.com/muety/wakapi/models/user.go:116.45,118.2 1 0 github.com/muety/wakapi/models/user.go:120.45,122.2 1 0 github.com/muety/wakapi/models/user.go:124.39,126.2 1 0 github.com/muety/wakapi/models/user.go:128.39,131.2 2 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 -github.com/muety/wakapi/models/mail_address.go:36.2,36.11 1 1 -github.com/muety/wakapi/models/mail_address.go:30.21,31.21 1 1 -github.com/muety/wakapi/models/mail_address.go:34.3,34.18 1 1 -github.com/muety/wakapi/models/mail_address.go:31.21,33.4 1 1 -github.com/muety/wakapi/models/mail_address.go:39.35,41.2 1 1 -github.com/muety/wakapi/models/mail_address.go:43.43,45.22 2 0 -github.com/muety/wakapi/models/mail_address.go:48.2,48.12 1 0 -github.com/muety/wakapi/models/mail_address.go:45.22,47.3 1 0 -github.com/muety/wakapi/models/mail_address.go:51.46,53.22 2 1 -github.com/muety/wakapi/models/mail_address.go:56.2,56.12 1 1 -github.com/muety/wakapi/models/mail_address.go:53.22,55.3 1 1 -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/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 @@ -131,35 +151,23 @@ 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/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/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:17.56,18.16 1 0 -github.com/muety/wakapi/models/filters.go:32.2,32.19 1 0 -github.com/muety/wakapi/models/filters.go:19.22,20.32 1 0 -github.com/muety/wakapi/models/filters.go:21.17,22.27 1 0 -github.com/muety/wakapi/models/filters.go:23.23,24.33 1 0 -github.com/muety/wakapi/models/filters.go:25.21,26.31 1 0 -github.com/muety/wakapi/models/filters.go:27.22,28.32 1 0 -github.com/muety/wakapi/models/filters.go:29.20,30.30 1 0 -github.com/muety/wakapi/models/filters.go:35.47,36.21 1 1 -github.com/muety/wakapi/models/filters.go:49.2,49.21 1 1 -github.com/muety/wakapi/models/filters.go:36.21,38.3 1 1 -github.com/muety/wakapi/models/filters.go:38.8,38.23 1 1 -github.com/muety/wakapi/models/filters.go:38.23,40.3 1 0 -github.com/muety/wakapi/models/filters.go:40.8,40.29 1 1 -github.com/muety/wakapi/models/filters.go:40.29,42.3 1 1 -github.com/muety/wakapi/models/filters.go:42.8,42.27 1 1 -github.com/muety/wakapi/models/filters.go:42.27,44.3 1 0 -github.com/muety/wakapi/models/filters.go:44.8,44.28 1 1 -github.com/muety/wakapi/models/filters.go:44.28,46.3 1 0 -github.com/muety/wakapi/models/filters.go:46.8,46.26 1 1 -github.com/muety/wakapi/models/filters.go:46.26,48.3 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/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 @@ -170,15 +178,310 @@ 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/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/models.go:3.14,5.2 0 1 +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:151.70,153.2 1 0 +github.com/muety/wakapi/config/config.go:155.65,157.2 1 0 +github.com/muety/wakapi/config/config.go:159.82,169.2 1 0 +github.com/muety/wakapi/config/config.go:171.31,173.2 1 0 +github.com/muety/wakapi/config/config.go:175.32,177.2 1 0 +github.com/muety/wakapi/config/config.go:179.74,180.19 1 0 +github.com/muety/wakapi/config/config.go:181.10,182.34 1 0 +github.com/muety/wakapi/config/config.go:182.34,183.90 1 0 +github.com/muety/wakapi/config/config.go:186.4,186.100 1 0 +github.com/muety/wakapi/config/config.go:189.4,189.91 1 0 +github.com/muety/wakapi/config/config.go:192.4,192.95 1 0 +github.com/muety/wakapi/config/config.go:195.4,195.93 1 0 +github.com/muety/wakapi/config/config.go:198.4,198.97 1 0 +github.com/muety/wakapi/config/config.go:201.4,201.101 1 0 +github.com/muety/wakapi/config/config.go:204.4,204.98 1 0 +github.com/muety/wakapi/config/config.go:207.4,207.97 1 0 +github.com/muety/wakapi/config/config.go:210.4,210.14 1 0 +github.com/muety/wakapi/config/config.go:183.90,185.5 1 0 +github.com/muety/wakapi/config/config.go:186.100,188.5 1 0 +github.com/muety/wakapi/config/config.go:189.91,191.5 1 0 +github.com/muety/wakapi/config/config.go:192.95,194.5 1 0 +github.com/muety/wakapi/config/config.go:195.93,197.5 1 0 +github.com/muety/wakapi/config/config.go:198.97,200.5 1 0 +github.com/muety/wakapi/config/config.go:201.101,203.5 1 0 +github.com/muety/wakapi/config/config.go:204.98,206.5 1 0 +github.com/muety/wakapi/config/config.go:207.97,209.5 1 0 +github.com/muety/wakapi/config/config.go:215.60,217.2 1 0 +github.com/muety/wakapi/config/config.go:219.59,221.2 1 0 +github.com/muety/wakapi/config/config.go:223.57,225.2 1 0 +github.com/muety/wakapi/config/config.go:227.53,229.2 1 0 +github.com/muety/wakapi/config/config.go:231.55,234.2 2 0 +github.com/muety/wakapi/config/config.go:236.50,238.2 1 0 +github.com/muety/wakapi/config/config.go:240.46,242.2 1 0 +github.com/muety/wakapi/config/config.go:244.43,246.2 1 0 +github.com/muety/wakapi/config/config.go:248.29,250.2 1 1 +github.com/muety/wakapi/config/config.go:252.48,263.16 2 0 +github.com/muety/wakapi/config/config.go:267.2,268.53 2 0 +github.com/muety/wakapi/config/config.go:272.2,272.15 1 0 +github.com/muety/wakapi/config/config.go:263.16,265.3 1 0 +github.com/muety/wakapi/config/config.go:268.53,270.3 1 0 +github.com/muety/wakapi/config/config.go:275.38,276.43 1 0 +github.com/muety/wakapi/config/config.go:279.2,279.15 1 0 +github.com/muety/wakapi/config/config.go:276.43,278.3 1 0 +github.com/muety/wakapi/config/config.go:282.45,283.27 1 0 +github.com/muety/wakapi/config/config.go:286.2,286.15 1 0 +github.com/muety/wakapi/config/config.go:283.27,285.3 1 0 +github.com/muety/wakapi/config/config.go:289.77,290.29 1 0 +github.com/muety/wakapi/config/config.go:295.2,295.19 1 0 +github.com/muety/wakapi/config/config.go:290.29,291.18 1 0 +github.com/muety/wakapi/config/config.go:291.18,293.4 1 0 +github.com/muety/wakapi/config/config.go:298.42,299.28 1 0 +github.com/muety/wakapi/config/config.go:315.2,315.20 1 0 +github.com/muety/wakapi/config/config.go:300.52,301.21 1 0 +github.com/muety/wakapi/config/config.go:302.53,303.22 1 0 +github.com/muety/wakapi/config/config.go:304.55,305.24 1 0 +github.com/muety/wakapi/config/config.go:306.54,307.23 1 0 +github.com/muety/wakapi/config/config.go:308.52,309.21 1 0 +github.com/muety/wakapi/config/config.go:310.54,311.23 1 0 +github.com/muety/wakapi/config/config.go:312.52,313.21 1 0 +github.com/muety/wakapi/config/config.go:318.26,320.2 1 0 +github.com/muety/wakapi/config/config.go:322.20,324.2 1 0 +github.com/muety/wakapi/config/config.go:326.35,331.96 3 0 +github.com/muety/wakapi/config/config.go:335.2,344.52 6 0 +github.com/muety/wakapi/config/config.go:348.2,348.47 1 0 +github.com/muety/wakapi/config/config.go:354.2,354.29 1 0 +github.com/muety/wakapi/config/config.go:360.2,360.106 1 0 +github.com/muety/wakapi/config/config.go:363.2,363.28 1 0 +github.com/muety/wakapi/config/config.go:366.2,366.94 1 0 +github.com/muety/wakapi/config/config.go:369.2,369.81 1 0 +github.com/muety/wakapi/config/config.go:372.2,372.75 1 0 +github.com/muety/wakapi/config/config.go:376.2,377.14 2 0 +github.com/muety/wakapi/config/config.go:331.96,333.3 1 0 +github.com/muety/wakapi/config/config.go:344.52,346.3 1 0 +github.com/muety/wakapi/config/config.go:348.47,349.14 1 0 +github.com/muety/wakapi/config/config.go:349.14,351.4 1 0 +github.com/muety/wakapi/config/config.go:354.29,357.3 2 0 +github.com/muety/wakapi/config/config.go:360.106,362.3 1 0 +github.com/muety/wakapi/config/config.go:363.28,365.3 1 0 +github.com/muety/wakapi/config/config.go:366.94,368.3 1 0 +github.com/muety/wakapi/config/config.go:369.81,371.3 1 0 +github.com/muety/wakapi/config/config.go:372.75,374.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:26.13,28.2 1 1 +github.com/muety/wakapi/config/eventbus.go:30.26,32.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/utils/set.go:3.51,5.26 2 0 +github.com/muety/wakapi/utils/set.go:8.2,8.12 1 0 +github.com/muety/wakapi/utils/set.go:5.26,7.3 1 0 +github.com/muety/wakapi/utils/set.go:11.49,13.21 2 0 +github.com/muety/wakapi/utils/set.go:16.2,16.14 1 0 +github.com/muety/wakapi/utils/set.go:13.21,15.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/collection.go:3.59,5.22 2 0 +github.com/muety/wakapi/utils/collection.go:8.2,8.15 1 0 +github.com/muety/wakapi/utils/collection.go:5.22,7.3 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/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/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.46,61.2 1 0 +github.com/muety/wakapi/utils/date.go:64.41,66.21 2 1 +github.com/muety/wakapi/utils/date.go:69.2,69.36 1 1 +github.com/muety/wakapi/utils/date.go:66.21,68.3 1 1 +github.com/muety/wakapi/utils/date.go:73.63,75.2 1 0 +github.com/muety/wakapi/utils/date.go:78.62,84.2 5 0 +github.com/muety/wakapi/utils/date.go:87.67,90.33 2 1 +github.com/muety/wakapi/utils/date.go:99.2,99.18 1 1 +github.com/muety/wakapi/utils/date.go:90.33,92.19 2 1 +github.com/muety/wakapi/utils/date.go:95.3,96.10 2 1 +github.com/muety/wakapi/utils/date.go:92.19,94.4 1 1 +github.com/muety/wakapi/utils/date.go:102.50,108.2 5 0 +github.com/muety/wakapi/utils/date.go:111.79,114.36 3 1 +github.com/muety/wakapi/utils/date.go:118.2,118.21 1 1 +github.com/muety/wakapi/utils/date.go:122.2,122.21 1 1 +github.com/muety/wakapi/utils/date.go:126.2,126.13 1 1 +github.com/muety/wakapi/utils/date.go:114.36,117.3 2 0 +github.com/muety/wakapi/utils/date.go:118.21,121.3 2 1 +github.com/muety/wakapi/utils/date.go:122.21,125.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/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,36.18 3 0 +github.com/muety/wakapi/utils/summary.go:71.2,71.22 1 0 +github.com/muety/wakapi/utils/summary.go:37.28,38.26 1 0 +github.com/muety/wakapi/utils/summary.go:39.32,41.24 2 0 +github.com/muety/wakapi/utils/summary.go:42.31,43.29 1 0 +github.com/muety/wakapi/utils/summary.go:44.31,46.27 2 0 +github.com/muety/wakapi/utils/summary.go:47.32,48.30 1 0 +github.com/muety/wakapi/utils/summary.go:49.32,51.28 2 0 +github.com/muety/wakapi/utils/summary.go:52.31,53.29 1 0 +github.com/muety/wakapi/utils/summary.go:54.32,55.31 1 0 +github.com/muety/wakapi/utils/summary.go:56.41,58.42 2 0 +github.com/muety/wakapi/utils/summary.go:59.33,60.32 1 0 +github.com/muety/wakapi/utils/summary.go:61.33,62.32 1 0 +github.com/muety/wakapi/utils/summary.go:63.35,64.32 1 0 +github.com/muety/wakapi/utils/summary.go:65.26,66.21 1 0 +github.com/muety/wakapi/utils/summary.go:67.10,68.39 1 0 +github.com/muety/wakapi/utils/summary.go:74.73,81.56 5 0 +github.com/muety/wakapi/utils/summary.go:97.2,104.8 2 0 +github.com/muety/wakapi/utils/summary.go:81.56,83.3 1 0 +github.com/muety/wakapi/utils/summary.go:83.8,83.54 1 0 +github.com/muety/wakapi/utils/summary.go:83.54,85.3 1 0 +github.com/muety/wakapi/utils/summary.go:85.8,87.17 2 0 +github.com/muety/wakapi/utils/summary.go:91.3,92.17 2 0 +github.com/muety/wakapi/utils/summary.go:87.17,89.4 1 0 +github.com/muety/wakapi/utils/summary.go:92.17,94.4 1 0 +github.com/muety/wakapi/utils/summary.go:107.48,111.51 2 0 +github.com/muety/wakapi/utils/summary.go:114.2,114.12 1 0 +github.com/muety/wakapi/utils/summary.go:111.51,113.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/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 +github.com/muety/wakapi/middlewares/authenticate.go:37.71,38.71 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:38.71,40.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:43.107,47.16 3 0 +github.com/muety/wakapi/middlewares/authenticate.go:51.2,51.31 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:67.2,68.12 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:47.16,49.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:51.31,52.31 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:57.3,57.29 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:64.3,64.9 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:52.31,55.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:57.29,60.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:60.9,63.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:71.70,72.39 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:77.2,77.14 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:72.39,73.60 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:73.60,75.4 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:80.92,82.16 2 1 +github.com/muety/wakapi/middlewares/authenticate.go:86.2,89.16 4 1 +github.com/muety/wakapi/middlewares/authenticate.go:92.2,92.18 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:82.16,84.3 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:89.16,91.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:95.92,97.16 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:101.2,102.16 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:109.2,109.18 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:97.16,99.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:102.16,104.3 1 0 +github.com/muety/wakapi/middlewares/filetype.go:13.83,14.43 1 0 +github.com/muety/wakapi/middlewares/filetype.go:14.43,19.3 1 0 +github.com/muety/wakapi/middlewares/filetype.go:22.84,24.34 2 0 +github.com/muety/wakapi/middlewares/filetype.go:31.2,31.27 1 0 +github.com/muety/wakapi/middlewares/filetype.go:24.34,25.50 1 0 +github.com/muety/wakapi/middlewares/filetype.go:25.50,29.4 3 0 github.com/muety/wakapi/middlewares/logging.go:20.102,21.43 1 0 github.com/muety/wakapi/middlewares/logging.go:21.43,27.3 1 0 github.com/muety/wakapi/middlewares/logging.go:30.80,39.44 7 0 @@ -227,328 +530,6 @@ 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 -github.com/muety/wakapi/middlewares/authenticate.go:37.71,38.71 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:38.71,40.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:43.107,47.16 3 0 -github.com/muety/wakapi/middlewares/authenticate.go:51.2,51.31 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:67.2,68.12 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:47.16,49.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:51.31,52.31 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:57.3,57.29 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:64.3,64.9 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:52.31,55.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:57.29,60.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:60.9,63.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:71.70,72.39 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:77.2,77.14 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:72.39,73.60 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:73.60,75.4 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:80.92,82.16 2 1 -github.com/muety/wakapi/middlewares/authenticate.go:86.2,89.16 4 1 -github.com/muety/wakapi/middlewares/authenticate.go:92.2,92.18 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:82.16,84.3 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:89.16,91.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:95.92,97.16 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:101.2,102.16 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:109.2,109.18 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:97.16,99.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:102.16,104.3 1 0 -github.com/muety/wakapi/middlewares/filetype.go:13.83,14.43 1 0 -github.com/muety/wakapi/middlewares/filetype.go:14.43,19.3 1 0 -github.com/muety/wakapi/middlewares/filetype.go:22.84,24.34 2 0 -github.com/muety/wakapi/middlewares/filetype.go:31.2,31.27 1 0 -github.com/muety/wakapi/middlewares/filetype.go:24.34,25.50 1 0 -github.com/muety/wakapi/middlewares/filetype.go:25.50,29.4 3 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:26.13,28.2 1 1 -github.com/muety/wakapi/config/eventbus.go:30.26,32.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:150.70,152.2 1 0 -github.com/muety/wakapi/config/config.go:154.65,156.2 1 0 -github.com/muety/wakapi/config/config.go:158.82,168.2 1 0 -github.com/muety/wakapi/config/config.go:170.31,172.2 1 0 -github.com/muety/wakapi/config/config.go:174.32,176.2 1 0 -github.com/muety/wakapi/config/config.go:178.74,179.19 1 0 -github.com/muety/wakapi/config/config.go:180.10,181.34 1 0 -github.com/muety/wakapi/config/config.go:181.34,182.90 1 0 -github.com/muety/wakapi/config/config.go:185.4,185.100 1 0 -github.com/muety/wakapi/config/config.go:188.4,188.91 1 0 -github.com/muety/wakapi/config/config.go:191.4,191.95 1 0 -github.com/muety/wakapi/config/config.go:194.4,194.93 1 0 -github.com/muety/wakapi/config/config.go:197.4,197.97 1 0 -github.com/muety/wakapi/config/config.go:200.4,200.101 1 0 -github.com/muety/wakapi/config/config.go:203.4,203.98 1 0 -github.com/muety/wakapi/config/config.go:206.4,206.14 1 0 -github.com/muety/wakapi/config/config.go:182.90,184.5 1 0 -github.com/muety/wakapi/config/config.go:185.100,187.5 1 0 -github.com/muety/wakapi/config/config.go:188.91,190.5 1 0 -github.com/muety/wakapi/config/config.go:191.95,193.5 1 0 -github.com/muety/wakapi/config/config.go:194.93,196.5 1 0 -github.com/muety/wakapi/config/config.go:197.97,199.5 1 0 -github.com/muety/wakapi/config/config.go:200.101,202.5 1 0 -github.com/muety/wakapi/config/config.go:203.98,205.5 1 0 -github.com/muety/wakapi/config/config.go:211.60,213.2 1 0 -github.com/muety/wakapi/config/config.go:215.59,217.2 1 0 -github.com/muety/wakapi/config/config.go:219.57,221.2 1 0 -github.com/muety/wakapi/config/config.go:223.53,225.2 1 0 -github.com/muety/wakapi/config/config.go:227.55,230.2 2 0 -github.com/muety/wakapi/config/config.go:232.50,234.2 1 0 -github.com/muety/wakapi/config/config.go:236.46,238.2 1 0 -github.com/muety/wakapi/config/config.go:240.43,242.2 1 0 -github.com/muety/wakapi/config/config.go:244.29,246.2 1 1 -github.com/muety/wakapi/config/config.go:248.48,259.16 2 0 -github.com/muety/wakapi/config/config.go:263.2,264.53 2 0 -github.com/muety/wakapi/config/config.go:268.2,268.15 1 0 -github.com/muety/wakapi/config/config.go:259.16,261.3 1 0 -github.com/muety/wakapi/config/config.go:264.53,266.3 1 0 -github.com/muety/wakapi/config/config.go:271.38,272.43 1 0 -github.com/muety/wakapi/config/config.go:275.2,275.15 1 0 -github.com/muety/wakapi/config/config.go:272.43,274.3 1 0 -github.com/muety/wakapi/config/config.go:278.45,279.27 1 0 -github.com/muety/wakapi/config/config.go:282.2,282.15 1 0 -github.com/muety/wakapi/config/config.go:279.27,281.3 1 0 -github.com/muety/wakapi/config/config.go:285.77,286.29 1 0 -github.com/muety/wakapi/config/config.go:291.2,291.19 1 0 -github.com/muety/wakapi/config/config.go:286.29,287.18 1 0 -github.com/muety/wakapi/config/config.go:287.18,289.4 1 0 -github.com/muety/wakapi/config/config.go:294.42,295.28 1 0 -github.com/muety/wakapi/config/config.go:311.2,311.20 1 0 -github.com/muety/wakapi/config/config.go:296.52,297.21 1 0 -github.com/muety/wakapi/config/config.go:298.53,299.22 1 0 -github.com/muety/wakapi/config/config.go:300.55,301.24 1 0 -github.com/muety/wakapi/config/config.go:302.54,303.23 1 0 -github.com/muety/wakapi/config/config.go:304.52,305.21 1 0 -github.com/muety/wakapi/config/config.go:306.54,307.23 1 0 -github.com/muety/wakapi/config/config.go:308.52,309.21 1 0 -github.com/muety/wakapi/config/config.go:314.26,316.2 1 0 -github.com/muety/wakapi/config/config.go:318.20,320.2 1 0 -github.com/muety/wakapi/config/config.go:322.35,327.96 3 0 -github.com/muety/wakapi/config/config.go:331.2,340.52 6 0 -github.com/muety/wakapi/config/config.go:344.2,344.47 1 0 -github.com/muety/wakapi/config/config.go:350.2,350.29 1 0 -github.com/muety/wakapi/config/config.go:356.2,356.106 1 0 -github.com/muety/wakapi/config/config.go:359.2,359.28 1 0 -github.com/muety/wakapi/config/config.go:362.2,362.94 1 0 -github.com/muety/wakapi/config/config.go:365.2,365.81 1 0 -github.com/muety/wakapi/config/config.go:368.2,368.75 1 0 -github.com/muety/wakapi/config/config.go:372.2,373.14 2 0 -github.com/muety/wakapi/config/config.go:327.96,329.3 1 0 -github.com/muety/wakapi/config/config.go:340.52,342.3 1 0 -github.com/muety/wakapi/config/config.go:344.47,345.14 1 0 -github.com/muety/wakapi/config/config.go:345.14,347.4 1 0 -github.com/muety/wakapi/config/config.go:350.29,353.3 2 0 -github.com/muety/wakapi/config/config.go:356.106,358.3 1 0 -github.com/muety/wakapi/config/config.go:359.28,361.3 1 0 -github.com/muety/wakapi/config/config.go:362.94,364.3 1 0 -github.com/muety/wakapi/config/config.go:365.81,367.3 1 0 -github.com/muety/wakapi/config/config.go:368.75,370.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.46,61.2 1 0 -github.com/muety/wakapi/utils/date.go:64.41,66.21 2 1 -github.com/muety/wakapi/utils/date.go:69.2,69.36 1 1 -github.com/muety/wakapi/utils/date.go:66.21,68.3 1 1 -github.com/muety/wakapi/utils/date.go:73.63,75.2 1 0 -github.com/muety/wakapi/utils/date.go:78.62,84.2 5 0 -github.com/muety/wakapi/utils/date.go:87.67,90.33 2 1 -github.com/muety/wakapi/utils/date.go:99.2,99.18 1 1 -github.com/muety/wakapi/utils/date.go:90.33,92.19 2 1 -github.com/muety/wakapi/utils/date.go:95.3,96.10 2 1 -github.com/muety/wakapi/utils/date.go:92.19,94.4 1 1 -github.com/muety/wakapi/utils/date.go:102.50,108.2 5 0 -github.com/muety/wakapi/utils/date.go:111.79,114.36 3 1 -github.com/muety/wakapi/utils/date.go:118.2,118.21 1 1 -github.com/muety/wakapi/utils/date.go:122.2,122.21 1 1 -github.com/muety/wakapi/utils/date.go:126.2,126.13 1 1 -github.com/muety/wakapi/utils/date.go:114.36,117.3 2 0 -github.com/muety/wakapi/utils/date.go:118.21,121.3 2 1 -github.com/muety/wakapi/utils/date.go:122.21,125.3 2 1 -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/set.go:3.51,5.26 2 0 -github.com/muety/wakapi/utils/set.go:8.2,8.12 1 0 -github.com/muety/wakapi/utils/set.go:5.26,7.3 1 0 -github.com/muety/wakapi/utils/set.go:11.49,13.21 2 0 -github.com/muety/wakapi/utils/set.go:16.2,16.14 1 0 -github.com/muety/wakapi/utils/set.go:13.21,15.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/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,36.18 3 0 -github.com/muety/wakapi/utils/summary.go:71.2,71.22 1 0 -github.com/muety/wakapi/utils/summary.go:37.28,38.26 1 0 -github.com/muety/wakapi/utils/summary.go:39.32,41.24 2 0 -github.com/muety/wakapi/utils/summary.go:42.31,43.29 1 0 -github.com/muety/wakapi/utils/summary.go:44.31,46.27 2 0 -github.com/muety/wakapi/utils/summary.go:47.32,48.30 1 0 -github.com/muety/wakapi/utils/summary.go:49.32,51.28 2 0 -github.com/muety/wakapi/utils/summary.go:52.31,53.29 1 0 -github.com/muety/wakapi/utils/summary.go:54.32,55.31 1 0 -github.com/muety/wakapi/utils/summary.go:56.41,58.42 2 0 -github.com/muety/wakapi/utils/summary.go:59.33,60.32 1 0 -github.com/muety/wakapi/utils/summary.go:61.33,62.32 1 0 -github.com/muety/wakapi/utils/summary.go:63.35,64.32 1 0 -github.com/muety/wakapi/utils/summary.go:65.26,66.21 1 0 -github.com/muety/wakapi/utils/summary.go:67.10,68.39 1 0 -github.com/muety/wakapi/utils/summary.go:74.73,81.56 5 0 -github.com/muety/wakapi/utils/summary.go:97.2,104.8 2 0 -github.com/muety/wakapi/utils/summary.go:81.56,83.3 1 0 -github.com/muety/wakapi/utils/summary.go:83.8,83.54 1 0 -github.com/muety/wakapi/utils/summary.go:83.54,85.3 1 0 -github.com/muety/wakapi/utils/summary.go:85.8,87.17 2 0 -github.com/muety/wakapi/utils/summary.go:91.3,92.17 2 0 -github.com/muety/wakapi/utils/summary.go:87.17,89.4 1 0 -github.com/muety/wakapi/utils/summary.go:92.17,94.4 1 0 -github.com/muety/wakapi/utils/summary.go:107.48,111.51 2 0 -github.com/muety/wakapi/utils/summary.go:114.2,114.12 1 0 -github.com/muety/wakapi/utils/summary.go:111.51,113.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/collection.go:3.59,5.22 2 0 -github.com/muety/wakapi/utils/collection.go:8.2,8.15 1 0 -github.com/muety/wakapi/utils/collection.go:5.22,7.3 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/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/services/misc.go:21.126,28.2 1 0 -github.com/muety/wakapi/services/misc.go:40.50,42.48 1 0 -github.com/muety/wakapi/services/misc.go:46.2,48.19 3 0 -github.com/muety/wakapi/services/misc.go:42.48,44.3 1 0 -github.com/muety/wakapi/services/misc.go:51.51,53.16 2 0 -github.com/muety/wakapi/services/misc.go:57.2,60.26 3 0 -github.com/muety/wakapi/services/misc.go:66.2,68.40 2 0 -github.com/muety/wakapi/services/misc.go:73.2,75.33 3 0 -github.com/muety/wakapi/services/misc.go:79.2,84.17 2 0 -github.com/muety/wakapi/services/misc.go:88.2,91.17 1 0 -github.com/muety/wakapi/services/misc.go:95.2,95.12 1 0 -github.com/muety/wakapi/services/misc.go:53.16,55.3 1 0 -github.com/muety/wakapi/services/misc.go:60.26,65.3 1 0 -github.com/muety/wakapi/services/misc.go:68.40,70.3 1 0 -github.com/muety/wakapi/services/misc.go:75.33,78.3 2 0 -github.com/muety/wakapi/services/misc.go:84.17,86.3 1 0 -github.com/muety/wakapi/services/misc.go:91.17,93.3 1 0 -github.com/muety/wakapi/services/misc.go:98.116,99.24 1 0 -github.com/muety/wakapi/services/misc.go:99.24,100.151 1 0 -github.com/muety/wakapi/services/misc.go:100.151,102.4 1 0 -github.com/muety/wakapi/services/misc.go:102.9,107.4 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 @@ -599,6 +580,43 @@ 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/diagnostics.go:14.101,19.2 1 0 +github.com/muety/wakapi/services/diagnostics.go:21.101,23.2 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 @@ -618,6 +636,134 @@ 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:21.126,28.2 1 0 +github.com/muety/wakapi/services/misc.go:40.50,42.48 1 0 +github.com/muety/wakapi/services/misc.go:46.2,48.19 3 0 +github.com/muety/wakapi/services/misc.go:42.48,44.3 1 0 +github.com/muety/wakapi/services/misc.go:51.51,53.16 2 0 +github.com/muety/wakapi/services/misc.go:57.2,60.26 3 0 +github.com/muety/wakapi/services/misc.go:66.2,68.40 2 0 +github.com/muety/wakapi/services/misc.go:73.2,75.33 3 0 +github.com/muety/wakapi/services/misc.go:79.2,84.17 2 0 +github.com/muety/wakapi/services/misc.go:88.2,91.17 1 0 +github.com/muety/wakapi/services/misc.go:95.2,95.12 1 0 +github.com/muety/wakapi/services/misc.go:53.16,55.3 1 0 +github.com/muety/wakapi/services/misc.go:60.26,65.3 1 0 +github.com/muety/wakapi/services/misc.go:68.40,70.3 1 0 +github.com/muety/wakapi/services/misc.go:75.33,78.3 2 0 +github.com/muety/wakapi/services/misc.go:84.17,86.3 1 0 +github.com/muety/wakapi/services/misc.go:91.17,93.3 1 0 +github.com/muety/wakapi/services/misc.go:98.116,99.24 1 0 +github.com/muety/wakapi/services/misc.go:99.24,100.151 1 0 +github.com/muety/wakapi/services/misc.go:100.151,102.4 1 0 +github.com/muety/wakapi/services/misc.go:102.9,107.4 1 0 +github.com/muety/wakapi/services/user.go:24.99,34.33 3 0 +github.com/muety/wakapi/services/user.go:55.2,55.12 1 0 +github.com/muety/wakapi/services/user.go:34.33,35.31 1 0 +github.com/muety/wakapi/services/user.go:35.31,41.61 4 0 +github.com/muety/wakapi/services/user.go:45.4,45.24 1 0 +github.com/muety/wakapi/services/user.go:41.61,43.5 1 0 +github.com/muety/wakapi/services/user.go:45.24,46.80 1 0 +github.com/muety/wakapi/services/user.go:46.80,48.6 1 0 +github.com/muety/wakapi/services/user.go:48.11,50.6 1 0 +github.com/muety/wakapi/services/user.go:58.74,59.40 1 0 +github.com/muety/wakapi/services/user.go:63.2,64.16 2 0 +github.com/muety/wakapi/services/user.go:68.2,69.15 2 0 +github.com/muety/wakapi/services/user.go:59.40,61.3 1 0 +github.com/muety/wakapi/services/user.go:64.16,66.3 1 0 +github.com/muety/wakapi/services/user.go:72.72,73.37 1 0 +github.com/muety/wakapi/services/user.go:77.2,78.16 2 0 +github.com/muety/wakapi/services/user.go:82.2,83.15 2 0 +github.com/muety/wakapi/services/user.go:73.37,75.3 1 0 +github.com/muety/wakapi/services/user.go:78.16,80.3 1 0 +github.com/muety/wakapi/services/user.go:86.76,88.2 1 0 +github.com/muety/wakapi/services/user.go:90.86,92.2 1 0 +github.com/muety/wakapi/services/user.go:94.58,96.2 1 0 +github.com/muety/wakapi/services/user.go:98.86,100.2 1 0 +github.com/muety/wakapi/services/user.go:102.71,104.12 2 0 +github.com/muety/wakapi/services/user.go:108.2,109.42 2 0 +github.com/muety/wakapi/services/user.go:113.2,114.16 2 0 +github.com/muety/wakapi/services/user.go:118.2,119.21 2 0 +github.com/muety/wakapi/services/user.go:104.12,106.3 1 0 +github.com/muety/wakapi/services/user.go:109.42,111.3 1 0 +github.com/muety/wakapi/services/user.go:114.16,116.3 1 0 +github.com/muety/wakapi/services/user.go:122.48,124.2 1 0 +github.com/muety/wakapi/services/user.go:126.102,136.93 2 0 +github.com/muety/wakapi/services/user.go:142.2,142.38 1 0 +github.com/muety/wakapi/services/user.go:136.93,138.3 1 0 +github.com/muety/wakapi/services/user.go:138.8,140.3 1 0 +github.com/muety/wakapi/services/user.go:145.73,149.2 3 0 +github.com/muety/wakapi/services/user.go:151.78,155.2 3 0 +github.com/muety/wakapi/services/user.go:157.99,160.2 2 0 +github.com/muety/wakapi/services/user.go:162.106,165.96 3 0 +github.com/muety/wakapi/services/user.go:170.2,170.68 1 0 +github.com/muety/wakapi/services/user.go:165.96,167.3 1 0 +github.com/muety/wakapi/services/user.go:167.8,169.3 1 0 +github.com/muety/wakapi/services/user.go:173.85,175.2 1 0 +github.com/muety/wakapi/services/user.go:177.57,184.2 4 0 +github.com/muety/wakapi/services/user.go:186.38,188.2 1 0 +github.com/muety/wakapi/services/user.go:190.57,195.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:25.141,39.33 3 0 +github.com/muety/wakapi/services/heartbeat.go:47.2,47.12 1 0 +github.com/muety/wakapi/services/heartbeat.go:39.33,40.31 1 0 +github.com/muety/wakapi/services/heartbeat.go:40.31,44.4 3 0 +github.com/muety/wakapi/services/heartbeat.go:50.72,53.2 2 0 +github.com/muety/wakapi/services/heartbeat.go:55.80,60.32 3 0 +github.com/muety/wakapi/services/heartbeat.go:68.2,69.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:72.2,72.12 1 0 +github.com/muety/wakapi/services/heartbeat.go:60.32,61.36 1 0 +github.com/muety/wakapi/services/heartbeat.go:65.3,65.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:61.36,64.4 2 0 +github.com/muety/wakapi/services/heartbeat.go:69.16,71.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:75.53,77.8 2 0 +github.com/muety/wakapi/services/heartbeat.go:80.2,81.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:84.2,84.19 1 0 +github.com/muety/wakapi/services/heartbeat.go:77.8,79.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:81.16,83.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:87.76,90.8 3 0 +github.com/muety/wakapi/services/heartbeat.go:93.2,94.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:97.2,97.19 1 0 +github.com/muety/wakapi/services/heartbeat.go:90.8,92.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:94.16,96.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:100.96,104.26 3 0 +github.com/muety/wakapi/services/heartbeat.go:114.2,115.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:119.2,119.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:125.2,125.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:104.26,107.9 3 0 +github.com/muety/wakapi/services/heartbeat.go:107.9,109.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:109.9,111.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:115.16,117.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:119.28,123.3 3 0 +github.com/muety/wakapi/services/heartbeat.go:128.111,130.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:133.2,133.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:130.16,132.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:136.92,138.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:140.116,142.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:144.78,146.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:148.104,150.55 2 0 +github.com/muety/wakapi/services/heartbeat.go:154.2,155.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:159.2,160.28 2 0 +github.com/muety/wakapi/services/heartbeat.go:166.2,167.22 2 0 +github.com/muety/wakapi/services/heartbeat.go:150.55,152.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:155.16,157.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:160.28,161.33 1 0 +github.com/muety/wakapi/services/heartbeat.go:161.33,163.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:170.62,172.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:174.116,176.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:180.2,180.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:184.2,184.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:176.16,178.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:180.28,182.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:187.96,189.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:191.107,193.56 2 0 +github.com/muety/wakapi/services/heartbeat.go:193.56,194.58 1 0 +github.com/muety/wakapi/services/heartbeat.go:194.58,198.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:202.85,208.2 5 0 +github.com/muety/wakapi/services/heartbeat.go:210.74,211.32 1 0 +github.com/muety/wakapi/services/heartbeat.go:211.32,216.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:219.72,221.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:223.58,225.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:227.60,229.2 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 @@ -788,145 +934,3 @@ github.com/muety/wakapi/services/summary.go:413.59,415.2 1 1 github.com/muety/wakapi/services/summary.go:417.63,418.37 1 0 github.com/muety/wakapi/services/summary.go:418.37,419.36 1 0 github.com/muety/wakapi/services/summary.go:419.36,421.4 1 0 -github.com/muety/wakapi/services/user.go:24.99,34.33 3 0 -github.com/muety/wakapi/services/user.go:55.2,55.12 1 0 -github.com/muety/wakapi/services/user.go:34.33,35.31 1 0 -github.com/muety/wakapi/services/user.go:35.31,41.61 4 0 -github.com/muety/wakapi/services/user.go:45.4,45.24 1 0 -github.com/muety/wakapi/services/user.go:41.61,43.5 1 0 -github.com/muety/wakapi/services/user.go:45.24,46.80 1 0 -github.com/muety/wakapi/services/user.go:46.80,48.6 1 0 -github.com/muety/wakapi/services/user.go:48.11,50.6 1 0 -github.com/muety/wakapi/services/user.go:58.74,59.40 1 0 -github.com/muety/wakapi/services/user.go:63.2,64.16 2 0 -github.com/muety/wakapi/services/user.go:68.2,69.15 2 0 -github.com/muety/wakapi/services/user.go:59.40,61.3 1 0 -github.com/muety/wakapi/services/user.go:64.16,66.3 1 0 -github.com/muety/wakapi/services/user.go:72.72,73.37 1 0 -github.com/muety/wakapi/services/user.go:77.2,78.16 2 0 -github.com/muety/wakapi/services/user.go:82.2,83.15 2 0 -github.com/muety/wakapi/services/user.go:73.37,75.3 1 0 -github.com/muety/wakapi/services/user.go:78.16,80.3 1 0 -github.com/muety/wakapi/services/user.go:86.76,88.2 1 0 -github.com/muety/wakapi/services/user.go:90.86,92.2 1 0 -github.com/muety/wakapi/services/user.go:94.58,96.2 1 0 -github.com/muety/wakapi/services/user.go:98.86,100.2 1 0 -github.com/muety/wakapi/services/user.go:102.71,104.12 2 0 -github.com/muety/wakapi/services/user.go:108.2,109.42 2 0 -github.com/muety/wakapi/services/user.go:113.2,114.16 2 0 -github.com/muety/wakapi/services/user.go:118.2,119.21 2 0 -github.com/muety/wakapi/services/user.go:104.12,106.3 1 0 -github.com/muety/wakapi/services/user.go:109.42,111.3 1 0 -github.com/muety/wakapi/services/user.go:114.16,116.3 1 0 -github.com/muety/wakapi/services/user.go:122.48,124.2 1 0 -github.com/muety/wakapi/services/user.go:126.102,136.93 2 0 -github.com/muety/wakapi/services/user.go:142.2,142.38 1 0 -github.com/muety/wakapi/services/user.go:136.93,138.3 1 0 -github.com/muety/wakapi/services/user.go:138.8,140.3 1 0 -github.com/muety/wakapi/services/user.go:145.73,149.2 3 0 -github.com/muety/wakapi/services/user.go:151.78,155.2 3 0 -github.com/muety/wakapi/services/user.go:157.99,160.2 2 0 -github.com/muety/wakapi/services/user.go:162.106,165.96 3 0 -github.com/muety/wakapi/services/user.go:170.2,170.68 1 0 -github.com/muety/wakapi/services/user.go:165.96,167.3 1 0 -github.com/muety/wakapi/services/user.go:167.8,169.3 1 0 -github.com/muety/wakapi/services/user.go:173.85,175.2 1 0 -github.com/muety/wakapi/services/user.go:177.57,184.2 4 0 -github.com/muety/wakapi/services/user.go:186.38,188.2 1 0 -github.com/muety/wakapi/services/user.go:190.57,195.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:25.141,39.33 3 0 -github.com/muety/wakapi/services/heartbeat.go:47.2,47.12 1 0 -github.com/muety/wakapi/services/heartbeat.go:39.33,40.31 1 0 -github.com/muety/wakapi/services/heartbeat.go:40.31,44.4 3 0 -github.com/muety/wakapi/services/heartbeat.go:50.72,53.2 2 0 -github.com/muety/wakapi/services/heartbeat.go:55.80,60.32 3 0 -github.com/muety/wakapi/services/heartbeat.go:68.2,69.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:72.2,72.12 1 0 -github.com/muety/wakapi/services/heartbeat.go:60.32,61.36 1 0 -github.com/muety/wakapi/services/heartbeat.go:65.3,65.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:61.36,64.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:69.16,71.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:75.53,77.8 2 0 -github.com/muety/wakapi/services/heartbeat.go:80.2,81.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:84.2,84.19 1 0 -github.com/muety/wakapi/services/heartbeat.go:77.8,79.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:81.16,83.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:87.76,90.8 3 0 -github.com/muety/wakapi/services/heartbeat.go:93.2,94.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:97.2,97.19 1 0 -github.com/muety/wakapi/services/heartbeat.go:90.8,92.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:94.16,96.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:100.96,104.26 3 0 -github.com/muety/wakapi/services/heartbeat.go:114.2,115.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:119.2,119.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:125.2,125.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:104.26,107.9 3 0 -github.com/muety/wakapi/services/heartbeat.go:107.9,109.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:109.9,111.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:115.16,117.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:119.28,123.3 3 0 -github.com/muety/wakapi/services/heartbeat.go:128.111,130.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:133.2,133.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:130.16,132.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:136.92,138.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:140.116,142.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:144.78,146.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:148.104,150.55 2 0 -github.com/muety/wakapi/services/heartbeat.go:154.2,155.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:159.2,160.28 2 0 -github.com/muety/wakapi/services/heartbeat.go:166.2,167.22 2 0 -github.com/muety/wakapi/services/heartbeat.go:150.55,152.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:155.16,157.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:160.28,161.33 1 0 -github.com/muety/wakapi/services/heartbeat.go:161.33,163.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:170.62,172.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:174.116,176.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:180.2,180.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:184.2,184.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:176.16,178.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:180.28,182.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:187.96,189.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:191.107,193.56 2 0 -github.com/muety/wakapi/services/heartbeat.go:193.56,194.58 1 0 -github.com/muety/wakapi/services/heartbeat.go:194.58,198.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:202.85,208.2 5 0 -github.com/muety/wakapi/services/heartbeat.go:210.74,211.32 1 0 -github.com/muety/wakapi/services/heartbeat.go:211.32,216.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:219.72,221.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:223.58,225.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:227.60,229.2 1 0 diff --git a/main.go b/main.go index 6566455..d1863cd 100644 --- a/main.go +++ b/main.go @@ -54,6 +54,7 @@ var ( projectLabelRepository repositories.IProjectLabelRepository summaryRepository repositories.ISummaryRepository keyValueRepository repositories.IKeyValueRepository + diagnosticsRepository repositories.IDiagnosticsRepository ) var ( @@ -67,6 +68,7 @@ var ( mailService services.IMailService keyValueService services.IKeyValueService reportService services.IReportService + diagnosticsService services.IDiagnosticsService miscService services.IMiscService ) @@ -143,6 +145,7 @@ func main() { projectLabelRepository = repositories.NewProjectLabelRepository(db) summaryRepository = repositories.NewSummaryRepository(db) keyValueRepository = repositories.NewKeyValueRepository(db) + diagnosticsRepository = repositories.NewDiagnosticsRepository(db) // Services mailService = mail.NewMailService() @@ -155,6 +158,7 @@ func main() { aggregationService = services.NewAggregationService(userService, summaryService, heartbeatService) keyValueService = services.NewKeyValueService(keyValueRepository) reportService = services.NewReportService(summaryService, userService, mailService) + diagnosticsService = services.NewDiagnosticsService(diagnosticsRepository) miscService = services.NewMiscService(userService, summaryService, keyValueService) // Schedule background tasks @@ -169,6 +173,7 @@ func main() { heartbeatApiHandler := api.NewHeartbeatApiHandler(userService, heartbeatService, languageMappingService) summaryApiHandler := api.NewSummaryApiHandler(userService, summaryService) metricsHandler := api.NewMetricsHandler(userService, summaryService, heartbeatService, keyValueService) + diagnosticsHandler := api.NewDiagnosticsApiHandler(userService, diagnosticsService) // Compat Handlers wakatimeV1AllHandler := wtV1Routes.NewAllTimeHandler(userService, summaryService) @@ -219,6 +224,7 @@ func main() { healthApiHandler.RegisterRoutes(apiRouter) heartbeatApiHandler.RegisterRoutes(apiRouter) metricsHandler.RegisterRoutes(apiRouter) + diagnosticsHandler.RegisterRoutes(apiRouter) wakatimeV1AllHandler.RegisterRoutes(apiRouter) wakatimeV1SummariesHandler.RegisterRoutes(apiRouter) wakatimeV1StatsHandler.RegisterRoutes(apiRouter) diff --git a/models/diagnostics.go b/models/diagnostics.go new file mode 100644 index 0000000..d5126e2 --- /dev/null +++ b/models/diagnostics.go @@ -0,0 +1,13 @@ +package models + +type Diagnostics struct { + ID uint `gorm:"primary_key"` + User *User `json:"-" gorm:"not null; constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` + UserID string `json:"-" gorm:"not null; index:idx_diagnostics_user"` + Platform string `json:"platform"` + Architecture string `json:"architecture"` + Plugin string `json:"plugin"` + CliVersion string `json:"cli_version"` + Logs string `json:"logs" gorm:"type:text"` + StackTrace string `json:"stacktrace" gorm:"type:text"` +} diff --git a/repositories/diagnostics.go b/repositories/diagnostics.go new file mode 100644 index 0000000..465ede5 --- /dev/null +++ b/repositories/diagnostics.go @@ -0,0 +1,18 @@ +package repositories + +import ( + "github.com/muety/wakapi/models" + "gorm.io/gorm" +) + +type DiagnosticsRepository struct { + db *gorm.DB +} + +func NewDiagnosticsRepository(db *gorm.DB) *DiagnosticsRepository { + return &DiagnosticsRepository{db: db} +} + +func (r *DiagnosticsRepository) Insert(diagnostics *models.Diagnostics) (*models.Diagnostics, error) { + return diagnostics, r.db.Create(diagnostics).Error +} diff --git a/repositories/repositories.go b/repositories/repositories.go index c3d3c8a..2f6e219 100644 --- a/repositories/repositories.go +++ b/repositories/repositories.go @@ -31,6 +31,10 @@ type IHeartbeatRepository interface { DeleteBefore(time.Time) error } +type IDiagnosticsRepository interface { + Insert(diagnostics *models.Diagnostics) (*models.Diagnostics, error) +} + type IKeyValueRepository interface { GetAll() ([]*models.KeyStringValue, error) GetString(string) (*models.KeyStringValue, error) diff --git a/routes/api/diagnostics.go b/routes/api/diagnostics.go new file mode 100644 index 0000000..8cc16ea --- /dev/null +++ b/routes/api/diagnostics.go @@ -0,0 +1,71 @@ +package api + +import ( + "encoding/json" + "github.com/gorilla/mux" + conf "github.com/muety/wakapi/config" + "github.com/muety/wakapi/middlewares" + "github.com/muety/wakapi/services" + "github.com/muety/wakapi/utils" + "net/http" + + "github.com/muety/wakapi/models" +) + +type DiagnosticsApiHandler struct { + config *conf.Config + userSrvc services.IUserService + diagnosticsSrvc services.IDiagnosticsService +} + +func NewDiagnosticsApiHandler(userService services.IUserService, diagnosticsService services.IDiagnosticsService) *DiagnosticsApiHandler { + return &DiagnosticsApiHandler{ + config: conf.Get(), + userSrvc: userService, + diagnosticsSrvc: diagnosticsService, + } +} + +func (h *DiagnosticsApiHandler) RegisterRoutes(router *mux.Router) { + r := router.PathPrefix("/plugins/errors").Subrouter() + r.Use( + middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, + ) + r.Path("").Methods(http.MethodPost).HandlerFunc(h.Post) +} + +// @Summary Push a new diagnostics object +// @ID post-diagnostics +// @Tags diagnostics +// @Accept json +// @Param diagnostics body models.Diagnostics true "A single diagnostics object sent by WakaTime CLI" +// @Security ApiKeyAuth +// @Success 201 +// @Router /plugins/errors [post] +func (h *DiagnosticsApiHandler) Post(w http.ResponseWriter, r *http.Request) { + var diagnostics models.Diagnostics + + user := middlewares.GetPrincipal(r) + if user == nil { + w.WriteHeader(http.StatusUnauthorized) + w.Write([]byte(conf.ErrUnauthorized)) + return + } + + if err := json.NewDecoder(r.Body).Decode(&diagnostics); err != nil { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(conf.ErrBadRequest)) + conf.Log().Request(r).Error("failed to parse diagnostics for user %s - %v", err) + return + } + diagnostics.UserID = user.ID + + if _, err := h.diagnosticsSrvc.Create(&diagnostics); err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte(conf.ErrInternalServerError)) + conf.Log().Request(r).Error("failed to insert diagnostics for user %s - %v", err) + return + } + + utils.RespondJSON(w, r, http.StatusCreated, struct{}{}) +} diff --git a/routes/api/heartbeat.go b/routes/api/heartbeat.go index b80e689..cac328f 100644 --- a/routes/api/heartbeat.go +++ b/routes/api/heartbeat.go @@ -72,6 +72,7 @@ func (h *HeartbeatApiHandler) Post(w http.ResponseWriter, r *http.Request) { if err != nil { heartbeats, err = h.tryParseSingle(r) if err != nil { + conf.Log().Request(r).Error(err.Error()) w.WriteHeader(http.StatusBadRequest) w.Write([]byte(err.Error())) return diff --git a/services/diagnostics.go b/services/diagnostics.go new file mode 100644 index 0000000..8381dec --- /dev/null +++ b/services/diagnostics.go @@ -0,0 +1,23 @@ +package services + +import ( + "github.com/muety/wakapi/config" + "github.com/muety/wakapi/models" + "github.com/muety/wakapi/repositories" +) + +type DiagnosticsService struct { + config *config.Config + repository repositories.IDiagnosticsRepository +} + +func NewDiagnosticsService(diagnosticsRepo repositories.IDiagnosticsRepository) *DiagnosticsService { + return &DiagnosticsService{ + config: config.Get(), + repository: diagnosticsRepo, + } +} + +func (srv *DiagnosticsService) Create(diagnostics *models.Diagnostics) (*models.Diagnostics, error) { + return srv.repository.Insert(diagnostics) +} diff --git a/services/services.go b/services/services.go index f3fd545..ab25952 100644 --- a/services/services.go +++ b/services/services.go @@ -39,6 +39,10 @@ type IHeartbeatService interface { DeleteBefore(time.Time) error } +type IDiagnosticsService interface { + Create(*models.Diagnostics) (*models.Diagnostics, error) +} + type IKeyValueService interface { GetString(string) (*models.KeyStringValue, error) MustGetString(string) *models.KeyStringValue diff --git a/static/docs/docs.go b/static/docs/docs.go index 9292700..57d3b50 100644 --- a/static/docs/docs.go +++ b/static/docs/docs.go @@ -482,6 +482,39 @@ var doc = `{ } } }, + "/plugins/errors": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "tags": [ + "diagnostics" + ], + "summary": "Push a new diagnostics object", + "operationId": "post-diagnostics", + "parameters": [ + { + "description": "A single diagnostics object sent by WakaTime CLI", + "name": "diagnostics", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.Diagnostics" + } + } + ], + "responses": { + "201": { + "description": "" + } + } + } + }, "/summary": { "get": { "security": [ @@ -687,6 +720,32 @@ var doc = `{ } }, "definitions": { + "models.Diagnostics": { + "type": "object", + "properties": { + "architecture": { + "type": "string" + }, + "cli_version": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "logs": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "plugin": { + "type": "string" + }, + "stacktrace": { + "type": "string" + } + } + }, "models.Heartbeat": { "type": "object", "properties": { @@ -750,6 +809,7 @@ var doc = `{ "example": "2006-01-02 15:04:05.000" }, "labels": { + "description": "labels are not persisted, but calculated at runtime, i.e. when summary is retrieved", "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" diff --git a/static/docs/swagger.json b/static/docs/swagger.json index a9ce7b9..be3e3e8 100644 --- a/static/docs/swagger.json +++ b/static/docs/swagger.json @@ -466,6 +466,39 @@ } } }, + "/plugins/errors": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "tags": [ + "diagnostics" + ], + "summary": "Push a new diagnostics object", + "operationId": "post-diagnostics", + "parameters": [ + { + "description": "A single diagnostics object sent by WakaTime CLI", + "name": "diagnostics", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.Diagnostics" + } + } + ], + "responses": { + "201": { + "description": "" + } + } + } + }, "/summary": { "get": { "security": [ @@ -671,6 +704,32 @@ } }, "definitions": { + "models.Diagnostics": { + "type": "object", + "properties": { + "architecture": { + "type": "string" + }, + "cli_version": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "logs": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "plugin": { + "type": "string" + }, + "stacktrace": { + "type": "string" + } + } + }, "models.Heartbeat": { "type": "object", "properties": { @@ -734,6 +793,7 @@ "example": "2006-01-02 15:04:05.000" }, "labels": { + "description": "labels are not persisted, but calculated at runtime, i.e. when summary is retrieved", "type": "array", "items": { "$ref": "#/definitions/models.SummaryItem" diff --git a/static/docs/swagger.yaml b/static/docs/swagger.yaml index ad2b6fb..7f92a94 100644 --- a/static/docs/swagger.yaml +++ b/static/docs/swagger.yaml @@ -1,5 +1,22 @@ basePath: /api definitions: + models.Diagnostics: + properties: + architecture: + type: string + cli_version: + type: string + id: + type: integer + logs: + type: string + platform: + type: string + plugin: + type: string + stacktrace: + type: string + type: object models.Heartbeat: properties: branch: @@ -44,6 +61,8 @@ definitions: format: date type: string labels: + description: labels are not persisted, but calculated at runtime, i.e. when + summary is retrieved items: $ref: '#/definitions/models.SummaryItem' type: array @@ -622,6 +641,26 @@ paths: summary: Push new heartbeats tags: - heartbeat + /plugins/errors: + post: + consumes: + - application/json + operationId: post-diagnostics + parameters: + - description: A single diagnostics object sent by WakaTime CLI + in: body + name: diagnostics + required: true + schema: + $ref: '#/definitions/models.Diagnostics' + responses: + "201": + description: "" + security: + - ApiKeyAuth: [] + summary: Push a new diagnostics object + tags: + - diagnostics /summary: get: operationId: get-summary