mirror of
https://github.com/openziti/zrok.git
synced 2025-02-16 18:20:51 +01:00
parent
318c73ad03
commit
e22e71cf71
@ -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)
|
||||
}
|
||||
|
@ -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
1
go.mod
@ -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
2
go.sum
@ -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=
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user