Skip to content

Commit

Permalink
bug: update virtual processes catch errors and retry
Browse files Browse the repository at this point in the history
  • Loading branch information
pauldotyu committed Jun 30, 2023
1 parent e2e5895 commit 98265d4
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 51 deletions.
35 changes: 22 additions & 13 deletions src/virtual-customer/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,23 +72,32 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let order = Order { customer_id, items };
let serialized_order = serde_json::to_string(&order)?;
let client = reqwest::blocking::Client::new();

let response = client
.post(order_service_url.clone())
.header("Content-Type", "application/json")
.body(serialized_order.clone())
.send()?;

// track the time it takes to generate an order
let elapsed_time = start_time.elapsed();

// print the order details
println!(
"Order {} sent at {:.2?} with status of {}. {}",
order_counter,
elapsed_time,
response.status(),
serialized_order
);
.send();

match response {
Ok(res) => {
// Handle successful response
let elapsed_time = start_time.elapsed();

// print the order details
println!(
"Order {} sent at {:.2?} with status of {}. {}",
order_counter,
elapsed_time,
res.status(),
serialized_order
);
}
Err(err) => {
// Handle error
println!("Failed to submit order: {}", err);
}
}

thread::sleep(sleep_duration);
}
Expand Down
88 changes: 50 additions & 38 deletions src/virtual-worker/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use rand::Rng;
use reqwest::blocking::Client;
use serde::{Deserialize, Serialize};
use serde_json::from_str;
use std::env;
use std::thread;
use std::time::{Duration, Instant};
Expand Down Expand Up @@ -36,47 +33,62 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let sleep_duration = Duration::from_secs_f64(order_processing_interval);
println!("Sleep duration between orders: {:?}", sleep_duration);

// order counter
let mut order_counter = 0;

// keep track of how long we've been running
let start_time = Instant::now();

loop {
// fetch the orders
let client = reqwest::blocking::Client::new();
let response = client.get(format!("{}/order/fetch", order_service_url)).send()?;

// parse the text into json
let json = response.text()?;
let orders: Vec<Order> = serde_json::from_str(&json)?;

// loop through the orders
for mut order in orders {
order_counter += 1;

// update order status
order.status = OrderStatus::Processing as u32;

// send the order to the order service
let serialized_order = serde_json::to_string(&order)?;
let client = reqwest::blocking::Client::new();
let response = client
.put(format!("{}/order", order_service_url))
.header("Content-Type", "application/json")
.body(serialized_order.clone())
.send()?;

// track the time it takes to generate an order
let elapsed_time = start_time.elapsed();

// print the order details
println!(
"Order {} processed at {:.2?} with status of {}. {}",
order.order_id, elapsed_time, order.status, serialized_order
);

thread::sleep(sleep_duration);

let response = client
.get(format!("{}/order/fetch", order_service_url))
.send();

match response {
Ok(res) => {
// parse the text into json
let json = res.text()?;

let orders: Vec<Order> = serde_json::from_str(&json)?;

// loop through the orders
for mut order in orders {
// update order status
order.status = OrderStatus::Processing as u32;

// send the order to the order service
let serialized_order = serde_json::to_string(&order)?;
let client = reqwest::blocking::Client::new();

let response = client
.put(format!("{}/order", order_service_url))
.header("Content-Type", "application/json")
.body(serialized_order.clone())
.send();

match response {
Ok(_res) => {
// track the time it takes to generate an order
let elapsed_time = start_time.elapsed();

// print the order details
println!(
"Order {} processed at {:.2?} with status of {}. {}",
order.order_id, elapsed_time, order.status, serialized_order
);
}
Err(err) => {
println!("Error completing the order: {}", err);
}
}

thread::sleep(sleep_duration);
}
}
Err(e) => {
println!("Failed to fetch orders: {}", e);
thread::sleep(sleep_duration);
}
}
}
}
Expand Down

0 comments on commit 98265d4

Please sign in to comment.