Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
7756ab9
feat(seer): Add Explorer service map extraction pipeline
shruthilayaj Feb 17, 2026
611add2
ref(seer): Replace NetworkX with native Python for service classifica…
shruthilayaj Feb 17, 2026
eeb46e5
chore(options): Remove unused seer.org_index options
shruthilayaj Feb 17, 2026
a3fb8bd
test(seer): Add integration tests for Explorer service map
shruthilayaj Feb 17, 2026
3ff16ea
test(explorer): Clean up redundant mock tests and fix circular depend…
shruthilayaj Feb 17, 2026
1e622f1
ref(explorer): Fix mypy type annotations
shruthilayaj Feb 17, 2026
6b659bc
ref(explorer): Remove custom rate limiting and build SnubaParams once
shruthilayaj Feb 19, 2026
bf6c119
ref(explorer): Replace top-transaction scan with reliable two-pass se…
shruthilayaj Feb 20, 2026
d3fa500
ref(explorer): Replace roles dict with nodes list in Seer service map…
shruthilayaj Feb 20, 2026
2acaa4f
ref(explorer): Clean up service map options and remove killswitch
shruthilayaj Feb 20, 2026
f7939a5
ref(explorer): Replace semantic service roles with graph-topology roles
shruthilayaj Feb 20, 2026
88e4c38
change max_segments to 500
shruthilayaj Feb 20, 2026
56712f7
fix(explorer): Add timestamp to selected_columns for orderby in Phase…
shruthilayaj Feb 20, 2026
6b1574a
fix(explorer): Fix test_peripheral_classification to produce a periph…
shruthilayaj Feb 20, 2026
5fe2fe1
ref(explorer): Combine _classify_service_roles and _build_nodes into …
shruthilayaj Feb 20, 2026
eac1c66
ref(explorer): Filter to active projects in build_service_map
shruthilayaj Feb 20, 2026
98c2e76
fix test
shruthilayaj Feb 23, 2026
33fab05
Merge branch 'master' into shruthi/explorer-service-map
shruthilayaj Feb 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions src/sentry/options/defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -1139,6 +1139,32 @@
flags=FLAG_MODIFIABLE_BOOL | FLAG_AUTOMATOR_MODIFIABLE,
)

# Explorer service map options
register(
"explorer.service_map.enable",
default=False,
type=Bool,
flags=FLAG_MODIFIABLE_BOOL | FLAG_AUTOMATOR_MODIFIABLE,
)
register(
"explorer.service_map.allowed_organizations",
default=[],
type=Sequence,
flags=FLAG_ALLOW_EMPTY | FLAG_AUTOMATOR_MODIFIABLE,
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mutable option default list can be shared

Low Severity

explorer.service_map.allowed_organizations uses default=[], which can create a shared mutable default across reads in the option manager. If any caller mutates the returned list, subsequent reads can observe the mutated “default” value unexpectedly.

Fix in Cursor Fix in Web

register(
"explorer.service_map.max_edges",
default=5000,
type=Int,
flags=FLAG_AUTOMATOR_MODIFIABLE,
)
register(
"explorer.service_map.max_segments",
default=500,
type=Int,
flags=FLAG_PRIORITIZE_DISK | FLAG_AUTOMATOR_MODIFIABLE,
ttl=60 * 5,
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Default max_segments is 500, not documented 10,000

Medium Severity

The explorer.service_map.max_segments option defaults to 500, but the PR description documents a default of 10,000. With only 500 segments scanned per org over a 24-hour window, the service map is likely to miss many cross-project dependencies, producing a far less useful graph than intended.

Fix in Cursor Fix in Web

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent flag usage for max_segments option

Low Severity

The explorer.service_map.max_segments option uses FLAG_PRIORITIZE_DISK while the similar explorer.service_map.max_edges option does not. Both are runtime-tunable limits for the same feature, so they should use consistent flags. Other similar max/limit options in the codebase only use FLAG_AUTOMATOR_MODIFIABLE.

Fix in Cursor Fix in Web

register(
"seer.similarity.global-rate-limit",
type=Dict,
Expand Down
1 change: 1 addition & 0 deletions src/sentry/snuba/referrer.py
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,7 @@ class Referrer(StrEnum):
SEARCH_SNUBA_GROUP_ATTRIBUTES_SEARCH_HITS = "search.snuba.group_attributes_search.hits"
SEER_RPC = "seer.rpc"
SEER_EXPLORER_INDEX = "seer.explorer_index"
SEER_EXPLORER_SERVICE_MAP = "seer.explorer_service_map"
SEER_EXPLORER_TOOLS = "seer.explorer_tools"
SERIALIZERS_GROUPSERIALIZERSNUBA__EXECUTE_ERROR_SEEN_STATS_QUERY = (
"serializers.GroupSerializerSnuba._execute_error_seen_stats_query"
Expand Down
Loading
Loading