// Copyright 2015 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package store import ( "encoding/json" "sync/atomic" ) const ( SetSuccess = iota SetFail DeleteSuccess DeleteFail CreateSuccess CreateFail UpdateSuccess UpdateFail CompareAndSwapSuccess CompareAndSwapFail GetSuccess GetFail ExpireCount CompareAndDeleteSuccess CompareAndDeleteFail ) type Stats struct { // Number of get requests GetSuccess uint64 `json:"getsSuccess"` GetFail uint64 `json:"getsFail"` // Number of sets requests SetSuccess uint64 `json:"setsSuccess"` SetFail uint64 `json:"setsFail"` // Number of delete requests DeleteSuccess uint64 `json:"deleteSuccess"` DeleteFail uint64 `json:"deleteFail"` // Number of update requests UpdateSuccess uint64 `json:"updateSuccess"` UpdateFail uint64 `json:"updateFail"` // Number of create requests CreateSuccess uint64 `json:"createSuccess"` CreateFail uint64 `json:"createFail"` // Number of testAndSet requests CompareAndSwapSuccess uint64 `json:"compareAndSwapSuccess"` CompareAndSwapFail uint64 `json:"compareAndSwapFail"` // Number of compareAndDelete requests CompareAndDeleteSuccess uint64 `json:"compareAndDeleteSuccess"` CompareAndDeleteFail uint64 `json:"compareAndDeleteFail"` ExpireCount uint64 `json:"expireCount"` Watchers uint64 `json:"watchers"` } func newStats() *Stats { s := new(Stats) return s } func (s *Stats) clone() *Stats { return &Stats{ GetSuccess: s.GetSuccess, GetFail: s.GetFail, SetSuccess: s.SetSuccess, SetFail: s.SetFail, DeleteSuccess: s.DeleteSuccess, DeleteFail: s.DeleteFail, UpdateSuccess: s.UpdateSuccess, UpdateFail: s.UpdateFail, CreateSuccess: s.CreateSuccess, CreateFail: s.CreateFail, CompareAndSwapSuccess: s.CompareAndSwapSuccess, CompareAndSwapFail: s.CompareAndSwapFail, CompareAndDeleteSuccess: s.CompareAndDeleteSuccess, CompareAndDeleteFail: s.CompareAndDeleteFail, ExpireCount: s.ExpireCount, Watchers: s.Watchers, } } func (s *Stats) toJson() []byte { b, _ := json.Marshal(s) return b } func (s *Stats) Inc(field int) { switch field { case SetSuccess: atomic.AddUint64(&s.SetSuccess, 1) case SetFail: atomic.AddUint64(&s.SetFail, 1) case CreateSuccess: atomic.AddUint64(&s.CreateSuccess, 1) case CreateFail: atomic.AddUint64(&s.CreateFail, 1) case DeleteSuccess: atomic.AddUint64(&s.DeleteSuccess, 1) case DeleteFail: atomic.AddUint64(&s.DeleteFail, 1) case GetSuccess: atomic.AddUint64(&s.GetSuccess, 1) case GetFail: atomic.AddUint64(&s.GetFail, 1) case UpdateSuccess: atomic.AddUint64(&s.UpdateSuccess, 1) case UpdateFail: atomic.AddUint64(&s.UpdateFail, 1) case CompareAndSwapSuccess: atomic.AddUint64(&s.CompareAndSwapSuccess, 1) case CompareAndSwapFail: atomic.AddUint64(&s.CompareAndSwapFail, 1) case CompareAndDeleteSuccess: atomic.AddUint64(&s.CompareAndDeleteSuccess, 1) case CompareAndDeleteFail: atomic.AddUint64(&s.CompareAndDeleteFail, 1) case ExpireCount: atomic.AddUint64(&s.ExpireCount, 1) } }