def apdex(column: Column, satisfied: Literal) -> Expression: tolerated = multiply(satisfied, Literal(None, 4)) return div( plus( countIf( binary_condition(None, ConditionFunctions.LTE, column, satisfied)), div( countIf( binary_condition( None, BooleanFunctions.AND, binary_condition( None, ConditionFunctions.GT, column, satisfied, ), binary_condition( None, ConditionFunctions.LTE, column, tolerated, ), ), ), Literal(None, 2), ), ), count(), )
def test_failure_rate_format_expressions() -> None: unprocessed = Query( {}, TableSource("events", ColumnSet([])), selected_columns=[ SelectedExpression(name=None, expression=Column(None, None, "column2")), SelectedExpression("perf", FunctionCall("perf", "failure_rate", ())), ], ) expected = Query( {}, TableSource("events", ColumnSet([])), selected_columns=[ SelectedExpression(name=None, expression=Column(None, None, "column2")), SelectedExpression( "perf", divide( FunctionCall( None, "countIf", (binary_condition( None, ConditionFunctions.NOT_IN, Column(None, None, "transaction_status"), FunctionCall( None, "tuple", ( Literal(alias=None, value=0), Literal(alias=None, value=1), Literal(alias=None, value=2), ), ), ), ), ), count(), "perf", ), ), ], ) failure_rate_processor(ColumnSet([])).process_query( unprocessed, HTTPRequestSettings()) assert (expected.get_selected_columns_from_ast() == unprocessed.get_selected_columns_from_ast()) ret = unprocessed.get_selected_columns_from_ast()[1].expression.accept( ClickhouseExpressionFormatter()) assert ret == ( "(divide(countIf(notIn(transaction_status, tuple(0, 1, 2))), count()) AS perf)" )
def test_failure_rate_format_expressions() -> None: unprocessed = Query( {}, TableSource("events", ColumnSet([])), selected_columns=[ SelectedExpression(name=None, expression=Column(None, None, "column2")), SelectedExpression("perf", FunctionCall("perf", "failure_rate", ())), ], ) expected = Query( {}, TableSource("events", ColumnSet([])), selected_columns=[ SelectedExpression(name=None, expression=Column(None, None, "column2")), SelectedExpression( "perf", divide( FunctionCall( None, "countIf", ( combine_and_conditions( [ binary_condition( None, ConditionFunctions.NEQ, Column(None, None, "transaction_status"), Literal(None, code), ) for code in [0, 1, 2] ] ), ), ), count(), "perf", ), ), ], ) failure_rate_processor(ColumnSet([])).process_query( unprocessed, HTTPRequestSettings() ) assert ( expected.get_selected_columns_from_ast() == unprocessed.get_selected_columns_from_ast() ) ret = unprocessed.get_selected_columns_from_ast()[1].expression.accept( ClickhouseExpressionFormatter() ) assert ret == ( "(divide(countIf(notEquals(transaction_status, 0) AND notEquals(transaction_status, 1) AND notEquals(transaction_status, 2)), count()) AS perf)" )
def test_impact_format_expressions() -> None: unprocessed = Query( {}, TableSource("events", ColumnSet([])), selected_columns=[ Column(None, "column2", None), FunctionCall( "perf", "impact", ( Column(None, "column1", None), Literal(None, 300), Column(None, "user", None), ), ), ], ) expected = Query( {}, TableSource("events", ColumnSet([])), selected_columns=[ Column(None, "column2", None), plus( minus( Literal(None, 1), div( plus( countIf( binary_condition( None, ConditionFunctions.LTE, Column(None, "column1", None), Literal(None, 300), ), ), div( countIf( binary_condition( None, BooleanFunctions.AND, binary_condition( None, ConditionFunctions.GT, Column(None, "column1", None), Literal(None, 300), ), binary_condition( None, ConditionFunctions.LTE, Column(None, "column1", None), multiply( Literal(None, 300), Literal(None, 4) ), ), ), ), Literal(None, 2), ), ), count(), ), ), multiply( minus( Literal(None, 1), div( Literal(None, 1), FunctionCall( None, "sqrt", ( FunctionCall( None, "uniq", Column( alias=None, column_name="user", table_name=None, ), ) ), ), ), ), Literal(None, 3), ), ), ], ) ImpactProcessor().process_query(unprocessed, HTTPRequestSettings()) assert ( expected.get_selected_columns_from_ast() == unprocessed.get_selected_columns_from_ast() ) ret = unprocessed.get_selected_columns_from_ast()[1].accept( ClickhouseExpressionFormatter() ) assert ret == ( "plus(minus(1, div(plus(countIf(lessOrEquals(column1, 300)), " "div(countIf(and(greater(column1, 300), lessOrEquals(column1, " "multiply(300, 4)))), 2)), count())), " "multiply(minus(1, div(1, sqrt(user, uniq(user)))), 3))" )