use reqwest::blocking::Client;
use serde::Serialize;
use std::env;
use zabbix_api::client::client::{ZabbixApiClient, ZabbixApiClientImpl};
use zabbix_api::error::ZabbixApiError;
use zabbix_api::hostgroup::get::GetHostGroupsRequest;
#[derive(Serialize)]
struct HostGroupFilter {
name: Vec<String>, }
fn main() -> Result<(), ZabbixApiError> {
let zabbix_api_url = env::var("ZABBIX_API_URL").expect(
"ZABBIX_API_URL environment variable not set (e.g., http://localhost:3080/api_jsonrpc.php)",
);
let zabbix_api_user = env::var("ZABBIX_API_USER")
.expect("ZABBIX_API_USER environment variable not set (e.g., Admin)");
let zabbix_api_password = env::var("ZABBIX_API_PASSWORD")
.expect("ZABBIX_API_PASSWORD environment variable not set (e.g., zabbix)");
let http_client = Client::new();
let client = ZabbixApiClientImpl::new(http_client, &zabbix_api_url);
let session = client.get_auth_session(&zabbix_api_user, &zabbix_api_password)?;
println!("Authenticated successfully.");
let group_names_to_filter = vec!["Linux servers".to_string()];
let request_params = GetHostGroupsRequest {
output: "extend".to_string(), filter: HostGroupFilter {
name: group_names_to_filter.clone(),
},
};
println!(
"Attempting to fetch host groups with names: {:?}",
group_names_to_filter
);
match client.get_host_groups(&session, &request_params) {
Ok(host_groups) => {
if host_groups.is_empty() {
println!(
"No host groups found matching the criteria: {:?}.",
group_names_to_filter
);
} else {
println!("Successfully fetched {} host group(s):", host_groups.len());
for group in host_groups {
println!(
" Group ID: {}, Group Name: '{}'",
group.group_id, group.name
);
}
}
}
Err(e) => {
eprintln!("Error fetching host groups: {}", e);
return Err(e);
}
}
Ok(())
}