## Sentry Schema ```mermaid graph LR O(Organization) -- RESOURCE --> T(Team) O -- RESOURCE --> U(User) O -- RESOURCE --> P(Project) O -- RESOURCE --> R(Release) O -- RESOURCE --> A(AlertRule) P -- HAS_RULE --> A U -- MEMBER_OF --> T U -- ADMIN_OF --> T P -- HAS_TEAM --> T ``` ### SentryOrganization Represents a Sentry organization. > **Ontology Mapping**: This node has the extra label `Tenant` to enable cross-platform queries for organizational tenants across different systems (e.g., OktaOrganization, AWSAccount). | Field | Description | |-------|-------------| | **id** | The unique identifier of the organization | | firstseen | Timestamp of when a sync job first created this node | | lastupdated | Timestamp of the last time the node was updated | | name | The name of the organization | | slug | URL-friendly identifier for the organization | | status | Current status of the organization (e.g., active) | | date_created | When the organization was created (ISO 8601) | | require_2fa | Whether the organization requires 2FA | | is_early_adopter | Whether the organization is an early adopter | #### Relationships - Other resources belong to an `Organization` ``` (SentryOrganization)-[:RESOURCE]->( :SentryTeam, :SentryUser, :SentryProject, :SentryRelease, :SentryAlertRule) ``` ### SentryTeam Represents a team within a Sentry organization. > **Ontology Mapping**: This node has the extra label `UserGroup` to enable cross-platform queries for user groups across different systems (e.g., GitHubTeam, OktaGroup). | Field | Description | |-------|-------------| | **id** | The unique identifier of the team | | firstseen | Timestamp of when a sync job first created this node | | lastupdated | Timestamp of the last time the node was updated | | name | The name of the team | | slug | URL-friendly identifier for the team | | date_created | When the team was created (ISO 8601) | | member_count | Number of members in the team | #### Relationships - `Team` belongs to an `Organization` ``` (:SentryOrganization)-[:RESOURCE]->(:SentryTeam) ``` - `User` is a member of a `Team` ``` (:SentryUser)-[:MEMBER_OF]->(:SentryTeam) ``` - `User` is an admin of a `Team` (owners are admins of all teams) ``` (:SentryUser)-[:ADMIN_OF]->(:SentryTeam) ``` - `Project` has a `Team` ``` (:SentryProject)-[:HAS_TEAM]->(:SentryTeam) ``` ### SentryUser Represents a member of a Sentry organization. > **Ontology Mapping**: This node has the extra label `UserAccount` to enable cross-platform queries for user accounts across different systems (e.g., OktaUser, AWSSSOUser). | Field | Description | |-------|-------------| | **id** | The unique membership identifier | | firstseen | Timestamp of when a sync job first created this node | | lastupdated | Timestamp of the last time the node was updated | | email | The email address of the member | | name | The display name of the member | | role | The organization role (e.g., admin, member, owner) | | date_created | When the membership was created (ISO 8601) | | pending | Whether the invite is still pending | | expired | Whether the invite has expired | | has_2fa | Whether the user has 2FA enabled | #### Relationships - `User` belongs to an `Organization` ``` (:SentryOrganization)-[:RESOURCE]->(:SentryUser) ``` - `User` is a member of a `Team` ``` (:SentryUser)-[:MEMBER_OF]->(:SentryTeam) ``` - `User` is an admin of a `Team` (owners are admins of all teams) ``` (:SentryUser)-[:ADMIN_OF]->(:SentryTeam) ``` ### SentryProject Represents a project in a Sentry organization. | Field | Description | |-------|-------------| | **id** | The unique identifier of the project | | firstseen | Timestamp of when a sync job first created this node | | lastupdated | Timestamp of the last time the node was updated | | name | The name of the project | | slug | URL-friendly identifier for the project | | platform | The primary platform of the project (e.g., python, javascript) | | date_created | When the project was created (ISO 8601) | | first_event | When the first event was received (ISO 8601) | #### Relationships - `Project` belongs to an `Organization` ``` (:SentryOrganization)-[:RESOURCE]->(:SentryProject) ``` - `Project` has a `Team` ``` (:SentryProject)-[:HAS_TEAM]->(:SentryTeam) ``` - `Project` has alert rules ``` (:SentryProject)-[:HAS_RULE]->(:SentryAlertRule) ``` ### SentryRelease Represents a release in a Sentry organization. | Field | Description | |-------|-------------| | **id** | Org-scoped version string (`{org_id}/{version}`) | | firstseen | Timestamp of when a sync job first created this node | | lastupdated | Timestamp of the last time the node was updated | | version | The full version identifier | | short_version | Abbreviated version string | | date_created | When the release was created (ISO 8601) | | date_released | When the release was published (ISO 8601) | | commit_count | Number of commits in the release | | deploy_count | Number of deploys for the release | | new_groups | Number of new issues introduced | | ref | Git reference associated with the release | | url | URL associated with the release | #### Relationships - `Release` belongs to an `Organization` ``` (:SentryOrganization)-[:RESOURCE]->(:SentryRelease) ``` ### SentryAlertRule Represents an issue alert rule configured on a Sentry project. | Field | Description | |-------|-------------| | **id** | The unique identifier of the alert rule | | firstseen | Timestamp of when a sync job first created this node | | lastupdated | Timestamp of the last time the node was updated | | name | The name of the alert rule | | date_created | When the alert rule was created (ISO 8601) | | action_match | Logic for conditions: all, any, or none | | filter_match | Logic for filters: all, any, or none | | frequency | Throttle interval in seconds | | environment | The environment this rule applies to | | status | Status of the rule (e.g., active) | | project_slug | Slug of the project this rule belongs to | #### Relationships - `AlertRule` belongs to an `Organization` (sub-resource for cleanup) ``` (:SentryOrganization)-[:RESOURCE]->(:SentryAlertRule) ``` - `AlertRule` is linked to a `Project` ``` (:SentryProject)-[:HAS_RULE]->(:SentryAlertRule) ```