From 43970a0caddd980501872c0d4bc39044955378b1 Mon Sep 17 00:00:00 2001 From: Angelo Capossele <angelocapossele@gmail.com> Date: Fri, 26 Jun 2020 17:04:35 +0100 Subject: [PATCH] Make the payload registry also take in names for the different payloads (#557) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🎨 Add object name to the payload registry * 💡 Add comment * ♻️ Make ObjectName exported * 📈 Update Grafana dashboard --- dapps/faucet/packages/payload/payload.go | 7 ++++- dapps/networkdelay/object.go | 7 ++++- .../packages/payload/payload.go | 7 ++++- packages/binary/drng/payload/payload.go | 7 ++++- .../binary/messagelayer/payload/payload.go | 7 ++++- .../messagelayer/payload/type_register.go | 29 +++++++++++++++---- plugins/prometheus/tangle.go | 15 +--------- .../grafana/dashboards/local_dashboard.json | 12 ++++++-- .../grafana/dashboards/local_dashboard.json | 12 ++++++-- 9 files changed, 73 insertions(+), 30 deletions(-) diff --git a/dapps/faucet/packages/payload/payload.go b/dapps/faucet/packages/payload/payload.go index 441e892f..264aa311 100644 --- a/dapps/faucet/packages/payload/payload.go +++ b/dapps/faucet/packages/payload/payload.go @@ -9,6 +9,11 @@ import ( "github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload" ) +const ( + // ObjectName defines the name of the facuet object. + ObjectName = "faucet" +) + // Payload represents a request which contains an address for the faucet to send funds to. type Payload struct { payloadType payload.Type @@ -27,7 +32,7 @@ func New(addr address.Address) *Payload { } func init() { - payload.RegisterType(Type, GenericPayloadUnmarshalerFactory(Type)) + payload.RegisterType(Type, ObjectName, GenericPayloadUnmarshalerFactory(Type)) } // FromBytes parses the marshaled version of a Payload into an object. diff --git a/dapps/networkdelay/object.go b/dapps/networkdelay/object.go index 5b413690..40e45947 100644 --- a/dapps/networkdelay/object.go +++ b/dapps/networkdelay/object.go @@ -9,6 +9,11 @@ import ( "github.com/mr-tron/base58" ) +const ( + // ObjectName defines the name of the networkdelay object. + ObjectName = "networkdelay" +) + // ID represents a 32 byte ID of a network delay object. type ID [32]byte @@ -145,7 +150,7 @@ func (o *Object) Unmarshal(data []byte) (err error) { } func init() { - payload.RegisterType(Type, func(data []byte) (payload payload.Payload, err error) { + payload.RegisterType(Type, ObjectName, func(data []byte) (payload payload.Payload, err error) { payload = &Object{} err = payload.Unmarshal(data) diff --git a/dapps/valuetransfers/packages/payload/payload.go b/dapps/valuetransfers/packages/payload/payload.go index e121327f..7ad1ffe3 100644 --- a/dapps/valuetransfers/packages/payload/payload.go +++ b/dapps/valuetransfers/packages/payload/payload.go @@ -12,6 +12,11 @@ import ( "github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload" ) +const ( + // ObjectName defines the name of the value object. + ObjectName = "value" +) + // Payload represents the entity that forms the Tangle by referencing other Payloads using their trunk and branch. // A Payload contains a transaction and defines, where in the Tangle a transaction is attached. type Payload struct { @@ -253,7 +258,7 @@ func (payload *Payload) Unmarshal(data []byte) (err error) { } func init() { - payload.RegisterType(Type, func(data []byte) (payload payload.Payload, err error) { + payload.RegisterType(Type, ObjectName, func(data []byte) (payload payload.Payload, err error) { payload, _, err = FromBytes(data) return diff --git a/packages/binary/drng/payload/payload.go b/packages/binary/drng/payload/payload.go index bbbdaafd..fe9768f7 100644 --- a/packages/binary/drng/payload/payload.go +++ b/packages/binary/drng/payload/payload.go @@ -9,6 +9,11 @@ import ( "github.com/iotaledger/hive.go/stringify" ) +const ( + // ObjectName defines the name of the dRNG object. + ObjectName = "dRNG" +) + // Payload defines a DRNG payload. type Payload struct { header.Header @@ -140,7 +145,7 @@ func (payload *Payload) Unmarshal(data []byte) (err error) { } func init() { - payload.RegisterType(Type, func(data []byte) (payload payload.Payload, err error) { + payload.RegisterType(Type, ObjectName, func(data []byte) (payload payload.Payload, err error) { payload = &Payload{} err = payload.Unmarshal(data) diff --git a/packages/binary/messagelayer/payload/payload.go b/packages/binary/messagelayer/payload/payload.go index f0f013e6..f70f8757 100644 --- a/packages/binary/messagelayer/payload/payload.go +++ b/packages/binary/messagelayer/payload/payload.go @@ -4,11 +4,16 @@ import ( "github.com/iotaledger/hive.go/marshalutil" ) +const ( + // ObjectName defines the name of the data object. + ObjectName = "data" +) + func init() { // register the generic unmarshaler SetGenericUnmarshalerFactory(GenericPayloadUnmarshalerFactory) // register the generic data payload type - RegisterType(DataType, GenericPayloadUnmarshalerFactory(DataType)) + RegisterType(DataType, ObjectName, GenericPayloadUnmarshalerFactory(DataType)) } // Payload represents some kind of payload of data which only gains meaning by having diff --git a/packages/binary/messagelayer/payload/type_register.go b/packages/binary/messagelayer/payload/type_register.go index 6549879a..eb22e51e 100644 --- a/packages/binary/messagelayer/payload/type_register.go +++ b/packages/binary/messagelayer/payload/type_register.go @@ -7,16 +7,25 @@ import ( // Unmarshaler takes some data and unmarshals it into a payload. type Unmarshaler func(data []byte) (Payload, error) +// Definition defines the properties of a payload type. +type Definition struct { + Name string + Unmarshaler +} + var ( - typeRegister = make(map[Type]Unmarshaler) + typeRegister = make(map[Type]Definition) typeRegisterMutex sync.RWMutex genericUnmarshalerFactory func(payloadType Type) Unmarshaler ) // RegisterType registers a payload type with the given unmarshaler. -func RegisterType(payloadType Type, unmarshaler Unmarshaler) { +func RegisterType(payloadType Type, payloadName string, unmarshaler Unmarshaler) { typeRegisterMutex.Lock() - typeRegister[payloadType] = unmarshaler + typeRegister[payloadType] = Definition{ + Name: payloadName, + Unmarshaler: unmarshaler, + } typeRegisterMutex.Unlock() } @@ -25,8 +34,8 @@ func RegisterType(payloadType Type, unmarshaler Unmarshaler) { func GetUnmarshaler(payloadType Type) Unmarshaler { typeRegisterMutex.RLock() defer typeRegisterMutex.RUnlock() - if unmarshaler, exists := typeRegister[payloadType]; exists { - return unmarshaler + if definition, exists := typeRegister[payloadType]; exists { + return definition.Unmarshaler } return genericUnmarshalerFactory(payloadType) } @@ -35,3 +44,13 @@ func GetUnmarshaler(payloadType Type) Unmarshaler { func SetGenericUnmarshalerFactory(unmarshalerFactory func(payloadType Type) Unmarshaler) { genericUnmarshalerFactory = unmarshalerFactory } + +// Name returns the name of a given payload type. +func Name(payloadType Type) string { + typeRegisterMutex.RLock() + defer typeRegisterMutex.RUnlock() + if definition, exists := typeRegister[payloadType]; exists { + return definition.Name + } + return ObjectName +} diff --git a/plugins/prometheus/tangle.go b/plugins/prometheus/tangle.go index f0d15536..ccf33cc1 100644 --- a/plugins/prometheus/tangle.go +++ b/plugins/prometheus/tangle.go @@ -57,22 +57,9 @@ func collectTangleMetrics() { messageTips.Set(float64(metrics.MessageTips())) msgCountPerPayload := metrics.MessageCountPerPayload() for payloadType, count := range msgCountPerPayload { - messagePerTypeCount.WithLabelValues(convertPayloadTypeToString(payloadType)).Set(float64(count)) + messagePerTypeCount.WithLabelValues(payload.Name(payloadType)).Set(float64(count)) } messageTotalCount.Set(float64(metrics.MessageTotalCount())) transactionCounter.Set(float64(metrics.ValueTransactionCounter())) valueTips.Set(float64(metrics.ValueTips())) } - -func convertPayloadTypeToString(p payload.Type) string { - switch p { - case 0: - return "data" - case 1: - return "value" - case 111: - return "drng" - default: - return "unknown" - } -} diff --git a/tools/docker-network/grafana/dashboards/local_dashboard.json b/tools/docker-network/grafana/dashboards/local_dashboard.json index cc4ae205..7e4d3cb1 100644 --- a/tools/docker-network/grafana/dashboards/local_dashboard.json +++ b/tools/docker-network/grafana/dashboards/local_dashboard.json @@ -486,14 +486,20 @@ { "expr": "irate(tangle_messages_per_type_count{message_type=\"drng\"}[5m])", "interval": "", - "legendFormat": "DRNG Message Per Second", + "legendFormat": "dRNG Messages Per Second", "refId": "C" }, { - "expr": "irate(tangle_messages_per_type_count{message_type=\"unknown\"}[5m])", + "expr": "irate(tangle_messages_per_type_count{message_type=\"faucet\"}[5m])", "interval": "", - "legendFormat": "Unknown Type Message Per Second", + "legendFormat": "Faucet Messages Per Second", "refId": "D" + }, + { + "expr": "irate(tangle_messages_per_type_count{message_type=\"netowrkdelay\"}[5m])", + "interval": "", + "legendFormat": "Network Delay Messages Per Second", + "refId": "E" } ], "thresholds": [], diff --git a/tools/monitoring/grafana/dashboards/local_dashboard.json b/tools/monitoring/grafana/dashboards/local_dashboard.json index cc4ae205..7e4d3cb1 100755 --- a/tools/monitoring/grafana/dashboards/local_dashboard.json +++ b/tools/monitoring/grafana/dashboards/local_dashboard.json @@ -486,14 +486,20 @@ { "expr": "irate(tangle_messages_per_type_count{message_type=\"drng\"}[5m])", "interval": "", - "legendFormat": "DRNG Message Per Second", + "legendFormat": "dRNG Messages Per Second", "refId": "C" }, { - "expr": "irate(tangle_messages_per_type_count{message_type=\"unknown\"}[5m])", + "expr": "irate(tangle_messages_per_type_count{message_type=\"faucet\"}[5m])", "interval": "", - "legendFormat": "Unknown Type Message Per Second", + "legendFormat": "Faucet Messages Per Second", "refId": "D" + }, + { + "expr": "irate(tangle_messages_per_type_count{message_type=\"netowrkdelay\"}[5m])", + "interval": "", + "legendFormat": "Network Delay Messages Per Second", + "refId": "E" } ], "thresholds": [], -- GitLab