otelite_api/api/
resource_keys.rs1use crate::server::AppState;
2use axum::{
3 extract::{Query, State},
4 http::StatusCode,
5 Json,
6};
7use otelite_core::api::ErrorResponse;
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Deserialize)]
12pub struct ResourceKeysQuery {
13 pub signal: String,
15}
16
17#[derive(Debug, Serialize)]
19pub struct ResourceKeysResponse {
20 pub keys: Vec<String>,
21}
22
23pub async fn get_resource_keys(
25 State(state): State<AppState>,
26 Query(params): Query<ResourceKeysQuery>,
27) -> Result<Json<ResourceKeysResponse>, (StatusCode, Json<ErrorResponse>)> {
28 let keys = state
29 .storage
30 .distinct_resource_keys(¶ms.signal)
31 .await
32 .map_err(|e| {
33 (
34 StatusCode::INTERNAL_SERVER_ERROR,
35 Json(ErrorResponse::storage_error(format!(
36 "distinct resource keys: {}",
37 e
38 ))),
39 )
40 })?;
41
42 Ok(Json(ResourceKeysResponse { keys }))
43}