예제 #1
0
def build_delegate_subscription_data() -> DelegateSubscriptionData:
    return DelegateSubscriptionData(
        project_id=5,
        time_window=timedelta(minutes=500),
        resolution=timedelta(minutes=1),
        conditions=[["platform", "IN", ["a"]]],
        aggregations=[["count()", "", "count"]],
        query="MATCH events SELECT count() WHERE in(platform, 'a')",
    )
예제 #2
0
파일: codecs.py 프로젝트: pombredanne/snuba
    def decode(self, value: bytes) -> SubscriptionData:
        try:
            data = json.loads(value.decode("utf-8"))
        except json.JSONDecodeError:
            raise InvalidQueryException("Invalid JSON")

        subscription_type = data.get(SubscriptionData.TYPE_FIELD)
        if subscription_type == SubscriptionType.SNQL.value:
            return SnQLSubscriptionData.from_dict(data)
        elif subscription_type == SubscriptionType.DELEGATE.value:
            return DelegateSubscriptionData.from_dict(data)
        elif subscription_type is None:
            return LegacySubscriptionData.from_dict(data)
        else:
            raise InvalidSubscriptionError("Invalid subscription data")
예제 #3
0
                "WHERE "
                "platform IN tuple('a')"
            ),
            time_window=timedelta(minutes=10),
            resolution=timedelta(minutes=1),
        ),
        id="SnQL subscription",
    ),
    pytest.param(
        DelegateSubscriptionData(
            project_id=123,
            conditions=[["platform", "IN", ["a"]]],
            aggregations=[["count()", "", "count"]],
            query=(
                "MATCH (events) "
                "SELECT count() AS count "
                "WHERE "
                "platform IN tuple('a')"
            ),
            time_window=timedelta(minutes=10),
            resolution=timedelta(minutes=1),
        ),
        id="Delegate subscription",
    ),
]

TESTS_INVALID = [
    pytest.param(
        LegacySubscriptionData(
            project_id=123,
            conditions=[["platfo", "IN", ["a"]]],
예제 #4
0
            project_id=1,
            conditions=[],
            aggregations=[["count()", "", "count"]],
            time_window=timedelta(minutes=60),
            resolution=timedelta(minutes=1),
        ),
        SnQLSubscriptionData(
            project_id=1,
            query=("MATCH (events) SELECT count() AS count"),
            time_window=timedelta(minutes=60),
            resolution=timedelta(minutes=1),
        ),
        DelegateSubscriptionData(
            project_id=1,
            conditions=[],
            aggregations=[["count()", "", "count"]],
            query=("MATCH (events) SELECT count() AS count"),
            time_window=timedelta(minutes=60),
            resolution=timedelta(minutes=1),
        ),
    ],
)
def subscription_data(request: Any) -> SubscriptionData:
    assert isinstance(request.param, SubscriptionData)
    return request.param


@pytest.fixture
def subscription_rollout() -> Generator[None, None, None]:
    state.set_config("snql_subscription_rollout_pct", 1.0)
    yield
    state.set_config("snql_subscription_rollout", 0.0)