Skip to content

ref(analytics): Transform analytics events for TET-828 #95208

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
27 changes: 12 additions & 15 deletions src/sentry/analytics/events/alert_created.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
from sentry import analytics


@analytics.eventclass("alert.created")
class AlertCreatedEvent(analytics.Event):
type = "alert.created"

attributes = (
analytics.Attribute("user_id", required=False),
analytics.Attribute("default_user_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("rule_id"),
analytics.Attribute("rule_type"),
analytics.Attribute("is_api_token"),
# `alert_rule_ui_component` can be `alert-rule-action`
analytics.Attribute("alert_rule_ui_component", required=False),
analytics.Attribute("duplicate_rule", required=False),
analytics.Attribute("wizard_v3", required=False),
analytics.Attribute("query_type", required=False),
)
user_id: str | None = None
default_user_id: str
organization_id: str
rule_id: str
rule_type: str
is_api_token: str
# `alert_rule_ui_component` can be `alert-rule-action`
alert_rule_ui_component: str | None = None
duplicate_rule: str | None = None
wizard_v3: str | None = None
query_type: str | None = None


analytics.register(AlertCreatedEvent)
5 changes: 2 additions & 3 deletions src/sentry/analytics/events/data_consent_org_creation.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from sentry import analytics


@analytics.eventclass("aggregated_data_consent.organization_created")
class AggregatedDataConsentOrganizationCreatedEvent(analytics.Event):
type = "aggregated_data_consent.organization_created"

attributes = (analytics.Attribute("organization_id"),)
organization_id: str


analytics.register(AggregatedDataConsentOrganizationCreatedEvent)
15 changes: 6 additions & 9 deletions src/sentry/analytics/events/issue_archived.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
from sentry import analytics


@analytics.eventclass("issue.archived")
class IssueArchivedEvent(analytics.Event):
type = "issue.archived"

attributes = (
analytics.Attribute("user_id", type=int, required=False),
analytics.Attribute("default_user_id", type=int),
analytics.Attribute("organization_id", type=int),
analytics.Attribute("group_id"),
analytics.Attribute("until_escalating", type=bool, required=False),
)
user_id: int | None = None
default_user_id: int
organization_id: int
group_id: str
until_escalating: bool | None = None


analytics.register(IssueArchivedEvent)
23 changes: 10 additions & 13 deletions src/sentry/analytics/events/issue_ignored.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
from sentry import analytics


@analytics.eventclass("issue.ignored")
class IssueIgnoredEvent(analytics.Event):
type = "issue.ignored"

attributes = (
analytics.Attribute("user_id", type=int, required=False),
analytics.Attribute("default_user_id", type=int),
analytics.Attribute("organization_id", type=int),
analytics.Attribute("group_id"),
analytics.Attribute("ignore_duration", type=int, required=False),
analytics.Attribute("ignore_count", type=int, required=False),
analytics.Attribute("ignore_window", type=int, required=False),
analytics.Attribute("ignore_user_count", type=int, required=False),
analytics.Attribute("ignore_user_window", type=int, required=False),
)
user_id: int | None = None
default_user_id: int
organization_id: int
group_id: str
ignore_duration: int | None = None
ignore_count: int | None = None
ignore_window: int | None = None
ignore_user_count: int | None = None
ignore_user_window: int | None = None


analytics.register(IssueIgnoredEvent)
23 changes: 10 additions & 13 deletions src/sentry/analytics/events/issue_priority.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
from sentry import analytics


@analytics.eventclass("issue.priority_updated")
class IssuePriorityUpdatedEvent(analytics.Event):
type = "issue.priority_updated"

attributes = (
analytics.Attribute("group_id"),
analytics.Attribute("new_priority"),
analytics.Attribute("project_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("user_id", required=False),
analytics.Attribute("issue_category", required=False),
analytics.Attribute("issue_type", required=False),
analytics.Attribute("previous_priority", required=False),
analytics.Attribute("reason", required=False),
)
group_id: str
new_priority: str
project_id: str
organization_id: str
user_id: str | None = None
issue_category: str | None = None
issue_type: str | None = None
previous_priority: str | None = None
reason: str | None = None


analytics.register(IssuePriorityUpdatedEvent)
15 changes: 6 additions & 9 deletions src/sentry/analytics/events/issue_search_endpoint_queried.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
from sentry import analytics


@analytics.eventclass("issue_search.endpoint_queried")
class IssueSearchEndpointQueriedEvent(analytics.Event):
type = "issue_search.endpoint_queried"

attributes = (
analytics.Attribute("user_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("project_ids"), # This is a list of project ids
analytics.Attribute("full_query_params"),
analytics.Attribute("query"),
)
user_id: str
organization_id: str
project_ids: str # This is a list of project ids
full_query_params: str
query: str


analytics.register(IssueSearchEndpointQueriedEvent)
15 changes: 6 additions & 9 deletions src/sentry/analytics/events/issue_tracker_used.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
from sentry import analytics


@analytics.eventclass("issue_tracker.used")
class IssueTrackerUsedEvent(analytics.Event):
type = "issue_tracker.used"

attributes = (
analytics.Attribute("user_id", required=False),
analytics.Attribute("default_user_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("issue_tracker"),
analytics.Attribute("project_id"),
)
user_id: str | None = None
default_user_id: str
organization_id: str
issue_tracker: str
project_id: str


analytics.register(IssueTrackerUsedEvent)
15 changes: 6 additions & 9 deletions src/sentry/analytics/events/issue_unresolved.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
from sentry import analytics


@analytics.eventclass("issue.unresolved")
class IssueUnresolvedEvent(analytics.Event):
type = "issue.unresolved"

attributes = (
analytics.Attribute("user_id", type=int, required=False),
analytics.Attribute("default_user_id", type=int),
analytics.Attribute("organization_id", type=int),
analytics.Attribute("group_id"),
analytics.Attribute("transition_type"),
)
user_id: int | None = None
default_user_id: int
organization_id: int
group_id: str
transition_type: str


analytics.register(IssueUnresolvedEvent)
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
from sentry import analytics


@analytics.eventclass("metric_alert_with_ui_component.created")
class MetricAlertWithUiComponentCreatedEvent(analytics.Event):
type = "metric_alert_with_ui_component.created"

attributes = (
analytics.Attribute("user_id", required=False),
analytics.Attribute("alert_rule_id"),
analytics.Attribute("organization_id"),
)
user_id: str | None = None
alert_rule_id: str
organization_id: str


analytics.register(MetricAlertWithUiComponentCreatedEvent)
13 changes: 5 additions & 8 deletions src/sentry/analytics/events/monitor_mark_failed.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
from sentry import analytics


@analytics.eventclass("monitor_environment.mark_failed")
class MonitorEnvironmentMarkFailed(analytics.Event):
type = "monitor_environment.mark_failed"

attributes = (
analytics.Attribute("organization_id"),
analytics.Attribute("monitor_id"),
analytics.Attribute("project_id"),
analytics.Attribute("environment_id"),
)
organization_id: str
monitor_id: str
project_id: str
environment_id: str


analytics.register(MonitorEnvironmentMarkFailed)
13 changes: 5 additions & 8 deletions src/sentry/analytics/events/organization_created.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
from sentry import analytics


@analytics.eventclass("organization.created")
class OrganizationCreatedEvent(analytics.Event):
type = "organization.created"

attributes = (
analytics.Attribute("id"),
analytics.Attribute("name"),
analytics.Attribute("slug"),
analytics.Attribute("actor_id", required=False),
)
id: str
name: str
slug: str
actor_id: str | None = None


analytics.register(OrganizationCreatedEvent)
6 changes: 3 additions & 3 deletions src/sentry/analytics/events/organization_joined.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from sentry import analytics


@analytics.eventclass("organization.joined")
class OrganizationJoinedEvent(analytics.Event):
type = "organization.joined"

attributes = (analytics.Attribute("user_id"), analytics.Attribute("organization_id"))
user_id: str
organization_id: str


analytics.register(OrganizationJoinedEvent)
17 changes: 7 additions & 10 deletions src/sentry/analytics/events/project_created.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
from sentry import analytics


@analytics.eventclass("project.created")
class ProjectCreatedEvent(analytics.Event):
type = "project.created"

attributes = (
analytics.Attribute("user_id", required=False),
analytics.Attribute("default_user_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("origin", required=False),
analytics.Attribute("project_id"),
analytics.Attribute("platform", required=False),
)
user_id: str | None = None
default_user_id: str
organization_id: str
origin: str | None = None
project_id: str
platform: str | None = None


analytics.register(ProjectCreatedEvent)
13 changes: 5 additions & 8 deletions src/sentry/analytics/events/search_saved.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
from sentry import analytics


@analytics.eventclass("search.saved")
class SearchSavedEvent(analytics.Event):
type = "search.saved"

attributes = (
analytics.Attribute("user_id", required=False),
analytics.Attribute("default_user_id"),
analytics.Attribute("project_id"),
analytics.Attribute("organization_id"),
)
user_id: str | None = None
default_user_id: str
project_id: str
organization_id: str


analytics.register(SearchSavedEvent)
11 changes: 4 additions & 7 deletions src/sentry/analytics/events/sso_enabled.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
from sentry import analytics


@analytics.eventclass("sso.enabled")
class SSOEnabledEvent(analytics.Event):
type = "sso.enabled"

attributes = (
analytics.Attribute("user_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("provider"),
)
user_id: str
organization_id: str
provider: str


analytics.register(SSOEnabledEvent)
13 changes: 5 additions & 8 deletions src/sentry/analytics/events/team_created.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
from sentry import analytics


@analytics.eventclass("team.created")
class TeamCreatedEvent(analytics.Event):
type = "team.created"

attributes = (
analytics.Attribute("user_id", required=False),
analytics.Attribute("default_user_id"),
analytics.Attribute("organization_id"),
analytics.Attribute("team_id"),
)
user_id: str | None = None
default_user_id: str
organization_id: str
team_id: str


analytics.register(TeamCreatedEvent)
15 changes: 10 additions & 5 deletions src/sentry/api/endpoints/organization_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@

from sentry import analytics, audit_log, features, options
from sentry import ratelimits as ratelimiter
from sentry.analytics.events.data_consent_org_creation import (
AggregatedDataConsentOrganizationCreatedEvent,
)
from sentry.analytics.events.organization_created import OrganizationCreatedEvent
from sentry.api.api_publish_status import ApiPublishStatus
from sentry.api.base import Endpoint, region_silo_endpoint
from sentry.api.bases.organization import OrganizationPermission
Expand Down Expand Up @@ -276,9 +280,9 @@ def post(self, request: Request) -> Response:
)

analytics.record(
"organization.created",
org,
actor_id=request.user.id if request.user.is_authenticated else None,
OrganizationCreatedEvent(
actor_id=request.user.id if request.user.is_authenticated else None,
)
)

# TODO(hybrid-cloud): We'll need to catch a more generic error
Expand All @@ -301,8 +305,9 @@ def post(self, request: Request) -> Response:
org.update_option("sentry:aggregated_data_consent", True)

analytics.record(
"aggregated_data_consent.organization_created",
organization_id=org.id,
AggregatedDataConsentOrganizationCreatedEvent(
organization_id=org.id,
)
)

# New organizations should not see the legacy UI
Expand Down
Loading
Loading