...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package v2store
16
17 import (
18 "encoding/json"
19 "sync/atomic"
20 )
21
22 const (
23 SetSuccess = iota
24 SetFail
25 DeleteSuccess
26 DeleteFail
27 CreateSuccess
28 CreateFail
29 UpdateSuccess
30 UpdateFail
31 CompareAndSwapSuccess
32 CompareAndSwapFail
33 GetSuccess
34 GetFail
35 ExpireCount
36 CompareAndDeleteSuccess
37 CompareAndDeleteFail
38 )
39
40 type Stats struct {
41
42
43 GetSuccess uint64 `json:"getsSuccess"`
44 GetFail uint64 `json:"getsFail"`
45
46
47
48 SetSuccess uint64 `json:"setsSuccess"`
49 SetFail uint64 `json:"setsFail"`
50
51
52
53 DeleteSuccess uint64 `json:"deleteSuccess"`
54 DeleteFail uint64 `json:"deleteFail"`
55
56
57
58 UpdateSuccess uint64 `json:"updateSuccess"`
59 UpdateFail uint64 `json:"updateFail"`
60
61
62
63 CreateSuccess uint64 `json:"createSuccess"`
64 CreateFail uint64 `json:"createFail"`
65
66
67
68 CompareAndSwapSuccess uint64 `json:"compareAndSwapSuccess"`
69 CompareAndSwapFail uint64 `json:"compareAndSwapFail"`
70
71
72
73 CompareAndDeleteSuccess uint64 `json:"compareAndDeleteSuccess"`
74 CompareAndDeleteFail uint64 `json:"compareAndDeleteFail"`
75
76 ExpireCount uint64 `json:"expireCount"`
77
78 Watchers uint64 `json:"watchers"`
79 }
80
81 func newStats() *Stats {
82 s := new(Stats)
83 return s
84 }
85
86 func (s *Stats) clone() *Stats {
87 return &Stats{
88 GetSuccess: atomic.LoadUint64(&s.GetSuccess),
89 GetFail: atomic.LoadUint64(&s.GetFail),
90 SetSuccess: atomic.LoadUint64(&s.SetSuccess),
91 SetFail: atomic.LoadUint64(&s.SetFail),
92 DeleteSuccess: atomic.LoadUint64(&s.DeleteSuccess),
93 DeleteFail: atomic.LoadUint64(&s.DeleteFail),
94 UpdateSuccess: atomic.LoadUint64(&s.UpdateSuccess),
95 UpdateFail: atomic.LoadUint64(&s.UpdateFail),
96 CreateSuccess: atomic.LoadUint64(&s.CreateSuccess),
97 CreateFail: atomic.LoadUint64(&s.CreateFail),
98 CompareAndSwapSuccess: atomic.LoadUint64(&s.CompareAndSwapSuccess),
99 CompareAndSwapFail: atomic.LoadUint64(&s.CompareAndSwapFail),
100 CompareAndDeleteSuccess: atomic.LoadUint64(&s.CompareAndDeleteSuccess),
101 CompareAndDeleteFail: atomic.LoadUint64(&s.CompareAndDeleteFail),
102 ExpireCount: atomic.LoadUint64(&s.ExpireCount),
103 Watchers: atomic.LoadUint64(&s.Watchers),
104 }
105 }
106
107 func (s *Stats) toJson() []byte {
108 b, _ := json.Marshal(s)
109 return b
110 }
111
112 func (s *Stats) Inc(field int) {
113 switch field {
114 case SetSuccess:
115 atomic.AddUint64(&s.SetSuccess, 1)
116 case SetFail:
117 atomic.AddUint64(&s.SetFail, 1)
118 case CreateSuccess:
119 atomic.AddUint64(&s.CreateSuccess, 1)
120 case CreateFail:
121 atomic.AddUint64(&s.CreateFail, 1)
122 case DeleteSuccess:
123 atomic.AddUint64(&s.DeleteSuccess, 1)
124 case DeleteFail:
125 atomic.AddUint64(&s.DeleteFail, 1)
126 case GetSuccess:
127 atomic.AddUint64(&s.GetSuccess, 1)
128 case GetFail:
129 atomic.AddUint64(&s.GetFail, 1)
130 case UpdateSuccess:
131 atomic.AddUint64(&s.UpdateSuccess, 1)
132 case UpdateFail:
133 atomic.AddUint64(&s.UpdateFail, 1)
134 case CompareAndSwapSuccess:
135 atomic.AddUint64(&s.CompareAndSwapSuccess, 1)
136 case CompareAndSwapFail:
137 atomic.AddUint64(&s.CompareAndSwapFail, 1)
138 case CompareAndDeleteSuccess:
139 atomic.AddUint64(&s.CompareAndDeleteSuccess, 1)
140 case CompareAndDeleteFail:
141 atomic.AddUint64(&s.CompareAndDeleteFail, 1)
142 case ExpireCount:
143 atomic.AddUint64(&s.ExpireCount, 1)
144 }
145 }
146
View as plain text