53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
|
|
from enum import Enum
|
||
|
|
from typing import Annotated, Any, Dict, Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel, Field
|
||
|
|
|
||
|
|
|
||
|
|
class Granularity(str, Enum):
|
||
|
|
"""
|
||
|
|
Time Series Granuality
|
||
|
|
"""
|
||
|
|
|
||
|
|
seconds = "seconds"
|
||
|
|
minutes = "minutes"
|
||
|
|
hours = "hours"
|
||
|
|
|
||
|
|
|
||
|
|
class TimeSeriesConfig(BaseModel):
|
||
|
|
"""
|
||
|
|
Time Series Collection config
|
||
|
|
"""
|
||
|
|
|
||
|
|
time_field: str
|
||
|
|
meta_field: Optional[str] = None
|
||
|
|
granularity: Optional[Granularity] = None
|
||
|
|
bucket_max_span_seconds: Optional[int] = None
|
||
|
|
bucket_rounding_second: Annotated[
|
||
|
|
Optional[int],
|
||
|
|
Field(
|
||
|
|
deprecated="This field is deprecated in favor of "
|
||
|
|
"'bucket_rounding_seconds'.",
|
||
|
|
),
|
||
|
|
] = None
|
||
|
|
bucket_rounding_seconds: Optional[int] = None
|
||
|
|
expire_after_seconds: Optional[int] = None
|
||
|
|
|
||
|
|
def build_query(self, collection_name: str) -> Dict[str, Any]:
|
||
|
|
res: Dict[str, Any] = {"name": collection_name}
|
||
|
|
timeseries: Dict[str, Any] = {"timeField": self.time_field}
|
||
|
|
if self.meta_field is not None:
|
||
|
|
timeseries["metaField"] = self.meta_field
|
||
|
|
if self.granularity is not None:
|
||
|
|
timeseries["granularity"] = self.granularity
|
||
|
|
if self.bucket_max_span_seconds is not None:
|
||
|
|
timeseries["bucketMaxSpanSeconds"] = self.bucket_max_span_seconds
|
||
|
|
if self.bucket_rounding_second is not None: # Deprecated field
|
||
|
|
timeseries["bucketRoundingSeconds"] = self.bucket_rounding_second
|
||
|
|
if self.bucket_rounding_seconds is not None:
|
||
|
|
timeseries["bucketRoundingSeconds"] = self.bucket_rounding_seconds
|
||
|
|
res["timeseries"] = timeseries
|
||
|
|
if self.expire_after_seconds is not None:
|
||
|
|
res["expireAfterSeconds"] = self.expire_after_seconds
|
||
|
|
return res
|