diff --git a/plugins/metrics/server.go b/plugins/metrics/clients_info.go similarity index 76% rename from plugins/metrics/server.go rename to plugins/metrics/clients_info.go index 3c3bc378e52e5b571260824db4f735f7155e26fb..68327c15f47cc080e8e2d8545032f964c1dc48dc 100644 --- a/plugins/metrics/server.go +++ b/plugins/metrics/clients_info.go @@ -1,8 +1,6 @@ package metrics import ( - "bytes" - "encoding/gob" "sync" "github.com/iotaledger/goshimmer/plugins/analysis/packet" @@ -35,23 +33,15 @@ var onMetricHeartbeatReceived = events.NewClosure(func(hb *packet.MetricHeartbea } }) +// ClientsMetrics returns info about the OS, arch, number of cpu cores, cpu load and memory usage. func ClientsMetrics() map[string]ClientInfo { clientsMetricsMutex.RLock() defer clientsMetricsMutex.RUnlock() - - var buf bytes.Buffer - enc := gob.NewEncoder(&buf) - err := enc.Encode(clientsMetrics) - if err != nil { - return nil - } - - dec := gob.NewDecoder(&buf) - var copy map[string]ClientInfo - err = dec.Decode(©) - if err != nil { - return nil + // create copy of the map + var copy = make(map[string]ClientInfo) + // manually copy content + for node, clientInfo := range clientsMetrics { + copy[node] = clientInfo } - return copy } diff --git a/plugins/prometheus/clients_info.go b/plugins/prometheus/clients_info.go index 44cbc20566aeefe0547c1dc492bea2c5dd491582..5d2133282cfd33387f33d5463f99fe75ed2ba49d 100644 --- a/plugins/prometheus/clients_info.go +++ b/plugins/prometheus/clients_info.go @@ -1,33 +1,65 @@ package prometheus import ( + "strconv" + + "github.com/iotaledger/goshimmer/plugins/metrics" "github.com/prometheus/client_golang/prometheus" ) var ( - clientsInfo *prometheus.GaugeVec + clientsInfoCPU *prometheus.GaugeVec + clientsInfoMemory *prometheus.GaugeVec ) func registerClientsMetrics() { - clientsInfo = prometheus.NewGaugeVec( + clientsInfoCPU = prometheus.NewGaugeVec( prometheus.GaugeOpts{ - Name: "clients_info", - Help: "Clients info.", + Name: "clients_info_cpu", + Help: "Info about client's cpu load labeled with nodeID, OS, ARCH and number of cpu cores", + }, + []string{ + "nodeID", + "OS", + "ARCH", + "NUM_CPU", }, - []string{"info"}, - // []string{"OS", "ARCH", "NUM_CPU", "CPU_USAGE", "MEM_USAGE"}, ) - // registry.MustRegister(clientsInfo) + clientsInfoMemory = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "clients_info_mem", + Help: "Info about client's memory usage labeled with nodeID, OS, ARCH and number of cpu cores", + }, + []string{ + "nodeID", + "OS", + "ARCH", + "NUM_CPU", + }, + ) - // collectClientsInfo() + registry.MustRegister(clientsInfoCPU) + registry.MustRegister(clientsInfoMemory) - // clientsInfo.WithLabelValues(banner.AppName, banner.AppVersion).Set(1) + addCollect(collectClientsInfo) } func collectClientsInfo() { - // for ID, info := range metrics.ClientsMetrics() { - // clientsInfo.WithLabelValues() - // } + clientInfoMap := metrics.ClientsMetrics() + for nodeID, clientInfo := range clientInfoMap { + clientsInfoCPU.WithLabelValues( + nodeID, + clientInfo.OS, + clientInfo.Arch, + strconv.Itoa(clientInfo.NumCPU), + ).Set(clientInfo.CPUUsage) + clientsInfoMemory.WithLabelValues( + nodeID, + clientInfo.OS, + clientInfo.Arch, + strconv.Itoa(clientInfo.NumCPU), + ).Set(float64(clientInfo.MemoryUsage)) + } } diff --git a/tools/integration-tests/tester/go.mod b/tools/integration-tests/tester/go.mod index 315bbabd481f7979c78b449f280b301d0f4e4fc0..3d3c66376488f6ea025677cc2be9824f3f3bc784 100644 --- a/tools/integration-tests/tester/go.mod +++ b/tools/integration-tests/tester/go.mod @@ -10,7 +10,7 @@ require ( github.com/docker/go-units v0.4.0 // indirect github.com/drand/drand v0.8.1 github.com/iotaledger/goshimmer v0.1.3 - github.com/iotaledger/hive.go v0.0.0-20200615181744-3ab0cddc15cf + github.com/iotaledger/hive.go v0.0.0-20200617164933-c48b4401b814 github.com/opencontainers/go-digest v1.0.0-rc1 // indirect github.com/stretchr/testify v1.5.1 ) diff --git a/tools/integration-tests/tester/go.sum b/tools/integration-tests/tester/go.sum index 77eb420c4aa1131c3f6424b4eb4a75f9d95075e1..e971afa78129dc2a3cadb3b6e6fd780cefde61fd 100644 --- a/tools/integration-tests/tester/go.sum +++ b/tools/integration-tests/tester/go.sum @@ -149,6 +149,7 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/iotaledger/hive.go v0.0.0-20200610104211-d603429af242 h1:uHMFmfrP6O6lp1lCHT6lpFwHFWYk77V0nUlGbhneQHI= github.com/iotaledger/hive.go v0.0.0-20200610104211-d603429af242/go.mod h1:zwZhaE4ZeglpTrbmbwdnVPMI5XdRu2RmByi3Qn0ztmU= github.com/iotaledger/hive.go v0.0.0-20200615181744-3ab0cddc15cf/go.mod h1:zwZhaE4ZeglpTrbmbwdnVPMI5XdRu2RmByi3Qn0ztmU= +github.com/iotaledger/hive.go v0.0.0-20200617164933-c48b4401b814/go.mod h1:zwZhaE4ZeglpTrbmbwdnVPMI5XdRu2RmByi3Qn0ztmU= github.com/iotaledger/iota.go v1.0.0-beta.9/go.mod h1:F6WBmYd98mVjAmmPVYhnxg8NNIWCjjH8VWT9qvv3Rc8= github.com/iotaledger/iota.go v1.0.0-beta.14/go.mod h1:F6WBmYd98mVjAmmPVYhnxg8NNIWCjjH8VWT9qvv3Rc8= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=