go.etcd.io/etcd@v3.3.27+incompatible/store/stats.go (about) 1 // Copyright 2015 The etcd Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package store 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 // Number of get requests 42 43 GetSuccess uint64 `json:"getsSuccess"` 44 GetFail uint64 `json:"getsFail"` 45 46 // Number of sets requests 47 48 SetSuccess uint64 `json:"setsSuccess"` 49 SetFail uint64 `json:"setsFail"` 50 51 // Number of delete requests 52 53 DeleteSuccess uint64 `json:"deleteSuccess"` 54 DeleteFail uint64 `json:"deleteFail"` 55 56 // Number of update requests 57 58 UpdateSuccess uint64 `json:"updateSuccess"` 59 UpdateFail uint64 `json:"updateFail"` 60 61 // Number of create requests 62 63 CreateSuccess uint64 `json:"createSuccess"` 64 CreateFail uint64 `json:"createFail"` 65 66 // Number of testAndSet requests 67 68 CompareAndSwapSuccess uint64 `json:"compareAndSwapSuccess"` 69 CompareAndSwapFail uint64 `json:"compareAndSwapFail"` 70 71 // Number of compareAndDelete requests 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: s.GetSuccess, 89 GetFail: s.GetFail, 90 SetSuccess: s.SetSuccess, 91 SetFail: s.SetFail, 92 DeleteSuccess: s.DeleteSuccess, 93 DeleteFail: s.DeleteFail, 94 UpdateSuccess: s.UpdateSuccess, 95 UpdateFail: s.UpdateFail, 96 CreateSuccess: s.CreateSuccess, 97 CreateFail: s.CreateFail, 98 CompareAndSwapSuccess: s.CompareAndSwapSuccess, 99 CompareAndSwapFail: s.CompareAndSwapFail, 100 CompareAndDeleteSuccess: s.CompareAndDeleteSuccess, 101 CompareAndDeleteFail: s.CompareAndDeleteFail, 102 ExpireCount: s.ExpireCount, 103 Watchers: 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 }