-
Notifications
You must be signed in to change notification settings - Fork 27
/
project_hourly_report.go
69 lines (57 loc) · 1.26 KB
/
project_hourly_report.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package analytic
import (
"fmt"
"time"
"github.com/authgear/authgear-server/pkg/lib/infra/db/appdb"
"github.com/authgear/authgear-server/pkg/lib/infra/db/globaldb"
)
type ProjectHourlyReportOptions struct {
Time *time.Time
}
type ProjectHourlyReport struct {
GlobalHandle *globaldb.Handle
GlobalDBStore *GlobalDBStore
AppDBHandle *appdb.Handle
AppDBStore *AppDBStore
}
func (r *ProjectHourlyReport) Run(options *ProjectHourlyReportOptions) (data *ReportData, err error) {
var appIDs []string
if err = r.GlobalHandle.ReadOnly(func() error {
appIDs, err = r.GlobalDBStore.GetAppIDs()
if err != nil {
return fmt.Errorf("failed to fetch app ids: %w", err)
}
return nil
}); err != nil {
return
}
timeStr := options.Time.Format("2006-01-02T15")
values := make([][]interface{}, len(appIDs))
for i, appID := range appIDs {
var count int
err = r.AppDBHandle.ReadOnly(func() error {
count, err = r.AppDBStore.GetUserCountBeforeTime(appID, options.Time)
if err != nil {
return err
}
return nil
})
if err != nil {
return
}
values[i] = []interface{}{
timeStr,
appID,
count,
}
}
data = &ReportData{
Header: []interface{}{
"Hour",
"Project ID",
"Number of users",
},
Values: values,
}
return
}