PLT-4357 Adding stats to HA (#4638)

* PLT-4357 adding stats to HA

* PLT-4357 adding stats to HA

* Fixing getting stats from the current server
This commit is contained in:
Corey Hulen
2016-11-28 07:40:02 -08:00
committed by Harrison Healey
parent be0ae36422
commit 0383c58d01
4 changed files with 83 additions and 3 deletions

View File

@@ -399,9 +399,33 @@ func getAnalytics(c *Context, w http.ResponseWriter, r *http.Request) {
rows[4].Value = float64(r.Data.(int64))
}
rows[5].Value = float64(TotalWebsocketConnections())
rows[6].Value = float64(Srv.Store.TotalMasterDbConnections())
rows[7].Value = float64(Srv.Store.TotalReadDbConnections())
// If in HA mode then aggregrate all the stats
if einterfaces.GetClusterInterface() != nil && *utils.Cfg.ClusterSettings.Enable {
stats, err := einterfaces.GetClusterInterface().GetClusterStats()
if err != nil {
c.Err = err
return
}
totalSockets := TotalWebsocketConnections()
totalMasterDb := Srv.Store.TotalMasterDbConnections()
totalReadDb := Srv.Store.TotalReadDbConnections()
for _, stat := range stats {
totalSockets = totalSockets + stat.TotalWebsocketConnections
totalMasterDb = totalMasterDb + stat.TotalMasterDbConnections
totalReadDb = totalReadDb + stat.TotalReadDbConnections
}
rows[5].Value = float64(totalSockets)
rows[6].Value = float64(totalMasterDb)
rows[7].Value = float64(totalReadDb)
} else {
rows[5].Value = float64(TotalWebsocketConnections())
rows[6].Value = float64(Srv.Store.TotalMasterDbConnections())
rows[7].Value = float64(Srv.Store.TotalReadDbConnections())
}
w.Write([]byte(rows.ToJson()))
} else if name == "post_counts_day" {

View File

@@ -11,6 +11,7 @@ type ClusterInterface interface {
StartInterNodeCommunication()
StopInterNodeCommunication()
GetClusterInfos() []*model.ClusterInfo
GetClusterStats() ([]*model.ClusterStats, *model.AppError)
RemoveAllSessionsForUserId(userId string)
InvalidateCacheForUser(userId string)
Publish(event *model.WebSocketEvent)

36
model/cluster_stats.go Normal file
View File

@@ -0,0 +1,36 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
import (
"encoding/json"
"io"
)
type ClusterStats struct {
Id string `json:"id"`
TotalWebsocketConnections int `json:"total_websocket_connections"`
TotalReadDbConnections int `json:"total_read_db_connections"`
TotalMasterDbConnections int `json:"total_master_db_connections"`
}
func (me *ClusterStats) ToJson() string {
b, err := json.Marshal(me)
if err != nil {
return ""
} else {
return string(b)
}
}
func ClusterStatsFromJson(data io.Reader) *ClusterStats {
decoder := json.NewDecoder(data)
var me ClusterStats
err := decoder.Decode(&me)
if err == nil {
return &me
} else {
return nil
}
}

View File

@@ -0,0 +1,19 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
import (
"strings"
"testing"
)
func TestClusterStatsJson(t *testing.T) {
cluster := ClusterStats{Id: NewId(), TotalWebsocketConnections: 1, TotalReadDbConnections: 1}
json := cluster.ToJson()
result := ClusterStatsFromJson(strings.NewReader(json))
if cluster.Id != result.Id {
t.Fatal("Ids do not match")
}
}