From 647bf1781d78bc9ec8fcd37fc17f993d4d6c0274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sun, 13 Mar 2022 08:17:50 +0100 Subject: [PATCH] chore: apply filters in database query (see #335) --- coverage/coverage.out | 1760 +++++++++--------- mocks/heartbeat_service.go | 5 + models/filters.go | 45 +- models/heartbeat.go | 28 +- models/summary.go | 15 + models/summary_test.go | 60 + repositories/{heartbeart.go => heartbeat.go} | 20 + repositories/repositories.go | 1 + services/duration.go | 10 +- services/duration_test.go | 3 +- services/heartbeat.go | 19 + services/services.go | 1 + 12 files changed, 1093 insertions(+), 874 deletions(-) rename repositories/{heartbeart.go => heartbeat.go} (88%) diff --git a/coverage/coverage.out b/coverage/coverage.out index 6597a19..6eac8d8 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,245 +1,94 @@ mode: set -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/models.go:3.14,5.2 0 1 -github.com/muety/wakapi/models/summary.go:63.29,65.2 1 1 -github.com/muety/wakapi/models/summary.go:67.35,69.2 1 0 -github.com/muety/wakapi/models/summary.go:71.38,73.2 1 0 -github.com/muety/wakapi/models/summary.go:75.37,84.2 8 1 -github.com/muety/wakapi/models/summary.go:86.35,88.2 1 1 -github.com/muety/wakapi/models/summary.go:90.57,100.2 1 1 -github.com/muety/wakapi/models/summary.go:102.64,104.2 1 0 -github.com/muety/wakapi/models/summary.go:117.33,122.26 4 1 -github.com/muety/wakapi/models/summary.go:129.2,129.37 1 1 -github.com/muety/wakapi/models/summary.go:134.2,135.16 2 1 -github.com/muety/wakapi/models/summary.go:138.2,138.33 1 1 -github.com/muety/wakapi/models/summary.go:122.26,123.30 1 1 -github.com/muety/wakapi/models/summary.go:123.30,125.4 1 1 -github.com/muety/wakapi/models/summary.go:129.37,131.3 1 0 -github.com/muety/wakapi/models/summary.go:135.16,137.3 1 0 -github.com/muety/wakapi/models/summary.go:138.33,140.3 1 1 -github.com/muety/wakapi/models/summary.go:144.56,150.28 5 1 -github.com/muety/wakapi/models/summary.go:154.2,155.42 2 1 -github.com/muety/wakapi/models/summary.go:162.2,163.15 2 1 -github.com/muety/wakapi/models/summary.go:150.28,152.3 1 1 -github.com/muety/wakapi/models/summary.go:155.42,156.22 1 0 -github.com/muety/wakapi/models/summary.go:156.22,158.9 2 0 -github.com/muety/wakapi/models/summary.go:163.15,164.28 1 1 -github.com/muety/wakapi/models/summary.go:164.28,166.4 1 0 -github.com/muety/wakapi/models/summary.go:166.9,172.4 1 1 -github.com/muety/wakapi/models/summary.go:176.45,181.16 4 0 -github.com/muety/wakapi/models/summary.go:184.2,184.39 1 0 -github.com/muety/wakapi/models/summary.go:188.2,188.30 1 0 -github.com/muety/wakapi/models/summary.go:181.16,183.3 1 0 -github.com/muety/wakapi/models/summary.go:184.39,186.3 1 0 -github.com/muety/wakapi/models/summary.go:191.73,193.55 2 1 -github.com/muety/wakapi/models/summary.go:198.2,198.16 1 1 -github.com/muety/wakapi/models/summary.go:193.55,194.31 1 1 -github.com/muety/wakapi/models/summary.go:194.31,196.4 1 1 -github.com/muety/wakapi/models/summary.go:201.88,203.55 2 1 -github.com/muety/wakapi/models/summary.go:211.2,211.16 1 1 -github.com/muety/wakapi/models/summary.go:203.55,204.31 1 1 -github.com/muety/wakapi/models/summary.go:204.31,205.23 1 1 -github.com/muety/wakapi/models/summary.go:208.4,208.46 1 1 -github.com/muety/wakapi/models/summary.go:205.23,206.13 1 1 -github.com/muety/wakapi/models/summary.go:214.73,216.34 2 1 -github.com/muety/wakapi/models/summary.go:219.2,219.14 1 1 -github.com/muety/wakapi/models/summary.go:216.34,218.3 1 1 -github.com/muety/wakapi/models/summary.go:222.56,225.55 3 0 -github.com/muety/wakapi/models/summary.go:232.2,232.12 1 0 -github.com/muety/wakapi/models/summary.go:225.55,226.31 1 0 -github.com/muety/wakapi/models/summary.go:226.31,227.44 1 0 -github.com/muety/wakapi/models/summary.go:227.44,229.5 1 0 -github.com/muety/wakapi/models/summary.go:235.58,237.16 2 0 -github.com/muety/wakapi/models/summary.go:240.2,240.16 1 0 -github.com/muety/wakapi/models/summary.go:237.16,239.3 1 0 -github.com/muety/wakapi/models/summary.go:243.71,244.63 1 1 -github.com/muety/wakapi/models/summary.go:288.2,296.10 8 1 -github.com/muety/wakapi/models/summary.go:244.63,245.20 1 1 -github.com/muety/wakapi/models/summary.go:249.3,251.45 2 1 -github.com/muety/wakapi/models/summary.go:260.3,260.31 1 1 -github.com/muety/wakapi/models/summary.go:267.3,267.31 1 1 -github.com/muety/wakapi/models/summary.go:284.3,284.16 1 1 -github.com/muety/wakapi/models/summary.go:245.20,247.4 1 1 -github.com/muety/wakapi/models/summary.go:251.45,252.32 1 1 -github.com/muety/wakapi/models/summary.go:257.4,257.14 1 1 -github.com/muety/wakapi/models/summary.go:252.32,253.24 1 1 -github.com/muety/wakapi/models/summary.go:253.24,255.6 1 1 -github.com/muety/wakapi/models/summary.go:260.31,262.60 1 1 -github.com/muety/wakapi/models/summary.go:262.60,264.5 1 1 -github.com/muety/wakapi/models/summary.go:267.31,269.60 1 1 -github.com/muety/wakapi/models/summary.go:269.60,270.55 1 1 -github.com/muety/wakapi/models/summary.go:270.55,272.6 1 1 -github.com/muety/wakapi/models/summary.go:272.11,280.6 1 1 -github.com/muety/wakapi/models/summary.go:299.57,300.30 1 1 -github.com/muety/wakapi/models/summary.go:305.2,305.43 1 0 -github.com/muety/wakapi/models/summary.go:300.30,301.28 1 1 -github.com/muety/wakapi/models/summary.go:301.28,303.4 1 1 -github.com/muety/wakapi/models/summary.go:308.43,310.2 1 0 -github.com/muety/wakapi/models/summary.go:312.49,313.21 1 0 -github.com/muety/wakapi/models/summary.go:316.2,317.54 2 0 -github.com/muety/wakapi/models/summary.go:313.21,315.3 1 0 -github.com/muety/wakapi/models/summary.go:320.51,321.27 1 0 -github.com/muety/wakapi/models/summary.go:324.2,325.19 2 0 -github.com/muety/wakapi/models/summary.go:321.27,323.3 1 0 -github.com/muety/wakapi/models/summary.go:328.50,332.2 1 1 -github.com/muety/wakapi/models/summary.go:334.33,336.2 1 1 -github.com/muety/wakapi/models/summary.go:338.43,340.2 1 1 -github.com/muety/wakapi/models/summary.go:342.38,344.2 1 1 -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/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/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/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/project_label.go:14.39,16.2 1 0 -github.com/muety/wakapi/models/durations.go:7.30,9.2 1 0 -github.com/muety/wakapi/models/durations.go:11.40,13.2 1 0 -github.com/muety/wakapi/models/durations.go:15.35,17.2 1 0 -github.com/muety/wakapi/models/durations.go:19.45,21.22 2 0 -github.com/muety/wakapi/models/durations.go:24.2,24.14 1 0 -github.com/muety/wakapi/models/durations.go:21.22,23.3 1 0 -github.com/muety/wakapi/models/durations.go:27.39,30.2 2 0 -github.com/muety/wakapi/models/durations.go:32.39,34.18 1 0 -github.com/muety/wakapi/models/durations.go:37.2,37.16 1 0 -github.com/muety/wakapi/models/durations.go:34.18,36.3 1 0 -github.com/muety/wakapi/models/durations.go:40.38,42.18 1 0 -github.com/muety/wakapi/models/durations.go:45.2,45.24 1 0 -github.com/muety/wakapi/models/durations.go:42.18,44.3 1 0 -github.com/muety/wakapi/models/filters.go:21.33,23.2 1 1 -github.com/muety/wakapi/models/filters.go:25.48,26.22 1 1 -github.com/muety/wakapi/models/filters.go:31.2,31.14 1 1 -github.com/muety/wakapi/models/filters.go:26.22,27.18 1 1 -github.com/muety/wakapi/models/filters.go:27.18,29.4 1 1 -github.com/muety/wakapi/models/filters.go:39.56,41.2 1 1 -github.com/muety/wakapi/models/filters.go:43.66,46.2 2 1 -github.com/muety/wakapi/models/filters.go:48.59,50.2 1 1 -github.com/muety/wakapi/models/filters.go:52.70,53.16 1 1 -github.com/muety/wakapi/models/filters.go:69.2,69.10 1 1 -github.com/muety/wakapi/models/filters.go:54.22,55.41 1 1 -github.com/muety/wakapi/models/filters.go:56.17,57.31 1 0 -github.com/muety/wakapi/models/filters.go:58.23,59.43 1 1 -github.com/muety/wakapi/models/filters.go:60.21,61.39 1 0 -github.com/muety/wakapi/models/filters.go:62.22,63.41 1 0 -github.com/muety/wakapi/models/filters.go:64.20,65.37 1 1 -github.com/muety/wakapi/models/filters.go:66.21,67.39 1 0 -github.com/muety/wakapi/models/filters.go:72.49,73.44 1 1 -github.com/muety/wakapi/models/filters.go:88.2,88.29 1 1 -github.com/muety/wakapi/models/filters.go:73.44,75.3 1 1 -github.com/muety/wakapi/models/filters.go:75.8,75.41 1 1 -github.com/muety/wakapi/models/filters.go:75.41,77.3 1 0 -github.com/muety/wakapi/models/filters.go:77.8,77.53 1 1 -github.com/muety/wakapi/models/filters.go:77.53,79.3 1 1 -github.com/muety/wakapi/models/filters.go:79.8,79.49 1 1 -github.com/muety/wakapi/models/filters.go:79.49,81.3 1 0 -github.com/muety/wakapi/models/filters.go:81.8,81.51 1 1 -github.com/muety/wakapi/models/filters.go:81.51,83.3 1 0 -github.com/muety/wakapi/models/filters.go:83.8,83.47 1 1 -github.com/muety/wakapi/models/filters.go:83.47,85.3 1 0 -github.com/muety/wakapi/models/filters.go:85.8,85.49 1 1 -github.com/muety/wakapi/models/filters.go:85.49,87.3 1 0 -github.com/muety/wakapi/models/filters.go:91.46,92.30 1 1 -github.com/muety/wakapi/models/filters.go:95.2,95.24 1 0 -github.com/muety/wakapi/models/filters.go:92.30,94.3 1 1 -github.com/muety/wakapi/models/filters.go:98.34,101.2 2 1 -github.com/muety/wakapi/models/filters.go:103.33,105.16 2 0 -github.com/muety/wakapi/models/filters.go:108.2,108.32 1 0 -github.com/muety/wakapi/models/filters.go:105.16,107.3 1 0 -github.com/muety/wakapi/models/filters.go:111.44,117.2 1 1 -github.com/muety/wakapi/models/filters.go:120.70,121.22 1 1 -github.com/muety/wakapi/models/filters.go:129.2,129.17 1 1 -github.com/muety/wakapi/models/filters.go:137.2,137.23 1 1 -github.com/muety/wakapi/models/filters.go:145.2,145.21 1 1 -github.com/muety/wakapi/models/filters.go:153.2,153.22 1 1 -github.com/muety/wakapi/models/filters.go:161.2,161.21 1 1 -github.com/muety/wakapi/models/filters.go:169.2,169.10 1 1 -github.com/muety/wakapi/models/filters.go:121.22,123.31 2 1 -github.com/muety/wakapi/models/filters.go:127.3,127.22 1 1 -github.com/muety/wakapi/models/filters.go:123.31,126.4 2 1 -github.com/muety/wakapi/models/filters.go:129.17,131.26 2 0 -github.com/muety/wakapi/models/filters.go:135.3,135.17 1 0 -github.com/muety/wakapi/models/filters.go:131.26,134.4 2 0 -github.com/muety/wakapi/models/filters.go:137.23,139.32 2 1 -github.com/muety/wakapi/models/filters.go:143.3,143.23 1 1 -github.com/muety/wakapi/models/filters.go:139.32,142.4 2 1 -github.com/muety/wakapi/models/filters.go:145.21,147.30 2 0 -github.com/muety/wakapi/models/filters.go:151.3,151.21 1 0 -github.com/muety/wakapi/models/filters.go:147.30,150.4 2 0 -github.com/muety/wakapi/models/filters.go:153.22,155.31 2 0 -github.com/muety/wakapi/models/filters.go:159.3,159.22 1 0 -github.com/muety/wakapi/models/filters.go:155.31,158.4 2 0 -github.com/muety/wakapi/models/filters.go:161.21,163.30 2 0 -github.com/muety/wakapi/models/filters.go:167.3,167.21 1 0 -github.com/muety/wakapi/models/filters.go:163.30,166.4 2 0 -github.com/muety/wakapi/models/filters.go:172.83,173.41 1 1 -github.com/muety/wakapi/models/filters.go:176.2,176.28 1 1 -github.com/muety/wakapi/models/filters.go:179.2,179.10 1 1 -github.com/muety/wakapi/models/filters.go:173.41,175.3 1 0 -github.com/muety/wakapi/models/filters.go:176.28,178.3 1 1 -github.com/muety/wakapi/models/heartbeat.go:33.34,35.2 1 1 -github.com/muety/wakapi/models/heartbeat.go:37.65,39.46 2 1 -github.com/muety/wakapi/models/heartbeat.go:39.46,40.108 1 1 -github.com/muety/wakapi/models/heartbeat.go:40.108,43.4 2 1 -github.com/muety/wakapi/models/heartbeat.go:47.50,48.11 1 1 -github.com/muety/wakapi/models/heartbeat.go:63.2,63.15 1 1 -github.com/muety/wakapi/models/heartbeat.go:67.2,67.12 1 1 -github.com/muety/wakapi/models/heartbeat.go:49.22,50.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:51.21,52.17 1 1 -github.com/muety/wakapi/models/heartbeat.go:53.23,54.19 1 1 -github.com/muety/wakapi/models/heartbeat.go:55.17,56.26 1 1 -github.com/muety/wakapi/models/heartbeat.go:57.22,58.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:59.21,60.17 1 0 -github.com/muety/wakapi/models/heartbeat.go:63.15,65.3 1 1 -github.com/muety/wakapi/models/heartbeat.go:70.37,86.2 1 0 -github.com/muety/wakapi/models/heartbeat.go:94.41,96.16 2 0 -github.com/muety/wakapi/models/heartbeat.go:99.2,100.10 2 0 -github.com/muety/wakapi/models/heartbeat.go:96.16,98.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/summary.go:64.29,66.2 1 1 +github.com/muety/wakapi/models/summary.go:68.35,70.2 1 0 +github.com/muety/wakapi/models/summary.go:72.38,74.2 1 0 +github.com/muety/wakapi/models/summary.go:76.37,85.2 8 1 +github.com/muety/wakapi/models/summary.go:87.35,89.2 1 1 +github.com/muety/wakapi/models/summary.go:91.57,101.2 1 1 +github.com/muety/wakapi/models/summary.go:103.64,105.2 1 1 +github.com/muety/wakapi/models/summary.go:107.59,108.21 1 1 +github.com/muety/wakapi/models/summary.go:112.2,112.35 1 1 +github.com/muety/wakapi/models/summary.go:118.2,118.10 1 1 +github.com/muety/wakapi/models/summary.go:108.21,110.3 1 1 +github.com/muety/wakapi/models/summary.go:112.35,113.41 1 1 +github.com/muety/wakapi/models/summary.go:113.41,115.4 1 1 +github.com/muety/wakapi/models/summary.go:132.33,137.26 4 1 +github.com/muety/wakapi/models/summary.go:144.2,144.37 1 1 +github.com/muety/wakapi/models/summary.go:149.2,150.16 2 1 +github.com/muety/wakapi/models/summary.go:153.2,153.33 1 1 +github.com/muety/wakapi/models/summary.go:137.26,138.30 1 1 +github.com/muety/wakapi/models/summary.go:138.30,140.4 1 1 +github.com/muety/wakapi/models/summary.go:144.37,146.3 1 0 +github.com/muety/wakapi/models/summary.go:150.16,152.3 1 0 +github.com/muety/wakapi/models/summary.go:153.33,155.3 1 1 +github.com/muety/wakapi/models/summary.go:159.56,165.28 5 1 +github.com/muety/wakapi/models/summary.go:169.2,170.42 2 1 +github.com/muety/wakapi/models/summary.go:177.2,178.15 2 1 +github.com/muety/wakapi/models/summary.go:165.28,167.3 1 1 +github.com/muety/wakapi/models/summary.go:170.42,171.22 1 0 +github.com/muety/wakapi/models/summary.go:171.22,173.9 2 0 +github.com/muety/wakapi/models/summary.go:178.15,179.28 1 1 +github.com/muety/wakapi/models/summary.go:179.28,181.4 1 0 +github.com/muety/wakapi/models/summary.go:181.9,187.4 1 1 +github.com/muety/wakapi/models/summary.go:191.45,196.16 4 1 +github.com/muety/wakapi/models/summary.go:199.2,199.39 1 1 +github.com/muety/wakapi/models/summary.go:203.2,203.30 1 1 +github.com/muety/wakapi/models/summary.go:196.16,198.3 1 0 +github.com/muety/wakapi/models/summary.go:199.39,201.3 1 1 +github.com/muety/wakapi/models/summary.go:206.73,208.55 2 1 +github.com/muety/wakapi/models/summary.go:213.2,213.16 1 1 +github.com/muety/wakapi/models/summary.go:208.55,209.31 1 1 +github.com/muety/wakapi/models/summary.go:209.31,211.4 1 1 +github.com/muety/wakapi/models/summary.go:216.88,218.55 2 1 +github.com/muety/wakapi/models/summary.go:226.2,226.16 1 1 +github.com/muety/wakapi/models/summary.go:218.55,219.31 1 1 +github.com/muety/wakapi/models/summary.go:219.31,220.23 1 1 +github.com/muety/wakapi/models/summary.go:223.4,223.46 1 1 +github.com/muety/wakapi/models/summary.go:220.23,221.13 1 1 +github.com/muety/wakapi/models/summary.go:229.73,231.34 2 1 +github.com/muety/wakapi/models/summary.go:234.2,234.14 1 1 +github.com/muety/wakapi/models/summary.go:231.34,233.3 1 1 +github.com/muety/wakapi/models/summary.go:237.56,240.55 3 0 +github.com/muety/wakapi/models/summary.go:247.2,247.12 1 0 +github.com/muety/wakapi/models/summary.go:240.55,241.31 1 0 +github.com/muety/wakapi/models/summary.go:241.31,242.44 1 0 +github.com/muety/wakapi/models/summary.go:242.44,244.5 1 0 +github.com/muety/wakapi/models/summary.go:250.58,252.16 2 0 +github.com/muety/wakapi/models/summary.go:255.2,255.16 1 0 +github.com/muety/wakapi/models/summary.go:252.16,254.3 1 0 +github.com/muety/wakapi/models/summary.go:258.71,259.63 1 1 +github.com/muety/wakapi/models/summary.go:303.2,311.10 8 1 +github.com/muety/wakapi/models/summary.go:259.63,260.20 1 1 +github.com/muety/wakapi/models/summary.go:264.3,266.45 2 1 +github.com/muety/wakapi/models/summary.go:275.3,275.31 1 1 +github.com/muety/wakapi/models/summary.go:282.3,282.31 1 1 +github.com/muety/wakapi/models/summary.go:299.3,299.16 1 1 +github.com/muety/wakapi/models/summary.go:260.20,262.4 1 1 +github.com/muety/wakapi/models/summary.go:266.45,267.32 1 1 +github.com/muety/wakapi/models/summary.go:272.4,272.14 1 1 +github.com/muety/wakapi/models/summary.go:267.32,268.24 1 1 +github.com/muety/wakapi/models/summary.go:268.24,270.6 1 1 +github.com/muety/wakapi/models/summary.go:275.31,277.60 1 1 +github.com/muety/wakapi/models/summary.go:277.60,279.5 1 1 +github.com/muety/wakapi/models/summary.go:282.31,284.60 1 1 +github.com/muety/wakapi/models/summary.go:284.60,285.55 1 1 +github.com/muety/wakapi/models/summary.go:285.55,287.6 1 1 +github.com/muety/wakapi/models/summary.go:287.11,295.6 1 1 +github.com/muety/wakapi/models/summary.go:314.57,315.30 1 1 +github.com/muety/wakapi/models/summary.go:320.2,320.43 1 0 +github.com/muety/wakapi/models/summary.go:315.30,316.28 1 1 +github.com/muety/wakapi/models/summary.go:316.28,318.4 1 1 +github.com/muety/wakapi/models/summary.go:323.43,325.2 1 0 +github.com/muety/wakapi/models/summary.go:327.49,328.21 1 0 +github.com/muety/wakapi/models/summary.go:331.2,332.54 2 0 +github.com/muety/wakapi/models/summary.go:328.21,330.3 1 0 +github.com/muety/wakapi/models/summary.go:335.51,336.27 1 0 +github.com/muety/wakapi/models/summary.go:339.2,340.19 2 0 +github.com/muety/wakapi/models/summary.go:336.27,338.3 1 0 +github.com/muety/wakapi/models/summary.go:343.50,347.2 1 1 +github.com/muety/wakapi/models/summary.go:349.33,351.2 1 1 +github.com/muety/wakapi/models/summary.go:353.43,355.2 1 1 +github.com/muety/wakapi/models/summary.go:357.38,359.2 1 1 github.com/muety/wakapi/models/user.go:11.13,13.2 1 1 github.com/muety/wakapi/models/user.go:83.36,84.22 1 1 github.com/muety/wakapi/models/user.go:87.2,88.16 2 1 @@ -282,6 +131,181 @@ github.com/muety/wakapi/models/duration.go:57.17,58.26 1 0 github.com/muety/wakapi/models/duration.go:59.22,60.18 1 0 github.com/muety/wakapi/models/duration.go:61.21,62.17 1 0 github.com/muety/wakapi/models/duration.go:65.15,67.3 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/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 +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/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/filters.go:21.33,23.2 1 1 +github.com/muety/wakapi/models/filters.go:25.48,26.22 1 1 +github.com/muety/wakapi/models/filters.go:31.2,31.14 1 1 +github.com/muety/wakapi/models/filters.go:26.22,27.18 1 1 +github.com/muety/wakapi/models/filters.go:27.18,29.4 1 1 +github.com/muety/wakapi/models/filters.go:39.56,41.2 1 1 +github.com/muety/wakapi/models/filters.go:43.66,46.2 2 1 +github.com/muety/wakapi/models/filters.go:48.59,50.2 1 1 +github.com/muety/wakapi/models/filters.go:52.70,53.16 1 1 +github.com/muety/wakapi/models/filters.go:69.2,69.10 1 1 +github.com/muety/wakapi/models/filters.go:54.22,55.41 1 1 +github.com/muety/wakapi/models/filters.go:56.17,57.31 1 0 +github.com/muety/wakapi/models/filters.go:58.23,59.43 1 1 +github.com/muety/wakapi/models/filters.go:60.21,61.39 1 0 +github.com/muety/wakapi/models/filters.go:62.22,63.41 1 0 +github.com/muety/wakapi/models/filters.go:64.20,65.37 1 1 +github.com/muety/wakapi/models/filters.go:66.21,67.39 1 0 +github.com/muety/wakapi/models/filters.go:72.49,73.44 1 1 +github.com/muety/wakapi/models/filters.go:88.2,88.29 1 1 +github.com/muety/wakapi/models/filters.go:73.44,75.3 1 1 +github.com/muety/wakapi/models/filters.go:75.8,75.41 1 1 +github.com/muety/wakapi/models/filters.go:75.41,77.3 1 0 +github.com/muety/wakapi/models/filters.go:77.8,77.53 1 1 +github.com/muety/wakapi/models/filters.go:77.53,79.3 1 1 +github.com/muety/wakapi/models/filters.go:79.8,79.49 1 1 +github.com/muety/wakapi/models/filters.go:79.49,81.3 1 0 +github.com/muety/wakapi/models/filters.go:81.8,81.51 1 1 +github.com/muety/wakapi/models/filters.go:81.51,83.3 1 0 +github.com/muety/wakapi/models/filters.go:83.8,83.47 1 1 +github.com/muety/wakapi/models/filters.go:83.47,85.3 1 0 +github.com/muety/wakapi/models/filters.go:85.8,85.49 1 1 +github.com/muety/wakapi/models/filters.go:85.49,87.3 1 0 +github.com/muety/wakapi/models/filters.go:91.46,92.30 1 1 +github.com/muety/wakapi/models/filters.go:95.2,95.66 1 0 +github.com/muety/wakapi/models/filters.go:92.30,94.3 1 1 +github.com/muety/wakapi/models/filters.go:98.34,101.2 2 1 +github.com/muety/wakapi/models/filters.go:103.31,105.51 2 0 +github.com/muety/wakapi/models/filters.go:108.2,108.14 1 0 +github.com/muety/wakapi/models/filters.go:105.51,107.3 1 0 +github.com/muety/wakapi/models/filters.go:111.51,113.2 1 0 +github.com/muety/wakapi/models/filters.go:115.37,117.51 2 0 +github.com/muety/wakapi/models/filters.go:122.2,122.14 1 0 +github.com/muety/wakapi/models/filters.go:117.51,118.37 1 0 +github.com/muety/wakapi/models/filters.go:118.37,120.4 1 0 +github.com/muety/wakapi/models/filters.go:125.59,126.18 1 0 +github.com/muety/wakapi/models/filters.go:127.22,128.20 1 0 +github.com/muety/wakapi/models/filters.go:129.23,130.21 1 0 +github.com/muety/wakapi/models/filters.go:131.21,132.19 1 0 +github.com/muety/wakapi/models/filters.go:133.17,134.15 1 0 +github.com/muety/wakapi/models/filters.go:135.22,136.20 1 0 +github.com/muety/wakapi/models/filters.go:137.20,138.18 1 0 +github.com/muety/wakapi/models/filters.go:139.21,140.19 1 0 +github.com/muety/wakapi/models/filters.go:141.10,142.21 1 0 +github.com/muety/wakapi/models/filters.go:146.33,148.16 2 0 +github.com/muety/wakapi/models/filters.go:151.2,151.32 1 0 +github.com/muety/wakapi/models/filters.go:148.16,150.3 1 0 +github.com/muety/wakapi/models/filters.go:154.44,160.2 1 1 +github.com/muety/wakapi/models/filters.go:163.70,164.22 1 1 +github.com/muety/wakapi/models/filters.go:172.2,172.17 1 1 +github.com/muety/wakapi/models/filters.go:180.2,180.23 1 1 +github.com/muety/wakapi/models/filters.go:188.2,188.21 1 1 +github.com/muety/wakapi/models/filters.go:196.2,196.22 1 1 +github.com/muety/wakapi/models/filters.go:204.2,204.21 1 1 +github.com/muety/wakapi/models/filters.go:212.2,212.10 1 1 +github.com/muety/wakapi/models/filters.go:164.22,166.31 2 1 +github.com/muety/wakapi/models/filters.go:170.3,170.22 1 1 +github.com/muety/wakapi/models/filters.go:166.31,169.4 2 1 +github.com/muety/wakapi/models/filters.go:172.17,174.26 2 0 +github.com/muety/wakapi/models/filters.go:178.3,178.17 1 0 +github.com/muety/wakapi/models/filters.go:174.26,177.4 2 0 +github.com/muety/wakapi/models/filters.go:180.23,182.32 2 1 +github.com/muety/wakapi/models/filters.go:186.3,186.23 1 1 +github.com/muety/wakapi/models/filters.go:182.32,185.4 2 1 +github.com/muety/wakapi/models/filters.go:188.21,190.30 2 0 +github.com/muety/wakapi/models/filters.go:194.3,194.21 1 0 +github.com/muety/wakapi/models/filters.go:190.30,193.4 2 0 +github.com/muety/wakapi/models/filters.go:196.22,198.31 2 0 +github.com/muety/wakapi/models/filters.go:202.3,202.22 1 0 +github.com/muety/wakapi/models/filters.go:198.31,201.4 2 0 +github.com/muety/wakapi/models/filters.go:204.21,206.30 2 0 +github.com/muety/wakapi/models/filters.go:210.3,210.21 1 0 +github.com/muety/wakapi/models/filters.go:206.30,209.4 2 0 +github.com/muety/wakapi/models/filters.go:215.83,216.41 1 1 +github.com/muety/wakapi/models/filters.go:219.2,219.28 1 1 +github.com/muety/wakapi/models/filters.go:222.2,222.10 1 1 +github.com/muety/wakapi/models/filters.go:216.41,218.3 1 0 +github.com/muety/wakapi/models/filters.go:219.28,221.3 1 1 +github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 +github.com/muety/wakapi/models/project_label.go:14.39,16.2 1 0 +github.com/muety/wakapi/models/durations.go:7.30,9.2 1 0 +github.com/muety/wakapi/models/durations.go:11.40,13.2 1 0 +github.com/muety/wakapi/models/durations.go:15.35,17.2 1 0 +github.com/muety/wakapi/models/durations.go:19.45,21.22 2 0 +github.com/muety/wakapi/models/durations.go:24.2,24.14 1 0 +github.com/muety/wakapi/models/durations.go:21.22,23.3 1 0 +github.com/muety/wakapi/models/durations.go:27.39,30.2 2 0 +github.com/muety/wakapi/models/durations.go:32.39,34.18 1 0 +github.com/muety/wakapi/models/durations.go:37.2,37.16 1 0 +github.com/muety/wakapi/models/durations.go:34.18,36.3 1 0 +github.com/muety/wakapi/models/durations.go:40.38,42.18 1 0 +github.com/muety/wakapi/models/durations.go:45.2,45.24 1 0 +github.com/muety/wakapi/models/durations.go:42.18,44.3 1 0 +github.com/muety/wakapi/models/heartbeat.go:33.34,35.2 1 1 +github.com/muety/wakapi/models/heartbeat.go:37.65,39.46 2 1 +github.com/muety/wakapi/models/heartbeat.go:39.46,40.108 1 1 +github.com/muety/wakapi/models/heartbeat.go:40.108,43.4 2 1 +github.com/muety/wakapi/models/heartbeat.go:47.50,48.11 1 1 +github.com/muety/wakapi/models/heartbeat.go:63.2,63.15 1 1 +github.com/muety/wakapi/models/heartbeat.go:67.2,67.12 1 1 +github.com/muety/wakapi/models/heartbeat.go:49.22,50.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:51.21,52.17 1 1 +github.com/muety/wakapi/models/heartbeat.go:53.23,54.19 1 1 +github.com/muety/wakapi/models/heartbeat.go:55.17,56.26 1 1 +github.com/muety/wakapi/models/heartbeat.go:57.22,58.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:59.21,60.17 1 0 +github.com/muety/wakapi/models/heartbeat.go:63.15,65.3 1 1 +github.com/muety/wakapi/models/heartbeat.go:70.37,86.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:94.41,96.16 2 0 +github.com/muety/wakapi/models/heartbeat.go:99.2,100.10 2 0 +github.com/muety/wakapi/models/heartbeat.go:96.16,98.3 1 0 +github.com/muety/wakapi/models/heartbeat.go:103.38,113.2 1 0 github.com/muety/wakapi/routes/compat/shields/v1/badge.go:30.112,37.2 1 0 github.com/muety/wakapi/routes/compat/shields/v1/badge.go:39.59,43.2 2 0 github.com/muety/wakapi/routes/compat/shields/v1/badge.go:55.68,60.79 4 0 @@ -315,6 +339,309 @@ github.com/muety/wakapi/routes/compat/shields/v1/badge.go:167.2,167.36 1 0 github.com/muety/wakapi/routes/compat/shields/v1/badge.go:140.16,142.3 1 0 github.com/muety/wakapi/routes/compat/shields/v1/badge.go:151.29,153.3 1 0 github.com/muety/wakapi/routes/compat/shields/v1/badge.go:163.16,165.3 1 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 +github.com/muety/wakapi/middlewares/logging.go:45.2,54.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:39.44,40.38 1 0 +github.com/muety/wakapi/middlewares/logging.go:40.38,42.4 1 0 +github.com/muety/wakapi/middlewares/logging.go:57.41,59.14 2 0 +github.com/muety/wakapi/middlewares/logging.go:62.2,62.14 1 0 +github.com/muety/wakapi/middlewares/logging.go:65.2,65.11 1 0 +github.com/muety/wakapi/middlewares/logging.go:59.14,61.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:62.14,64.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:68.41,69.42 1 0 +github.com/muety/wakapi/middlewares/logging.go:72.2,72.12 1 0 +github.com/muety/wakapi/middlewares/logging.go:69.42,71.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:103.52,105.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:117.45,118.20 1 0 +github.com/muety/wakapi/middlewares/logging.go:118.20,122.3 3 0 +github.com/muety/wakapi/middlewares/logging.go:124.54,127.18 3 0 +github.com/muety/wakapi/middlewares/logging.go:134.2,135.15 2 0 +github.com/muety/wakapi/middlewares/logging.go:127.18,130.17 2 0 +github.com/muety/wakapi/middlewares/logging.go:130.17,132.4 1 0 +github.com/muety/wakapi/middlewares/logging.go:137.42,138.20 1 0 +github.com/muety/wakapi/middlewares/logging.go:138.20,140.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:142.36,144.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:145.42,147.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:148.40,150.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:151.52,153.2 1 0 +github.com/muety/wakapi/middlewares/principal.go:15.62,17.2 1 0 +github.com/muety/wakapi/middlewares/principal.go:19.58,21.2 1 0 +github.com/muety/wakapi/middlewares/principal.go:42.71,43.43 1 0 +github.com/muety/wakapi/middlewares/principal.go:43.43,45.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:48.81,51.2 2 0 +github.com/muety/wakapi/middlewares/principal.go:53.55,54.52 1 0 +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/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:30.91,36.2 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:38.90,41.2 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:43.90,46.2 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:48.71,49.71 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:49.71,51.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:54.107,58.16 3 0 +github.com/muety/wakapi/middlewares/authenticate.go:61.2,61.16 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:65.2,65.31 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:81.2,82.12 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:58.16,60.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:61.16,63.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:65.31,66.31 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:71.3,71.29 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:78.3,78.9 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:66.31,69.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:71.29,74.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:74.9,77.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:85.70,86.39 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:91.2,91.14 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:86.39,87.60 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:87.60,89.4 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:94.98,96.16 2 1 +github.com/muety/wakapi/middlewares/authenticate.go:100.2,103.16 4 1 +github.com/muety/wakapi/middlewares/authenticate.go:106.2,106.18 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:96.16,98.3 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:103.16,105.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:109.97,113.19 4 1 +github.com/muety/wakapi/middlewares/authenticate.go:116.2,117.16 2 1 +github.com/muety/wakapi/middlewares/authenticate.go:120.2,120.18 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:113.19,115.3 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:117.16,119.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:123.92,125.16 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:129.2,130.16 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:137.2,137.18 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:125.16,127.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:130.16,132.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/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/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.33 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.36,114.2 2 0 +github.com/muety/wakapi/utils/date.go:117.79,120.36 3 1 +github.com/muety/wakapi/utils/date.go:124.2,124.21 1 1 +github.com/muety/wakapi/utils/date.go:128.2,128.21 1 1 +github.com/muety/wakapi/utils/date.go:132.2,132.13 1 1 +github.com/muety/wakapi/utils/date.go:120.36,123.3 2 0 +github.com/muety/wakapi/utils/date.go:124.21,127.3 2 1 +github.com/muety/wakapi/utils/date.go:128.21,131.3 2 1 +github.com/muety/wakapi/utils/db.go:8.34,9.37 1 0 +github.com/muety/wakapi/utils/db.go:17.2,18.14 2 0 +github.com/muety/wakapi/utils/db.go:9.37,11.110 2 0 +github.com/muety/wakapi/utils/db.go:15.3,15.20 1 0 +github.com/muety/wakapi/utils/db.go:11.110,14.4 2 0 +github.com/muety/wakapi/utils/db.go:21.39,22.37 1 0 +github.com/muety/wakapi/utils/db.go:30.2,31.14 2 0 +github.com/muety/wakapi/utils/db.go:22.37,24.119 2 0 +github.com/muety/wakapi/utils/db.go:28.3,28.20 1 0 +github.com/muety/wakapi/utils/db.go:24.119,27.4 2 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,107.8 3 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:110.59,112.48 2 0 +github.com/muety/wakapi/utils/summary.go:115.2,115.49 1 0 +github.com/muety/wakapi/utils/summary.go:118.2,118.47 1 0 +github.com/muety/wakapi/utils/summary.go:121.2,121.48 1 0 +github.com/muety/wakapi/utils/summary.go:124.2,124.57 1 0 +github.com/muety/wakapi/utils/summary.go:127.2,127.46 1 0 +github.com/muety/wakapi/utils/summary.go:130.2,130.47 1 0 +github.com/muety/wakapi/utils/summary.go:133.2,133.16 1 0 +github.com/muety/wakapi/utils/summary.go:112.48,114.3 1 0 +github.com/muety/wakapi/utils/summary.go:115.49,117.3 1 0 +github.com/muety/wakapi/utils/summary.go:118.47,120.3 1 0 +github.com/muety/wakapi/utils/summary.go:121.48,123.3 1 0 +github.com/muety/wakapi/utils/summary.go:124.57,126.3 1 0 +github.com/muety/wakapi/utils/summary.go:127.46,129.3 1 0 +github.com/muety/wakapi/utils/summary.go:130.47,132.3 1 0 +github.com/muety/wakapi/utils/summary.go:136.48,140.51 2 0 +github.com/muety/wakapi/utils/summary.go:143.2,143.12 1 0 +github.com/muety/wakapi/utils/summary.go:140.51,142.3 1 0 +github.com/muety/wakapi/utils/template.go:13.41,15.16 2 0 +github.com/muety/wakapi/utils/template.go:18.2,18.23 1 0 +github.com/muety/wakapi/utils/template.go:15.16,17.3 1 0 +github.com/muety/wakapi/utils/template.go:21.37,22.30 1 0 +github.com/muety/wakapi/utils/template.go:25.2,25.10 1 0 +github.com/muety/wakapi/utils/template.go:22.30,24.3 1 0 +github.com/muety/wakapi/utils/template.go:28.83,33.16 4 0 +github.com/muety/wakapi/utils/template.go:37.2,37.29 1 0 +github.com/muety/wakapi/utils/template.go:62.2,62.23 1 0 +github.com/muety/wakapi/utils/template.go:33.16,35.3 1 0 +github.com/muety/wakapi/utils/template.go:37.29,39.51 2 0 +github.com/muety/wakapi/utils/template.go:43.3,44.17 2 0 +github.com/muety/wakapi/utils/template.go:47.3,48.17 2 0 +github.com/muety/wakapi/utils/template.go:52.3,55.17 3 0 +github.com/muety/wakapi/utils/template.go:59.3,59.27 1 0 +github.com/muety/wakapi/utils/template.go:39.51,40.12 1 0 +github.com/muety/wakapi/utils/template.go:44.17,46.4 1 0 +github.com/muety/wakapi/utils/template.go:48.17,50.4 1 0 +github.com/muety/wakapi/utils/template.go:55.17,57.4 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/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 @@ -410,309 +737,35 @@ github.com/muety/wakapi/config/config.go:390.51,393.3 2 0 github.com/muety/wakapi/config/config.go:394.94,396.3 1 0 github.com/muety/wakapi/config/config.go:397.81,399.3 1 0 github.com/muety/wakapi/config/config.go:400.75,402.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/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/middlewares/authenticate.go:30.91,36.2 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:38.90,41.2 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:43.90,46.2 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:48.71,49.71 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:49.71,51.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:54.107,58.16 3 0 -github.com/muety/wakapi/middlewares/authenticate.go:61.2,61.16 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:65.2,65.31 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:81.2,82.12 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:58.16,60.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:61.16,63.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:65.31,66.31 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:71.3,71.29 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:78.3,78.9 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:66.31,69.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:71.29,74.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:74.9,77.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:85.70,86.39 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:91.2,91.14 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:86.39,87.60 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:87.60,89.4 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:94.98,96.16 2 1 -github.com/muety/wakapi/middlewares/authenticate.go:100.2,103.16 4 1 -github.com/muety/wakapi/middlewares/authenticate.go:106.2,106.18 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:96.16,98.3 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:103.16,105.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:109.97,113.19 4 1 -github.com/muety/wakapi/middlewares/authenticate.go:116.2,117.16 2 1 -github.com/muety/wakapi/middlewares/authenticate.go:120.2,120.18 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:113.19,115.3 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:117.16,119.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:123.92,125.16 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:129.2,130.16 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:137.2,137.18 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:125.16,127.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:130.16,132.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 -github.com/muety/wakapi/middlewares/logging.go:45.2,54.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:39.44,40.38 1 0 -github.com/muety/wakapi/middlewares/logging.go:40.38,42.4 1 0 -github.com/muety/wakapi/middlewares/logging.go:57.41,59.14 2 0 -github.com/muety/wakapi/middlewares/logging.go:62.2,62.14 1 0 -github.com/muety/wakapi/middlewares/logging.go:65.2,65.11 1 0 -github.com/muety/wakapi/middlewares/logging.go:59.14,61.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:62.14,64.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:68.41,69.42 1 0 -github.com/muety/wakapi/middlewares/logging.go:72.2,72.12 1 0 -github.com/muety/wakapi/middlewares/logging.go:69.42,71.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:103.52,105.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:117.45,118.20 1 0 -github.com/muety/wakapi/middlewares/logging.go:118.20,122.3 3 0 -github.com/muety/wakapi/middlewares/logging.go:124.54,127.18 3 0 -github.com/muety/wakapi/middlewares/logging.go:134.2,135.15 2 0 -github.com/muety/wakapi/middlewares/logging.go:127.18,130.17 2 0 -github.com/muety/wakapi/middlewares/logging.go:130.17,132.4 1 0 -github.com/muety/wakapi/middlewares/logging.go:137.42,138.20 1 0 -github.com/muety/wakapi/middlewares/logging.go:138.20,140.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:142.36,144.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:145.42,147.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:148.40,150.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:151.52,153.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:15.62,17.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:19.58,21.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:42.71,43.43 1 0 -github.com/muety/wakapi/middlewares/principal.go:43.43,45.3 1 0 -github.com/muety/wakapi/middlewares/principal.go:48.81,51.2 2 0 -github.com/muety/wakapi/middlewares/principal.go:53.55,54.52 1 0 -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/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/utils/template.go:13.41,15.16 2 0 -github.com/muety/wakapi/utils/template.go:18.2,18.23 1 0 -github.com/muety/wakapi/utils/template.go:15.16,17.3 1 0 -github.com/muety/wakapi/utils/template.go:21.37,22.30 1 0 -github.com/muety/wakapi/utils/template.go:25.2,25.10 1 0 -github.com/muety/wakapi/utils/template.go:22.30,24.3 1 0 -github.com/muety/wakapi/utils/template.go:28.83,33.16 4 0 -github.com/muety/wakapi/utils/template.go:37.2,37.29 1 0 -github.com/muety/wakapi/utils/template.go:62.2,62.23 1 0 -github.com/muety/wakapi/utils/template.go:33.16,35.3 1 0 -github.com/muety/wakapi/utils/template.go:37.29,39.51 2 0 -github.com/muety/wakapi/utils/template.go:43.3,44.17 2 0 -github.com/muety/wakapi/utils/template.go:47.3,48.17 2 0 -github.com/muety/wakapi/utils/template.go:52.3,55.17 3 0 -github.com/muety/wakapi/utils/template.go:59.3,59.27 1 0 -github.com/muety/wakapi/utils/template.go:39.51,40.12 1 0 -github.com/muety/wakapi/utils/template.go:44.17,46.4 1 0 -github.com/muety/wakapi/utils/template.go:48.17,50.4 1 0 -github.com/muety/wakapi/utils/template.go:55.17,57.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/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/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.33 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.36,114.2 2 0 -github.com/muety/wakapi/utils/date.go:117.79,120.36 3 1 -github.com/muety/wakapi/utils/date.go:124.2,124.21 1 1 -github.com/muety/wakapi/utils/date.go:128.2,128.21 1 1 -github.com/muety/wakapi/utils/date.go:132.2,132.13 1 1 -github.com/muety/wakapi/utils/date.go:120.36,123.3 2 0 -github.com/muety/wakapi/utils/date.go:124.21,127.3 2 1 -github.com/muety/wakapi/utils/date.go:128.21,131.3 2 1 -github.com/muety/wakapi/utils/db.go:8.34,9.37 1 0 -github.com/muety/wakapi/utils/db.go:17.2,18.14 2 0 -github.com/muety/wakapi/utils/db.go:9.37,11.110 2 0 -github.com/muety/wakapi/utils/db.go:15.3,15.20 1 0 -github.com/muety/wakapi/utils/db.go:11.110,14.4 2 0 -github.com/muety/wakapi/utils/db.go:21.39,22.37 1 0 -github.com/muety/wakapi/utils/db.go:30.2,31.14 2 0 -github.com/muety/wakapi/utils/db.go:22.37,24.119 2 0 -github.com/muety/wakapi/utils/db.go:28.3,28.20 1 0 -github.com/muety/wakapi/utils/db.go:24.119,27.4 2 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/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/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/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,107.8 3 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:110.59,112.48 2 0 -github.com/muety/wakapi/utils/summary.go:115.2,115.49 1 0 -github.com/muety/wakapi/utils/summary.go:118.2,118.47 1 0 -github.com/muety/wakapi/utils/summary.go:121.2,121.48 1 0 -github.com/muety/wakapi/utils/summary.go:124.2,124.57 1 0 -github.com/muety/wakapi/utils/summary.go:127.2,127.46 1 0 -github.com/muety/wakapi/utils/summary.go:130.2,130.47 1 0 -github.com/muety/wakapi/utils/summary.go:133.2,133.16 1 0 -github.com/muety/wakapi/utils/summary.go:112.48,114.3 1 0 -github.com/muety/wakapi/utils/summary.go:115.49,117.3 1 0 -github.com/muety/wakapi/utils/summary.go:118.47,120.3 1 0 -github.com/muety/wakapi/utils/summary.go:121.48,123.3 1 0 -github.com/muety/wakapi/utils/summary.go:124.57,126.3 1 0 -github.com/muety/wakapi/utils/summary.go:127.46,129.3 1 0 -github.com/muety/wakapi/utils/summary.go:130.47,132.3 1 0 -github.com/muety/wakapi/utils/summary.go:136.48,140.51 2 0 -github.com/muety/wakapi/utils/summary.go:143.2,143.12 1 0 -github.com/muety/wakapi/utils/summary.go:140.51,142.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/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/duration.go:16.78,22.2 2 1 +github.com/muety/wakapi/services/duration.go:24.123,27.42 2 1 +github.com/muety/wakapi/services/duration.go:33.2,34.16 2 1 +github.com/muety/wakapi/services/duration.go:39.2,44.31 4 1 +github.com/muety/wakapi/services/duration.go:79.2,81.31 2 1 +github.com/muety/wakapi/services/duration.go:90.2,90.32 1 1 +github.com/muety/wakapi/services/duration.go:27.42,28.90 1 1 +github.com/muety/wakapi/services/duration.go:28.90,30.4 1 1 +github.com/muety/wakapi/services/duration.go:34.16,36.3 1 0 +github.com/muety/wakapi/services/duration.go:44.31,45.42 1 1 +github.com/muety/wakapi/services/duration.go:49.3,51.62 2 1 +github.com/muety/wakapi/services/duration.go:55.3,55.20 1 1 +github.com/muety/wakapi/services/duration.go:60.3,61.35 2 1 +github.com/muety/wakapi/services/duration.go:64.3,66.72 2 1 +github.com/muety/wakapi/services/duration.go:76.3,76.10 1 1 +github.com/muety/wakapi/services/duration.go:45.42,46.12 1 1 +github.com/muety/wakapi/services/duration.go:51.62,53.4 1 1 +github.com/muety/wakapi/services/duration.go:55.20,57.12 2 1 +github.com/muety/wakapi/services/duration.go:61.35,63.4 1 1 +github.com/muety/wakapi/services/duration.go:66.72,68.41 2 1 +github.com/muety/wakapi/services/duration.go:71.4,71.15 1 1 +github.com/muety/wakapi/services/duration.go:68.41,70.5 1 1 +github.com/muety/wakapi/services/duration.go:72.9,74.4 1 1 +github.com/muety/wakapi/services/duration.go:81.31,82.26 1 1 +github.com/muety/wakapi/services/duration.go:82.26,83.23 1 1 +github.com/muety/wakapi/services/duration.go:86.4,86.36 1 1 +github.com/muety/wakapi/services/duration.go:83.23,85.5 1 1 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 @@ -720,36 +773,76 @@ 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/project_label.go:20.111,27.2 1 0 -github.com/muety/wakapi/services/project_label.go:29.80,31.2 1 0 -github.com/muety/wakapi/services/project_label.go:33.90,34.51 1 0 -github.com/muety/wakapi/services/project_label.go:38.2,39.16 2 0 -github.com/muety/wakapi/services/project_label.go:42.2,43.20 2 0 -github.com/muety/wakapi/services/project_label.go:34.51,36.3 1 0 -github.com/muety/wakapi/services/project_label.go:39.16,41.3 1 0 -github.com/muety/wakapi/services/project_label.go:47.108,50.16 3 0 -github.com/muety/wakapi/services/project_label.go:54.2,54.31 1 0 -github.com/muety/wakapi/services/project_label.go:61.2,61.29 1 0 -github.com/muety/wakapi/services/project_label.go:50.16,52.3 1 0 -github.com/muety/wakapi/services/project_label.go:54.31,55.50 1 0 -github.com/muety/wakapi/services/project_label.go:55.50,57.4 1 0 -github.com/muety/wakapi/services/project_label.go:57.9,59.4 1 0 -github.com/muety/wakapi/services/project_label.go:65.116,68.16 3 0 -github.com/muety/wakapi/services/project_label.go:72.2,72.31 1 0 -github.com/muety/wakapi/services/project_label.go:79.2,79.29 1 0 -github.com/muety/wakapi/services/project_label.go:68.16,70.3 1 0 -github.com/muety/wakapi/services/project_label.go:72.31,73.45 1 0 -github.com/muety/wakapi/services/project_label.go:73.45,75.4 1 0 -github.com/muety/wakapi/services/project_label.go:75.9,77.4 1 0 -github.com/muety/wakapi/services/project_label.go:82.98,84.16 2 0 -github.com/muety/wakapi/services/project_label.go:88.2,90.20 3 0 -github.com/muety/wakapi/services/project_label.go:84.16,86.3 1 0 -github.com/muety/wakapi/services/project_label.go:93.74,94.24 1 0 -github.com/muety/wakapi/services/project_label.go:97.2,100.12 4 0 -github.com/muety/wakapi/services/project_label.go:94.24,96.3 1 0 -github.com/muety/wakapi/services/project_label.go:103.89,105.14 2 0 -github.com/muety/wakapi/services/project_label.go:108.2,111.4 1 0 -github.com/muety/wakapi/services/project_label.go:105.14,107.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 +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.73 4 0 +github.com/muety/wakapi/services/user.go:45.4,45.24 1 0 +github.com/muety/wakapi/services/user.go:41.73,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.122,160.35 2 0 +github.com/muety/wakapi/services/user.go:166.2,166.35 1 0 +github.com/muety/wakapi/services/user.go:170.2,170.18 1 0 +github.com/muety/wakapi/services/user.go:160.35,161.89 1 0 +github.com/muety/wakapi/services/user.go:161.89,163.4 1 0 +github.com/muety/wakapi/services/user.go:166.35,168.3 1 0 +github.com/muety/wakapi/services/user.go:173.106,176.96 3 0 +github.com/muety/wakapi/services/user.go:181.2,181.68 1 0 +github.com/muety/wakapi/services/user.go:176.96,178.3 1 0 +github.com/muety/wakapi/services/user.go:178.8,180.3 1 0 +github.com/muety/wakapi/services/user.go:184.85,186.2 1 0 +github.com/muety/wakapi/services/user.go:188.57,195.2 4 0 +github.com/muety/wakapi/services/user.go:197.38,199.2 1 0 +github.com/muety/wakapi/services/user.go:201.57,206.2 1 0 github.com/muety/wakapi/services/report.go:30.122,44.33 4 0 github.com/muety/wakapi/services/report.go:50.2,50.12 1 0 github.com/muety/wakapi/services/report.go:44.33,45.31 1 0 @@ -779,140 +872,6 @@ github.com/muety/wakapi/services/report.go:145.2,145.12 1 0 github.com/muety/wakapi/services/report.go:138.41,139.30 1 0 github.com/muety/wakapi/services/report.go:139.30,140.16 1 0 github.com/muety/wakapi/services/report.go:140.16,142.5 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.116 1 0 -github.com/muety/wakapi/services/aggregation.go:86.116,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:18.77,23.2 1 1 -github.com/muety/wakapi/services/alias.go:27.60,28.43 1 1 -github.com/muety/wakapi/services/alias.go:31.2,31.14 1 1 -github.com/muety/wakapi/services/alias.go:28.43,30.3 1 1 -github.com/muety/wakapi/services/alias.go:34.62,36.16 2 1 -github.com/muety/wakapi/services/alias.go:39.2,39.12 1 1 -github.com/muety/wakapi/services/alias.go:36.16,38.3 1 1 -github.com/muety/wakapi/services/alias.go:42.59,43.51 1 1 -github.com/muety/wakapi/services/alias.go:43.51,45.3 1 0 -github.com/muety/wakapi/services/alias.go:48.76,49.32 1 0 -github.com/muety/wakapi/services/alias.go:52.2,52.49 1 0 -github.com/muety/wakapi/services/alias.go:49.32,51.3 1 0 -github.com/muety/wakapi/services/alias.go:52.49,54.3 1 0 -github.com/muety/wakapi/services/alias.go:54.8,56.3 1 0 -github.com/muety/wakapi/services/alias.go:59.102,60.38 1 0 -github.com/muety/wakapi/services/alias.go:63.2,63.39 1 0 -github.com/muety/wakapi/services/alias.go:60.38,62.3 1 0 -github.com/muety/wakapi/services/alias.go:66.113,67.38 1 0 -github.com/muety/wakapi/services/alias.go:70.2,70.39 1 0 -github.com/muety/wakapi/services/alias.go:67.38,69.3 1 0 -github.com/muety/wakapi/services/alias.go:73.108,74.32 1 1 -github.com/muety/wakapi/services/alias.go:78.2,78.49 1 1 -github.com/muety/wakapi/services/alias.go:86.2,86.19 1 1 -github.com/muety/wakapi/services/alias.go:74.32,76.3 1 1 -github.com/muety/wakapi/services/alias.go:78.49,79.47 1 1 -github.com/muety/wakapi/services/alias.go:79.47,80.49 1 1 -github.com/muety/wakapi/services/alias.go:80.49,82.5 1 1 -github.com/muety/wakapi/services/alias.go:89.77,91.16 2 0 -github.com/muety/wakapi/services/alias.go:95.2,99.20 3 0 -github.com/muety/wakapi/services/alias.go:91.16,93.3 1 0 -github.com/muety/wakapi/services/alias.go:102.60,103.24 1 0 -github.com/muety/wakapi/services/alias.go:106.2,109.16 2 0 -github.com/muety/wakapi/services/alias.go:113.2,115.12 2 0 -github.com/muety/wakapi/services/alias.go:103.24,105.3 1 0 -github.com/muety/wakapi/services/alias.go:109.16,111.3 1 0 -github.com/muety/wakapi/services/alias.go:118.69,121.28 3 0 -github.com/muety/wakapi/services/alias.go:129.2,132.16 2 0 -github.com/muety/wakapi/services/alias.go:138.2,138.31 1 0 -github.com/muety/wakapi/services/alias.go:142.2,142.12 1 0 -github.com/muety/wakapi/services/alias.go:121.28,122.21 1 0 -github.com/muety/wakapi/services/alias.go:125.3,126.16 2 0 -github.com/muety/wakapi/services/alias.go:122.21,124.4 1 0 -github.com/muety/wakapi/services/alias.go:132.16,133.29 1 0 -github.com/muety/wakapi/services/alias.go:133.29,135.4 1 0 -github.com/muety/wakapi/services/alias.go:138.31,140.3 1 0 -github.com/muety/wakapi/services/alias.go:145.74,146.14 1 0 -github.com/muety/wakapi/services/alias.go:146.14,147.57 1 0 -github.com/muety/wakapi/services/alias.go:147.57,151.4 3 0 -github.com/muety/wakapi/services/alias.go:152.8,153.57 1 0 -github.com/muety/wakapi/services/alias.go:153.57,155.48 2 0 -github.com/muety/wakapi/services/alias.go:160.4,160.52 1 0 -github.com/muety/wakapi/services/alias.go:155.48,156.26 1 0 -github.com/muety/wakapi/services/alias.go:156.26,158.6 1 0 -github.com/muety/wakapi/services/alias.go:165.116,166.32 1 0 -github.com/muety/wakapi/services/alias.go:169.2,169.49 1 0 -github.com/muety/wakapi/services/alias.go:166.32,168.3 1 0 -github.com/muety/wakapi/services/alias.go:169.49,171.47 2 0 -github.com/muety/wakapi/services/alias.go:176.3,176.30 1 0 -github.com/muety/wakapi/services/alias.go:171.47,172.16 1 0 -github.com/muety/wakapi/services/alias.go:172.16,174.5 1 0 -github.com/muety/wakapi/services/alias.go:177.8,179.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/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.156 1 0 -github.com/muety/wakapi/services/misc.go:100.156,102.4 1 0 -github.com/muety/wakapi/services/misc.go:102.9,107.4 1 0 github.com/muety/wakapi/services/summary.go:29.189,41.33 3 1 github.com/muety/wakapi/services/summary.go:52.2,52.12 1 1 github.com/muety/wakapi/services/summary.go:41.33,42.31 1 1 @@ -1040,158 +999,233 @@ github.com/muety/wakapi/services/summary.go:462.3,462.24 1 1 github.com/muety/wakapi/services/summary.go:453.17,454.33 1 1 github.com/muety/wakapi/services/summary.go:454.33,456.5 1 1 github.com/muety/wakapi/services/summary.go:459.28,461.4 1 1 -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.73 4 0 -github.com/muety/wakapi/services/user.go:45.4,45.24 1 0 -github.com/muety/wakapi/services/user.go:41.73,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.122,160.35 2 0 -github.com/muety/wakapi/services/user.go:166.2,166.35 1 0 -github.com/muety/wakapi/services/user.go:170.2,170.18 1 0 -github.com/muety/wakapi/services/user.go:160.35,161.89 1 0 -github.com/muety/wakapi/services/user.go:161.89,163.4 1 0 -github.com/muety/wakapi/services/user.go:166.35,168.3 1 0 -github.com/muety/wakapi/services/user.go:173.106,176.96 3 0 -github.com/muety/wakapi/services/user.go:181.2,181.68 1 0 -github.com/muety/wakapi/services/user.go:176.96,178.3 1 0 -github.com/muety/wakapi/services/user.go:178.8,180.3 1 0 -github.com/muety/wakapi/services/user.go:184.85,186.2 1 0 -github.com/muety/wakapi/services/user.go:188.57,195.2 4 0 -github.com/muety/wakapi/services/user.go:197.38,199.2 1 0 -github.com/muety/wakapi/services/user.go:201.57,206.2 1 0 -github.com/muety/wakapi/services/duration.go:16.78,22.2 2 1 -github.com/muety/wakapi/services/duration.go:24.123,26.16 2 1 -github.com/muety/wakapi/services/duration.go:31.2,36.31 4 1 -github.com/muety/wakapi/services/duration.go:71.2,73.31 2 1 -github.com/muety/wakapi/services/duration.go:82.2,82.32 1 1 -github.com/muety/wakapi/services/duration.go:26.16,28.3 1 0 -github.com/muety/wakapi/services/duration.go:36.31,37.42 1 1 -github.com/muety/wakapi/services/duration.go:41.3,43.62 2 1 -github.com/muety/wakapi/services/duration.go:47.3,47.20 1 1 -github.com/muety/wakapi/services/duration.go:52.3,53.35 2 1 -github.com/muety/wakapi/services/duration.go:56.3,58.72 2 1 -github.com/muety/wakapi/services/duration.go:68.3,68.10 1 1 -github.com/muety/wakapi/services/duration.go:37.42,38.12 1 1 -github.com/muety/wakapi/services/duration.go:43.62,45.4 1 1 -github.com/muety/wakapi/services/duration.go:47.20,49.12 2 1 -github.com/muety/wakapi/services/duration.go:53.35,55.4 1 1 -github.com/muety/wakapi/services/duration.go:58.72,60.41 2 1 -github.com/muety/wakapi/services/duration.go:63.4,63.15 1 1 -github.com/muety/wakapi/services/duration.go:60.41,62.5 1 1 -github.com/muety/wakapi/services/duration.go:64.9,66.4 1 1 -github.com/muety/wakapi/services/duration.go:73.31,74.26 1 1 -github.com/muety/wakapi/services/duration.go:74.26,75.23 1 1 -github.com/muety/wakapi/services/duration.go:78.4,78.36 1 1 -github.com/muety/wakapi/services/duration.go:75.23,77.5 1 1 -github.com/muety/wakapi/services/heartbeat.go:27.141,41.33 3 0 -github.com/muety/wakapi/services/heartbeat.go:49.2,49.12 1 0 -github.com/muety/wakapi/services/heartbeat.go:41.33,42.31 1 0 -github.com/muety/wakapi/services/heartbeat.go:42.31,46.4 3 0 -github.com/muety/wakapi/services/heartbeat.go:52.72,55.2 2 0 -github.com/muety/wakapi/services/heartbeat.go:57.80,62.32 3 0 -github.com/muety/wakapi/services/heartbeat.go:70.2,71.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:74.2,74.12 1 0 -github.com/muety/wakapi/services/heartbeat.go:62.32,63.36 1 0 -github.com/muety/wakapi/services/heartbeat.go:67.3,67.46 1 0 -github.com/muety/wakapi/services/heartbeat.go:63.36,66.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:71.16,73.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:77.53,79.8 2 0 -github.com/muety/wakapi/services/heartbeat.go:82.2,83.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:86.2,86.19 1 0 -github.com/muety/wakapi/services/heartbeat.go:79.8,81.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:83.16,85.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:89.76,92.8 3 0 -github.com/muety/wakapi/services/heartbeat.go:95.2,96.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:99.2,99.19 1 0 -github.com/muety/wakapi/services/heartbeat.go:92.8,94.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:96.16,98.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:102.96,106.26 3 0 -github.com/muety/wakapi/services/heartbeat.go:116.2,117.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:121.2,121.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:127.2,127.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:106.26,109.9 3 0 -github.com/muety/wakapi/services/heartbeat.go:109.9,111.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:111.9,113.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:117.16,119.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:121.28,125.3 3 0 -github.com/muety/wakapi/services/heartbeat.go:130.111,132.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:135.2,135.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:132.16,134.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:138.92,140.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:142.116,144.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:146.78,148.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:150.104,152.54 2 0 -github.com/muety/wakapi/services/heartbeat.go:158.2,159.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:163.2,164.28 2 0 -github.com/muety/wakapi/services/heartbeat.go:170.2,171.22 2 0 -github.com/muety/wakapi/services/heartbeat.go:152.54,156.3 3 0 -github.com/muety/wakapi/services/heartbeat.go:159.16,161.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:164.28,165.33 1 0 -github.com/muety/wakapi/services/heartbeat.go:165.33,167.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:174.62,176.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:178.116,180.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:184.2,184.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:188.2,188.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:180.16,182.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:184.28,186.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:191.96,193.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:195.107,197.55 2 0 -github.com/muety/wakapi/services/heartbeat.go:197.55,203.41 4 0 -github.com/muety/wakapi/services/heartbeat.go:203.41,208.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:212.85,219.2 6 0 -github.com/muety/wakapi/services/heartbeat.go:221.74,222.32 1 0 -github.com/muety/wakapi/services/heartbeat.go:222.32,227.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:230.72,232.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:234.58,236.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:238.60,240.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 -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/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.116 1 0 +github.com/muety/wakapi/services/aggregation.go:86.116,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:18.77,23.2 1 1 +github.com/muety/wakapi/services/alias.go:27.60,28.43 1 1 +github.com/muety/wakapi/services/alias.go:31.2,31.14 1 1 +github.com/muety/wakapi/services/alias.go:28.43,30.3 1 1 +github.com/muety/wakapi/services/alias.go:34.62,36.16 2 1 +github.com/muety/wakapi/services/alias.go:39.2,39.12 1 1 +github.com/muety/wakapi/services/alias.go:36.16,38.3 1 1 +github.com/muety/wakapi/services/alias.go:42.59,43.51 1 1 +github.com/muety/wakapi/services/alias.go:43.51,45.3 1 0 +github.com/muety/wakapi/services/alias.go:48.76,49.32 1 0 +github.com/muety/wakapi/services/alias.go:52.2,52.49 1 0 +github.com/muety/wakapi/services/alias.go:49.32,51.3 1 0 +github.com/muety/wakapi/services/alias.go:52.49,54.3 1 0 +github.com/muety/wakapi/services/alias.go:54.8,56.3 1 0 +github.com/muety/wakapi/services/alias.go:59.102,60.38 1 0 +github.com/muety/wakapi/services/alias.go:63.2,63.39 1 0 +github.com/muety/wakapi/services/alias.go:60.38,62.3 1 0 +github.com/muety/wakapi/services/alias.go:66.113,67.38 1 0 +github.com/muety/wakapi/services/alias.go:70.2,70.39 1 0 +github.com/muety/wakapi/services/alias.go:67.38,69.3 1 0 +github.com/muety/wakapi/services/alias.go:73.108,74.32 1 1 +github.com/muety/wakapi/services/alias.go:78.2,78.49 1 1 +github.com/muety/wakapi/services/alias.go:86.2,86.19 1 1 +github.com/muety/wakapi/services/alias.go:74.32,76.3 1 1 +github.com/muety/wakapi/services/alias.go:78.49,79.47 1 1 +github.com/muety/wakapi/services/alias.go:79.47,80.49 1 1 +github.com/muety/wakapi/services/alias.go:80.49,82.5 1 1 +github.com/muety/wakapi/services/alias.go:89.77,91.16 2 0 +github.com/muety/wakapi/services/alias.go:95.2,99.20 3 0 +github.com/muety/wakapi/services/alias.go:91.16,93.3 1 0 +github.com/muety/wakapi/services/alias.go:102.60,103.24 1 0 +github.com/muety/wakapi/services/alias.go:106.2,109.16 2 0 +github.com/muety/wakapi/services/alias.go:113.2,115.12 2 0 +github.com/muety/wakapi/services/alias.go:103.24,105.3 1 0 +github.com/muety/wakapi/services/alias.go:109.16,111.3 1 0 +github.com/muety/wakapi/services/alias.go:118.69,121.28 3 0 +github.com/muety/wakapi/services/alias.go:129.2,132.16 2 0 +github.com/muety/wakapi/services/alias.go:138.2,138.31 1 0 +github.com/muety/wakapi/services/alias.go:142.2,142.12 1 0 +github.com/muety/wakapi/services/alias.go:121.28,122.21 1 0 +github.com/muety/wakapi/services/alias.go:125.3,126.16 2 0 +github.com/muety/wakapi/services/alias.go:122.21,124.4 1 0 +github.com/muety/wakapi/services/alias.go:132.16,133.29 1 0 +github.com/muety/wakapi/services/alias.go:133.29,135.4 1 0 +github.com/muety/wakapi/services/alias.go:138.31,140.3 1 0 +github.com/muety/wakapi/services/alias.go:145.74,146.14 1 0 +github.com/muety/wakapi/services/alias.go:146.14,147.57 1 0 +github.com/muety/wakapi/services/alias.go:147.57,151.4 3 0 +github.com/muety/wakapi/services/alias.go:152.8,153.57 1 0 +github.com/muety/wakapi/services/alias.go:153.57,155.48 2 0 +github.com/muety/wakapi/services/alias.go:160.4,160.52 1 0 +github.com/muety/wakapi/services/alias.go:155.48,156.26 1 0 +github.com/muety/wakapi/services/alias.go:156.26,158.6 1 0 +github.com/muety/wakapi/services/alias.go:165.116,166.32 1 0 +github.com/muety/wakapi/services/alias.go:169.2,169.49 1 0 +github.com/muety/wakapi/services/alias.go:166.32,168.3 1 0 +github.com/muety/wakapi/services/alias.go:169.49,171.47 2 0 +github.com/muety/wakapi/services/alias.go:176.3,176.30 1 0 +github.com/muety/wakapi/services/alias.go:171.47,172.16 1 0 +github.com/muety/wakapi/services/alias.go:172.16,174.5 1 0 +github.com/muety/wakapi/services/alias.go:177.8,179.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:26.141,40.33 3 0 +github.com/muety/wakapi/services/heartbeat.go:48.2,48.12 1 0 +github.com/muety/wakapi/services/heartbeat.go:40.33,41.31 1 0 +github.com/muety/wakapi/services/heartbeat.go:41.31,45.4 3 0 +github.com/muety/wakapi/services/heartbeat.go:51.72,54.2 2 0 +github.com/muety/wakapi/services/heartbeat.go:56.80,61.32 3 0 +github.com/muety/wakapi/services/heartbeat.go:69.2,70.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:73.2,73.12 1 0 +github.com/muety/wakapi/services/heartbeat.go:61.32,62.36 1 0 +github.com/muety/wakapi/services/heartbeat.go:66.3,66.46 1 0 +github.com/muety/wakapi/services/heartbeat.go:62.36,65.4 2 0 +github.com/muety/wakapi/services/heartbeat.go:70.16,72.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:76.53,78.8 2 0 +github.com/muety/wakapi/services/heartbeat.go:81.2,82.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:85.2,85.19 1 0 +github.com/muety/wakapi/services/heartbeat.go:78.8,80.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:82.16,84.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:88.76,91.8 3 0 +github.com/muety/wakapi/services/heartbeat.go:94.2,95.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:98.2,98.19 1 0 +github.com/muety/wakapi/services/heartbeat.go:91.8,93.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:95.16,97.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:101.96,105.26 3 0 +github.com/muety/wakapi/services/heartbeat.go:115.2,116.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:120.2,120.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:126.2,126.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:105.26,108.9 3 0 +github.com/muety/wakapi/services/heartbeat.go:108.9,110.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:110.9,112.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:116.16,118.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:120.28,124.3 3 0 +github.com/muety/wakapi/services/heartbeat.go:129.111,131.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:134.2,134.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:131.16,133.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:137.145,139.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:142.2,142.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:139.16,141.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:145.92,147.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:149.116,151.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:153.78,155.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:157.104,159.54 2 0 +github.com/muety/wakapi/services/heartbeat.go:165.2,166.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:170.2,171.28 2 0 +github.com/muety/wakapi/services/heartbeat.go:177.2,178.22 2 0 +github.com/muety/wakapi/services/heartbeat.go:159.54,163.3 3 0 +github.com/muety/wakapi/services/heartbeat.go:166.16,168.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:171.28,172.33 1 0 +github.com/muety/wakapi/services/heartbeat.go:172.33,174.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:181.62,183.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:185.116,187.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:191.2,191.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:195.2,195.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:187.16,189.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:191.28,193.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:198.96,200.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:202.107,204.55 2 0 +github.com/muety/wakapi/services/heartbeat.go:204.55,210.41 4 0 +github.com/muety/wakapi/services/heartbeat.go:210.41,215.4 2 0 +github.com/muety/wakapi/services/heartbeat.go:219.85,226.2 6 0 +github.com/muety/wakapi/services/heartbeat.go:228.74,229.32 1 0 +github.com/muety/wakapi/services/heartbeat.go:229.32,234.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:237.72,239.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:241.58,243.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:245.60,247.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:249.94,251.42 2 0 +github.com/muety/wakapi/services/heartbeat.go:257.2,257.18 1 0 +github.com/muety/wakapi/services/heartbeat.go:251.42,253.18 2 0 +github.com/muety/wakapi/services/heartbeat.go:253.18,255.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.156 1 0 +github.com/muety/wakapi/services/misc.go:100.156,102.4 1 0 +github.com/muety/wakapi/services/misc.go:102.9,107.4 1 0 +github.com/muety/wakapi/services/project_label.go:20.111,27.2 1 0 +github.com/muety/wakapi/services/project_label.go:29.80,31.2 1 0 +github.com/muety/wakapi/services/project_label.go:33.90,34.51 1 0 +github.com/muety/wakapi/services/project_label.go:38.2,39.16 2 0 +github.com/muety/wakapi/services/project_label.go:42.2,43.20 2 0 +github.com/muety/wakapi/services/project_label.go:34.51,36.3 1 0 +github.com/muety/wakapi/services/project_label.go:39.16,41.3 1 0 +github.com/muety/wakapi/services/project_label.go:47.108,50.16 3 0 +github.com/muety/wakapi/services/project_label.go:54.2,54.31 1 0 +github.com/muety/wakapi/services/project_label.go:61.2,61.29 1 0 +github.com/muety/wakapi/services/project_label.go:50.16,52.3 1 0 +github.com/muety/wakapi/services/project_label.go:54.31,55.50 1 0 +github.com/muety/wakapi/services/project_label.go:55.50,57.4 1 0 +github.com/muety/wakapi/services/project_label.go:57.9,59.4 1 0 +github.com/muety/wakapi/services/project_label.go:65.116,68.16 3 0 +github.com/muety/wakapi/services/project_label.go:72.2,72.31 1 0 +github.com/muety/wakapi/services/project_label.go:79.2,79.29 1 0 +github.com/muety/wakapi/services/project_label.go:68.16,70.3 1 0 +github.com/muety/wakapi/services/project_label.go:72.31,73.45 1 0 +github.com/muety/wakapi/services/project_label.go:73.45,75.4 1 0 +github.com/muety/wakapi/services/project_label.go:75.9,77.4 1 0 +github.com/muety/wakapi/services/project_label.go:82.98,84.16 2 0 +github.com/muety/wakapi/services/project_label.go:88.2,90.20 3 0 +github.com/muety/wakapi/services/project_label.go:84.16,86.3 1 0 +github.com/muety/wakapi/services/project_label.go:93.74,94.24 1 0 +github.com/muety/wakapi/services/project_label.go:97.2,100.12 4 0 +github.com/muety/wakapi/services/project_label.go:94.24,96.3 1 0 +github.com/muety/wakapi/services/project_label.go:103.89,105.14 2 0 +github.com/muety/wakapi/services/project_label.go:108.2,111.4 1 0 +github.com/muety/wakapi/services/project_label.go:105.14,107.3 1 0 diff --git a/mocks/heartbeat_service.go b/mocks/heartbeat_service.go index 0eebe42..8c22102 100644 --- a/mocks/heartbeat_service.go +++ b/mocks/heartbeat_service.go @@ -40,6 +40,11 @@ func (m *HeartbeatServiceMock) GetAllWithin(time time.Time, time2 time.Time, use return args.Get(0).([]*models.Heartbeat), args.Error(1) } +func (m *HeartbeatServiceMock) GetAllWithinByFilters(time time.Time, time2 time.Time, user *models.User, filters *models.Filters) ([]*models.Heartbeat, error) { + args := m.Called(time, time2, user, filters) + return args.Get(0).([]*models.Heartbeat), args.Error(1) +} + func (m *HeartbeatServiceMock) GetFirstByUsers() ([]*models.TimeByUser, error) { args := m.Called() return args.Get(0).([]*models.TimeByUser), args.Error(1) diff --git a/models/filters.go b/models/filters.go index db7db19..55514ac 100644 --- a/models/filters.go +++ b/models/filters.go @@ -92,7 +92,7 @@ func (f *Filters) OneOrEmpty() FilterElement { if ok, t, of := f.One(); ok { return FilterElement{entity: t, filter: of} } - return FilterElement{} + return FilterElement{entity: SummaryUnknown, filter: []string{}} } func (f *Filters) IsEmpty() bool { @@ -100,6 +100,49 @@ func (f *Filters) IsEmpty() bool { return !nonEmpty } +func (f *Filters) Count() int { + var count int + for i := SummaryProject; i <= SummaryBranch; i++ { + count += f.CountByEntity(i) + } + return count +} + +func (f *Filters) CountByEntity(entity uint8) int { + return len(*f.ResolveEntity(entity)) +} + +func (f *Filters) EntityCount() int { + var count int + for i := SummaryProject; i <= SummaryBranch; i++ { + if c := f.CountByEntity(i); c > 0 { + count++ + } + } + return count +} + +func (f *Filters) ResolveEntity(entityId uint8) *OrFilter { + switch entityId { + case SummaryProject: + return &f.Project + case SummaryLanguage: + return &f.Language + case SummaryEditor: + return &f.Editor + case SummaryOS: + return &f.OS + case SummaryMachine: + return &f.Machine + case SummaryLabel: + return &f.Label + case SummaryBranch: + return &f.Branch + default: + return &OrFilter{} + } +} + func (f *Filters) Hash() string { hash, err := hashstructure.Hash(f, hashstructure.FormatV2, nil) if err != nil { diff --git a/models/heartbeat.go b/models/heartbeat.go index 8b176d7..6eee4c0 100644 --- a/models/heartbeat.go +++ b/models/heartbeat.go @@ -15,18 +15,18 @@ type Heartbeat struct { Entity string `json:"entity" gorm:"not null; index:idx_entity"` Type string `json:"type"` Category string `json:"category"` - Project string `json:"project"` - Branch string `json:"branch"` + Project string `json:"project" gorm:"index:idx_project"` + Branch string `json:"branch" gorm:"index:idx_branch"` Language string `json:"language" gorm:"index:idx_language"` IsWrite bool `json:"is_write"` - Editor string `json:"editor" hash:"ignore"` // ignored because editor might be parsed differently by wakatime - OperatingSystem string `json:"operating_system" hash:"ignore"` // ignored because os might be parsed differently by wakatime - Machine string `json:"machine" hash:"ignore"` // ignored because wakatime api doesn't return machines currently - UserAgent string `json:"user_agent" hash:"ignore"` + Editor string `json:"editor" gorm:"index:idx_editor" hash:"ignore"` // ignored because editor might be parsed differently by wakatime + OperatingSystem string `json:"operating_system" gorm:"index:idx_operating_system" hash:"ignore"` // ignored because os might be parsed differently by wakatime + Machine string `json:"machine" gorm:"index:idx_machine" hash:"ignore"` // ignored because wakatime api doesn't return machines currently + UserAgent string `json:"user_agent" hash:"ignore" gorm:"type:varchar(255)"` Time CustomTime `json:"time" gorm:"type:timestamp; index:idx_time,idx_time_user" swaggertype:"primitive,number"` Hash string `json:"-" gorm:"type:varchar(17); uniqueIndex"` - Origin string `json:"-" hash:"ignore"` - OriginId string `json:"-" hash:"ignore"` + Origin string `json:"-" hash:"ignore" gorm:"type:varchar(255)"` + OriginId string `json:"-" hash:"ignore" gorm:"type:varchar(255)"` CreatedAt CustomTime `json:"created_at" gorm:"type:timestamp" swaggertype:"primitive,number" hash:"ignore"` // https://gorm.io/docs/conventions.html#CreatedAt } @@ -99,3 +99,15 @@ func (h *Heartbeat) Hashed() *Heartbeat { h.Hash = fmt.Sprintf("%x", hash) // "uint64 values with high bit set are not supported" return h } + +func GetEntityColumn(t uint8) string { + return []string{ + "project", + "language", + "editor", + "operating_system", + "machine", + "label", + "branch", + }[t] +} diff --git a/models/summary.go b/models/summary.go index b95550c..ebf383c 100644 --- a/models/summary.go +++ b/models/summary.go @@ -8,6 +8,7 @@ import ( const ( NSummaryTypes uint8 = 99 + SummaryUnknown uint8 = 98 SummaryProject uint8 = 0 SummaryLanguage uint8 = 1 SummaryEditor uint8 = 2 @@ -103,6 +104,20 @@ func (s *Summary) ItemsByType(summaryType uint8) *SummaryItems { return s.MappedItems()[summaryType] } +func (s *Summary) KeepOnly(types map[uint8]bool) *Summary { + if len(types) == 0 { + return s + } + + for _, t := range SummaryTypes() { + if keep, ok := types[t]; !keep || !ok { + *s.ItemsByType(t) = []*SummaryItem{} + } + } + + return s +} + /* Augments the summary in a way that at least one item is present for every type. If a summary has zero items for a given type, but one or more for any of the other types, the total summary duration can be derived from those and inserted as a dummy-item with key "unknown" diff --git a/models/summary_test.go b/models/summary_test.go index 9a72dbf..50c246a 100644 --- a/models/summary_test.go +++ b/models/summary_test.go @@ -168,6 +168,66 @@ func TestSummary_WithResolvedAliases(t *testing.T) { assert.Empty(t, sut.Machines) } +func TestSummary_KeepOnly(t *testing.T) { + newSummary := func() *Summary { + return &Summary{ + Projects: []*SummaryItem{ + { + Type: SummaryProject, + Key: "wakapi", + // hack to work around the issue that the total time of a summary item is mistakenly represented in seconds + Total: 10 * time.Minute / time.Second, + }, + { + Type: SummaryProject, + Key: "anchr", + Total: 10 * time.Minute / time.Second, + }, + }, + Languages: []*SummaryItem{ + { + Type: SummaryLanguage, + Key: "Go", + Total: 10 * time.Minute / time.Second, + }, + }, + Editors: []*SummaryItem{ + { + Type: SummaryEditor, + Key: "VSCode", + Total: 10 * time.Minute / time.Second, + }, + }, + } + } + + var sut *Summary + + sut = newSummary().KeepOnly(map[uint8]bool{}) // keep all + assert.NotZero(t, sut.TotalTimeBy(SummaryProject)) + assert.NotZero(t, sut.TotalTimeBy(SummaryLanguage)) + assert.NotZero(t, sut.TotalTimeBy(SummaryEditor)) + assert.Equal(t, 20*time.Minute, sut.TotalTime()) + + sut = newSummary().KeepOnly(map[uint8]bool{SummaryProject: true}) + assert.NotZero(t, sut.TotalTimeBy(SummaryProject)) + assert.Zero(t, sut.TotalTimeBy(SummaryLanguage)) + assert.Zero(t, sut.TotalTimeBy(SummaryEditor)) + assert.Equal(t, 20*time.Minute, sut.TotalTime()) + + sut = newSummary().KeepOnly(map[uint8]bool{SummaryEditor: true, SummaryLanguage: true}) + assert.Zero(t, sut.TotalTimeBy(SummaryProject)) + assert.NotZero(t, sut.TotalTimeBy(SummaryLanguage)) + assert.NotZero(t, sut.TotalTimeBy(SummaryEditor)) + assert.Equal(t, 10*time.Minute, sut.TotalTime()) + + sut = newSummary().KeepOnly(map[uint8]bool{SummaryProject: true}) + sut.FillMissing() + assert.NotZero(t, sut.TotalTimeBy(SummaryProject)) + assert.NotZero(t, sut.TotalTimeBy(SummaryLanguage)) + assert.NotZero(t, sut.TotalTimeBy(SummaryEditor)) +} + func TestSummaryItems_Sorted(t *testing.T) { testDuration1, testDuration2, testDuration3 := 10*time.Minute, 5*time.Minute, 20*time.Minute diff --git a/repositories/heartbeart.go b/repositories/heartbeat.go similarity index 88% rename from repositories/heartbeart.go rename to repositories/heartbeat.go index b959fd4..92382a6 100644 --- a/repositories/heartbeart.go +++ b/repositories/heartbeat.go @@ -77,6 +77,26 @@ func (r *HeartbeatRepository) GetAllWithin(from, to time.Time, user *models.User return heartbeats, nil } +func (r *HeartbeatRepository) GetAllWithinByFilters(from, to time.Time, user *models.User, filterMap map[string][]string) ([]*models.Heartbeat, error) { + // https://stackoverflow.com/a/20765152/3112139 + var heartbeats []*models.Heartbeat + + q := r.db. + Where(&models.Heartbeat{UserID: user.ID}). + Where("time >= ?", from.Local()). + Where("time < ?", to.Local()). + Order("time asc") + + for col, vals := range filterMap { + q = q.Where(col+" in ?", vals) + } + + if err := q.Find(&heartbeats).Error; err != nil { + return nil, err + } + return heartbeats, nil +} + func (r *HeartbeatRepository) GetFirstByUsers() ([]*models.TimeByUser, error) { var result []*models.TimeByUser r.db.Model(&models.User{}). diff --git a/repositories/repositories.go b/repositories/repositories.go index 2f6e219..45c2e31 100644 --- a/repositories/repositories.go +++ b/repositories/repositories.go @@ -20,6 +20,7 @@ type IHeartbeatRepository interface { InsertBatch([]*models.Heartbeat) error GetAll() ([]*models.Heartbeat, error) GetAllWithin(time.Time, time.Time, *models.User) ([]*models.Heartbeat, error) + GetAllWithinByFilters(time.Time, time.Time, *models.User, map[string][]string) ([]*models.Heartbeat, error) GetFirstByUsers() ([]*models.TimeByUser, error) GetLastByUsers() ([]*models.TimeByUser, error) GetLatestByUser(*models.User) (*models.Heartbeat, error) diff --git a/services/duration.go b/services/duration.go index 1df6800..42ab705 100644 --- a/services/duration.go +++ b/services/duration.go @@ -22,7 +22,15 @@ func NewDurationService(heartbeatService IHeartbeatService) *DurationService { } func (srv *DurationService) Get(from, to time.Time, user *models.User, filters *models.Filters) (models.Durations, error) { - heartbeats, err := srv.heartbeatService.GetAllWithin(from, to, user) + get := srv.heartbeatService.GetAllWithin + + if filters != nil && !filters.IsEmpty() { + get = func(t1 time.Time, t2 time.Time, user *models.User) ([]*models.Heartbeat, error) { + return srv.heartbeatService.GetAllWithinByFilters(t1, t2, user, filters) + } + } + + heartbeats, err := get(from, to, user) if err != nil { return nil, err } diff --git a/services/duration_test.go b/services/duration_test.go index 1bd4c97..cb3e6aa 100644 --- a/services/duration_test.go +++ b/services/duration_test.go @@ -4,6 +4,7 @@ import ( "github.com/muety/wakapi/mocks" "github.com/muety/wakapi/models" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" "math/rand" "testing" @@ -175,7 +176,7 @@ func (suite *DurationServiceTestSuite) TestDurationService_Get_Filtered() { ) from, to = suite.TestStartTime.Add(-1*time.Hour), suite.TestStartTime.Add(1*time.Hour) - suite.HeartbeatService.On("GetAllWithin", from, to, suite.TestUser).Return(filterHeartbeats(from, to, suite.TestHeartbeats), nil) + suite.HeartbeatService.On("GetAllWithinByFilters", from, to, suite.TestUser, mock.Anything).Return(filterHeartbeats(from, to, suite.TestHeartbeats), nil) durations, err = sut.Get(from, to, suite.TestUser, models.NewFiltersWith(models.SummaryEditor, TestEditorGoland)) assert.Nil(suite.T(), err) diff --git a/services/heartbeat.go b/services/heartbeat.go index 5c2e260..7bbd9b7 100644 --- a/services/heartbeat.go +++ b/services/heartbeat.go @@ -134,6 +134,14 @@ func (srv *HeartbeatService) GetAllWithin(from, to time.Time, user *models.User) return srv.augmented(heartbeats, user.ID) } +func (srv *HeartbeatService) GetAllWithinByFilters(from, to time.Time, user *models.User, filters *models.Filters) ([]*models.Heartbeat, error) { + heartbeats, err := srv.repository.GetAllWithinByFilters(from, to, user, srv.filtersToColumnMap(filters)) + if err != nil { + return nil, err + } + return srv.augmented(heartbeats, user.ID) +} + func (srv *HeartbeatService) GetLatestByUser(user *models.User) (*models.Heartbeat, error) { return srv.repository.GetLatestByUser(user) } @@ -237,3 +245,14 @@ func (srv *HeartbeatService) countTotalCacheKey() string { func (srv *HeartbeatService) countCacheTtl() time.Duration { return time.Duration(srv.config.App.CountCacheTTLMin) * time.Minute } + +func (srv *HeartbeatService) filtersToColumnMap(filters *models.Filters) map[string][]string { + columnMap := map[string][]string{} + for _, t := range models.SummaryTypes() { + f := filters.ResolveEntity(t) + if len(*f) > 0 { + columnMap[models.GetEntityColumn(t)] = *f + } + } + return columnMap +} diff --git a/services/services.go b/services/services.go index a317942..e743598 100644 --- a/services/services.go +++ b/services/services.go @@ -33,6 +33,7 @@ type IHeartbeatService interface { CountByUser(*models.User) (int64, error) CountByUsers([]*models.User) ([]*models.CountByUser, error) GetAllWithin(time.Time, time.Time, *models.User) ([]*models.Heartbeat, error) + GetAllWithinByFilters(time.Time, time.Time, *models.User, *models.Filters) ([]*models.Heartbeat, error) GetFirstByUsers() ([]*models.TimeByUser, error) GetLatestByUser(*models.User) (*models.Heartbeat, error) GetLatestByOriginAndUser(string, *models.User) (*models.Heartbeat, error)