cx_sdk/client/
dashboard_folders.rs
1use std::str::FromStr;
16
17use crate::{
18 auth::AuthContext,
19 error::{
20 Result,
21 SdkApiError,
22 SdkError,
23 },
24 metadata::CallProperties,
25 util::make_request_with_metadata,
26};
27
28pub use crate::com::coralogixapis::actions::v2::Action;
29
30pub use cx_api::proto::com::coralogixapis::dashboards::v1::ast::*;
31use cx_api::proto::com::coralogixapis::dashboards::v1::services::{
32 CreateDashboardFolderRequest,
33 CreateDashboardFolderResponse,
34 DeleteDashboardFolderRequest,
35 DeleteDashboardFolderResponse,
36 GetDashboardFolderRequest,
37 GetDashboardFolderResponse,
38 ListDashboardFoldersRequest,
39 ListDashboardFoldersResponse,
40 ReplaceDashboardFolderRequest,
41 ReplaceDashboardFolderResponse,
42 dashboard_folders_service_client::DashboardFoldersServiceClient,
43};
44use tokio::sync::Mutex;
45use tonic::{
46 Request,
47 metadata::MetadataMap,
48 transport::{
49 Channel,
50 ClientTlsConfig,
51 Endpoint,
52 },
53};
54
55pub use cx_api::proto::com::coralogixapis::dashboards::v1::common::DashboardFolder;
56
57use crate::CoralogixRegion;
58
59const DASHBOARD_FOLDERS_FEATURE_GROUP_ID: &str = "dashboards";
60
61pub struct DashboardFoldersClient {
64 teams_level_metadata_map: MetadataMap,
65 user_level_metadata_map: MetadataMap,
66 service_client: Mutex<DashboardFoldersServiceClient<Channel>>,
67}
68
69impl DashboardFoldersClient {
70 pub fn new(auth_context: AuthContext, region: CoralogixRegion) -> Result<Self> {
76 let channel: Channel = Endpoint::from_str(region.grpc_endpoint().as_str())?
77 .tls_config(ClientTlsConfig::new().with_native_roots())?
78 .connect_lazy();
79 let teams_level_auth_data: CallProperties = (&auth_context.team_level_api_key).into();
80 let user_level_auth_data: CallProperties = (&auth_context.user_level_api_key).into();
81 Ok(Self {
82 teams_level_metadata_map: teams_level_auth_data.to_metadata_map(),
83 user_level_metadata_map: user_level_auth_data.to_metadata_map(),
84 service_client: Mutex::new(DashboardFoldersServiceClient::new(channel)),
85 })
86 }
87
88 pub async fn create(&self, folder: DashboardFolder) -> Result<CreateDashboardFolderResponse> {
93 let request: Request<CreateDashboardFolderRequest> = make_request_with_metadata(
94 CreateDashboardFolderRequest {
95 folder: Some(folder),
96 request_id: None,
97 },
98 &self.teams_level_metadata_map,
99 );
100 {
101 let mut client = self.service_client.lock().await.clone();
102
103 client
104 .create_dashboard_folder(request)
105 .await
106 .map(|r| r.into_inner())
107 .map_err(
108 |status| SdkError::ApiError(SdkApiError {
109 status,
110 endpoint: "/com.coralogixapis.dashboards.v1.DashboardFoldersService/CreateDashboardFolder".to_string(),
111 feature_group: DASHBOARD_FOLDERS_FEATURE_GROUP_ID.to_string(),
112 }),
113 )
114 }
115 }
116
117 pub async fn replace(&self, folder: DashboardFolder) -> Result<ReplaceDashboardFolderResponse> {
122 let request: Request<ReplaceDashboardFolderRequest> = make_request_with_metadata(
123 ReplaceDashboardFolderRequest {
124 request_id: None,
125 folder: Some(folder),
126 },
127 &self.teams_level_metadata_map,
128 );
129 {
130 let mut client = self.service_client.lock().await.clone();
131
132 client
133 .replace_dashboard_folder(request)
134 .await
135 .map(|r| r.into_inner())
136 .map_err(
137 |status| SdkError::ApiError(SdkApiError {
138 status,
139 endpoint: "/com.coralogixapis.dashboards.v1.DashboardFoldersService/ReplaceDashboardFolder".to_string(),
140 feature_group: DASHBOARD_FOLDERS_FEATURE_GROUP_ID.to_string(),
141 }),
142 )
143 }
144 }
145
146 pub async fn get(&self, folder_id: String) -> Result<GetDashboardFolderResponse> {
151 let request: Request<GetDashboardFolderRequest> = make_request_with_metadata(
152 GetDashboardFolderRequest {
153 request_id: None,
154 folder_id: Some(folder_id),
155 },
156 &self.teams_level_metadata_map,
157 );
158 {
159 let mut client = self.service_client.lock().await.clone();
160
161 client
162 .get_dashboard_folder(request)
163 .await
164 .map(|r| r.into_inner())
165 .map_err(
166 |status| SdkError::ApiError(SdkApiError {
167 status,
168 endpoint: "/com.coralogixapis.dashboards.v1.DashboardFoldersService/GetDashboardFolder".to_string(),
169 feature_group: DASHBOARD_FOLDERS_FEATURE_GROUP_ID.to_string(),
170 }),
171 )
172 }
173 }
174
175 pub async fn delete(&self, folder_id: String) -> Result<DeleteDashboardFolderResponse> {
180 let request: Request<DeleteDashboardFolderRequest> = make_request_with_metadata(
181 DeleteDashboardFolderRequest {
182 request_id: None,
183 folder_id: Some(folder_id),
184 },
185 &self.teams_level_metadata_map,
186 );
187 {
188 let mut client = self.service_client.lock().await.clone();
189
190 client
191 .delete_dashboard_folder(request)
192 .await
193 .map(|r| r.into_inner())
194 .map_err(
195 |status| SdkError::ApiError(SdkApiError {
196 status,
197 endpoint: "/com.coralogixapis.dashboards.v1.DashboardFoldersService/DeleteDashboardFolder".to_string(),
198 feature_group: DASHBOARD_FOLDERS_FEATURE_GROUP_ID.to_string(),
199 }),
200 )
201 }
202 }
203
204 pub async fn list(&self) -> Result<ListDashboardFoldersResponse> {
206 let request = make_request_with_metadata(
207 ListDashboardFoldersRequest {},
208 &self.user_level_metadata_map,
209 );
210 {
211 let mut client = self.service_client.lock().await.clone();
212
213 client
214 .list_dashboard_folders(request)
215 .await
216 .map(|r| r.into_inner())
217 .map_err(
218 |status| SdkError::ApiError(SdkApiError {
219 status,
220 endpoint: "/com.coralogixapis.dashboards.v1.DashboardFoldersService/ListDashboardFolders".to_string(),
221 feature_group: DASHBOARD_FOLDERS_FEATURE_GROUP_ID.to_string(),
222 }),
223 )
224 }
225 }
226}