Browse Source

rm channels in server stats counter, because DurationCounter is thread safe

pull/279/head
tnextday 10 years ago
parent
commit
ff943612b5
  1. 72
      weed/stats/stats.go
  2. 9
      weed/weedserver/common.go
  3. 2
      weed/weedserver/master_server_handlers_ui.go
  4. 2
      weed/weedserver/volume_server_handlers_ui.go

72
weed/stats/stats.go

@ -15,34 +15,10 @@ type ServerStats struct {
BytesOut *DurationCounter
}
type Channels struct {
Connections chan *TimedValue
Requests chan *TimedValue
AssignRequests chan *TimedValue
ReadRequests chan *TimedValue
WriteRequests chan *TimedValue
DeleteRequests chan *TimedValue
BytesIn chan *TimedValue
BytesOut chan *TimedValue
}
var (
Chan *Channels
ServStats = NewServerStats()
)
func init() {
Chan = &Channels{
Connections: make(chan *TimedValue, 100),
Requests: make(chan *TimedValue, 100),
AssignRequests: make(chan *TimedValue, 100),
ReadRequests: make(chan *TimedValue, 100),
WriteRequests: make(chan *TimedValue, 100),
DeleteRequests: make(chan *TimedValue, 100),
BytesIn: make(chan *TimedValue, 100),
BytesOut: make(chan *TimedValue, 100),
}
}
func NewServerStats() *ServerStats {
return &ServerStats{
Requests: NewDurationCounter(),
@ -57,57 +33,33 @@ func NewServerStats() *ServerStats {
}
func ConnectionOpen() {
Chan.Connections <- NewTimedValue(time.Now(), 1)
ServStats.Connections.Add(NewTimedValue(time.Now(), 1))
}
func ConnectionClose() {
Chan.Connections <- NewTimedValue(time.Now(), -1)
ServStats.Connections.Add(NewTimedValue(time.Now(), 1))
}
func RequestOpen() {
Chan.Requests <- NewTimedValue(time.Now(), 1)
ServStats.Requests.Add(NewTimedValue(time.Now(), 1))
}
func RequestClose() {
Chan.Requests <- NewTimedValue(time.Now(), -1)
ServStats.Requests.Add(NewTimedValue(time.Now(), 1))
}
func AssignRequest() {
Chan.AssignRequests <- NewTimedValue(time.Now(), 1)
ServStats.AssignRequests.Add(NewTimedValue(time.Now(), 1))
}
func ReadRequest() {
Chan.ReadRequests <- NewTimedValue(time.Now(), 1)
ServStats.ReadRequests.Add(NewTimedValue(time.Now(), 1))
}
func WriteRequest() {
Chan.WriteRequests <- NewTimedValue(time.Now(), 1)
ServStats.WriteRequests.Add(NewTimedValue(time.Now(), 1))
}
func DeleteRequest() {
Chan.DeleteRequests <- NewTimedValue(time.Now(), 1)
ServStats.DeleteRequests.Add(NewTimedValue(time.Now(), 1))
}
func BytesIn(val int64) {
Chan.BytesIn <- NewTimedValue(time.Now(), val)
ServStats.BytesIn.Add(NewTimedValue(time.Now(), 1))
}
func BytesOut(val int64) {
Chan.BytesOut <- NewTimedValue(time.Now(), val)
}
func (ss *ServerStats) Start() {
for {
select {
case tv := <-Chan.Connections:
ss.Connections.Add(tv)
case tv := <-Chan.Requests:
ss.Requests.Add(tv)
case tv := <-Chan.AssignRequests:
ss.AssignRequests.Add(tv)
case tv := <-Chan.ReadRequests:
ss.ReadRequests.Add(tv)
case tv := <-Chan.WriteRequests:
ss.WriteRequests.Add(tv)
case tv := <-Chan.ReadRequests:
ss.ReadRequests.Add(tv)
case tv := <-Chan.DeleteRequests:
ss.DeleteRequests.Add(tv)
case tv := <-Chan.BytesIn:
ss.BytesIn.Add(tv)
case tv := <-Chan.BytesOut:
ss.BytesOut.Add(tv)
}
}
ServStats.BytesOut.Add(NewTimedValue(time.Now(), 1))
}

9
weed/weedserver/common.go

@ -21,15 +21,8 @@ import (
"github.com/golang/protobuf/proto"
)
var serverStats *stats.ServerStats
var startTime = time.Now()
func init() {
serverStats = stats.NewServerStats()
go serverStats.Start()
}
func readObjRequest(r *http.Request, obj interface{}) error {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
@ -189,7 +182,7 @@ func parseURLPath(path string) (vid, nid, filename, ext string, isVolumeIdOnly b
func statsCounterHandler(w http.ResponseWriter, r *http.Request) {
m := make(map[string]interface{})
m["Version"] = util.VERSION
m["Counters"] = serverStats
m["Counters"] = stats.ServStats
writeJsonQuiet(w, r, http.StatusOK, m)
}

2
weed/weedserver/master_server_handlers_ui.go

@ -24,7 +24,7 @@ func (ms *MasterServer) uiStatusHandler(w http.ResponseWriter, r *http.Request)
Leader: ms.Topo.GetRaftServer().Leader(),
Peers: ms.Topo.GetRaftServer().Peers(),
Stats: infos,
Counters: serverStats,
Counters: stats.ServStats,
}
ui.StatusTpl.Execute(w, args)
}

2
weed/weedserver/volume_server_handlers_ui.go

@ -32,7 +32,7 @@ func (vs *VolumeServer) uiStatusHandler(w http.ResponseWriter, r *http.Request)
vs.store.Status(),
ds,
infos,
serverStats,
stats.ServStats,
}
ui.StatusTpl.Execute(w, args)
}
Loading…
Cancel
Save