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
Show file tree
Hide file tree
Changes from all commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
* (23-commmitment) [\#6644](https://github.com/cosmos/ibc-go/pull/6644) Introduce commitment/v2 `MerklePath` to include `repeated bytes` in favour of `repeated string`. This supports using merkle path keys which include non UTF-8 encoded runes.
* (23-commmitment) [\#6633](https://github.com/cosmos/ibc-go/pull/6633) MerklePath has been changed to use `repeated bytes` in favour of `repeated strings`.
* (apps/27-interchain-accounts) [\#6749](https://github.com/cosmos/ibc-go/pull/6749) The ICA controller `NewIBCMiddleware` constructor function sets by default the auth module to nil.
* (core, core/02-client) [\#6763](https://github.com/cosmos/ibc-go/pull/6763) Move prometheus metric labels for 02-client and core into a separate `metrics` package on core.
* (core/02-client) [\#6777](https://github.com/cosmos/ibc-go/pull/6777) The `NewClientProposalHandler` of `02-client` has been removed.

### State Machine Breaking
Expand Down
18 changes: 9 additions & 9 deletions modules/apps/transfer/internal/telemetry/telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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(
Expand All @@ -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)
Expand All @@ -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)},
)
}

Expand Down
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
Expand Down Expand Up @@ -40,11 +38,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)

Expand Down Expand Up @@ -77,15 +71,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)

Expand All @@ -96,15 +82,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)
Expand Down Expand Up @@ -140,14 +118,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)

Expand Down Expand Up @@ -190,15 +161,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)
Expand Down
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/packet.go
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
Expand Up @@ -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"
Expand All @@ -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"
)

Expand Down Expand Up @@ -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())

Expand Down Expand Up @@ -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())

Expand Down Expand Up @@ -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())

Expand Down Expand Up @@ -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())

Expand Down
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"
LabelClientID = "client_id"
DimitrisJim marked this conversation as resolved.
Show resolved Hide resolved
LabelUpdateType = "update_type"
LabelMsgType = "msg_type"

// Message server labels

LabelSourcePort = "source_port"
LabelSourceChannel = "source_channel"
LabelDestinationPort = "destination_port"
Expand Down
Loading