소스 검색

网络请求容错

skyffire 9 달 전
부모
커밋
a24f160124
1개의 변경된 파일42개의 추가작업 그리고 38개의 파일을 삭제
  1. 42 38
      strategy/src/predictor.rs

+ 42 - 38
strategy/src/predictor.rs

@@ -3,7 +3,7 @@ use std::sync::Arc;
 use chrono::{Utc};
 use futures_channel::mpsc::UnboundedSender;
 use futures_util::StreamExt;
-use reqwest::Client;
+use reqwest::{Client, Error, Response};
 use rust_decimal::prelude::*;
 use rust_decimal_macros::dec;
 use serde_json::{json, Value};
@@ -454,48 +454,52 @@ impl Predictor {
         let client = Client::new();
 
         // 发送 GET 请求
-        let response = client.post(url)
+        let response_rst = client.post(url)
             .json(&params)
             .send()
-            .await
-            .unwrap();
-
-        // 错误处理
-        if response.status().is_success() {
-            let response_text = response.text().await.unwrap();
-            let parsed: Value = serde_json::from_str(response_text.as_str()).unwrap();
-            let msv = parsed["data"]["msv"].clone();
-
-            let msv_decimals: Vec<Decimal> = msv.as_array()
-                .unwrap()  // 确保 parsed 是一个数组
-                .iter()
-                .filter_map(|item| {
-                    // 尝试提取第二个值并转换为 Decimal
-                    if let Some(value) = item.get(1) {
-                        value.as_str().unwrap_or("0").parse::<Decimal>().ok()
+            .await;
+
+        match response_rst {
+            Ok(response) => {
+                // 错误处理
+                if response.status().is_success() {
+                    let response_text = response.text().await.unwrap();
+                    let parsed: Value = serde_json::from_str(response_text.as_str()).unwrap();
+                    let msv = parsed["data"]["msv"].clone();
+
+                    let msv_decimals: Vec<Decimal> = msv.as_array()
+                        .unwrap()  // 确保 parsed 是一个数组
+                        .iter()
+                        .filter_map(|item| {
+                            // 尝试提取第二个值并转换为 Decimal
+                            if let Some(value) = item.get(1) {
+                                value.as_str().unwrap_or("0").parse::<Decimal>().ok()
+                            } else {
+                                None
+                            }
+                        })
+                        .collect();
+
+                    let max_abs_value = msv_decimals.iter()
+                        .map(|&value| value.abs())  // 获取每个数的绝对值
+                        .fold(Decimal::new(0, 0), |a, b| a.max(b)); // 计算最大值
+
+                    let prev_open = self.params.open.clone();
+
+                    self.params.open = if max_abs_value.is_zero() {
+                        panic!("十分钟内毫无波动的行情,停机。")
                     } else {
-                        None
-                    }
-                })
-                .collect();
-
-            let max_abs_value = msv_decimals.iter()
-                .map(|&value| value.abs())  // 获取每个数的绝对值
-                .fold(Decimal::new(0, 0), |a, b| a.max(b)); // 计算最大值
-
-            let prev_open = self.params.open.clone();
+                        max_abs_value / Decimal::ONE_HUNDRED
+                    };
 
-            self.params.open = if max_abs_value.is_zero() {
-                panic!("十分钟内毫无波动的行情,停机。")
-            } else {
-                max_abs_value / Decimal::ONE_HUNDRED
-            };
-
-            if self.params.open != prev_open {
-                info!("open: {} -> {}", prev_open, self.params.open);
+                    if self.params.open != prev_open {
+                        info!("open: {} -> {}", prev_open, self.params.open);
+                    }
+                } else {
+                    error!("自动参数挂了:{}", response.status());
+                }
             }
-        } else {
-            error!("自动参数挂了:{}", response.status());
+            Err(_) => {}
         }
     }
 }