示例#1
0
 def test_simple_users_for_metrics(self):
     for tag in [
             SessionMetricKey.USER.value, "session.status", "crashed",
             "init"
     ]:
         indexer.record(tag)
     entity_subscription = get_entity_subscription_for_dataset(
         dataset=QueryDatasets.METRICS,
         time_window=3600,
         aggregate=
         "percentage(users_crashed, users) AS _crash_rate_alert_aggregate",
         extra_fields={"org_id": self.organization.id},
     )
     snuba_filter = build_snuba_filter(
         entity_subscription,
         query="",
         environment=None,
     )
     org_id = self.organization.id
     session_status = tag_key(org_id, "session.status")
     session_status_tag_values = get_tag_values_list(
         org_id, ["crashed", "init"])
     assert snuba_filter
     assert snuba_filter.aggregations == [["uniq(value)", None, "value"]]
     assert snuba_filter.conditions == [
         ["metric_id", "=",
          metric_id(org_id, SessionMetricKey.USER)],
         [session_status, "IN", session_status_tag_values],
     ]
     assert snuba_filter.groupby == [session_status]
 def test_get_entity_subscription_for_metrics_dataset_for_users(self) -> None:
     aggregate = "percentage(users_crashed, users) AS _crash_rate_alert_aggregate"
     entity_subscription = get_entity_subscription_for_dataset(
         dataset=QueryDatasets.METRICS,
         aggregate=aggregate,
         time_window=3600,
         extra_fields={"org_id": self.organization.id},
     )
     assert isinstance(entity_subscription, MetricsSetsEntitySubscription)
     assert entity_subscription.aggregate == aggregate
     org_id = self.organization.id
     groupby = [tag_key(org_id, "session.status")]
     assert entity_subscription.get_entity_extra_params() == {
         "organization": self.organization.id,
         "groupby": groupby,
         "granularity": 10,
     }
     assert entity_subscription.entity_key == EntityKey.MetricsSets
     assert entity_subscription.time_col == ENTITY_TIME_COLUMNS[EntityKey.MetricsSets]
     assert entity_subscription.dataset == QueryDatasets.METRICS
     session_status = tag_key(org_id, "session.status")
     session_status_tag_values = get_tag_values_list(org_id, ["crashed", "init"])
     snuba_filter = entity_subscription.build_snuba_filter("", None, None)
     assert snuba_filter
     assert snuba_filter.aggregations == [["uniq(value)", None, "value"]]
     assert snuba_filter.conditions == [
         ["metric_id", "=", metric_id(org_id, SessionMetricKey.USER)],
         [session_status, "IN", session_status_tag_values],
     ]
     assert snuba_filter.groupby == groupby
     assert snuba_filter.rollup == entity_subscription.get_granularity()
示例#3
0
 def test_query_and_environment_users_metrics(self):
     env = self.create_environment(self.project, name="development")
     for tag in [
             SessionMetricKey.USER.value,
             "session.status",
             "environment",
             "development",
             "init",
             "crashed",
             "release",
             "[email protected]",
     ]:
         indexer.record(tag)
     entity_subscription = get_entity_subscription_for_dataset(
         dataset=QueryDatasets.METRICS,
         time_window=3600,
         aggregate=
         "percentage(users_crashed, users) AS _crash_rate_alert_aggregate",
         extra_fields={"org_id": self.organization.id},
     )
     snuba_filter = build_snuba_filter(
         entity_subscription,
         query="release:[email protected]",
         environment=env,
     )
     org_id = self.organization.id
     assert snuba_filter
     assert snuba_filter.aggregations == [["uniq(value)", None, "value"]]
     assert snuba_filter.groupby == [tag_key(org_id, "session.status")]
     assert snuba_filter.conditions == [
         ["metric_id", "=",
          metric_id(org_id, SessionMetricKey.USER)],
         [
             tag_key(org_id, "session.status"),
             "IN",
             get_tag_values_list(org_id, ["crashed", "init"]),
         ],
         [
             tag_key(org_id, "environment"), "=",
             tag_value(org_id, "development")
         ],
         [tag_key(org_id, "release"), "=",
          tag_value(org_id, "[email protected]")],
     ]
    def build_snuba_filter(
        self,
        query: str,
        environment: Optional[Environment],
        params: Optional[Mapping[str, Any]] = None,
    ) -> Filter:
        snuba_filter = get_filter(query, params=params)
        conditions = copy(snuba_filter.conditions)
        session_status_tag_values = get_tag_values_list(self.org_id, ["crashed", "init"])
        snuba_filter.update_with(
            {
                "aggregations": [[f"{self.aggregation_func}(value)", None, "value"]],
                "conditions": [
                    ["metric_id", "=", metric_id(self.org_id, self.metric_key)],
                    [self.session_status, "IN", session_status_tag_values],
                ],
                "groupby": self.get_query_groupby(),
                "rollup": self.get_granularity(),
            }
        )
        if environment:
            snuba_filter.conditions.append(
                [tag_key(self.org_id, "environment"), "=", tag_value(self.org_id, environment.name)]
            )
        if query and len(conditions) > 0:
            release_conditions = [
                condition for condition in conditions if condition[0] == "release"
            ]

            for release_condition in release_conditions:
                snuba_filter.conditions.append(
                    [
                        tag_key(self.org_id, release_condition[0]),
                        release_condition[1],
                        tag_value(self.org_id, release_condition[2]),
                    ]
                )

        return snuba_filter