use std::{
str::FromStr,
sync::Arc,
};
use tokio::sync::Mutex;
use tonic::transport::{
Channel,
ClientTlsConfig,
Endpoint,
};
use crate::{
CoralogixRegion,
auth::AuthContext,
error::{
Result,
SdkApiError,
SdkError,
},
metadata::CallProperties,
util::make_request_with_metadata,
};
const CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID: &str = "contextual_data_integrations";
use cx_api::proto::com::coralogix::integrations::v1::{
DeleteContextualDataIntegrationRequest,
DeleteContextualDataIntegrationResponse,
GetContextualDataIntegrationDefinitionRequest,
GetContextualDataIntegrationDefinitionResponse,
GetContextualDataIntegrationDetailsRequest,
GetContextualDataIntegrationDetailsResponse,
GetContextualDataIntegrationsRequest,
GetContextualDataIntegrationsResponse,
SaveContextualDataIntegrationRequest,
SaveContextualDataIntegrationResponse,
TestContextualDataIntegrationRequest,
TestContextualDataIntegrationResponse,
UpdateContextualDataIntegrationRequest,
UpdateContextualDataIntegrationResponse,
contextual_data_integration_service_client::ContextualDataIntegrationServiceClient,
};
pub use cx_api::proto::com::coralogix::integrations::v1::{
GenericIntegrationParameters,
IntegrationMetadata,
integration_metadata::SpecificData,
};
pub struct ContextualDataIntegrationsClient {
metadata_map: tonic::metadata::MetadataMap,
service_client: Arc<Mutex<ContextualDataIntegrationServiceClient<Channel>>>,
}
impl ContextualDataIntegrationsClient {
pub fn new(region: CoralogixRegion, auth_context: AuthContext) -> Result<Self> {
let channel = Endpoint::from_str(®ion.grpc_endpoint())?
.tls_config(ClientTlsConfig::new().with_native_roots())?
.connect_lazy();
let request_metadata: CallProperties = (&auth_context.team_level_api_key).into();
Ok(Self {
metadata_map: request_metadata.to_metadata_map(),
service_client: Arc::new(Mutex::new(ContextualDataIntegrationServiceClient::new(
channel,
))),
})
}
pub async fn list(
&self,
include_testing_integrations: bool,
) -> Result<GetContextualDataIntegrationsResponse> {
let request = make_request_with_metadata(
GetContextualDataIntegrationsRequest {
include_testing_integrations: Some(include_testing_integrations),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.get_contextual_data_integrations(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/GetContextualDataIntegrations".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
pub async fn get_definition(
&self,
id: String,
include_testing_integrations: bool,
) -> Result<GetContextualDataIntegrationDefinitionResponse> {
let request = make_request_with_metadata(
GetContextualDataIntegrationDefinitionRequest {
id: Some(id),
include_testing_integrations: Some(include_testing_integrations),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.get_contextual_data_integration_definition(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/GetContextualDataIntegrationDefinition".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
pub async fn get_details(
&self,
id: String,
include_testing_revisions: bool,
) -> Result<GetContextualDataIntegrationDetailsResponse> {
let request = make_request_with_metadata(
GetContextualDataIntegrationDetailsRequest {
id: Some(id),
include_testing_revisions: Some(include_testing_revisions),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.get_contextual_data_integration_details(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/GetContextualDataIntegrationDetails".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
pub async fn test(
&self,
integration_data: IntegrationMetadata,
integration_id: String,
) -> Result<TestContextualDataIntegrationResponse> {
let request = make_request_with_metadata(
TestContextualDataIntegrationRequest {
integration_data: Some(integration_data),
integration_id: Some(integration_id),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.test_contextual_data_integration(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/TestContextualDataIntegration".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
pub async fn create(
&self,
metadata: IntegrationMetadata,
) -> Result<SaveContextualDataIntegrationResponse> {
let request = make_request_with_metadata(
SaveContextualDataIntegrationRequest {
metadata: Some(metadata),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.save_contextual_data_integration(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/SaveContextualDataIntegration".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
pub async fn update(
&self,
integration_id: String,
metadata: IntegrationMetadata,
) -> Result<UpdateContextualDataIntegrationResponse> {
let request = make_request_with_metadata(
UpdateContextualDataIntegrationRequest {
integration_id: Some(integration_id),
metadata: Some(metadata),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.update_contextual_data_integration(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/UpdateContextualDataIntegration".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
pub async fn delete(
&self,
integration_id: String,
) -> Result<DeleteContextualDataIntegrationResponse> {
let request = make_request_with_metadata(
DeleteContextualDataIntegrationRequest {
integration_id: Some(integration_id),
},
&self.metadata_map,
);
self.service_client
.lock()
.await
.delete_contextual_data_integration(request)
.await
.map(|r| r.into_inner())
.map_err(|status| SdkError::ApiError(SdkApiError {
status,
endpoint: "/com.coralogix.integrations.v1.ContextualDataIntegrationService/DeleteContextualDataIntegration".into(),
feature_group: CONTEXTUAL_DATA_INTEGRATIONS_FEATURE_GROUP_ID.into(),
}))
}
}