Squashed 'components/zinit/' content from commit 1b76c06
git-subtree-dir: components/zinit git-subtree-split: 1b76c062fe31d552d1b7b23484ce163995a81482
This commit is contained in:
78
zinit-client/examples/http_client.rs
Normal file
78
zinit-client/examples/http_client.rs
Normal file
@@ -0,0 +1,78 @@
|
||||
use anyhow::Result;
|
||||
use serde_json::json;
|
||||
use zinit_client::Client;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
// Create a client using HTTP transport
|
||||
let client = Client::http("http://localhost:8080").await?;
|
||||
|
||||
// Create a new service
|
||||
let service_name = "example-http-service";
|
||||
let service_config = json!({
|
||||
"exec": "echo 'Hello from HTTP service'",
|
||||
"oneshot": true,
|
||||
"after": ["network"]
|
||||
})
|
||||
.as_object()
|
||||
.unwrap()
|
||||
.clone();
|
||||
|
||||
match client.create_service(service_name, service_config).await {
|
||||
Ok(msg) => println!("Service created: {}", msg),
|
||||
Err(e) => eprintln!("Failed to create service: {}", e),
|
||||
}
|
||||
|
||||
// Start the HTTP/RPC server on a specific address
|
||||
match client.start_http_server("0.0.0.0:8081").await {
|
||||
Ok(msg) => println!("HTTP server status: {}", msg),
|
||||
Err(e) => eprintln!("Failed to start HTTP server: {}", e),
|
||||
}
|
||||
|
||||
// List all services
|
||||
let services = client.list().await?;
|
||||
println!("\nServices:");
|
||||
for (name, state) in services {
|
||||
println!("{}: {}", name, state);
|
||||
}
|
||||
|
||||
// Monitor the service
|
||||
match client.monitor(service_name).await {
|
||||
Ok(_) => println!("\nService is now monitored"),
|
||||
Err(e) => eprintln!("Failed to monitor service: {}", e),
|
||||
}
|
||||
|
||||
// Start the service
|
||||
match client.start(service_name).await {
|
||||
Ok(_) => println!("Service started successfully"),
|
||||
Err(e) => eprintln!("Failed to start service: {}", e),
|
||||
}
|
||||
|
||||
// Get logs
|
||||
let logs = client.logs(Some(service_name.to_string())).await?;
|
||||
println!("\nLogs:");
|
||||
for log in logs {
|
||||
println!("{}", log);
|
||||
}
|
||||
|
||||
// Clean up - forget the service
|
||||
println!("\nCleaning up...");
|
||||
match client.forget(service_name).await {
|
||||
Ok(_) => println!("Service has been forgotten"),
|
||||
Err(e) => eprintln!("Failed to forget service: {}", e),
|
||||
}
|
||||
|
||||
// Clean up - delete the service configuration
|
||||
match client.delete_service(service_name).await {
|
||||
Ok(msg) => println!("{}", msg),
|
||||
Err(e) => eprintln!("Failed to delete service: {}", e),
|
||||
}
|
||||
|
||||
// Stop the HTTP/RPC server
|
||||
match client.stop_http_server().await {
|
||||
Ok(_) => println!("HTTP server stopped"),
|
||||
Err(e) => eprintln!("Failed to stop HTTP server: {}", e),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user