Skip to content

Commit

Permalink
refactor a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrii Soldatenko committed Jan 16, 2023
1 parent d20d71e commit b074f9a
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 29 deletions.
2 changes: 1 addition & 1 deletion src/sentry/conf/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,6 @@ def SOCIAL_AUTH_DEFAULT_USERNAME():
"sentry.tasks.deletion",
"sentry.tasks.deliver_from_outbox",
"sentry.tasks.digests",
"sentry.tasks.dynamic_sampling",
"sentry.tasks.email",
"sentry.tasks.files",
"sentry.tasks.groupowner",
Expand All @@ -602,6 +601,7 @@ def SOCIAL_AUTH_DEFAULT_USERNAME():
"sentry.tasks.user_report",
"sentry.profiles.task",
"sentry.release_health.tasks",
"sentry.dynamic_sampling.tasks",
"sentry.utils.suspect_resolutions.get_suspect_resolutions",
"sentry.utils.suspect_resolutions_releases.get_suspect_resolutions_releases",
"sentry.tasks.derive_code_mappings",
Expand Down
32 changes: 9 additions & 23 deletions src/sentry/dynamic_sampling/prioritise_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,11 @@
from datetime import datetime, timedelta
from typing import Mapping, Sequence

from snuba_sdk import (
Column,
Condition,
Direction,
Entity,
Function,
Granularity,
Op,
OrderBy,
Query,
Request,
)
from snuba_sdk import Column, Condition, Direction, Entity, Granularity, Op, OrderBy, Query, Request

from sentry.release_health.release_monitor.base import BaseReleaseMonitorBackend, Totals
from sentry.sentry_metrics import indexer
from sentry.sentry_metrics.configuration import UseCaseKey
from sentry.sentry_metrics.indexer.strings import SESSION_METRIC_NAMES
from sentry.sentry_metrics.utils import resolve_tag_key
from sentry.sentry_metrics.indexer.strings import TRANSACTION_METRICS_NAMES
from sentry.snuba.dataset import Dataset, EntityKey
from sentry.snuba.metrics.naming_layer.mri import SessionMRI
from sentry.utils import metrics
from sentry.snuba.metrics.naming_layer.mri import TransactionMRI
from sentry.utils.snuba import raw_snql_query

logger = logging.getLogger(__name__)
Expand All @@ -33,7 +17,6 @@


def fetch_projects_with_total_volumes() -> Mapping[int, Sequence[int]]:
# TODO: (andrii) include only "disconnected" projects or independent in tracing context
aggregated_projects = defaultdict(list)
start_time = time.time()
offset = 0
Expand All @@ -52,7 +35,7 @@ def fetch_projects_with_total_volumes() -> Mapping[int, Sequence[int]]:
Condition(
Column("metric_id"),
Op.EQ,
SESSION_METRIC_NAMES[SessionMRI.SESSION.value],
TRANSACTION_METRICS_NAMES[TransactionMRI.COUNT_PER_ROOT_PROJECT.value],
),
],
granularity=Granularity(3600),
Expand All @@ -66,9 +49,8 @@ def fetch_projects_with_total_volumes() -> Mapping[int, Sequence[int]]:
)
request = Request(dataset=Dataset.Metrics.value, app_id="dynamic_sampling", query=query)
data = raw_snql_query(
# TODO: replace to new referrer
request,
referrer="dynamic_sampling.fetch_projects_with_recent_sessions",
referrer="dynamic_sampling.fetch_projects_with_total_volumes",
)["data"]
count = len(data)
more_results = count > CHUNK_SIZE
Expand All @@ -90,3 +72,7 @@ def fetch_projects_with_total_volumes() -> Mapping[int, Sequence[int]]:
)

return aggregated_projects


def process_projects_with_total_volumes(project_ids):
...
27 changes: 22 additions & 5 deletions src/sentry/dynamic_sampling/tasks.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,36 @@
import logging

from sentry.dynamic_sampling.prioritise_projects import fetch_projects_with_total_volumes
from sentry.tasks.base import instrumented_task

CHUNK_SIZE = 1000
MAX_SECONDS = 60

logger = logging.getLogger("sentry.tasks.dynamic_sampling")
logger = logging.getLogger(__name__)


@instrumented_task(
name="sentry.dynamic_sampling.tasks.foo",
queue="releasemonitor",
name="sentry.dynamic_sampling.tasks.prioritise_projects",
queue="dynamicsampling",
default_retry_delay=5,
max_retries=5,
) # type: ignore
def foo(**kwargs) -> None:
def prioritise_projects(**kwargs) -> None:
for org_id, project_ids in fetch_projects_with_total_volumes().items():
process_projects_with_sessions.delay(org_id, project_ids)
process_projects_sample_rates.delay(org_id, project_ids)


@instrumented_task(
name="sentry.dynamic_sampling.process_projects_sample_rates",
queue="dynamicsampling",
default_retry_delay=5,
max_retries=5,
) # type: ignore
def process_projects_sample_rates(org_id, project_ids) -> None:
"""
Takes a single org id and a list of project ids
"""
...

# Get adjusted sample rate via adjustment model
#
1 change: 1 addition & 0 deletions src/sentry/relay/config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,7 @@ def _filter_option_to_config_setting(flt: _FilterSpec, setting: str) -> Mapping[
[
"s:transactions/user@none",
"d:transactions/duration@millisecond",
"c:transactions/count_per_root_project@none",
]
)

Expand Down
1 change: 1 addition & 0 deletions src/sentry/snuba/metrics/naming_layer/mri.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class TransactionMRI(Enum):
# Ingested
USER = "s:transactions/user@none"
DURATION = "d:transactions/duration@millisecond"
COUNT_PER_ROOT_PROJECT = "c:transactions/count_per_root_project@none"
MEASUREMENTS_FCP = "d:transactions/measurements.fcp@millisecond"
MEASUREMENTS_LCP = "d:transactions/measurements.lcp@millisecond"
MEASUREMENTS_APP_START_COLD = "d:transactions/measurements.app_start_cold@millisecond"
Expand Down
16 changes: 16 additions & 0 deletions tests/sentry/dynamic_sampling/test_tasks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import pytest

from sentry.dynamic_sampling.tasks import fetch_projects_with_total_volumes


@pytest.mark.django_db
def test_simple(default_project):
test_data = [
{
"org_id": [default_project.organization.id],
"project_id": [default_project.id],
},
]
assert 1 == 1
_ = test_data
fetch_projects_with_total_volumes()

0 comments on commit b074f9a

Please sign in to comment.