@@ -49,17 +49,17 @@ namespace
49
49
pplx::cancellation_token_source d_token_source;
50
50
51
51
pplx::task<web::http::http_response>
52
- async_fetch_defi_ticker_stats ()
52
+ async_fetch_defi_stats_volumes ()
53
53
{
54
54
web::http::http_request req;
55
55
req.set_method (web::http::methods::GET);
56
- req.set_request_uri (FROM_STD_STR (" api/v3/tickers/summary " ));
56
+ req.set_request_uri (FROM_STD_STR (" api/v3/pairs/volumes_24hr " ));
57
57
SPDLOG_INFO (" defi_stats req: {}" , TO_STD_STR (req.to_string ()));
58
58
return g_defi_stats_client->request (req, d_token_source.get_token ());
59
59
}
60
60
61
61
nlohmann::json
62
- process_fetch_defi_ticker_stats_answer (web::http::http_response resp)
62
+ process_fetch_defi_stats_volumes_answer (web::http::http_response resp)
63
63
{
64
64
std::string body = TO_STD_STR (resp.extract_string (true ).get ());
65
65
if (resp.status_code () == 200 )
@@ -119,11 +119,11 @@ namespace atomic_dex
119
119
this ->process_update ();
120
120
};
121
121
};
122
- async_fetch_defi_ticker_stats ()
122
+ async_fetch_defi_stats_volumes ()
123
123
.then (
124
124
[this ](web::http::http_response resp)
125
125
{
126
- this ->m_defi_ticker_stats = process_fetch_defi_ticker_stats_answer (resp);
126
+ this ->m_defi_stats_volumes = process_fetch_defi_stats_volumes_answer (resp);
127
127
nb_try = 0 ;
128
128
})
129
129
.then (error_functor);
@@ -136,33 +136,140 @@ namespace atomic_dex
136
136
auto ticker = base + " _" + quote;
137
137
auto ticker_reversed = quote + " _" + base;
138
138
SPDLOG_INFO (" Getting 24hr volume data for {}" , ticker);
139
+
140
+ // Check if base/quote are the same
139
141
if (base == quote)
140
142
{
141
143
SPDLOG_INFO (" Base/quote must be different, no volume data for {}" , ticker);
142
144
return volume_24h_usd;
143
145
}
144
146
145
- auto defi_ticker_stats = m_defi_ticker_stats.get ();
146
- // SPDLOG_INFO("Volume data: {}", defi_ticker_stats.dump(4));
147
+ // Check if defi_stats_volumes is valid
148
+ auto defi_stats_volumes = m_defi_stats_volumes.get ();
149
+ if (!defi_stats_volumes.is_object ())
150
+ {
151
+ SPDLOG_WARN (" Invalid defi stats volumes data." );
152
+ return volume_24h_usd;
153
+ }
147
154
148
- if (defi_ticker_stats.contains (" data" ))
155
+ // Check if volumes key exists
156
+ if (!defi_stats_volumes.contains (" volumes" ))
157
+ {
158
+ SPDLOG_WARN (" No volumes data available." );
159
+ return volume_24h_usd;
160
+ }
161
+
162
+ // Extract ticker trade_volume_usd safely
163
+ if (defi_stats_volumes.at (" volumes" ).contains (ticker))
149
164
{
150
- SPDLOG_INFO ( " Combined volume usd: {} " , defi_ticker_stats[ " combined_volume_usd " ]) ;
151
- if (defi_ticker_stats. at ( " data " ). contains (ticker ))
165
+ auto volume_node = defi_stats_volumes[ " volumes " ][ticker][ " ALL " ][ " trade_volume_usd " ] ;
166
+ if (volume_node. is_number ( ))
152
167
{
153
- volume_24h_usd = defi_ticker_stats. at ( " data " ). at (ticker). at ( " volume_usd_24hr " ). get <std::string>( );
168
+ volume_24h_usd = std::to_string (volume_node. get <double >() );
154
169
SPDLOG_INFO (" {} volume usd: {}" , ticker, volume_24h_usd);
155
170
}
156
- else if (defi_ticker_stats.at (" data" ).contains (ticker_reversed))
171
+ else if (volume_node.is_null ())
172
+ {
173
+ SPDLOG_WARN (" Volume value is null for {}" , ticker);
174
+ }
175
+ else
176
+ {
177
+ SPDLOG_WARN (" Volume value is not a number for {}: {}" , ticker, volume_node.type_name ());
178
+ }
179
+ }
180
+ else if (defi_stats_volumes[" volumes" ].contains (ticker_reversed))
181
+ {
182
+ auto volume_node = defi_stats_volumes[" volumes" ][ticker_reversed][" ALL" ][" trade_volume_usd" ];
183
+ if (volume_node.is_number ())
157
184
{
158
- volume_24h_usd = defi_ticker_stats. at ( " data " ). at (ticker_reversed). at ( " volume_usd_24hr " ). get <std::string>( );
185
+ volume_24h_usd = std::to_string (volume_node. get <double >() );
159
186
SPDLOG_INFO (" {} volume usd: {}" , ticker_reversed, volume_24h_usd);
160
187
}
188
+ else if (volume_node.is_null ())
189
+ {
190
+ SPDLOG_WARN (" Volume value is null for {}" , ticker);
191
+ }
192
+ else
193
+ {
194
+ SPDLOG_WARN (" Volume value is not a number for {}: {}" , ticker, volume_node.type_name ());
195
+ }
161
196
}
162
197
else
163
198
{
164
- SPDLOG_WARN (" Empty 24hr volume data for {}" , defi_ticker_stats. dump ( 4 ) );
199
+ SPDLOG_WARN (" No volume data available for {}" , ticker );
165
200
}
166
201
return volume_24h_usd;
167
202
}
203
+
204
+ std::string
205
+ global_defi_stats_service::get_trades_24h (const std::string& base, const std::string& quote) const
206
+ {
207
+ std::string trades_24h = " 0" ;
208
+ auto ticker = base + " _" + quote;
209
+ auto ticker_reversed = quote + " _" + base;
210
+ SPDLOG_INFO (" Getting 24hr trade data for {}" , ticker);
211
+
212
+ // Check if base/quote are the same
213
+ if (base == quote)
214
+ {
215
+ SPDLOG_INFO (" Base/quote must be different, no volume data for {}" , ticker);
216
+ return trades_24h;
217
+ }
218
+
219
+ // Check if defi_stats_volumes is valid
220
+ auto defi_stats_volumes = m_defi_stats_volumes.get ();
221
+ if (!defi_stats_volumes.is_object ())
222
+ {
223
+ SPDLOG_WARN (" Invalid defi stats volumes data." );
224
+ return trades_24h;
225
+ }
226
+
227
+ // Check if volumes key exists
228
+ if (!defi_stats_volumes.contains (" volumes" ))
229
+ {
230
+ SPDLOG_WARN (" No volumes data available." );
231
+ return trades_24h;
232
+ }
233
+
234
+ // Extract ticker trade_volume_usd safely
235
+ if (defi_stats_volumes.at (" volumes" ).contains (ticker))
236
+ {
237
+ auto trades_node = defi_stats_volumes[" volumes" ][ticker][" ALL" ][" trades_24hr" ];
238
+ if (trades_node.is_number ())
239
+ {
240
+ trades_24h = std::to_string (trades_node.get <int >());
241
+ SPDLOG_INFO (" {} trades_24h: {}" , ticker, trades_24h);
242
+ }
243
+ else if (trades_node.is_null ())
244
+ {
245
+ SPDLOG_WARN (" Trades value is null for {}" , ticker);
246
+ }
247
+ else
248
+ {
249
+ SPDLOG_WARN (" Trades value is not a number for {}: {}" , ticker, trades_node.type_name ());
250
+ }
251
+ }
252
+ else if (defi_stats_volumes[" volumes" ].contains (ticker_reversed))
253
+ {
254
+ auto trades_node = defi_stats_volumes[" volumes" ][ticker_reversed][" ALL" ][" trades_24hr" ];
255
+ if (trades_node.is_number ())
256
+ {
257
+ trades_24h = std::to_string (trades_node.get <int >());
258
+ SPDLOG_INFO (" {} trades_24h: {}" , ticker_reversed, trades_24h);
259
+ }
260
+ else if (trades_node.is_null ())
261
+ {
262
+ SPDLOG_WARN (" Trades value is null for {}" , ticker);
263
+ }
264
+ else
265
+ {
266
+ SPDLOG_WARN (" Trades value is not a number for {}: {}" , ticker, trades_node.type_name ());
267
+ }
268
+ }
269
+ else
270
+ {
271
+ SPDLOG_WARN (" No trades data available for {}" , ticker);
272
+ }
273
+ return trades_24h;
274
+ }
168
275
} // namespace atomic_dex
0 commit comments