zabbix_api/client/
mod.rs

1use serde::de::DeserializeOwned;
2use serde::Serialize;
3
4use crate::client::jsonrpc::ZabbixApiResponse;
5use crate::error::ZabbixApiError;
6use crate::host::{ZabbixHost, ZabbixHostGroup};
7use crate::host::create::{CreateHostGroupRequest, CreateHostRequest};
8use crate::item::create::CreateItemRequest;
9use crate::item::ZabbixItem;
10use crate::trigger::create::CreateTriggerRequest;
11use crate::trigger::ZabbixTrigger;
12use crate::webscenario::create::CreateWebScenarioRequest;
13use crate::webscenario::ZabbixWebScenario;
14
15pub mod jsonrpc;
16pub mod v6;
17pub mod post;
18
19pub trait ZabbixApiClient {
20    /// API: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/apiinfo/version
21    fn get_api_info(&self) -> Result<String, ZabbixApiError>;
22
23    fn get_auth_session(&self, login: &str, token: &str) -> Result<String, ZabbixApiError>;
24
25    fn raw_api_call<P: Serialize, R: DeserializeOwned>(&self, session: &str, method: &str, params: &P) -> Result<ZabbixApiResponse<R>, ZabbixApiError>;
26
27    fn get_host_groups<P: Serialize>(&self, session: &str, params: &P) -> Result<Vec<ZabbixHostGroup>, ZabbixApiError>;
28
29    /// # get_hosts
30    ///
31    /// Find zabbix hosts.
32    ///
33    /// API: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/host/get
34    ///
35    /// **Example:**
36    ///
37    /// ```rust
38    /// use reqwest::blocking::Client;
39    /// use zabbix_api::host::get::GetHostsRequest;
40    /// use serde::Serialize;
41    /// use zabbix_api::client::v6::ZabbixApiV6Client;
42    /// use zabbix_api::client::ZabbixApiClient;
43    ///
44    /// #[derive(Serialize)]
45    /// struct Filter {
46    ///   pub host: Vec<String>
47    /// }
48    ///
49    /// let request = GetHostsRequest {
50    ///     filter: Filter {
51    ///     host: vec!["srv-1203".to_string()],
52    ///   },
53    /// };
54    ///
55    /// let http_client = Client::new();
56    ///
57    /// let zabbix_server = env!("ZABBIX_API_URL");
58    ///
59    /// let client = ZabbixApiV6Client::new(http_client, &zabbix_server);
60    ///
61    /// let session = client.get_auth_session("Admin", "zabbix").unwrap();
62    /// let hosts = client.get_hosts(&session, &request).unwrap();
63    /// ```
64    fn get_hosts<P: Serialize>(&self, session: &str, params: &P) -> Result<Vec<ZabbixHost>, ZabbixApiError>;
65
66
67    /// # get_items
68    ///
69    /// Find zabbix items.
70    ///
71    /// API: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/item/get
72    fn get_items<P: Serialize>(&self, session: &str, params: &P) -> Result<Vec<ZabbixItem>, ZabbixApiError>;
73
74    fn get_triggers<P: Serialize>(&self, session: &str, params: &P) -> Result<Vec<ZabbixTrigger>, ZabbixApiError>;
75
76    fn get_webscenarios<P: Serialize>(&self, session: &str, params: &P) -> Result<Vec<ZabbixWebScenario>, ZabbixApiError>;
77
78    fn create_host_group(&self, session: &str, request: &CreateHostGroupRequest) -> Result<u32, ZabbixApiError>;
79
80    /// # create_host
81    ///
82    /// Create zabbix host.
83    ///
84    /// API: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/host/create
85    ///
86    /// **Example:**
87    ///
88    /// ```rust
89    /// use std::collections::HashMap;
90    /// use fake::{Fake, Faker};
91    /// use reqwest::blocking::Client;
92    /// use zabbix_api::host::get::{GetHostGroupsRequest, GetHostsRequest};
93    /// use serde::Serialize;
94    /// use zabbix_api::client::v6::ZabbixApiV6Client;
95    /// use zabbix_api::client::ZabbixApiClient;
96    /// use zabbix_api::host::create::{CreateHostGroupRequest, CreateHostRequest};
97    /// use zabbix_api::ZABBIX_EXTEND_PROPERTY_VALUE;
98    ///
99    /// let http_client = Client::new();
100    ///
101    /// let zabbix_server = env!("ZABBIX_API_URL");
102    ///
103    /// let client = ZabbixApiV6Client::new(http_client, &zabbix_server);
104    ///
105    /// let session = client.get_auth_session("Admin", "zabbix").unwrap();
106    ///
107    /// let filter: HashMap<String,String> = HashMap::new();
108    ///
109    /// let request = GetHostGroupsRequest {
110    ///     output: ZABBIX_EXTEND_PROPERTY_VALUE.to_string(),
111    ///     filter
112    /// };
113    ///
114    /// let host_groups = client.get_host_groups(&session, &request).unwrap();
115    /// let host_group = host_groups.first().unwrap().clone();
116    /// let host_name = Faker.fake::<String>();
117    ///
118    /// let request = CreateHostRequest {
119    ///     host: host_name,
120    ///     groups: vec![host_group],
121    ///     interfaces: vec![],
122    ///     tags: vec![],
123    ///     templates: vec![],
124    ///     macros: vec![],
125    ///     inventory_mode: 0,
126    ///     inventory: Default::default(),
127    /// };
128    ///
129    /// client.create_host(&session, &request).unwrap();
130    /// ```
131    fn create_host(&self, session: &str, request: &CreateHostRequest) -> Result<u32, ZabbixApiError>;
132
133    fn create_item(&self, session: &str, request: &CreateItemRequest) -> Result<u32, ZabbixApiError>;
134
135    fn create_trigger(&self, session: &str, request: &CreateTriggerRequest) -> Result<u32, ZabbixApiError>;
136
137    fn create_webscenario(&self, session: &str, request: &CreateWebScenarioRequest) -> Result<u32, ZabbixApiError>;
138}