feat(api): drill down custom_metrics by merged filters
This commit is contained in:
parent
61d6e01708
commit
2fef9044e1
2 changed files with 28 additions and 6 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import json
|
import json
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
import schemas
|
import schemas
|
||||||
from chalicelib.core import sessions
|
from chalicelib.core import sessions
|
||||||
|
|
@ -43,11 +44,28 @@ def merged_live(project_id, data: schemas.CreateCustomMetricsSchema):
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPayloadSchema):
|
def __get_merged_metric(project_id, user_id, metric_id,
|
||||||
|
data: Union[schemas.CustomMetricChartPayloadSchema,
|
||||||
|
schemas.CustomMetricSessionsPayloadSchema]) \
|
||||||
|
-> Union[schemas.CreateCustomMetricsSchema, None]:
|
||||||
metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False)
|
metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False)
|
||||||
if metric is None:
|
if metric is None:
|
||||||
return None
|
return None
|
||||||
metric: schemas.CreateCustomMetricsSchema = schemas.CreateCustomMetricsSchema.parse_obj({**data.dict(), **metric})
|
metric: schemas.CreateCustomMetricsSchema = schemas.CreateCustomMetricsSchema.parse_obj({**data.dict(), **metric})
|
||||||
|
if len(data.filters) > 0 or len(data.events) > 0:
|
||||||
|
for s in metric.series:
|
||||||
|
if len(data.filters) > 0:
|
||||||
|
s.filter.filters += data.filters
|
||||||
|
if len(data.events) > 0:
|
||||||
|
s.filter.events += data.events
|
||||||
|
return metric
|
||||||
|
|
||||||
|
|
||||||
|
def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPayloadSchema):
|
||||||
|
metric: schemas.CreateCustomMetricsSchema = __get_merged_metric(project_id=project_id, user_id=user_id,
|
||||||
|
metric_id=metric_id, data=data)
|
||||||
|
if metric is None:
|
||||||
|
return None
|
||||||
series_charts = __try_live(project_id=project_id, data=metric)
|
series_charts = __try_live(project_id=project_id, data=metric)
|
||||||
if metric.view_type == schemas.MetricTimeseriesViewType.progress:
|
if metric.view_type == schemas.MetricTimeseriesViewType.progress:
|
||||||
return series_charts
|
return series_charts
|
||||||
|
|
@ -60,10 +78,10 @@ def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPa
|
||||||
|
|
||||||
|
|
||||||
def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessionsPayloadSchema):
|
def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessionsPayloadSchema):
|
||||||
metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False)
|
metric: schemas.CreateCustomMetricsSchema = __get_merged_metric(project_id=project_id, user_id=user_id,
|
||||||
|
metric_id=metric_id, data=data)
|
||||||
if metric is None:
|
if metric is None:
|
||||||
return None
|
return None
|
||||||
metric: schemas.CreateCustomMetricsSchema = schemas.CreateCustomMetricsSchema.parse_obj({**data.dict(), **metric})
|
|
||||||
results = []
|
results = []
|
||||||
for s in metric.series:
|
for s in metric.series:
|
||||||
s.filter.startDate = data.startDate
|
s.filter.startDate = data.startDate
|
||||||
|
|
|
||||||
|
|
@ -428,7 +428,7 @@ class FilterType(str, Enum):
|
||||||
duration = "DURATION"
|
duration = "DURATION"
|
||||||
platform = "PLATFORM"
|
platform = "PLATFORM"
|
||||||
metadata = "METADATA"
|
metadata = "METADATA"
|
||||||
issue = "ISSUE"
|
issue = "ISSUES"
|
||||||
events_count = "EVENTS_COUNT"
|
events_count = "EVENTS_COUNT"
|
||||||
utm_source = "UTM_SOURCE"
|
utm_source = "UTM_SOURCE"
|
||||||
utm_medium = "UTM_MEDIUM"
|
utm_medium = "UTM_MEDIUM"
|
||||||
|
|
@ -619,7 +619,7 @@ class SessionsSearchPayloadSchema(BaseModel):
|
||||||
alias_generator = attribute_to_camel_case
|
alias_generator = attribute_to_camel_case
|
||||||
|
|
||||||
|
|
||||||
class FlatSessionsSearchPayloadSchema(SessionsSearchPayloadSchema):
|
class FlatSessionsSearch(BaseModel):
|
||||||
events: Optional[List[_SessionSearchEventSchema]] = Field([])
|
events: Optional[List[_SessionSearchEventSchema]] = Field([])
|
||||||
filters: List[Union[SessionSearchFilterSchema, _SessionSearchEventSchema]] = Field([])
|
filters: List[Union[SessionSearchFilterSchema, _SessionSearchEventSchema]] = Field([])
|
||||||
|
|
||||||
|
|
@ -645,6 +645,10 @@ class FlatSessionsSearchPayloadSchema(SessionsSearchPayloadSchema):
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
|
||||||
|
class FlatSessionsSearchPayloadSchema(FlatSessionsSearch, SessionsSearchPayloadSchema):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SessionsSearchCountSchema(FlatSessionsSearchPayloadSchema):
|
class SessionsSearchCountSchema(FlatSessionsSearchPayloadSchema):
|
||||||
# class SessionsSearchCountSchema(SessionsSearchPayloadSchema):
|
# class SessionsSearchCountSchema(SessionsSearchPayloadSchema):
|
||||||
sort: Optional[str] = Field(default=None)
|
sort: Optional[str] = Field(default=None)
|
||||||
|
|
@ -765,7 +769,7 @@ class TimeseriesMetricOfType(str, Enum):
|
||||||
session_count = "sessionCount"
|
session_count = "sessionCount"
|
||||||
|
|
||||||
|
|
||||||
class CustomMetricSessionsPayloadSchema(BaseModel):
|
class CustomMetricSessionsPayloadSchema(FlatSessionsSearch):
|
||||||
startDate: int = Field(TimeUTC.now(-7))
|
startDate: int = Field(TimeUTC.now(-7))
|
||||||
endDate: int = Field(TimeUTC.now())
|
endDate: int = Field(TimeUTC.now())
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue