working example to showcase zinit usage in Rhai scripts
This commit is contained in:
parent
61bd58498a
commit
f386890a8a
@ -7,13 +7,19 @@ let socket_path = "/var/run/zinit.sock";
|
||||
print("Listing all services:");
|
||||
let services = zinit_list(socket_path);
|
||||
|
||||
for (name, state) in services {
|
||||
if services.is_empty() {
|
||||
print("No services found.");
|
||||
} else {
|
||||
// Iterate over the keys of the map
|
||||
for name in services.keys() {
|
||||
let state = services[name];
|
||||
print(`${name}: ${state}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Get status of a specific service
|
||||
let service_name = "example-service";
|
||||
print(`\nGetting status for ${service_name}:`);
|
||||
let service_name = "test";
|
||||
print(`Getting status for ${service_name}:`);
|
||||
|
||||
try {
|
||||
let status = zinit_status(socket_path, service_name);
|
||||
@ -23,7 +29,7 @@ try {
|
||||
print(`Target: ${status.target}`);
|
||||
print("Dependencies:");
|
||||
|
||||
for (dep, state) in status.after {
|
||||
for (dep, state) in status.after.keys() {
|
||||
print(` ${dep}: ${state}`);
|
||||
}
|
||||
} catch(err) {
|
||||
@ -50,7 +56,7 @@ try {
|
||||
let start_result = zinit_start(socket_path, new_service);
|
||||
print(`Service started: ${start_result}`);
|
||||
|
||||
// Get logs
|
||||
// Get logs for a specific service
|
||||
print("\nGetting logs:");
|
||||
let logs = zinit_logs(socket_path, new_service);
|
||||
|
||||
@ -58,8 +64,19 @@ try {
|
||||
print(log);
|
||||
}
|
||||
|
||||
// Or to get all logs (uncomment if needed)
|
||||
// print("\nGetting all logs:");
|
||||
// let all_logs = zinit_logs_all(socket_path);
|
||||
//
|
||||
// for log in all_logs {
|
||||
// print(log);
|
||||
// }
|
||||
|
||||
// Clean up
|
||||
print("\nCleaning up:");
|
||||
let stop_result = zinit_stop(socket_path, new_service);
|
||||
print(`Service stopped: ${stop_result}`);
|
||||
|
||||
let forget_result = zinit_forget(socket_path, new_service);
|
||||
print(`Service forgotten: ${forget_result}`);
|
||||
|
||||
|
@ -31,6 +31,7 @@ pub fn register_zinit_module(engine: &mut Engine) -> Result<(), Box<EvalAltResul
|
||||
engine.register_fn("zinit_delete_service", zinit_delete_service);
|
||||
engine.register_fn("zinit_get_service", zinit_get_service);
|
||||
engine.register_fn("zinit_logs", zinit_logs);
|
||||
engine.register_fn("zinit_logs_all", zinit_logs_all);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@ -65,22 +66,18 @@ fn get_runtime() -> Result<Runtime, Box<EvalAltResult>> {
|
||||
/// Lists all services managed by Zinit.
|
||||
pub fn zinit_list(socket_path: &str) -> Result<Map, Box<EvalAltResult>> {
|
||||
let rt = get_runtime()?;
|
||||
println!("got runtime: {:?}", rt);
|
||||
|
||||
let result = rt.block_on(async {
|
||||
client::list(socket_path).await
|
||||
});
|
||||
println!("got result: {:?}", result);
|
||||
|
||||
let services = result.to_rhai_error()?;
|
||||
println!("got services: {:?}", services);
|
||||
|
||||
// Convert HashMap<String, String> to Rhai Map
|
||||
let mut map = Map::new();
|
||||
for (name, state) in services {
|
||||
map.insert(name.into(), Dynamic::from(state));
|
||||
}
|
||||
println!("got map: {:?}", map);
|
||||
|
||||
Ok(map)
|
||||
}
|
||||
@ -269,13 +266,13 @@ pub fn zinit_get_service(socket_path: &str, name: &str) -> Result<Dynamic, Box<E
|
||||
}
|
||||
}
|
||||
|
||||
/// Wrapper for zinit_client::logs
|
||||
/// Wrapper for zinit_client::logs with a filter
|
||||
///
|
||||
/// Gets logs for a service.
|
||||
pub fn zinit_logs(socket_path: &str, filter: Option<&str>) -> Result<Array, Box<EvalAltResult>> {
|
||||
/// Gets logs for a specific service.
|
||||
pub fn zinit_logs(socket_path: &str, filter: &str) -> Result<Array, Box<EvalAltResult>> {
|
||||
let rt = get_runtime()?;
|
||||
|
||||
let filter_string = filter.map(|s| s.to_string());
|
||||
let filter_string = Some(filter.to_string());
|
||||
|
||||
let result = rt.block_on(async {
|
||||
let client = client::get_zinit_client(socket_path).await?;
|
||||
@ -293,6 +290,28 @@ pub fn zinit_logs(socket_path: &str, filter: Option<&str>) -> Result<Array, Box<
|
||||
Ok(array)
|
||||
}
|
||||
|
||||
/// Wrapper for zinit_client::logs without a filter
|
||||
///
|
||||
/// Gets all logs.
|
||||
pub fn zinit_logs_all(socket_path: &str) -> Result<Array, Box<EvalAltResult>> {
|
||||
let rt = get_runtime()?;
|
||||
|
||||
let result = rt.block_on(async {
|
||||
let client = client::get_zinit_client(socket_path).await?;
|
||||
client.logs(None).await
|
||||
});
|
||||
|
||||
let logs = result.to_rhai_error()?;
|
||||
|
||||
// Convert Vec<String> to Rhai Array
|
||||
let mut array = Array::new();
|
||||
for log in logs {
|
||||
array.push(Dynamic::from(log));
|
||||
}
|
||||
|
||||
Ok(array)
|
||||
}
|
||||
|
||||
// Helper function to convert serde_json::Value to rhai::Dynamic
|
||||
fn value_to_dynamic(value: Value) -> Dynamic {
|
||||
match value {
|
||||
|
Loading…
Reference in New Issue
Block a user