-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcache.go
85 lines (70 loc) · 1.87 KB
/
cache.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package main
import (
"encoding/json"
"time"
"github.com/rs/zerolog/log"
)
func getCalendarMonthForUser(c *Calendar, start time.Time, end time.Time) ([]interface{}, error) {
var calData map[string]interface{}
var cachedValues []interface{}
url := "https://graph.microsoft.com/v1.0/me/calendarview?startdatetime=" + start.Format(RFC3339Short) + "&enddatetime=" + end.Format(RFC3339Short) + "&top=10&skip=0"
body, err := c.getRemoteData(url)
if err != nil {
return nil, err
}
if err := json.Unmarshal(body, &calData); err != nil {
return nil, err
}
for {
values := calData["value"].([]interface{})
cachedValues = append(cachedValues, values...)
if nextPage, ok := calData["@odata.nextLink"].(string); ok {
calData = make(map[string]interface{})
body, err := c.getRemoteData(nextPage)
if err != nil {
return nil, err
}
if err := json.Unmarshal(body, &calData); err != nil {
return nil, err
}
} else {
break
}
}
return cachedValues, nil
}
func refreshCache() {
for {
time.Sleep(60 * time.Second)
for _, v := range loggedUsers {
if !v.valid {
continue
}
start, end := getMonthAfterStartEndWeekDays()
lastUpdated, err := cachedData.getCacheForUserLastUpdate(v.userName, start, end)
if err != nil || time.Since(lastUpdated).Hours() >= 24 {
cachedValues, err := getCalendarMonthForUser(v, start, end)
if err != nil {
log.Error().
Err(err).
Str("user", v.userName).
Str("method", "getCalendarMonthForUser").
Send()
continue
}
err = cachedData.saveCacheForUser(v.userName, start, end, cachedValues)
if err != nil {
log.Error().
Err(err).
Str("user", v.userName).
Str("method", "saveCacheForUser").
Send()
}
log.Info().
Str("user", v.userName).
Str("method", "refreshCache").
Msg("Updated cached data for user")
}
}
}
}