icinga2_api/api/query/monitoring_objects/
service.rs1crate::types::query::query_with_joins!(
6 ListServices,
7 ListServicesBuilder,
8 monitoring_objects,
9 service,
10 IcingaService,
11 IcingaServiceJoinTypes,
12 IcingaServiceJoins,
13 IcingaObjectType::Service,
14 "v1/objects/services"
15);
16
17#[cfg(test)]
18mod test {
19 use super::*;
20 use std::{collections::BTreeMap, error::Error};
21 use tracing_test::traced_test;
22
23 use crate::{
24 api::blocking::Icinga2,
25 types::{
26 enums::object_type::IcingaObjectType,
27 filter::IcingaFilter,
28 join_types::{service::IcingaServiceJoinTypes, IcingaJoins},
29 metadata::IcingaMetadataType,
30 },
31 };
32
33 #[traced_test]
34 #[test]
35 fn test_services() -> Result<(), Box<dyn Error>> {
36 dotenvy::dotenv()?;
37 let icinga2 = Icinga2::from_config_file(std::path::Path::new(&std::env::var(
38 "ICINGA_TEST_INSTANCE_CONFIG",
39 )?))?;
40 let api_endpoint = ListServices::builder()
41 .joins(IcingaJoins::AllJoins)
42 .meta([IcingaMetadataType::UsedBy, IcingaMetadataType::Location])
43 .build()?;
44 let _: ResultsWrapper<QueryResultObjectWithJoins<IcingaService, IcingaServiceJoins>> =
45 icinga2.rest(api_endpoint)?;
46 Ok(())
47 }
48
49 #[traced_test]
50 #[test]
51 fn test_services_partial_host_join() -> Result<(), Box<dyn Error>> {
52 dotenvy::dotenv()?;
53 let icinga2 = Icinga2::from_config_file(std::path::Path::new(&std::env::var(
54 "ICINGA_TEST_INSTANCE_CONFIG",
55 )?))?;
56 let mut partial = BTreeMap::new();
57 partial.insert(IcingaServiceJoinTypes::Host, vec!["name"]);
58 let api_endpoint = ListServices::builder()
59 .joins(IcingaJoins::SpecificJoins {
60 full: vec![],
61 partial,
62 })
63 .meta([IcingaMetadataType::UsedBy, IcingaMetadataType::Location])
64 .build()?;
65 let _: ResultsWrapper<QueryResultObjectWithJoins<IcingaService, IcingaServiceJoins>> =
66 icinga2.rest(api_endpoint)?;
67 Ok(())
68 }
69
70 #[traced_test]
71 #[test]
72 fn test_services_filtered() -> Result<(), Box<dyn Error>> {
73 dotenvy::dotenv()?;
74 let icinga2 = Icinga2::from_config_file(std::path::Path::new(&std::env::var(
75 "ICINGA_TEST_INSTANCE_CONFIG",
76 )?))?;
77 let api_endpoint = ListServices::builder()
78 .filter(IcingaFilter {
79 object_type: IcingaObjectType::Service,
80 filter: "service.state == ServiceUnknown && service.vars.serviceSeverity == filter_severity".to_string(),
81 filter_vars: BTreeMap::from([("filter_severity".to_string(), serde_json::json!("imminent"))]),
82 })
83 .build()?;
84 let _: ResultsWrapper<QueryResultObjectWithJoins<IcingaService, IcingaServiceJoins>> =
85 icinga2.rest(api_endpoint)?;
86 Ok(())
87 }
88}