1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use reqwest::blocking::Client;
use serde::Serialize;
use std::env;
use zabbix_api::client::client::{ZabbixApiClient, ZabbixApiClientImpl};
use zabbix_api::error::ZabbixApiError;
// ZabbixTrigger type will be inferred from its usage in client.get_triggers
// Define a structure for your API call's parameters for "trigger.get"
#[derive(Serialize)]
struct GetTriggersParams {
output: String,
#[serde(rename = "selectTags")] // Zabbix API expects "selectTags"
select_tags: String,
limit: u32,
// Optionally, you could add filters, e.g., by host, severity, etc.
// filter: TriggerFilter,
// sortfield: String, // e.g. "description"
// sortorder: String, // e.g. "ASC"
}
// Example filter structure (not used in this basic example)
// #[derive(Serialize)]
// struct TriggerFilter {
// value: Option<u32>, // e.g., 1 for PROBLEM state triggers
// // hostid: Option<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.");
// Prepare parameters for the "trigger.get" method
// This example fetches up to 5 triggers with their tags.
let request_params = GetTriggersParams {
output: "extend".to_string(),
select_tags: "extend".to_string(),
limit: 5,
// sortfield: "triggerid".to_string(), // Sort to get consistent results if needed
// sortorder: "ASC".to_string(),
};
println!("Calling client.get_triggers()...");
match client.get_triggers::<GetTriggersParams>(&session, &request_params) {
Ok(triggers) => {
if triggers.is_empty() {
println!("No triggers found matching the criteria.");
} else {
println!("Successfully fetched {} trigger(s):", triggers.len());
for trigger in triggers {
println!(
" Trigger ID: {}, Description: '{}', Expression: '{}'",
trigger.trigger_id, trigger.description, trigger.expression
);
// The following lines are commented out because the ZabbixTrigger struct
// currently does not have a 'tags' field. To enable this,
// src/trigger/model.rs would need to be updated.
// if !trigger.tags.is_empty() {
// println!(" Tags:");
// for tag in trigger.tags {
// println!(" - Tag: '{}', Value: '{}'", tag.tag, tag.value);
// }
// }
}
}
}
Err(e) => {
eprintln!("Error fetching triggers: {}", e);
return Err(e);
}
}
Ok(())
}