Skip to content

Commit 8f0118c

Browse files
authored
Jonatan/mon 2642 remove sentry (#381)
1 parent dfcafd5 commit 8f0118c

File tree

15 files changed

+43
-590
lines changed

15 files changed

+43
-590
lines changed

backend/deepchecks_monitoring/app.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -203,20 +203,6 @@ def auto_removal(task): # pylint: disable=unused-argument
203203
if settings.is_cloud:
204204
app.include_router(ee.api.v1.cloud_router, dependencies=[Depends(LicenseCheckDependency())])
205205

206-
# Configure telemetry
207-
if settings.sentry_dsn:
208-
import sentry_sdk
209-
210-
sentry_sdk.init(
211-
dsn=settings.sentry_dsn,
212-
traces_sampler=ee.utils.sentry.traces_sampler,
213-
environment=settings.sentry_env,
214-
before_send_transaction=ee.utils.sentry.sentry_send_hook
215-
)
216-
# Ignoring this logger since it can spam sentry with errors
217-
sentry_sdk.integrations.logging.ignore_logger("aiokafka.cluster")
218-
ee.utils.telemetry.collect_telemetry(DataIngestionBackend)
219-
220206
if settings.debug_mode:
221207
app.add_middleware(ee.middlewares.ProfilingMiddleware)
222208

backend/deepchecks_monitoring/bgtasks/scheduler.py

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,13 @@
4848

4949
__all__ = ['AlertsScheduler']
5050

51+
try:
52+
from deepchecks_monitoring import ee # pylint: disable=import-outside-toplevel
53+
with_ee = True
54+
except ImportError:
55+
with_ee = False
56+
5157

52-
# TODO: rename to MonitorScheduler
5358
class AlertsScheduler:
5459
"""Alerts scheduler."""
5560

@@ -139,7 +144,14 @@ async def run_organization(self, organization):
139144
monitors_per_model = defaultdict(list)
140145
for monitor in list_monitor_scalars:
141146
monitors_per_model[monitor.check.model].append(monitor)
147+
session.expunge_all()
142148

149+
async with self.async_session_factory() as session:
150+
session: AsyncSession
151+
await database.attach_schema_switcher_listener(
152+
session=session,
153+
schema_search_path=[organization.schema_name, 'public']
154+
)
143155
for model, monitors in monitors_per_model.items():
144156
# Get the minimal time needed to query windows data for. Doing it together for all monitors in order to
145157
# query the data once
@@ -161,7 +173,6 @@ async def run_organization(self, organization):
161173
# For each monitor enqueue schedules
162174
for monitor in monitors:
163175
schedules = []
164-
session.add(monitor)
165176
frequency = monitor.frequency.to_pendulum_duration()
166177
schedule_time = monitor.next_schedule
167178

@@ -176,7 +187,10 @@ async def run_organization(self, organization):
176187
if schedules:
177188
try:
178189
await enqueue_tasks(monitor, schedules, organization, session)
179-
monitor.latest_schedule = schedules[-1]
190+
await session.execute(
191+
sa.update(Monitor)
192+
.where(Monitor.id == monitor.id).values({Monitor.latest_schedule: schedules[-1]})
193+
)
180194
await session.commit()
181195
# NOTE:
182196
# We use 'Repeatable Read Isolation Level' to run query therefore transaction serialization
@@ -234,19 +248,29 @@ async def run_object_storage_ingestion(self, organization):
234248

235249
if len(models) == 0:
236250
return
251+
session.expunge_all()
237252

253+
async with self.async_session_factory() as session:
254+
await database.attach_schema_switcher_listener(
255+
session=session,
256+
schema_search_path=[organization.schema_name, 'public']
257+
)
238258
time = pdl.now()
239-
tasks = []
240259
for model in models:
241260
if (model.obj_store_last_scan_time is None
242261
or pdl.instance(model.obj_store_last_scan_time).add(hours=2) < time):
243-
tasks.append(dict(name=f'{organization.id}:{model.id}',
244-
bg_worker_task=ee.bgtasks.ObjectStorageIngestor.queue_name(),
245-
params=dict(model_id=model.id, organization_id=organization.id)))
246-
if len(tasks) > 0:
247-
await session.execute(insert(Task).values(tasks)
248-
.on_conflict_do_nothing(constraint=UNIQUE_NAME_TASK_CONSTRAINT))
249-
await session.commit()
262+
task = dict(name=f'{organization.id}:{model.id}',
263+
bg_worker_task=ee.bgtasks.ObjectStorageIngestor.queue_name(),
264+
params=dict(model_id=model.id, organization_id=organization.id))
265+
try:
266+
await session.execute(insert(Task).values(task)
267+
.on_conflict_do_nothing(constraint=UNIQUE_NAME_TASK_CONSTRAINT))
268+
await session.commit()
269+
except (SerializationError, DBAPIError) as error:
270+
await session.rollback()
271+
if isinstance(error, DBAPIError) and not is_serialization_error(error):
272+
self.logger.exception('Model(id=%s) s3 task enqueue failed', model.id)
273+
raise
250274

251275

252276
async def get_versions_hour_windows(
@@ -383,7 +407,7 @@ def is_serialization_error(error: DBAPIError):
383407
)
384408

385409

386-
class BaseSchedulerSettings(config.DatabaseSettings):
410+
class SchedulerSettings(config.DatabaseSettings):
387411
"""Scheduler settings."""
388412

389413
scheduler_sleep_seconds: int = 30
@@ -393,39 +417,13 @@ class BaseSchedulerSettings(config.DatabaseSettings):
393417
scheduler_logfile_backup_count: int = 3
394418

395419

396-
try:
397-
from deepchecks_monitoring import ee # pylint: disable=import-outside-toplevel
398-
399-
with_ee = True
400-
401-
class SchedulerSettings(BaseSchedulerSettings, ee.config.TelemetrySettings):
402-
"""Set of worker settings."""
403-
pass
404-
except ImportError:
405-
with_ee = False
406-
407-
class SchedulerSettings(BaseSchedulerSettings):
408-
"""Set of worker settings."""
409-
pass
410-
411-
412420
def execute_alerts_scheduler(scheduler_implementation: t.Type[AlertsScheduler]):
413421
"""Execute alrets scheduler."""
414422

415423
async def main():
416424
settings = SchedulerSettings() # type: ignore
417425
service_name = 'alerts-scheduler'
418426

419-
if with_ee:
420-
if settings.sentry_dsn:
421-
import sentry_sdk # pylint: disable=import-outside-toplevel
422-
sentry_sdk.init(
423-
dsn=settings.sentry_dsn,
424-
traces_sample_rate=0.6,
425-
environment=settings.sentry_env
426-
)
427-
ee.utils.telemetry.collect_telemetry(scheduler_implementation)
428-
429427
logger = configure_logger(
430428
name=service_name,
431429
log_level=settings.scheduler_loglevel,

backend/deepchecks_monitoring/bgtasks/tasks_queuer.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ async def move_tasks_to_queue(self, session) -> int:
136136
return 0
137137

138138

139-
class BaseWorkerSettings(DatabaseSettings, RedisSettings):
139+
class WorkerSettings(DatabaseSettings, RedisSettings):
140140
"""Worker settings."""
141141

142142
logfile: t.Optional[str] = None
@@ -152,16 +152,6 @@ class Config:
152152
env_file_encoding = 'utf-8'
153153

154154

155-
if with_ee:
156-
class WorkerSettings(BaseWorkerSettings, ee.config.TelemetrySettings):
157-
"""Set of worker settings."""
158-
pass
159-
else:
160-
class WorkerSettings(BaseWorkerSettings):
161-
"""Set of worker settings."""
162-
pass
163-
164-
165155
async def init_async_redis(redis_uri):
166156
"""Initialize redis connection."""
167157
try:
@@ -190,16 +180,6 @@ async def main():
190180
# the telemetry collection. Adding here this import to fix this
191181
from deepchecks_monitoring.bgtasks import tasks_queuer # pylint: disable=import-outside-toplevel
192182

193-
if with_ee:
194-
if settings.sentry_dsn:
195-
import sentry_sdk # pylint: disable=import-outside-toplevel
196-
sentry_sdk.init(
197-
dsn=settings.sentry_dsn,
198-
traces_sample_rate=0.1,
199-
environment=settings.sentry_env,
200-
)
201-
ee.utils.telemetry.collect_telemetry(tasks_queuer.TasksQueuer)
202-
203183
workers = [
204184
# ModelVersionTopicDeletionWorker,
205185
ModelVersionCacheInvalidation,

backend/deepchecks_monitoring/bgtasks/tasks_runner.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
from deepchecks_monitoring.logic.keys import GLOBAL_TASK_QUEUE, TASK_RUNNER_LOCK
3030
from deepchecks_monitoring.monitoring_utils import configure_logger
3131
from deepchecks_monitoring.public_models.task import BackgroundWorker, Task
32-
from deepchecks_monitoring.utils.other import ExtendedAIOKafkaAdminClient
3332

3433
try:
3534
from deepchecks_monitoring import ee
@@ -189,18 +188,6 @@ async def main():
189188
# the telemetry collection. Adding here this import to fix this
190189
from deepchecks_monitoring.bgtasks import tasks_runner # pylint: disable=import-outside-toplevel
191190

192-
if with_ee and settings.sentry_dsn:
193-
import sentry_sdk # pylint: disable=import-outside-toplevel
194-
195-
sentry_sdk.init(
196-
dsn=settings.sentry_dsn,
197-
traces_sample_rate=0.1,
198-
environment=settings.sentry_env
199-
)
200-
ee.utils.telemetry.collect_telemetry(tasks_runner.TaskRunner)
201-
# Ignoring this logger since it can spam sentry with errors
202-
sentry_sdk.integrations.logging.ignore_logger('aiokafka.cluster')
203-
204191
async with ResourcesProvider(settings) as rp:
205192
async_redis = await init_async_redis(rp.redis_settings.redis_uri)
206193

@@ -212,16 +199,6 @@ async def main():
212199
MixpanelSystemStateEvent()
213200
]
214201

215-
# Adding kafka related workers
216-
if settings.kafka_host is not None:
217-
# AIOKafka is spamming our logs, disable it for errors and warnings
218-
logging.getLogger('aiokafka.cluster').setLevel(logging.CRITICAL)
219-
kafka_admin = ExtendedAIOKafkaAdminClient(**rp.kafka_settings.kafka_params)
220-
await kafka_admin.start()
221-
222-
# flake8: noqa: SC100
223-
# workers.append(ModelVersionTopicDeletionWorker(kafka_admin))
224-
225202
# Adding ee workers
226203
if with_ee:
227204
workers.append(ee.bgtasks.ObjectStorageIngestor(rp))
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from . import api, bgtasks, config, integrations, middlewares, notifications, resources, utils
1+
from . import api, bgtasks, config, integrations, middlewares, notifications, resources
22

33
__all__ = []

backend/deepchecks_monitoring/ee/config.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,13 @@
1818

1919
__all__ = [
2020
'Settings',
21-
'TelemetrySettings',
2221
'SlackSettings'
2322
]
2423

2524

2625
PROJECT_DIR = pathlib.Path(__file__).parent.parent.absolute()
2726

2827

29-
class TelemetrySettings(BaseDeepchecksSettings):
30-
"""Telemetry settings."""
31-
32-
instrument_telemetry: bool = False
33-
sentry_dsn: t.Optional[str] = None
34-
sentry_env: str = 'dev'
35-
36-
3728
class SlackSettings(BaseDeepchecksSettings):
3829
"""Settings for Slack."""
3930

@@ -52,8 +43,7 @@ def validate_scopes(cls, value: str): # pylint: disable=no-self-argument
5243

5344
class Settings(
5445
OpenSourceSettings,
55-
SlackSettings,
56-
TelemetrySettings,
46+
SlackSettings
5747
):
5848
"""Settings for the deepchecks_monitoring package."""
5949

backend/deepchecks_monitoring/ee/resources.py

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
from ldclient.client import LDClient
1818
from ldclient.config import Config as LDConfig
1919

20-
from deepchecks_monitoring.ee import utils
21-
from deepchecks_monitoring.ee.config import Settings, SlackSettings, TelemetrySettings
20+
from deepchecks_monitoring.ee.config import Settings, SlackSettings
2221
from deepchecks_monitoring.ee.features_control_cloud import CloudFeaturesControl
2322
from deepchecks_monitoring.ee.features_control_on_prem import OnPremFeaturesControl
2423
from deepchecks_monitoring.ee.notifications import AlertNotificator as EEAlertNotificator
@@ -42,18 +41,6 @@ class ResourcesProvider(OpenSourceResourcesProvider):
4241
def __init__(self, settings: Settings):
4342
super().__init__(settings)
4443
self._lauchdarkly_client = None
45-
self._is_telemetry_initialized = False
46-
47-
@property
48-
def telemetry_settings(self) -> TelemetrySettings:
49-
"""Get the telemetry settings."""
50-
if not isinstance(self._settings, TelemetrySettings):
51-
raise AssertionError(
52-
"Provided settings instance type is not a subclass of "
53-
"the 'TelemetrySettings', you need to provide instance "
54-
"of 'TelemetrySettings' to the 'ResourcesProvider' constructor"
55-
)
56-
return self._settings
5744

5845
@property
5946
def slack_settings(self) -> SlackSettings:
@@ -110,35 +97,10 @@ def parallel_check_executors_pool(self) -> "ActorPool | None":
11097
if parallel_check_executor_flag:
11198
return super().parallel_check_executors_pool
11299

113-
def initialize_telemetry_collectors(
114-
self,
115-
*targets,
116-
traces_sample_rate: float = 0.6,
117-
):
118-
"""Initialize telemetry."""
119-
settings = self.telemetry_settings
120-
121-
if settings.sentry_dsn and not self._is_telemetry_initialized:
122-
import sentry_sdk # pylint: disable=import-outside-toplevel
123-
124-
sentry_sdk.init(
125-
dsn=settings.sentry_dsn,
126-
traces_sample_rate=traces_sample_rate,
127-
environment=settings.sentry_env,
128-
before_send_transaction=utils.sentry.sentry_send_hook
129-
)
130-
131-
self._is_telemetry_initialized = True
132-
133-
if self._is_telemetry_initialized:
134-
for it in targets:
135-
utils.telemetry.collect_telemetry(it)
136-
137100
def get_client_configuration(self) -> dict:
138101
if self.settings.is_cloud:
139102
settings = cast(Settings, self.settings)
140103
return {
141-
"sentryDsn": settings.sentry_dsn,
142104
"lauchdarklySdkKey": settings.lauchdarkly_sdk_key,
143105
"environment": settings.enviroment,
144106
"mixpanel_id": settings.mixpanel_id,

backend/deepchecks_monitoring/ee/utils/__init__.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

backend/deepchecks_monitoring/ee/utils/sentry.py

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)