1515package object
1616
1717import (
18- "encoding/json"
1918 "errors"
2019 "fmt"
2120 "time"
@@ -41,24 +40,25 @@ func getTargetfieldValue(record *Record, fieldName string) (string, error) {
4140 case "user_agent" :
4241 return record .UserAgent , nil
4342 case "response" :
44- var data map [string ]interface {}
45- err := json .Unmarshal ([]byte (record .Response ), & data )
46- if err != nil {
47- return "" , err
48- }
49- status , ok := data ["status" ].(string )
50- if ok {
51- return status , nil
52- } else {
53- return "" , err
43+ status := "error"
44+ if record .Response == "{\" status\" :\" ok\" ,\" msg\" :\" \" }" {
45+ status = "ok"
5446 }
47+ return status , nil
48+ case "unit" :
49+ return record .Unit , nil
50+ case "section" :
51+ return record .Section , nil
52+ case "city" :
53+ return record .City , nil
54+ case "region" :
55+ return record .Region , nil
5556 }
5657 return "" , errors .New ("no matched field" )
5758}
5859
59- func GetActivities (days int , user string , fieldName string ) ([]* Activity , error ) {
60- records := []* Record {}
61- err := adapter .engine .Desc ("created_time" ).Find (& records , & Record {Owner : "casbin" })
60+ func GetActivities (days int , user string , fieldNames []string ) (map [string ][]* Activity , error ) {
61+ records , err := getAllRecords ()
6262 if err != nil {
6363 return nil , err
6464 }
@@ -67,14 +67,17 @@ func GetActivities(days int, user string, fieldName string) ([]*Activity, error)
6767 // Adjusted to include today in the count by subtracting days-1
6868 startDateTime := now .AddDate (0 , 0 , - (days - 1 )).Truncate (24 * time .Hour )
6969
70- // Adjusted the size to days, as we're now including today
71- activities := make ([]* Activity , days )
72-
73- for i := 0 ; i < days ; i ++ {
74- activities [i ] = & Activity {
75- Date : startDateTime .AddDate (0 , 0 , i ).Format ("2006-01-02" ),
76- FieldCount : make (map [string ]int ),
70+ resp := make (map [string ][]* Activity )
71+ for j := 0 ; j < len (fieldNames ); j ++ {
72+ // Adjusted the size to days, as we're now including today
73+ activities := make ([]* Activity , days )
74+ for i := 0 ; i < days ; i ++ {
75+ activities [i ] = & Activity {
76+ Date : startDateTime .AddDate (0 , 0 , i ).Format ("2006-01-02" ),
77+ FieldCount : make (map [string ]int ),
78+ }
7779 }
80+ resp [fieldNames [j ]] = activities
7881 }
7982
8083 for _ , record := range records {
@@ -92,98 +95,26 @@ func GetActivities(days int, user string, fieldName string) ([]*Activity, error)
9295 if dayIndex < 0 || dayIndex >= days {
9396 continue
9497 }
95- value , err := getTargetfieldValue (record , fieldName )
96- if err != nil {
97- return nil , fmt .Errorf ("failed to parse record: name %s, field %s, error: %v" , record .Name , fieldName , err )
98- }
99- activities [dayIndex ].FieldCount [value ] += 1
100- }
101-
102- for i := 1 ; i < days ; i ++ {
103- for action , count := range activities [i - 1 ].FieldCount {
104- activities [i ].FieldCount [action ] += count
105- }
106- }
107-
108- return activities , nil
109- }
110-
111- func GetRangeActivities (rangeType string , count int , user string , fieldName string ) ([]* Activity , error ) {
112- records , err := GetRecords ("casbin" )
113- if err != nil {
114- return nil , err
115- }
116-
117- now := time .Now ()
118-
119- var startDateTime time.Time
120-
121- switch rangeType {
122- case "Hour" :
123- startDateTime = now .Truncate (time .Hour ).Add (- time .Hour * time .Duration (count - 1 ))
124- case "Day" :
125- startDateTime = now .Truncate (24 * time .Hour ).AddDate (0 , 0 , - (count - 1 ))
126- case "Week" :
127- offset := int (time .Monday - now .Weekday ())
128- if offset > 0 {
129- offset -= 7
130- }
131- startOfWeek := now .AddDate (0 , 0 , offset )
132- startDateTime = startOfWeek .Truncate (24 * time .Hour ).AddDate (0 , 0 , - 7 * (count - 1 ))
133- case "Month" :
134- startDateTime = now .Truncate (24 * time .Hour ).AddDate (0 , - count + 1 , 0 )
135- default :
136- return nil , fmt .Errorf ("invalid range type: %s" , rangeType )
137- }
138-
139- activities := make ([]* Activity , count )
140- for i := range activities {
141- activities [i ] = & Activity {FieldCount : make (map [string ]int )}
142- }
143-
144- for _ , record := range records {
145- if ! (user == "All" || record .User == user ) {
146- continue
147- }
148- recordTime , _ := time .Parse (time .RFC3339 , record .CreatedTime )
149- bucketIndex := - 1
150-
151- switch rangeType {
152- case "Hour" :
153- bucketIndex = int (recordTime .Sub (startDateTime ).Hours ())
154- case "Day" :
155- bucketIndex = int (recordTime .Sub (startDateTime ).Hours () / 24 )
156- case "Week" :
157- bucketIndex = int (recordTime .Sub (startDateTime ).Hours () / (24 * 7 ))
158- case "Month" :
159- monthDiff := (recordTime .Year ()- startDateTime .Year ())* 12 + int (recordTime .Month ()- startDateTime .Month ())
160- bucketIndex = monthDiff
161- }
162-
163- if bucketIndex >= 0 && bucketIndex < count {
98+ for _ , fieldName := range fieldNames {
16499 value , err := getTargetfieldValue (record , fieldName )
165100 if err != nil {
166- return nil , err
101+ return nil , fmt .Errorf ("failed to parse record: name %s, field %s, error: %v" , record .Name , fieldName , err )
102+ }
103+
104+ if value != "" {
105+ activity := resp [fieldName ]
106+ activity [dayIndex ].FieldCount [value ] += 1
167107 }
168- activities [bucketIndex ].FieldCount [value ] += 1
169108 }
170109 }
171110
172- // Assign dates and refine price for each usage after calculations are complete
173- for i , activity := range activities {
174- var dateLabel string
175- switch rangeType {
176- case "Hour" :
177- dateLabel = startDateTime .Add (time .Hour * time .Duration (i )).Format ("2006-01-02 15" )
178- case "Day" :
179- dateLabel = startDateTime .AddDate (0 , 0 , i ).Format ("2006-01-02" )
180- case "Week" :
181- dateLabel = startDateTime .AddDate (0 , 0 , 7 * i ).Format ("2006-01-02" )
182- case "Month" :
183- dateLabel = startDateTime .AddDate (0 , i , 0 ).Format ("2006-01" )
111+ for i := 1 ; i < days ; i ++ {
112+ for _ , activities := range resp {
113+ for action , count := range activities [i - 1 ].FieldCount {
114+ activities [i ].FieldCount [action ] += count
115+ }
184116 }
185- activity .Date = dateLabel
186117 }
187118
188- return activities , nil
119+ return resp , nil
189120}
0 commit comments