Skip to content

Commit

Permalink
[CLOB-1063] add latency and gauge metrics for conditional orders (#1014)
Browse files Browse the repository at this point in the history
* [CLOB-1063] add latency and gauge metrics for conditional orders

* fix govplus lint and tests
  • Loading branch information
jayy04 authored Jan 26, 2024
1 parent a27e96a commit a13958a
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 4 deletions.
2 changes: 2 additions & 0 deletions protocol/lib/metrics/metric_keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
17 changes: 17 additions & 0 deletions protocol/x/clob/keeper/untriggered_conditional_orders.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
9 changes: 6 additions & 3 deletions protocol/x/govplus/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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,
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion protocol/x/ratelimit/types/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Expand Down

0 comments on commit a13958a

Please # to comment.