use std::collections::BTreeMap;
use async_trait::async_trait;
use crate::model::metric::MetricInfoDetail;
use crate::model::trace::TraceDetail;
use super::params::{
ExtensionParams, LabelValuesParams, LogSearchParams, MetricInfoParams, MetricMetadataParams,
MetricQueryParams, TraceGetParams, TraceSearchParams,
};
use super::results::{
ExtensionResult, LogSearchResult, MetricQueryResult, ProviderResult, TraceSearchResult,
};
#[async_trait]
pub trait MetricProvider: Send + Sync {
async fn query(&self, params: &MetricQueryParams) -> ProviderResult<MetricQueryResult>;
async fn list(&self, params: &MetricMetadataParams) -> ProviderResult<Vec<String>>;
async fn info(&self, params: &MetricInfoParams) -> ProviderResult<Vec<MetricInfoDetail>>;
async fn labels(&self, params: &MetricMetadataParams) -> ProviderResult<Vec<String>>;
async fn label_values(&self, params: &LabelValuesParams) -> ProviderResult<Vec<String>>;
async fn series(
&self,
params: &MetricMetadataParams,
) -> ProviderResult<Vec<BTreeMap<String, String>>>;
}
#[async_trait]
pub trait LogProvider: Send + Sync {
async fn search(&self, params: &LogSearchParams) -> ProviderResult<LogSearchResult>;
}
#[async_trait]
pub trait TraceProvider: Send + Sync {
async fn search(&self, params: &TraceSearchParams) -> ProviderResult<TraceSearchResult>;
async fn get_trace(&self, params: &TraceGetParams) -> ProviderResult<TraceDetail>;
}
#[async_trait]
pub trait ExtensionProvider: Send + Sync {
async fn execute(
&self,
command: &str,
params: &ExtensionParams,
) -> ProviderResult<ExtensionResult>;
}