pub trait StorageBackend:
Send
+ Sync
+ 'static {
Show 17 methods
// Required methods
fn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn insert_metrics<'life0, 'async_trait>(
&'life0 self,
metrics: Vec<MetricRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn query_metrics<'life0, 'async_trait>(
&'life0 self,
from_timestamp: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn prepare_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn query_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
statement_handle: &'life1 [u8],
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn aggregate_metrics<'life0, 'life1, 'async_trait>(
&'life0 self,
function: AggregateFunction,
group_by: &'life1 GroupBy,
from_timestamp: i64,
to_timestamp: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn new_with_options(
connection_string: &str,
options: &HashMap<String, String>,
credentials: Option<&Credentials>,
) -> Result<Self, Status>
where Self: Sized;
fn create_table<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
schema: &'life2 Schema,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn insert_into_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
batch: RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn query_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
projection: Option<Vec<String>>,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view: &'life1 AggregationView,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn query_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn drop_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn drop_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn table_manager(&self) -> &TableManager;
// Provided methods
fn update_batch_aggregations<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 [MetricRecord],
window: TimeWindow,
) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn insert_batch_aggregations<'life0, 'async_trait>(
&'life0 self,
aggregations: Vec<BatchAggregation>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
}Expand description
Storage backend trait for metric data persistence.
This trait defines the interface that all storage backends must implement. It provides methods for:
- Initialization and configuration
- Metric data insertion
- Metric data querying
- SQL query preparation and execution
- Aggregation of metrics
- Table and view management
Required Methods§
Sourcefn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Initialize the storage backend.
Sourcefn insert_metrics<'life0, 'async_trait>(
&'life0 self,
metrics: Vec<MetricRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn insert_metrics<'life0, 'async_trait>(
&'life0 self,
metrics: Vec<MetricRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Insert metrics into storage.
Sourcefn query_metrics<'life0, 'async_trait>(
&'life0 self,
from_timestamp: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn query_metrics<'life0, 'async_trait>(
&'life0 self,
from_timestamp: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Query metrics from storage.
Sourcefn prepare_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn prepare_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Prepare a SQL query and return a handle. The handle is backend-specific and opaque to the caller.
Sourcefn query_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
statement_handle: &'life1 [u8],
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
statement_handle: &'life1 [u8],
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Execute a prepared SQL query using its handle. The handle must have been obtained from prepare_sql.
Sourcefn aggregate_metrics<'life0, 'life1, 'async_trait>(
&'life0 self,
function: AggregateFunction,
group_by: &'life1 GroupBy,
from_timestamp: i64,
to_timestamp: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn aggregate_metrics<'life0, 'life1, 'async_trait>(
&'life0 self,
function: AggregateFunction,
group_by: &'life1 GroupBy,
from_timestamp: i64,
to_timestamp: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Aggregate metrics using the specified function and grouping.
Sourcefn new_with_options(
connection_string: &str,
options: &HashMap<String, String>,
credentials: Option<&Credentials>,
) -> Result<Self, Status>where
Self: Sized,
fn new_with_options(
connection_string: &str,
options: &HashMap<String, String>,
credentials: Option<&Credentials>,
) -> Result<Self, Status>where
Self: Sized,
Create a new instance with the given options. The connection string and options are backend-specific.
Sourcefn create_table<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
schema: &'life2 Schema,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_table<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
schema: &'life2 Schema,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Create a new table with the given schema
Sourcefn insert_into_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
batch: RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn insert_into_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
batch: RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Insert data into a table
Sourcefn query_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
projection: Option<Vec<String>>,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
projection: Option<Vec<String>>,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Query data from a table
Sourcefn create_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view: &'life1 AggregationView,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view: &'life1 AggregationView,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Create an aggregation view
Sourcefn query_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Query data from an aggregation view
Sourcefn drop_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn drop_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Drop a table
Sourcefn drop_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn drop_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Drop an aggregation view
Sourcefn table_manager(&self) -> &TableManager
fn table_manager(&self) -> &TableManager
Get the table manager instance
Provided Methods§
Sourcefn update_batch_aggregations<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 [MetricRecord],
window: TimeWindow,
) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_batch_aggregations<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 [MetricRecord],
window: TimeWindow,
) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Update batch-level aggregations. This is called during batch writes to maintain running aggregations.
Sourcefn insert_batch_aggregations<'life0, 'async_trait>(
&'life0 self,
aggregations: Vec<BatchAggregation>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn insert_batch_aggregations<'life0, 'async_trait>(
&'life0 self,
aggregations: Vec<BatchAggregation>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Insert batch-level aggregations. This is called after update_batch_aggregations to persist the aggregations.