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}