diff --git a/protocol/lib/metrics/metric_keys.go b/protocol/lib/metrics/metric_keys.go index 222e340c13..023179c826 100644 --- a/protocol/lib/metrics/metric_keys.go +++ b/protocol/lib/metrics/metric_keys.go @@ -44,6 +44,8 @@ const ( // Measure Since ClobOffsettingSubaccountPerpetualPosition = "clob_offsetting_subaccount_perpetual_position" + ClobMaybeTriggerConditionalOrders = "clob_maybe_trigger_conditional_orders" + ClobNumUntriggeredOrders = "clob_num_untriggered_orders" DaemonGetPreviousBlockInfoLatency = "daemon_get_previous_block_info_latency" DaemonGetAllMarketPricesLatency = "daemon_get_all_market_prices_latency" DaemonGetMarketPricesPaginatedLatency = "daemon_get_market_prices_paginated_latency" diff --git a/protocol/x/clob/keeper/untriggered_conditional_orders.go b/protocol/x/clob/keeper/untriggered_conditional_orders.go index cfa31506a9..8ff6e3a52d 100644 --- a/protocol/x/clob/keeper/untriggered_conditional_orders.go +++ b/protocol/x/clob/keeper/untriggered_conditional_orders.go @@ -3,6 +3,7 @@ package keeper import ( "fmt" "math/big" + "time" sdk "github.com/cosmos/cosmos-sdk/types" indexerevents "github.com/dydxprotocol/v4-chain/protocol/indexer/events" @@ -270,6 +271,12 @@ func (untriggeredOrders *UntriggeredConditionalOrders) PollTriggeredConditionalO // to `ProcessProposerMatchesEvents.ConditionalOrderIdsTriggeredInLastBlock`. // This function is called in EndBlocker. func (k Keeper) MaybeTriggerConditionalOrders(ctx sdk.Context) (allTriggeredOrderIds []types.OrderId) { + defer metrics.ModuleMeasureSince( + types.ModuleName, + metrics.ClobMaybeTriggerConditionalOrders, + time.Now(), + ) + // Sort the keys for the untriggered conditional orders struct. We need to trigger // the conditional orders in an ordered way to have deterministic state writes. sortedKeys := lib.GetSortedKeys[types.SortedClobPairId](k.UntriggeredConditionalOrders) @@ -314,6 +321,16 @@ func (k Keeper) MaybeTriggerConditionalOrders(ctx sdk.Context) (allTriggeredOrde // Set the modified untriggeredConditionalOrders back on the keeper field. k.UntriggeredConditionalOrders[clobPairId] = untriggered + + // Gauge the number of untriggered orders. + metrics.SetGaugeWithLabels( + metrics.ClobNumUntriggeredOrders, + float32( + len(untriggered.OrdersToTriggerWhenOraclePriceGTETriggerPrice)+ + len(untriggered.OrdersToTriggerWhenOraclePriceLTETriggerPrice), + ), + metrics.GetLabelForIntValue(metrics.PerpetualId, int(perpetualId)), + ) } return allTriggeredOrderIds diff --git a/protocol/x/govplus/keeper/keeper_test.go b/protocol/x/govplus/keeper/keeper_test.go index 9b340de71d..8806127133 100644 --- a/protocol/x/govplus/keeper/keeper_test.go +++ b/protocol/x/govplus/keeper/keeper_test.go @@ -231,7 +231,8 @@ func TestSetGetLimitParams_Success(t *testing.T) { } // Test SetLimitParams - k.SetLimitParams(ctx, limitParams) + err := k.SetLimitParams(ctx, limitParams) + require.NoError(t, err) // Test GetLimitParams gotLimitParams := k.GetLimitParams(ctx, tc.denom) @@ -247,10 +248,11 @@ func TestSetGetLimitParams_Success(t *testing.T) { require.Equal(t, expectedDenomCapacity, gotDenomCapacity, "retrieved DenomCapacity does not match the set value") // Set empty `LimitParams` for `testDenom`. - k.SetLimitParams(ctx, types.LimitParams{ + err = k.SetLimitParams(ctx, types.LimitParams{ Denom: tc.denom, Limiters: []types.Limiter{}, // Empty list, results in deletion of the key. }) + require.NoError(t, err) // Check that the key is deleted under `LimitParams` storage. require.Equal(t, @@ -821,7 +823,8 @@ func TestUpdateAllCapacitiesEndBlocker(t *testing.T) { // Initialize limit params for _, limitParams := range tc.limitParamsList { - k.SetLimitParams(ctx, limitParams) + err := k.SetLimitParams(ctx, limitParams) + require.NoError(t, err) } // Initialize denom capacity diff --git a/protocol/x/ratelimit/types/params.go b/protocol/x/ratelimit/types/params.go index 757323290f..67e27e4267 100644 --- a/protocol/x/ratelimit/types/params.go +++ b/protocol/x/ratelimit/types/params.go @@ -57,7 +57,7 @@ func (p *LimitParams) Validate() error { return ErrInvalidBaselineMinimum } - if limiter.BaselineTvlPpm == 0 || limiter.BaselineTvlPpm >= lib.OneMillion { + if limiter.BaselineTvlPpm == 0 || limiter.BaselineTvlPpm > lib.OneMillion { return ErrInvalidBaselineTvlPpm } }