Skip to content

Commit 521f326

Browse files
committed
price source config metric
1 parent 30096fb commit 521f326

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

apps/hip-3-pusher/src/pusher/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def load_config():
2727
config_toml = tomllib.load(config_file)
2828
config = Config(**config_toml)
2929
logger.debug("Config loaded: {}", config)
30+
logger.info("Price config: {}", config.price)
3031
return config
3132

3233

@@ -44,6 +45,7 @@ async def main():
4445

4546
price_state = PriceState(config)
4647
metrics = Metrics(config)
48+
metrics.set_price_configs(config.hyperliquid.market_name, config.price)
4749

4850
publisher = Publisher(config, price_state, metrics)
4951
hyperliquid_listener = HyperliquidListener(config, price_state.hl_oracle_state, price_state.hl_mark_state, price_state.hl_mid_state)

apps/hip-3-pusher/src/pusher/metrics.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from opentelemetry.metrics import get_meter_provider, set_meter_provider
44
from opentelemetry.sdk.metrics import MeterProvider
55

6-
from pusher.config import Config
6+
from pusher.config import Config, PriceConfig, PriceSourceConfig, ConstantSourceConfig, SingleSourceConfig, \
7+
PairSourceConfig, OracleMidAverageConfig, PriceSource
78

89
METER_NAME = "hip3pusher"
910

@@ -42,3 +43,41 @@ def _init_metrics(self):
4243
description="Interval between push requests (seconds)",
4344
unit="s",
4445
)
46+
# labels: dex, price_type, symbol
47+
self.price_config_counter = self.meter.create_counter(
48+
name="hip_3_relayer_price_config",
49+
description="Price source config",
50+
)
51+
52+
def set_price_configs(self, dex: str, price_config: PriceConfig):
53+
self._set_price_config_type(dex, price_config.oracle, "oracle")
54+
self._set_price_config_type(dex, price_config.mark, "mark")
55+
self._set_price_config_type(dex, price_config.external, "external")
56+
57+
def _set_price_config_type(self, dex: str, price_source_config: dict[str, list[PriceSourceConfig]], price_type: str):
58+
for symbol in price_source_config:
59+
source_config_str = ' | '.join(self._get_source_config_str(source_config) for source_config in price_source_config[symbol])
60+
labels = {
61+
"dex": dex,
62+
"symbol": symbol,
63+
"price_type": price_type,
64+
"config": source_config_str,
65+
}
66+
self.price_config_counter.add(1, labels)
67+
68+
def _get_source_config_str(self, source_config: PriceSourceConfig):
69+
if isinstance(source_config, ConstantSourceConfig):
70+
return f"constant({source_config.value})"
71+
elif isinstance(source_config, SingleSourceConfig):
72+
return self._get_price_source_str(source_config.source)
73+
elif isinstance(source_config, PairSourceConfig):
74+
base_str = self._get_price_source_str(source_config.base_source)
75+
quote_str = self._get_price_source_str(source_config.quote_source)
76+
return f"pair({base_str},{quote_str})"
77+
elif isinstance(source_config, OracleMidAverageConfig):
78+
return f"oracle_mid_average({source_config.symbol})"
79+
else:
80+
return "unknown"
81+
82+
def _get_price_source_str(self, price_source: PriceSource):
83+
return f"{price_source.source_name}({str(price_source.source_id)[:8]})"

apps/hip-3-pusher/src/pusher/seda_listener.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class SedaListener:
1717
"""
1818
def __init__(self, config: Config, seda_state: PriceSourceState):
1919
self.url = config.seda.url
20-
self.api_key = Path(config.seda.api_key_path).read_text().strip()
20+
self.api_key = Path(config.seda.api_key_path).read_text().strip() if config.seda.api_key_path else None
2121
self.feeds = config.seda.feeds
2222
self.poll_interval = config.seda.poll_interval
2323
self.poll_failure_interval = config.seda.poll_failure_interval

0 commit comments

Comments
 (0)