mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"github.com/apex/log"
|
|
"github.com/crawlab-team/crawlab/core/models/models"
|
|
"github.com/crawlab-team/crawlab/core/models/service"
|
|
"github.com/crawlab-team/crawlab/grpc"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type MetricsServerV2 struct {
|
|
grpc.UnimplementedMetricsServiceV2Server
|
|
}
|
|
|
|
func (svr MetricsServerV2) Send(_ context.Context, req *grpc.MetricsServiceV2SendRequest) (res *grpc.Response, err error) {
|
|
log.Info("[MetricsServerV2] received metric from node: " + req.NodeKey)
|
|
n, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": req.NodeKey}, nil)
|
|
if err != nil {
|
|
log.Errorf("[MetricsServerV2] error getting node: %v", err)
|
|
return HandleError(err)
|
|
}
|
|
metric := models.MetricV2{
|
|
Type: req.Type,
|
|
NodeId: n.Id,
|
|
CpuUsagePercent: req.CpuUsagePercent,
|
|
TotalMemory: req.TotalMemory,
|
|
AvailableMemory: req.AvailableMemory,
|
|
UsedMemory: req.UsedMemory,
|
|
UsedMemoryPercent: req.UsedMemoryPercent,
|
|
TotalDisk: req.TotalDisk,
|
|
AvailableDisk: req.AvailableDisk,
|
|
UsedDisk: req.UsedDisk,
|
|
UsedDiskPercent: req.UsedDiskPercent,
|
|
DiskReadBytesRate: req.DiskReadBytesRate,
|
|
DiskWriteBytesRate: req.DiskWriteBytesRate,
|
|
NetworkBytesSentRate: req.NetworkBytesSentRate,
|
|
NetworkBytesRecvRate: req.NetworkBytesRecvRate,
|
|
}
|
|
metric.CreatedAt = time.Unix(req.Timestamp, 0)
|
|
_, err = service.NewModelServiceV2[models.MetricV2]().InsertOne(metric)
|
|
if err != nil {
|
|
log.Errorf("[MetricsServerV2] error inserting metric: %v", err)
|
|
return HandleError(err)
|
|
}
|
|
return HandleSuccess()
|
|
}
|
|
|
|
func newMetricsServerV2() *MetricsServerV2 {
|
|
return &MetricsServerV2{}
|
|
}
|
|
|
|
var metricsServerV2 *MetricsServerV2
|
|
var metricsServerV2Once = &sync.Once{}
|
|
|
|
func GetMetricsServerV2() *MetricsServerV2 {
|
|
if metricsServerV2 != nil {
|
|
return metricsServerV2
|
|
}
|
|
metricsServerV2Once.Do(func() {
|
|
metricsServerV2 = newMetricsServerV2()
|
|
})
|
|
return metricsServerV2
|
|
}
|