def get_query_processors(self) -> Sequence[QueryProcessor]: return [ TimeSeriesProcessor({"time": "finish_ts"}, ("start_ts", "finish_ts")), TagsExpanderProcessor(), BasicFunctionsProcessor(), apdex_processor(self.get_data_model()), failure_rate_processor(self.get_data_model()), ]
def get_query_processors(self) -> Sequence[QueryProcessor]: return [ TagsExpanderProcessor(), BasicFunctionsProcessor(), apdex_processor(self.get_data_model()), failure_rate_processor(self.get_data_model()), TimeSeriesColumnProcessor(self.__time_group_columns), ]
def get_query_processors(self) -> Sequence[QueryProcessor]: columnset = self.get_data_model() return [ TagsExpanderProcessor(), BasicFunctionsProcessor(), # Apdex and Impact seem very good candidates for # being defined by the Transaction entity when it will # exist, so it would run before Storage selection. apdex_processor(columnset), failure_rate_processor(columnset), HandledFunctionsProcessor("exception_stacks.mechanism_handled", columnset), TimeSeriesColumnProcessor({"time": "timestamp"}), ]
def get_query_processors(self) -> Sequence[QueryProcessor]: return [ TimeSeriesProcessor({"time": "finish_ts"}, ("start_ts", "finish_ts", "timestamp")), TagsExpanderProcessor(), BasicFunctionsProcessor(), apdex_processor(), failure_rate_processor(), ReferrerRateLimiterProcessor(), ProjectReferrerRateLimiter("project_id"), ProjectRateLimiterProcessor(project_column="project_id"), ResourceQuotaProcessor("project_id"), ]
def test_apdex_format_expressions() -> None: unprocessed = Query( QueryEntity(EntityKey.EVENTS, ColumnSet([])), selected_columns=[ SelectedExpression(name=None, expression=Column(None, None, "column2")), SelectedExpression( "perf", FunctionCall( "perf", "apdex", (Column(None, None, "column1"), Literal(None, 300)) ), ), ], ) expected = Query( QueryEntity(EntityKey.EVENTS, ColumnSet([])), selected_columns=[ SelectedExpression(name=None, expression=Column(None, None, "column2")), SelectedExpression( "perf", divide( plus( FunctionCall( None, "countIf", ( binary_condition( ConditionFunctions.LTE, Column(None, None, "column1"), Literal(None, 300), ), ), ), divide( FunctionCall( None, "countIf", ( binary_condition( BooleanFunctions.AND, binary_condition( ConditionFunctions.GT, Column(None, None, "column1"), Literal(None, 300), ), binary_condition( ConditionFunctions.LTE, Column(None, None, "column1"), multiply( Literal(None, 300), Literal(None, 4) ), ), ), ), ), Literal(None, 2), ), ), FunctionCall( None, "count", (), ), "perf", ), ), ], ) apdex_processor().process_query(unprocessed, HTTPQuerySettings()) assert expected.get_selected_columns() == unprocessed.get_selected_columns() ret = unprocessed.get_selected_columns()[1].expression.accept( ClickhouseExpressionFormatter() ) assert ret == ( "(divide(plus(countIf(lessOrEquals(column1, 300)), " "divide(countIf(greater(column1, 300) AND " "lessOrEquals(column1, multiply(300, 4))), 2)), count()) AS perf)" )