Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(core)!: move telemetry into internal folder #6763

Merged
merged 5 commits into from
Jul 9, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
refactor(core)move telemetry into internal folder, move metric.go in …
…separate folder for core/02-client.
  • Loading branch information
DimitrisJim committed Jul 8, 2024
commit d17c82697ec2f3ecbdb89216be9655b16a57792e
18 changes: 9 additions & 9 deletions modules/apps/transfer/internal/telemetry/telemetry.go
Original file line number Diff line number Diff line change
@@ -10,13 +10,13 @@ import (
"github.com/cosmos/cosmos-sdk/telemetry"

"github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
coretypes "github.com/cosmos/ibc-go/v8/modules/core/types"
coremetrics "github.com/cosmos/ibc-go/v8/modules/core/metrics"
)

func ReportTransfer(sourcePort, sourceChannel, destinationPort, destinationChannel string, tokens types.Tokens) {
labels := []metrics.Label{
telemetry.NewLabel(coretypes.LabelDestinationPort, destinationPort),
telemetry.NewLabel(coretypes.LabelDestinationChannel, destinationChannel),
telemetry.NewLabel(coremetrics.LabelDestinationPort, destinationPort),
telemetry.NewLabel(coremetrics.LabelDestinationChannel, destinationChannel),
}

for _, token := range tokens {
@@ -25,11 +25,11 @@ func ReportTransfer(sourcePort, sourceChannel, destinationPort, destinationChann
telemetry.SetGaugeWithLabels(
[]string{"tx", "msg", "ibc", "transfer"},
float32(amount.Int64()),
[]metrics.Label{telemetry.NewLabel(coretypes.LabelDenom, token.Denom.Path())},
[]metrics.Label{telemetry.NewLabel(coremetrics.LabelDenom, token.Denom.Path())},
)
}

labels = append(labels, telemetry.NewLabel(coretypes.LabelSource, fmt.Sprintf("%t", !token.Denom.HasPrefix(sourcePort, sourceChannel))))
labels = append(labels, telemetry.NewLabel(coremetrics.LabelSource, fmt.Sprintf("%t", !token.Denom.HasPrefix(sourcePort, sourceChannel))))
}

telemetry.IncrCounterWithLabels(
@@ -41,9 +41,9 @@ func ReportTransfer(sourcePort, sourceChannel, destinationPort, destinationChann

func ReportOnRecvPacket(sourcePort, sourceChannel string, token types.Token) {
labels := []metrics.Label{
telemetry.NewLabel(coretypes.LabelSourcePort, sourcePort),
telemetry.NewLabel(coretypes.LabelSourceChannel, sourceChannel),
telemetry.NewLabel(coretypes.LabelSource, fmt.Sprintf("%t", token.Denom.HasPrefix(sourcePort, sourceChannel))),
telemetry.NewLabel(coremetrics.LabelSourcePort, sourcePort),
telemetry.NewLabel(coremetrics.LabelSourceChannel, sourceChannel),
telemetry.NewLabel(coremetrics.LabelSource, fmt.Sprintf("%t", token.Denom.HasPrefix(sourcePort, sourceChannel))),
}
// Transfer amount has already been parsed in caller.
transferAmount, _ := sdkmath.NewIntFromString(token.Amount)
@@ -53,7 +53,7 @@ func ReportOnRecvPacket(sourcePort, sourceChannel string, token types.Token) {
telemetry.SetGaugeWithLabels(
[]string{"ibc", types.ModuleName, "packet", "receive"},
float32(transferAmount.Int64()),
[]metrics.Label{telemetry.NewLabel(coretypes.LabelDenom, denomPath)},
[]metrics.Label{telemetry.NewLabel(coremetrics.LabelDenom, denomPath)},
)
}

49 changes: 6 additions & 43 deletions modules/core/02-client/keeper/client.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package keeper

import (
metrics "github.com/hashicorp/go-metrics"

errorsmod "cosmossdk.io/errors"

"github.com/cosmos/cosmos-sdk/telemetry"
sdk "github.com/cosmos/cosmos-sdk/types"

"github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
"github.com/cosmos/ibc-go/v8/modules/core/exported"
"github.com/cosmos/ibc-go/v8/modules/core/internal/telemetry"
)

// CreateClient generates a new client identifier and invokes the associated light client module in order to
@@ -48,11 +46,7 @@ func (k *Keeper) CreateClient(ctx sdk.Context, clientType string, clientState, c
initialHeight := clientModule.LatestHeight(ctx, clientID)
k.Logger(ctx).Info("client created at height", "client-id", clientID, "height", initialHeight.String())

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "create"},
1,
[]metrics.Label{telemetry.NewLabel(types.LabelClientType, clientType)},
)
defer telemetry.ReportCreateClient(clientType)

emitCreateClientEvent(ctx, clientID, clientType, initialHeight)

@@ -85,15 +79,7 @@ func (k *Keeper) UpdateClient(ctx sdk.Context, clientID string, clientMsg export

k.Logger(ctx).Info("client frozen due to misbehaviour", "client-id", clientID)

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "misbehaviour"},
1,
[]metrics.Label{
telemetry.NewLabel(types.LabelClientType, clientType),
telemetry.NewLabel(types.LabelClientID, clientID),
telemetry.NewLabel(types.LabelMsgType, "update"),
},
)
defer telemetry.ReportUpdateClient(foundMisbehaviour, clientType, clientID)

emitSubmitMisbehaviourEvent(ctx, clientID, clientType)

@@ -104,15 +90,7 @@ func (k *Keeper) UpdateClient(ctx sdk.Context, clientID string, clientMsg export

k.Logger(ctx).Info("client state updated", "client-id", clientID, "heights", consensusHeights)

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "update"},
1,
[]metrics.Label{
telemetry.NewLabel(types.LabelClientType, clientType),
telemetry.NewLabel(types.LabelClientID, clientID),
telemetry.NewLabel(types.LabelUpdateType, "msg"),
},
)
defer telemetry.ReportUpdateClient(foundMisbehaviour, clientType, clientID)

// emitting events in the keeper emits for both begin block and handler client updates
emitUpdateClientEvent(ctx, clientID, clientType, consensusHeights, k.cdc, clientMsg)
@@ -148,14 +126,7 @@ func (k *Keeper) UpgradeClient(
latestHeight := clientModule.LatestHeight(ctx, clientID)
k.Logger(ctx).Info("client state upgraded", "client-id", clientID, "height", latestHeight.String())

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "upgrade"},
1,
[]metrics.Label{
telemetry.NewLabel(types.LabelClientType, clientType),
telemetry.NewLabel(types.LabelClientID, clientID),
},
)
defer telemetry.ReportUpgradeClient(clientType, clientID)

emitUpgradeClientEvent(ctx, clientID, clientType, latestHeight)

@@ -198,15 +169,7 @@ func (k *Keeper) RecoverClient(ctx sdk.Context, subjectClientID, substituteClien

k.Logger(ctx).Info("client recovered", "client-id", subjectClientID)

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "update"},
1,
[]metrics.Label{
telemetry.NewLabel(types.LabelClientType, clientType),
telemetry.NewLabel(types.LabelClientID, subjectClientID),
telemetry.NewLabel(types.LabelUpdateType, "recovery"),
},
)
defer telemetry.ReportRecoverClient(clientType, subjectClientID)

// emitting events in the keeper for recovering clients
emitRecoverClientEvent(ctx, subjectClientID, clientType)
9 changes: 0 additions & 9 deletions modules/core/02-client/types/metrics.go

This file was deleted.

58 changes: 58 additions & 0 deletions modules/core/internal/telemetry/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package telemetry

import (
metrics "github.com/hashicorp/go-metrics"

"github.com/cosmos/cosmos-sdk/telemetry"

ibcmetrics "github.com/cosmos/ibc-go/v8/modules/core/metrics"
)

func ReportCreateClient(clientType string) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add doc strings to all these public functions?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That might be nice. In case someone is wondering if they should use them or not, a bit of explanation on how and when they are supposed to be used.

Potentially a small text or readme even on how we use telemetry?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mentioned in other PR that completely indifferent to docu strings considering they are internal use only. A small description on telemetry usage would be nice though I am still not entirely sure who consumes these atm.

telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "create"},
1,
[]metrics.Label{telemetry.NewLabel(ibcmetrics.LabelClientType, clientType)},
)
}

func ReportUpdateClient(foundMisbehaviour bool, clientType, clientID string) {
labels := []metrics.Label{
telemetry.NewLabel(ibcmetrics.LabelClientType, clientType),
telemetry.NewLabel(ibcmetrics.LabelClientID, clientID),
}

var updateType string
if foundMisbehaviour {
labels = append(labels, telemetry.NewLabel(ibcmetrics.LabelMsgType, "update"))
updateType = "misbehaviour"
} else {
labels = append(labels, telemetry.NewLabel(ibcmetrics.LabelUpdateType, "msg"))
updateType = "update"
}

telemetry.IncrCounterWithLabels([]string{"ibc", "client", updateType}, 1, labels)
}

func ReportUpgradeClient(clientType, clientID string) {
telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "upgrade"},
1,
[]metrics.Label{
telemetry.NewLabel(ibcmetrics.LabelClientType, clientType),
telemetry.NewLabel(ibcmetrics.LabelClientID, clientID),
},
)
}

func ReportRecoverClient(clientType, subjectClientID string) {
telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "update"},
1,
[]metrics.Label{
telemetry.NewLabel(ibcmetrics.LabelClientType, clientType),
telemetry.NewLabel(ibcmetrics.LabelClientID, subjectClientID),
telemetry.NewLabel(ibcmetrics.LabelUpdateType, "recovery"),
},
)
}
44 changes: 44 additions & 0 deletions modules/core/internal/telemetry/msg_server.go
DimitrisJim marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package telemetry

import (
metrics "github.com/hashicorp/go-metrics"

"github.com/cosmos/cosmos-sdk/telemetry"

"github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
ibcmetrics "github.com/cosmos/ibc-go/v8/modules/core/metrics"
)

func ReportRecvPacket(packet types.Packet) {
telemetry.IncrCounterWithLabels(
[]string{"tx", "msg", "ibc", types.EventTypeRecvPacket},
1,
addPacketLabels(packet),
)
}

func ReportTimeoutPacket(packet types.Packet, timeoutType string) {
labels := append(addPacketLabels(packet), telemetry.NewLabel(ibcmetrics.LabelTimeoutType, timeoutType))
telemetry.IncrCounterWithLabels(
[]string{"ibc", "timeout", "packet"},
1,
labels,
)
}

func ReportAcknowledgePacket(packet types.Packet) {
telemetry.IncrCounterWithLabels(
[]string{"tx", "msg", "ibc", types.EventTypeAcknowledgePacket},
1,
addPacketLabels(packet),
)
}

func addPacketLabels(packet types.Packet) []metrics.Label {
return []metrics.Label{
telemetry.NewLabel(ibcmetrics.LabelSourcePort, packet.SourcePort),
telemetry.NewLabel(ibcmetrics.LabelSourceChannel, packet.SourceChannel),
telemetry.NewLabel(ibcmetrics.LabelDestinationPort, packet.DestinationPort),
telemetry.NewLabel(ibcmetrics.LabelDestinationChannel, packet.DestinationChannel),
}
}
50 changes: 5 additions & 45 deletions modules/core/keeper/msg_server.go
Original file line number Diff line number Diff line change
@@ -4,11 +4,8 @@ import (
"context"
"errors"

metrics "github.com/hashicorp/go-metrics"

errorsmod "cosmossdk.io/errors"

"github.com/cosmos/cosmos-sdk/telemetry"
sdk "github.com/cosmos/cosmos-sdk/types"

clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
@@ -17,6 +14,7 @@ import (
channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
ibcerrors "github.com/cosmos/ibc-go/v8/modules/core/errors"
"github.com/cosmos/ibc-go/v8/modules/core/internal/telemetry"
coretypes "github.com/cosmos/ibc-go/v8/modules/core/types"
)

@@ -510,16 +508,7 @@ func (k *Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPack
}
}

defer telemetry.IncrCounterWithLabels(
[]string{"tx", "msg", "ibc", channeltypes.EventTypeRecvPacket},
1,
[]metrics.Label{
telemetry.NewLabel(coretypes.LabelSourcePort, msg.Packet.SourcePort),
telemetry.NewLabel(coretypes.LabelSourceChannel, msg.Packet.SourceChannel),
telemetry.NewLabel(coretypes.LabelDestinationPort, msg.Packet.DestinationPort),
telemetry.NewLabel(coretypes.LabelDestinationChannel, msg.Packet.DestinationChannel),
},
)
defer telemetry.ReportRecvPacket(msg.Packet)

ctx.Logger().Info("receive packet callback succeeded", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "result", channeltypes.SUCCESS.String())

@@ -581,17 +570,7 @@ func (k *Keeper) Timeout(goCtx context.Context, msg *channeltypes.MsgTimeout) (*
return nil, errorsmod.Wrap(err, "timeout packet callback failed")
}

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "timeout", "packet"},
1,
[]metrics.Label{
telemetry.NewLabel(coretypes.LabelSourcePort, msg.Packet.SourcePort),
telemetry.NewLabel(coretypes.LabelSourceChannel, msg.Packet.SourceChannel),
telemetry.NewLabel(coretypes.LabelDestinationPort, msg.Packet.DestinationPort),
telemetry.NewLabel(coretypes.LabelDestinationChannel, msg.Packet.DestinationChannel),
telemetry.NewLabel(coretypes.LabelTimeoutType, "height"),
},
)
defer telemetry.ReportTimeoutPacket(msg.Packet, "height")

ctx.Logger().Info("timeout packet callback succeeded", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "result", channeltypes.SUCCESS.String())

@@ -656,17 +635,7 @@ func (k *Keeper) TimeoutOnClose(goCtx context.Context, msg *channeltypes.MsgTime
return nil, errorsmod.Wrap(err, "timeout on close callback failed")
}

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "timeout", "packet"},
1,
[]metrics.Label{
telemetry.NewLabel(coretypes.LabelSourcePort, msg.Packet.SourcePort),
telemetry.NewLabel(coretypes.LabelSourceChannel, msg.Packet.SourceChannel),
telemetry.NewLabel(coretypes.LabelDestinationPort, msg.Packet.DestinationPort),
telemetry.NewLabel(coretypes.LabelDestinationChannel, msg.Packet.DestinationChannel),
telemetry.NewLabel(coretypes.LabelTimeoutType, "channel-closed"),
},
)
defer telemetry.ReportTimeoutPacket(msg.Packet, "channel-closed")

ctx.Logger().Info("timeout on close callback succeeded", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "result", channeltypes.SUCCESS.String())

@@ -723,16 +692,7 @@ func (k *Keeper) Acknowledgement(goCtx context.Context, msg *channeltypes.MsgAck
return nil, errorsmod.Wrap(err, "acknowledge packet callback failed")
}

defer telemetry.IncrCounterWithLabels(
[]string{"tx", "msg", "ibc", channeltypes.EventTypeAcknowledgePacket},
1,
[]metrics.Label{
telemetry.NewLabel(coretypes.LabelSourcePort, msg.Packet.SourcePort),
telemetry.NewLabel(coretypes.LabelSourceChannel, msg.Packet.SourceChannel),
telemetry.NewLabel(coretypes.LabelDestinationPort, msg.Packet.DestinationPort),
telemetry.NewLabel(coretypes.LabelDestinationChannel, msg.Packet.DestinationChannel),
},
)
defer telemetry.ReportAcknowledgePacket(msg.Packet)

ctx.Logger().Info("acknowledgement succeeded", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "result", channeltypes.SUCCESS.String())

DimitrisJim marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
package types
package metrics

// Prometheus metric labels.
const (
// 02-client labels

LabelClientType = "client_type"
DimitrisJim marked this conversation as resolved.
Show resolved Hide resolved
LabelClientID = "client_id"
LabelUpdateType = "update_type"
LabelMsgType = "msg_type"

// Message server labels

LabelSourcePort = "source_port"
LabelSourceChannel = "source_channel"
LabelDestinationPort = "destination_port"