metrics loop; bson (#74, #76)

This commit is contained in:
Michael Quigley 2022-10-14 16:13:21 -04:00
parent 318c73ad03
commit e22e71cf71
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
5 changed files with 20 additions and 12 deletions

View File

@ -2,14 +2,16 @@ package controller
import (
"bytes"
"encoding/json"
"fmt"
"github.com/openziti-test-kitchen/zrok/model"
"github.com/openziti-test-kitchen/zrok/util"
"github.com/openziti-test-kitchen/zrok/zrokdir"
"github.com/openziti/sdk-golang/ziti"
"github.com/openziti/sdk-golang/ziti/config"
"github.com/openziti/sdk-golang/ziti/edge"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"gopkg.in/mgo.v2/bson"
"net"
"time"
)
@ -90,7 +92,7 @@ func (mtr *metricsAgent) listen() {
logrus.Errorf("error accepting: %v", err)
return
}
logrus.Infof("accepted metrics connetion from '%v'", conn.RemoteAddr())
logrus.Debugf("accepted metrics connetion from '%v'", conn.RemoteAddr())
go newMetricsHandler(conn).run()
}
}
@ -112,7 +114,7 @@ func newMetricsHandler(conn net.Conn) *metricsHandler {
}
func (mh *metricsHandler) run() {
logrus.Infof("handling metrics connection: %v", mh.conn.RemoteAddr())
logrus.Debugf("handling metrics connection: %v", mh.conn.RemoteAddr())
var mtrBuf bytes.Buffer
buf := make([]byte, 4096)
for {
@ -126,8 +128,13 @@ func (mh *metricsHandler) run() {
logrus.Errorf("error closing metrics connection")
}
mtr := &model.Metrics{}
if err := json.Unmarshal(mtrBuf.Bytes(), &mtr); err == nil {
logrus.Infof("received metrics snapshot from: %v", time.UnixMilli(mtr.LastUpdate))
if err := bson.Unmarshal(mtrBuf.Bytes(), &mtr); err == nil {
out := "metrics = {\n"
for k, v := range mtr.Sessions {
out += fmt.Sprintf("\t[%v]: %v/%v (%v)\n", k, util.BytesToSize(v.BytesRead), util.BytesToSize(v.BytesWritten), time.Duration(mtr.Now-v.LastUpdate)*time.Millisecond)
}
out += "}"
logrus.Info(out)
} else {
logrus.Errorf("error unmarshaling metrics: %v", err)
}

View File

@ -1,13 +1,13 @@
package frontend
import (
"encoding/json"
"github.com/openziti-test-kitchen/zrok/model"
"github.com/openziti-test-kitchen/zrok/zrokdir"
"github.com/openziti/sdk-golang/ziti"
"github.com/openziti/sdk-golang/ziti/config"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"gopkg.in/mgo.v2/bson"
"time"
)
@ -61,7 +61,8 @@ func (ma *metricsAgent) run() {
}
func (ma *metricsAgent) sendMetrics() error {
metricsJson, err := json.MarshalIndent(ma.metrics, "", " ")
ma.metrics.Now = time.Now().UnixMilli()
metricsJson, err := bson.Marshal(ma.metrics)
if err != nil {
return errors.Wrap(err, "error marshaling metrics")
}

1
go.mod
View File

@ -85,6 +85,7 @@ require (
golang.org/x/sys v0.0.0-20220926163933-8cfa568d3c25 // indirect
golang.org/x/term v0.0.0-20220919170432-7a66f970e087 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

2
go.sum
View File

@ -918,6 +918,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

View File

@ -1,10 +1,8 @@
package model
import "time"
type Metrics struct {
LastUpdate int64 `json:"last_update"`
Sessions map[string]SessionMetrics
Now int64 `json:"now"`
Sessions map[string]SessionMetrics
}
func (m *Metrics) PushSession(svcName string, sm SessionMetrics) {
@ -19,7 +17,6 @@ func (m *Metrics) PushSession(svcName string, sm SessionMetrics) {
} else {
m.Sessions[svcName] = sm
}
m.LastUpdate = time.Now().UnixMilli()
}
type SessionMetrics struct {