1
- use crate :: config:: WatchdogConfig ;
1
+ use crate :: config:: { self , WatchdogConfig } ;
2
2
use bson:: doc;
3
3
use cache:: remote:: RedisCache ;
4
4
use chrono:: Utc ;
@@ -39,9 +39,7 @@ impl WatchdogClient {
39
39
cache : CacheConfig ,
40
40
database : DatabaseConfig ,
41
41
) -> Result < Self , PicaError > {
42
- let http_client = reqwest:: ClientBuilder :: new ( )
43
- . timeout ( Duration :: from_secs ( watchdog. http_client_timeout_secs ) )
44
- . build ( ) ?;
42
+ let http_client = reqwest:: ClientBuilder :: new ( ) . build ( ) ?;
45
43
let client = mongodb:: Client :: with_uri_str ( & database. event_db_url ) . await ?;
46
44
let db = client. database ( & database. event_db_name ) ;
47
45
@@ -105,11 +103,12 @@ impl WatchdogClient {
105
103
106
104
let client = self . client . clone ( ) ;
107
105
let tasks_store = self . tasks . clone ( ) ;
106
+ let timeout = self . watchdog . http_client_timeout_secs ;
108
107
109
108
tokio:: spawn ( async move {
110
109
let mut tasks = tasks
111
110
. into_iter ( )
112
- . map ( |task| execute ( task, client. clone ( ) , tasks_store. clone ( ) ) )
111
+ . map ( |task| execute ( task, client. clone ( ) , tasks_store. clone ( ) , timeout ) )
113
112
. collect :: < FuturesUnordered < _ > > ( ) ;
114
113
115
114
while let Some ( result) = tasks. next ( ) . await {
@@ -136,22 +135,38 @@ async fn execute(
136
135
task : Task ,
137
136
http_client : reqwest:: Client ,
138
137
tasks_store : MongoStore < Task > ,
138
+ timeout : u64 ,
139
139
) -> Result < Id , PicaError > {
140
- let request = http_client
140
+ let timeout = if task. r#await {
141
+ Duration :: from_secs ( 300 )
142
+ } else {
143
+ Duration :: from_secs ( timeout)
144
+ } ;
145
+
146
+ let response = http_client
141
147
. post ( task. endpoint )
148
+ . timeout ( timeout)
142
149
. json ( & task. payload )
143
150
. send ( )
144
151
. await ?;
145
152
153
+ let status = response. status ( ) ;
154
+ let mut stream = response. bytes_stream ( ) ;
155
+
156
+ while let Some ( item) = stream. next ( ) . await {
157
+ tracing:: debug!( "Response from API {:?}" , item) ;
158
+ tracing:: info!( "Response length from API {:?}" , item. map( |b| b. len( ) ) ) ;
159
+ }
160
+
146
161
tasks_store
147
162
. collection
148
163
. find_one_and_update (
149
164
doc ! {
150
165
"_id" : task. id. to_string( ) // Filter by task ID
151
166
} ,
152
167
doc ! {
153
- "$set" : { // Use the $set operator correctly
154
- "status" : request . status( ) . to_string( ) ,
168
+ "$set" : {
169
+ "status" : status. to_string( ) ,
155
170
"endTime" : Utc :: now( ) . timestamp_millis( ) ,
156
171
"active" : false
157
172
}
0 commit comments