-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdstore.go
More file actions
92 lines (82 loc) · 1.93 KB
/
Copy pathdstore.go
File metadata and controls
92 lines (82 loc) · 1.93 KB
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
86
87
88
89
90
91
92
package main
import (
"fmt"
"time"
"github.com/therealbill/libredis/client"
)
type SentinelStore struct {
SentinelHosts []string
Master *client.Redis
Slaves []*client.Redis
UseSentinel bool
RedisAuth string
PodName string
MasterAddress string
}
type DataStore interface {
ConnectMaster() error
StoreEventEntry(instance, event string, value int) error
GetInstanceEvent(instance, event string) (int, error)
}
func (d *SentinelStore) ConnectSentinel() (error, bool) {
if !d.UseSentinel {
return nil, false
}
haveconn := false
for _, addr := range d.SentinelHosts {
conn, err := client.DialWithConfig(&client.DialConfig{Address: addr})
if err != nil {
continue
} else {
master, err := conn.SentinelGetMaster(d.PodName)
if err == nil {
logger.Info(fmt.Sprintf("%+v", master))
return nil, true
}
}
}
return nil, haveconn
}
func (d *SentinelStore) testMasterConn() bool {
err := d.Master.Ping()
if err != nil {
return true
}
return false
}
func (d *SentinelStore) ConnectMaster() (master *client.Redis, err error) {
if d.Master == nil {
err = fmt.Errorf("No master has been pulled from Sentinels")
return
}
if d.UseSentinel {
if d.Master == nil {
d.ConnectSentinel()
}
if d.testMasterConn() {
return d.Master, nil
}
}
return d.Master, nil
}
func (d *SentinelStore) StoreEventEntry(instance, event, value string) error {
conn, err := d.ConnectMaster()
if err != nil {
return err
}
keyname := "_latency:i" + instance + ":" + event
now := time.Now().Unix()
res, err := conn.ZAdd(keyname, float64(now), value)
fmt.Printf("%+v\n", res)
return err
}
func (d *SentinelStore) GetInstanceEvents(instance, event string) (results []int, err error) {
conn, err := d.ConnectMaster()
if err != nil {
return results, err
}
keyname := "_latency:i" + instance + ":" + event
res, err := conn.ZRange(keyname, 0, -1, true)
fmt.Printf("%+v\n", res)
return results, err
}