1use std::{
16 str::FromStr,
17 sync::Arc,
18};
19
20use tokio::sync::Mutex;
21use tonic::transport::{
22 Channel,
23 ClientTlsConfig,
24 Endpoint,
25};
26
27use crate::{
28 CoralogixRegion,
29 auth::AuthContext,
30 error::{
31 Result,
32 SdkApiError,
33 SdkError,
34 },
35 metadata::CallProperties,
36 util::make_request_with_metadata,
37};
38
39const CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID: &str = "contextual_data_integrations";
40
41use cx_api::proto::com::coralogix::integrations::v1::{
42 DeleteContextualDataIntegrationRequest,
43 DeleteContextualDataIntegrationResponse,
44 GetContextualDataIntegrationDefinitionRequest,
45 GetContextualDataIntegrationDefinitionResponse,
46 GetContextualDataIntegrationDetailsRequest,
47 GetContextualDataIntegrationDetailsResponse,
48 GetContextualDataIntegrationsRequest,
49 GetContextualDataIntegrationsResponse,
50 SaveContextualDataIntegrationRequest,
51 SaveContextualDataIntegrationResponse,
52 TestContextualDataIntegrationRequest,
53 TestContextualDataIntegrationResponse,
54 UpdateContextualDataIntegrationRequest,
55 UpdateContextualDataIntegrationResponse,
56 contextual_data_integration_service_client::ContextualDataIntegrationServiceClient,
57};
58
59pub use cx_api::proto::com::coralogix::integrations::v1::{
60 GenericIntegrationParameters,
61 IntegrationMetadata,
62 integration_metadata::SpecificData,
63};
64
65pub struct ContextualDataIntegrationsClient {
67 metadata_map: tonic::metadata::MetadataMap,
68 service_client: Arc<Mutex<ContextualDataIntegrationServiceClient<Channel>>>,
69}
70
71impl ContextualDataIntegrationsClient {
72 pub fn new(region: CoralogixRegion, auth_context: AuthContext) -> Result<Self> {
74 let channel = Endpoint::from_str(®ion.grpc_endpoint())?
75 .tls_config(ClientTlsConfig::new().with_native_roots())?
76 .connect_lazy();
77
78 let request_metadata: CallProperties = (&auth_context.team_level_api_key).into();
79 Ok(Self {
80 metadata_map: request_metadata.to_metadata_map(),
81 service_client: Arc::new(Mutex::new(ContextualDataIntegrationServiceClient::new(
82 channel,
83 ))),
84 })
85 }
86
87 pub async fn list(
92 &self,
93 include_testing_integrations: bool,
94 ) -> Result<GetContextualDataIntegrationsResponse> {
95 let request = make_request_with_metadata(
96 GetContextualDataIntegrationsRequest {
97 include_testing_integrations: Some(include_testing_integrations),
98 },
99 &self.metadata_map,
100 );
101
102 self.service_client
103 .lock()
104 .await
105 .get_contextual_data_integrations(request)
106 .await
107 .map(|r| r.into_inner())
108 .map_err(|status| SdkError::ApiError(SdkApiError {
109 status,
110 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/GetContextualDataIntegrations".into(),
111 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
112 }))
113 }
114
115 pub async fn get_definition(
121 &self,
122 id: String,
123 include_testing_integrations: bool,
124 ) -> Result<GetContextualDataIntegrationDefinitionResponse> {
125 let request = make_request_with_metadata(
126 GetContextualDataIntegrationDefinitionRequest {
127 id: Some(id),
128 include_testing_integrations: Some(include_testing_integrations),
129 },
130 &self.metadata_map,
131 );
132
133 self.service_client
134 .lock()
135 .await
136 .get_contextual_data_integration_definition(request)
137 .await
138 .map(|r| r.into_inner())
139 .map_err(|status| SdkError::ApiError(SdkApiError {
140 status,
141 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/GetContextualDataIntegrationDefinition".into(),
142 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
143 }))
144 }
145
146 pub async fn get_details(
152 &self,
153 id: String,
154 include_testing_revisions: bool,
155 ) -> Result<GetContextualDataIntegrationDetailsResponse> {
156 let request = make_request_with_metadata(
157 GetContextualDataIntegrationDetailsRequest {
158 id: Some(id),
159 include_testing_revisions: Some(include_testing_revisions),
160 },
161 &self.metadata_map,
162 );
163
164 self.service_client
165 .lock()
166 .await
167 .get_contextual_data_integration_details(request)
168 .await
169 .map(|r| r.into_inner())
170 .map_err(|status| SdkError::ApiError(SdkApiError {
171 status,
172 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/GetContextualDataIntegrationDetails".into(),
173 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
174 }))
175 }
176
177 pub async fn test(
179 &self,
180 integration_data: IntegrationMetadata,
181 integration_id: String,
182 ) -> Result<TestContextualDataIntegrationResponse> {
183 let request = make_request_with_metadata(
184 TestContextualDataIntegrationRequest {
185 integration_data: Some(integration_data),
186 integration_id: Some(integration_id),
187 },
188 &self.metadata_map,
189 );
190
191 self.service_client
192 .lock()
193 .await
194 .test_contextual_data_integration(request)
195 .await
196 .map(|r| r.into_inner())
197 .map_err(|status| SdkError::ApiError(SdkApiError {
198 status,
199 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/TestContextualDataIntegration".into(),
200 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
201 }))
202 }
203
204 pub async fn create(
209 &self,
210 metadata: IntegrationMetadata,
211 ) -> Result<SaveContextualDataIntegrationResponse> {
212 let request = make_request_with_metadata(
213 SaveContextualDataIntegrationRequest {
214 metadata: Some(metadata),
215 },
216 &self.metadata_map,
217 );
218
219 self.service_client
220 .lock()
221 .await
222 .save_contextual_data_integration(request)
223 .await
224 .map(|r| r.into_inner())
225 .map_err(|status| SdkError::ApiError(SdkApiError {
226 status,
227 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/SaveContextualDataIntegration".into(),
228 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
229 }))
230 }
231
232 pub async fn update(
238 &self,
239 integration_id: String,
240 metadata: IntegrationMetadata,
241 ) -> Result<UpdateContextualDataIntegrationResponse> {
242 let request = make_request_with_metadata(
243 UpdateContextualDataIntegrationRequest {
244 integration_id: Some(integration_id),
245 metadata: Some(metadata),
246 },
247 &self.metadata_map,
248 );
249
250 self.service_client
251 .lock()
252 .await
253 .update_contextual_data_integration(request)
254 .await
255 .map(|r| r.into_inner())
256 .map_err(|status| SdkError::ApiError(SdkApiError {
257 status,
258 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/UpdateContextualDataIntegration".into(),
259 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
260 }))
261 }
262
263 pub async fn delete(
265 &self,
266 integration_id: String,
267 ) -> Result<DeleteContextualDataIntegrationResponse> {
268 let request = make_request_with_metadata(
269 DeleteContextualDataIntegrationRequest {
270 integration_id: Some(integration_id),
271 },
272 &self.metadata_map,
273 );
274
275 self.service_client
276 .lock()
277 .await
278 .delete_contextual_data_integration(request)
279 .await
280 .map(|r| r.into_inner())
281 .map_err(|status| SdkError::ApiError(SdkApiError {
282 status,
283 endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/DeleteContextualDataIntegration".into(),
284 feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
285 }))
286 }
287}