use crate::{
api::timeseries::conf::{
AggregationType, DuplicatePolicy, TSCreateOption, TSInfoResult, TSMGetOption, TSMGetResult,
TSMRangeOption, TSMRangeResult, TSRangeOption,
},
error::Result,
traits::DbLike,
};
pub trait TimeSeries: DbLike {
#[inline]
fn ts_create<K: AsRef<[u8]>>(
&self,
key: K,
retention_ms: u64,
duplicate_policy: DuplicatePolicy,
labels: &[(&str, &str)],
) -> Result<()> {
let opt = TSCreateOption {
retention_time: retention_ms,
duplicate_policy,
labels: labels
.iter()
.map(|(k, v)| (k.to_string(), v.to_string()))
.collect(),
..Default::default()
};
self.ts_create_opt(key, &opt)
}
fn ts_create_opt<K: AsRef<[u8]>>(&self, key: K, opt: &TSCreateOption) -> Result<()>;
fn ts_alter<K: AsRef<[u8]>>(
&self,
key: K,
retention_ms: Option<u64>,
chunk_size: Option<u64>,
duplicate_policy: Option<DuplicatePolicy>,
labels: Option<Vec<(String, String)>>,
) -> Result<()>;
fn ts_add<K: AsRef<[u8]>>(&self, key: K, timestamp: u64, value: f64) -> Result<u64>;
fn ts_add_opt<K: AsRef<[u8]>>(
&self,
key: K,
timestamp: u64,
value: f64,
on_duplicate: Option<DuplicatePolicy>,
create_opt: Option<&TSCreateOption>,
) -> Result<u64>;
fn ts_madd<K: AsRef<[u8]>>(&self, items: &[(K, u64, f64)]) -> Result<Vec<Result<u64>>>;
fn ts_incrby<K: AsRef<[u8]>>(&self, key: K, value: f64, timestamp: Option<u64>) -> Result<u64>;
fn ts_incrby_opt<K: AsRef<[u8]>>(
&self,
key: K,
value: f64,
timestamp: Option<u64>,
create_opt: Option<&TSCreateOption>,
) -> Result<u64>;
fn ts_decrby<K: AsRef<[u8]>>(&self, key: K, value: f64, timestamp: Option<u64>) -> Result<u64>;
fn ts_decrby_opt<K: AsRef<[u8]>>(
&self,
key: K,
value: f64,
timestamp: Option<u64>,
create_opt: Option<&TSCreateOption>,
) -> Result<u64>;
fn ts_get<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<(u64, f64)>>;
fn ts_range<K: AsRef<[u8]>>(&self, key: K, from_ts: u64, to_ts: u64) -> Result<Vec<(u64, f64)>>;
fn ts_revrange<K: AsRef<[u8]>>(
&self,
key: K,
from_ts: u64,
to_ts: u64,
) -> Result<Vec<(u64, f64)>>;
fn ts_range_opt<K: AsRef<[u8]>>(&self, key: K, opt: &TSRangeOption) -> Result<Vec<(u64, f64)>>;
fn ts_del<K: AsRef<[u8]>>(&self, key: K, from_ts: u64, to_ts: u64) -> Result<usize>;
fn ts_mget(&self, opt: &TSMGetOption) -> Result<Vec<TSMGetResult>>;
fn ts_mrange(&self, opt: &TSMRangeOption) -> Result<Vec<TSMRangeResult>>;
fn ts_mrevrange(&self, opt: &TSMRangeOption) -> Result<Vec<TSMRangeResult>>;
fn ts_info<K: AsRef<[u8]>>(&self, key: K) -> Result<TSInfoResult>;
fn ts_queryindex(&self, filters: &[String]) -> Result<Vec<String>>;
fn ts_createrule<SK: AsRef<[u8]>, DK: AsRef<[u8]>>(
&self,
src_key: SK,
dst_key: DK,
aggregator: AggregationType,
bucket_duration: u64,
alignment: Option<u64>,
) -> Result<()>;
fn ts_deleterule<SK: AsRef<[u8]>, DK: AsRef<[u8]>>(&self, src_key: SK, dst_key: DK)
-> Result<()>;
}