Skip to content

Commit 5075d0a

Browse files
committed
small fix
1 parent 00dcadc commit 5075d0a

File tree

2 files changed

+38
-52
lines changed

2 files changed

+38
-52
lines changed

helm/values.production.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ replicaCount: 1
33
ingress:
44
enabled: true
55
hosts:
6-
- host: spark-candles.production.sprk.fi
6+
- host: spark-candles.v12.trade
77
paths:
88
- path: /
99
pathType: Prefix
1010
tls:
1111
- secretName: spark-candles-tls
1212
hosts:
13-
- spark-candles.production.sprk.fi
13+
- spark-candles.v12.trade
1414

1515
vault:
1616
mount: production

src/indexer/pangea.rs

+36-50
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::str::FromStr;
1111
use std::sync::Arc;
1212
use std::time::Duration;
1313
use tokio::sync::broadcast;
14-
use tokio::time::sleep;
14+
use tokio::time::{sleep, timeout};
1515

1616
use crate::config::env::ev;
1717
use crate::error::Error;
@@ -31,7 +31,7 @@ pub async fn initialize_pangea_indexer(
3131
let store = match trading_engine.get_store(&config.symbol) {
3232
Some(s) => s,
3333
None => {
34-
log::error!("No CandleStore found for symbol {}", config.symbol);
34+
error!("No CandleStore found for symbol {}", config.symbol);
3535
continue;
3636
}
3737
};
@@ -41,10 +41,10 @@ pub async fn initialize_pangea_indexer(
4141

4242
tokio::select! {
4343
_ = shutdown.recv() => {
44-
log::info!("Shutdown signal received in indexer.");
44+
info!("Shutdown signal received in indexer.");
4545
}
4646
_ = futures::future::join_all(tasks) => {
47-
log::info!("All indexer tasks completed.");
47+
info!("All indexer tasks completed.");
4848
}
4949
}
5050

@@ -56,7 +56,6 @@ async fn process_events_for_pair(
5656
store: Arc<CandleStore>,
5757
) -> Result<(), Error> {
5858
let client = create_pangea_client().await?;
59-
6059
let contract_h256 = H256::from_str(&config.contract_id)?;
6160

6261
let last_processed_block = fetch_historical_data(
@@ -68,22 +67,12 @@ async fn process_events_for_pair(
6867
)
6968
.await?;
7069

71-
log::info!(
70+
info!(
7271
"Completed historical data fetch for {}. Last processed block: {}",
73-
config.symbol,
74-
last_processed_block
72+
config.symbol, last_processed_block
7573
);
7674

77-
listen_for_new_deltas(
78-
&client,
79-
&store,
80-
last_processed_block,
81-
contract_h256,
82-
config.symbol,
83-
)
84-
.await?;
85-
86-
Ok(())
75+
listen_for_new_deltas(&store, last_processed_block, contract_h256, config.symbol).await
8776
}
8877

8978
async fn create_pangea_client() -> Result<Client<WsProvider>, Error> {
@@ -127,38 +116,44 @@ async fn fetch_historical_data(
127116
..Default::default()
128117
};
129118

130-
let stream = client
131-
.get_fuel_spark_orders_by_format(request, Format::JsonStream, false)
132-
.await?;
133-
119+
let stream = client.get_fuel_spark_orders_by_format(request, Format::JsonStream, false).await?;
134120
pangea_client::futures::pin_mut!(stream);
135121

136122
while let Some(data) = stream.next().await {
137-
match data {
138-
Ok(data) => {
139-
let order: PangeaOrderEvent = serde_json::from_slice(&data)?;
123+
if let Ok(data) = data {
124+
if let Ok(order) = serde_json::from_slice::<PangeaOrderEvent>(&data) {
140125
handle_order_event(candle_store.clone(), order, symbol.clone()).await;
126+
} else {
127+
error!("Failed to deserialize order event");
141128
}
142-
Err(e) => {
143-
error!("Error processing historical data stream: {}", e);
144-
break;
145-
}
129+
} else {
130+
error!("Stream error while processing historical data");
146131
}
147132
}
148133

149134
Ok(target_latest_block)
150135
}
151136

152137
async fn listen_for_new_deltas(
153-
client: &Client<WsProvider>,
154138
candle_store: &Arc<CandleStore>,
155139
mut last_processed_block: i64,
156140
contract_h256: H256,
157141
symbol: String,
158142
) -> Result<(), Error> {
159143
let mut retry_delay = Duration::from_secs(1);
144+
let max_backoff = Duration::from_secs(60);
160145

161146
loop {
147+
let client = match create_pangea_client().await {
148+
Ok(c) => c,
149+
Err(e) => {
150+
error!("Failed to create Pangea client: {}", e);
151+
sleep(retry_delay).await;
152+
retry_delay = (retry_delay * 2).min(max_backoff);
153+
continue;
154+
}
155+
};
156+
162157
let fuel_chain = match ev("CHAIN")?.as_str() {
163158
"FUEL" => ChainId::FUEL,
164159
_ => ChainId::FUELTESTNET,
@@ -172,38 +167,29 @@ async fn listen_for_new_deltas(
172167
..Default::default()
173168
};
174169

175-
match client
176-
.get_fuel_spark_orders_by_format(request, Format::JsonStream, true)
177-
.await
178-
{
179-
Ok(stream) => {
170+
match timeout(Duration::from_secs(10), client.get_fuel_spark_orders_by_format(request, Format::JsonStream, true)).await {
171+
Ok(Ok(stream)) => {
180172
pangea_client::futures::pin_mut!(stream);
181173
retry_delay = Duration::from_secs(1);
182-
183174
while let Some(data) = stream.next().await {
184-
match data {
185-
Ok(data) => {
186-
let order_event: PangeaOrderEvent = serde_json::from_slice(&data)?;
175+
if let Ok(data) = data {
176+
if let Ok(order_event) = serde_json::from_slice::<PangeaOrderEvent>(&data) {
187177
last_processed_block = order_event.block_number;
188-
handle_order_event(candle_store.clone(), order_event, symbol.clone())
189-
.await;
190-
}
191-
Err(e) => {
192-
error!("Stream error: {}", e);
193-
break;
178+
handle_order_event(candle_store.clone(), order_event, symbol.clone()).await;
179+
} else {
180+
error!("Failed to deserialize order event");
194181
}
195182
}
196183
}
197184
}
198-
Err(e) => {
199-
error!("Failed to subscribe to new deltas: {}", e);
200-
sleep(retry_delay).await;
201-
retry_delay = (retry_delay * 2).min(Duration::from_secs(60));
202-
}
185+
_ => error!("Failed to subscribe to new deltas, retrying..."),
203186
}
187+
sleep(retry_delay).await;
188+
retry_delay = (retry_delay * 2).min(max_backoff);
204189
}
205190
}
206191

192+
207193
async fn get_latest_block(chain_id: ChainId) -> Result<i64, Error> {
208194
let provider_url = match chain_id {
209195
ChainId::FUEL => "mainnet.fuel.network",

0 commit comments

Comments
 (0)