diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index ccae56891..a4023ff21 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -186,7 +186,6 @@ jobs: docker image ls -a # - name: Run e2e tests // TODO: Uncomment when we fix e2e tests # env: - # LAUCHDARKLY_SDK_KEY: ${{ secrets.LAUCHDARKLY_SDK_KEY }} # OAUTH_CLIENT_ID: ${{ secrets.OAUTH_CLIENT_ID }} # OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }} # run: make cypress @@ -242,9 +241,9 @@ jobs: DEEPCHECKS_CI_TOKEN: ${{ secrets.DEEPCHECKS_CI_TOKEN }} DEEPCHECKS_API_TOKEN: ${{ env.DEEPCHECKS_API_TOKEN }} DEEPCHECKS_API_HOST: ${{ env.DEEPCHECKS_API_HOST }} - LAUCHDARKLY_SDK_KEY: ${{ secrets.LAUCHDARKLY_SDK_KEY }} OAUTH_CLIENT_ID: ${{ secrets.OAUTH_CLIENT_ID }} OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }} + IS_ON_PREM: 'True' run: | make env-setup make docs diff --git a/backend/deepchecks_monitoring/api/v1/global_api/users.py b/backend/deepchecks_monitoring/api/v1/global_api/users.py index f59eedead..e074ce65f 100644 --- a/backend/deepchecks_monitoring/api/v1/global_api/users.py +++ b/backend/deepchecks_monitoring/api/v1/global_api/users.py @@ -96,6 +96,9 @@ async def update_complete_details( resources_provider=ResourcesProviderDep ): """Complete user details for final login.""" + + resources_provider: "ResourcesProvider" + if body.new_organization_name is not None and body.accept_invite is True: raise BadRequest("Can't accept invitation and create new organization") diff --git a/backend/deepchecks_monitoring/api/v1/model.py b/backend/deepchecks_monitoring/api/v1/model.py index 2a1307e96..87f9be6ed 100644 --- a/backend/deepchecks_monitoring/api/v1/model.py +++ b/backend/deepchecks_monitoring/api/v1/model.py @@ -177,18 +177,17 @@ async def get_create_model( else: model_count = await session.scalar(sa.func.count(Model.id)) if model_count > 0: - if features_control.max_models != -1: - allowed_models = await features_control.get_allowed_models(session) - if allowed_models == 1: - raise PaymentRequired("Adding more than 1 model requires to set up a subscription. " - f"Set up through {resources_provider.settings.deployment_url}" - f"/workspace-settings") - if allowed_models < model_count: - raise PaymentRequired(f"Subscription currently configured for {allowed_models} models. " - f"Current model amount is {model_count}. " - "please update your subscription if you wish to add more models. " - f"Update through {resources_provider.settings.deployment_url}" - f"/workspace-settings") + allowed_models = await features_control.get_allowed_models(session) + if allowed_models == 1: + raise PaymentRequired("Adding more than 1 model requires to set up a subscription. " + f"Set up through {resources_provider.settings.deployment_url}" + f"/workspace-settings") + if allowed_models is not None and allowed_models < model_count: + raise PaymentRequired(f"Subscription currently configured for {allowed_models} models. " + f"Current model amount is {model_count}. " + "please update your subscription if you wish to add more models. " + f"Update through {resources_provider.settings.deployment_url}" + f"/workspace-settings") data = model_schema.dict(exclude_none=True) notes = [ModelNote(created_by=user.id, updated_by=user.id, **it) for it in data.pop("notes", [])] model = Model(notes=notes, created_by=user.id, updated_by=user.id, **data) diff --git a/backend/deepchecks_monitoring/config.py b/backend/deepchecks_monitoring/config.py index 2de0188b1..784b97f6a 100644 --- a/backend/deepchecks_monitoring/config.py +++ b/backend/deepchecks_monitoring/config.py @@ -157,6 +157,7 @@ class Settings( oauth_client_secret: str mixpanel_id: str | None enable_analytics: bool = True + parallel_check_executor_flag: bool = True init_local_ray_instance: str | None = None total_number_of_check_executor_actors: int = os.cpu_count() or 8 diff --git a/backend/deepchecks_monitoring/ee/config.py b/backend/deepchecks_monitoring/ee/config.py index fb772d720..7d3cce92f 100644 --- a/backend/deepchecks_monitoring/ee/config.py +++ b/backend/deepchecks_monitoring/ee/config.py @@ -49,7 +49,6 @@ class Settings( enviroment: str = 'dev' debug_mode: bool = False - lauchdarkly_sdk_key: str = '' access_audit: bool = False hotjar_sv: str = '' hotjar_id: str = '' diff --git a/backend/deepchecks_monitoring/ee/features_control_cloud.py b/backend/deepchecks_monitoring/ee/features_control_cloud.py index 16d02ad66..db2a03ee1 100644 --- a/backend/deepchecks_monitoring/ee/features_control_cloud.py +++ b/backend/deepchecks_monitoring/ee/features_control_cloud.py @@ -1,49 +1,16 @@ -from ldclient import Context -from ldclient.client import LDClient -from pydantic import BaseModel from sqlalchemy import select from deepchecks_monitoring.features_control import FeaturesControl from deepchecks_monitoring.public_models import Billing, User -class TierConfSchema(BaseModel): - """Tier configuration which is loaded from launchdarkly.""" - - custom_checks: bool = False - data_retention_months: int = 3 - max_models: int = 1 - monthly_predictions_limit: int = 500_000 - sso: bool = False - rows_per_minute: int = 500_000 - update_roles: bool = False - model_assignment: bool = False - - class CloudFeaturesControl(FeaturesControl): """Feature controls class for the cloud version.""" - def __init__(self, user: User, ld_client: LDClient, settings): + def __init__(self, user: User, settings): super().__init__(settings) self.user = user - self.ld_client = ld_client - self._max_models = None self._allowed_models = None - self._rows_per_minute = None - self._custom_checks_enabled = None - self._data_retention_months = None - self._monthly_predictions_limit = None - self._sso_enabled = None - self._signup_enabled = None - self._onboarding_enabled = None - self._update_roles = None - self._model_assignment = None - - @property - def max_models(self) -> int: - if self._max_models is None: - self._load_tier() - return self._max_models async def get_allowed_models(self, session) -> int: if self._allowed_models is None: @@ -57,27 +24,19 @@ async def get_allowed_models(self, session) -> int: @property def update_roles(self) -> bool: - if self._update_roles is None: - self._load_tier() - return self._update_roles + return True @property def model_assignment(self) -> bool: - if self._model_assignment is None: - self._load_tier() - return self._model_assignment + return True @property def signup_enabled(self) -> bool: - if self._signup_enabled is None: - self._load_tier() - return self._signup_enabled + return True @property def onboarding_enabled(self) -> bool: - if self._onboarding_enabled is None: - self._load_tier() - return self._onboarding_enabled + return True @property def slack_enabled(self) -> bool: @@ -85,57 +44,8 @@ def slack_enabled(self) -> bool: @property def rows_per_minute(self) -> int: - if self._rows_per_minute is None: - self._load_tier() - return self._rows_per_minute - - @property - def custom_checks_enabled(self) -> bool: - if self._custom_checks_enabled is None: - self._load_tier() - return self._custom_checks_enabled - - @property - def data_retention_months(self) -> int: - if self._data_retention_months is None: - self._load_tier() - return self._data_retention_months - - @property - def monthly_predictions_limit(self) -> int: - if self._monthly_predictions_limit is None: - self._load_tier() - return self._monthly_predictions_limit - - @property - def sso_enabled(self) -> bool: - if self._sso_enabled is None: - self._load_tier() - return self._sso_enabled + return 500_000 @property def multi_tenant(self) -> bool: return True - - def _load_tier(self): - context = Context.builder(self.user.email).set("email", self.user.email) - if self.user.organization: - context.set("organization_id", self.user.organization.id) - context.set("tier", self.user.organization.tier) - - ld_user = context.build() - tier_conf = self.ld_client.variation("paid-features", ld_user, default={}) - if getattr(self.user, "email_verified", False): - self._signup_enabled = self.ld_client.variation("signUpEnabled", ld_user, default=True) - else: - self._signup_enabled = False - tier_conf = TierConfSchema(**tier_conf) - self._custom_checks_enabled = tier_conf.custom_checks - self._data_retention_months = tier_conf.data_retention_months - self._max_models = tier_conf.max_models - self._monthly_predictions_limit = tier_conf.monthly_predictions_limit - self._sso_enabled = tier_conf.sso - self._rows_per_minute = tier_conf.rows_per_minute - self._update_roles = tier_conf.update_roles - self._model_assignment = tier_conf.model_assignment - self._onboarding_enabled = self.ld_client.variation("onBoardingEnabled", ld_user, default=False) diff --git a/backend/deepchecks_monitoring/ee/features_control_on_prem.py b/backend/deepchecks_monitoring/ee/features_control_on_prem.py index fa7adb6fb..c5784e662 100644 --- a/backend/deepchecks_monitoring/ee/features_control_on_prem.py +++ b/backend/deepchecks_monitoring/ee/features_control_on_prem.py @@ -6,12 +6,8 @@ class OnPremFeaturesControl(FeaturesControl): TODO: implement license check :( """ - @property - def max_models(self) -> int: - return 9999 - - async def get_allowed_models(self, session) -> int: - return 10 + async def get_allowed_models(self, session) -> None: + return None @property def update_roles(self) -> bool: @@ -37,22 +33,6 @@ def slack_enabled(self) -> bool: def rows_per_minute(self) -> int: return 500_000 - @property - def custom_checks_enabled(self) -> bool: - return False - - @property - def data_retention_months(self) -> int: - return 12 - - @property - def monthly_predictions_limit(self) -> int: - return 10_000_000 - - @property - def sso_enabled(self) -> bool: - return False - @property def multi_tenant(self) -> bool: return False diff --git a/backend/deepchecks_monitoring/ee/resources.py b/backend/deepchecks_monitoring/ee/resources.py index 3195f0e49..45ebf0e27 100644 --- a/backend/deepchecks_monitoring/ee/resources.py +++ b/backend/deepchecks_monitoring/ee/resources.py @@ -12,11 +12,6 @@ import logging from typing import TYPE_CHECKING, cast -import ldclient -from ldclient import Context -from ldclient.client import LDClient -from ldclient.config import Config as LDConfig - from deepchecks_monitoring.ee.config import Settings, SlackSettings from deepchecks_monitoring.ee.features_control_cloud import CloudFeaturesControl from deepchecks_monitoring.ee.features_control_on_prem import OnPremFeaturesControl @@ -38,10 +33,6 @@ class ResourcesProvider(OpenSourceResourcesProvider): ALERT_NOTIFICATOR_TYPE = EEAlertNotificator - def __init__(self, settings: Settings): - super().__init__(settings) - self._lauchdarkly_client = None - @property def slack_settings(self) -> SlackSettings: """Get the telemetry settings.""" @@ -60,36 +51,18 @@ def email_sender(self) -> EmailSender: self._email_sender = EmailSender(self.email_settings) return self._email_sender - @property - def lauchdarkly_client(self) -> LDClient: - """Launchdarkly client.""" - if self.settings.is_cloud is False: - raise Exception("Launchdarkly client is only available in cloud mode") - if self._lauchdarkly_client: - return self._lauchdarkly_client - ldclient.set_config(LDConfig(self.settings.lauchdarkly_sdk_key)) - self._lauchdarkly_client = ldclient.get() - return self._lauchdarkly_client - def get_features_control(self, user: User) -> FeaturesControl: """Return features control.""" - if self.settings.is_cloud: - return CloudFeaturesControl(user, self.lauchdarkly_client, self.settings) # TODO add license check - - elif self.settings.is_on_prem: + if self.settings.is_on_prem: return OnPremFeaturesControl(self.settings) + if self.settings.is_cloud: + return CloudFeaturesControl(user, self.settings) return FeaturesControl(self.settings) @property def parallel_check_executors_pool(self) -> "ActorPool | None": - if self.settings.is_cloud is False: - parallel_check_executor_flag = True - else: - parallel_check_executor_flag = self.lauchdarkly_client.variation( - "parallelCheckExecutorEnabled", - context=Context.builder("parallelCheckExecutorEnabled").build(), - default=True - ) + parallel_check_executor_flag = self.settings.parallel_check_executor_flag logging.getLogger("server").info({ "mesage": f"'parallelCheckExecutorEnabled' is set to {parallel_check_executor_flag}" @@ -101,7 +74,6 @@ def get_client_configuration(self) -> dict: if self.settings.is_cloud: settings = cast(Settings, self.settings) return { - "lauchdarklySdkKey": settings.lauchdarkly_sdk_key, "environment": settings.enviroment, "mixpanel_id": settings.mixpanel_id, "is_cloud": True, diff --git a/backend/deepchecks_monitoring/features_control.py b/backend/deepchecks_monitoring/features_control.py index 1cdc8778e..5aa43230c 100644 --- a/backend/deepchecks_monitoring/features_control.py +++ b/backend/deepchecks_monitoring/features_control.py @@ -16,14 +16,8 @@ class FeaturesSchema(BaseModel): """Schema to be returned to the client for the features control.""" - max_models: int - signup_enabled: bool slack_enabled: bool rows_per_minute: int - custom_checks_enabled: bool - data_retention_months: int - monthly_predictions_limit: int - sso_enabled: bool onboarding_enabled: bool update_roles: bool model_assignment: bool @@ -36,12 +30,7 @@ class FeaturesControl: def __init__(self, settings): self.settings = settings - @property - def max_models(self) -> int: - """Maximum number of models allowed for organization.""" - return 1 - - async def get_allowed_models(self, session) -> int: # pylint: disable=unused-argument + async def get_allowed_models(self, session) -> int | None: # pylint: disable=unused-argument """For the cloud, number of models which are allowed by subscription.""" return 1 @@ -75,26 +64,6 @@ def rows_per_minute(self) -> int: """Maximum number of rows per minute allowed for organization.""" return 500_000 - @property - def custom_checks_enabled(self) -> bool: - """Whether custom checks are enabled.""" - return False - - @property - def data_retention_months(self) -> int: - """Get number of months to keep data for.""" - return 3 - - @property - def monthly_predictions_limit(self) -> int: - """Maximum number of predictions per month allowed for organization.""" - return 500_000 - - @property - def sso_enabled(self) -> bool: - """Whether SSO is enabled.""" - return False - @property def multi_tenant(self) -> bool: """Whether multi-tenant is enabled.""" @@ -108,14 +77,9 @@ def email_enabled(self) -> bool: def get_all_features(self) -> FeaturesSchema: """Get all features for the client.""" return FeaturesSchema( - max_models=self.max_models, signup_enabled=self.signup_enabled, slack_enabled=self.slack_enabled, rows_per_minute=self.rows_per_minute, - custom_checks_enabled=self.custom_checks_enabled, - data_retention_months=self.data_retention_months, - monthly_predictions_limit=self.monthly_predictions_limit, - sso_enabled=self.sso_enabled, onboarding_enabled=self.onboarding_enabled, update_roles=self.update_roles, model_assignment=self.model_assignment, diff --git a/backend/deepchecks_monitoring/logic/data_ingestion.py b/backend/deepchecks_monitoring/logic/data_ingestion.py index 661a5f901..0a341939a 100644 --- a/backend/deepchecks_monitoring/logic/data_ingestion.py +++ b/backend/deepchecks_monitoring/logic/data_ingestion.py @@ -29,7 +29,6 @@ from sqlalchemy.orm import joinedload from deepchecks_monitoring.bgtasks.model_version_cache_invalidation import insert_model_version_cache_invalidation_task -from deepchecks_monitoring.bgtasks.model_version_topic_delete import insert_model_version_topic_delete_task from deepchecks_monitoring.logic.kafka_consumer import consume_from_kafka from deepchecks_monitoring.logic.keys import DATA_TOPIC_PREFIXES, data_topic_name_to_ids, get_data_topic_name from deepchecks_monitoring.monitoring_utils import configure_logger @@ -418,7 +417,7 @@ async def log_samples( if not topic_existed: model_version.ingestion_offset = -1 model_version.topic_end_offset = -1 - await insert_model_version_topic_delete_task(organization_id, model_version.id, entity, session) + # await insert_model_version_topic_delete_task(organization_id, model_version.id, entity, session) async with self.resources_provider.get_kafka_producer() as producer: messages = [ @@ -451,7 +450,7 @@ async def log_labels( if not topic_existed: model.ingestion_offset = -1 model.topic_end_offset = -1 - await insert_model_version_topic_delete_task(organization_id, model.id, entity, session) + # await insert_model_version_topic_delete_task(organization_id, model.id, entity, session) async with self.resources_provider.get_kafka_producer() as producer: messages = [ diff --git a/backend/deepchecks_monitoring/logic/kafka_consumer.py b/backend/deepchecks_monitoring/logic/kafka_consumer.py index 1ef64f61c..3adf598da 100644 --- a/backend/deepchecks_monitoring/logic/kafka_consumer.py +++ b/backend/deepchecks_monitoring/logic/kafka_consumer.py @@ -27,9 +27,9 @@ async def consume_from_kafka(settings: KafkaSettings, handle_func, pattern, logg enable_auto_commit=False, # Will disable autocommit auto_offset_reset="earliest", # If committed offset not found, start from beginning, max_poll_records=500, - session_timeout_ms=60 * 1000, - heartbeat_interval_ms=5 * 1000, - consumer_timeout_ms=5 * 1000, + session_timeout_ms=300 * 1000, + heartbeat_interval_ms=60 * 1000, + consumer_timeout_ms=60 * 1000, ) await consumer.start() consumer.subscribe(pattern=pattern) @@ -41,7 +41,12 @@ async def consume_from_kafka(settings: KafkaSettings, handle_func, pattern, logg to_commit = await handle_func(consumer, tp, messages) if to_commit: offset = messages[-1].offset - await consumer.commit({tp: offset + 1}) + if tp in consumer.assignment(): + await consumer.commit({tp: offset + 1}) + else: + logger.warning( + f"Partition {tp.topic} not assigned to consumer anymore. Cannot commit offsets." + ) except KafkaError as e: # pylint: disable=broad-except logger.exception(e) finally: diff --git a/backend/deepchecks_monitoring/public_models/organization.py b/backend/deepchecks_monitoring/public_models/organization.py index 50eba1dd4..24055a52d 100644 --- a/backend/deepchecks_monitoring/public_models/organization.py +++ b/backend/deepchecks_monitoring/public_models/organization.py @@ -50,7 +50,7 @@ class Organization(Base): id = sa.Column(sa.Integer, primary_key=True) name = sa.Column(sa.String(100), unique=False, nullable=False) schema_name = sa.Column(sa.String(100), unique=True, nullable=False) - tier = sa.Column(sa.Enum(OrgTier), nullable=False, default=OrgTier.FREE) + tier = sa.Column(sa.Enum(OrgTier), nullable=False, default=OrgTier.FREE) # TODO: remove tier slack_notification_levels = sa.Column( sa.ARRAY(sa.Enum(AlertSeverity)), diff --git a/backend/deepchecks_monitoring/resources.py b/backend/deepchecks_monitoring/resources.py index 5f7d14a29..1faa98e92 100644 --- a/backend/deepchecks_monitoring/resources.py +++ b/backend/deepchecks_monitoring/resources.py @@ -478,7 +478,6 @@ def get_features_control(self, user: User) -> FeaturesControl: # pylint: disabl def get_client_configuration(self) -> "dict[str, t.Any]": """Return configuration to be used in client side.""" return { - "lauchdarklySdkKey": None, "environment": None, "mixpanel_id": None, "is_cloud": False, diff --git a/backend/requirements.txt b/backend/requirements.txt index 7305a9d85..b2c7e80b4 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -21,7 +21,6 @@ nbformat>=5.4.0,<6 deepchecks@git+https://github.com/deepchecks/deepchecks.git@main redis[hiredis]~=4.6.0 pandas~=2.1.0 -launchdarkly-server-sdk~=9.1.0 pyjwt[crypto]==2.4.0 Authlib~=1.0.1 httpx~=0.24.1 diff --git a/backend/tests/api/test_organization_api.py b/backend/tests/api/test_organization_api.py index ea23a9eb9..3bb168323 100644 --- a/backend/tests/api/test_organization_api.py +++ b/backend/tests/api/test_organization_api.py @@ -118,11 +118,6 @@ def test_organization_available_features( data = response.json() assert isinstance(data, dict) - assert data["custom_checks_enabled"] is False - assert data["data_retention_months"] == 12 - assert data["max_models"] == 8 - assert data["monthly_predictions_limit"] == 10000000 - assert data["sso_enabled"] is False assert data["rows_per_minute"] == ROWS_PER_MINUTE_LIMIT diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index a023d430a..d180a54a4 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -191,21 +191,13 @@ def features_control_mock(settings): class TestsFeaturesControl(CloudFeaturesControl): """Mocked features control class for tests, replacing launchdarkly usage.""" - def _load_tier(self): - self._custom_checks_enabled = False - self._data_retention_months = 12 - self._max_models = 8 - self._monthly_predictions_limit = 10_000_000 - self._sso_enabled = False - self._signup_enabled = None - self._rows_per_minute = ROWS_PER_MINUTE_LIMIT - self._signup_enabled = True - self._onboarding_enabled = True - self._update_roles = True - self._model_assignment = True + @property + def rows_per_minute(self) -> int: + """Maximum number of rows per minute allowed for organization.""" + return ROWS_PER_MINUTE_LIMIT def mock_get_features_control(self, user): # pylint: disable=unused-argument - return TestsFeaturesControl(user, None, settings) + return TestsFeaturesControl(user, settings) return mock_get_features_control diff --git a/deploy/oss-conf.env b/deploy/oss-conf.env index a07d5d9b7..7ab87eab9 100644 --- a/deploy/oss-conf.env +++ b/deploy/oss-conf.env @@ -22,5 +22,3 @@ email_smtp_host= email_smtp_port=25 email_smtp_username= email_smtp_password= -parallel_enabled=False -IS_ON_PREM=True \ No newline at end of file diff --git a/e2e/.development.env b/e2e/.development.env index 859cc9222..d2725c5c2 100644 --- a/e2e/.development.env +++ b/e2e/.development.env @@ -1,4 +1,3 @@ -LAUCHDARKLY_SDK_KEY= oauth_url=https://deepchecks-monitoring.eu.auth0.com OAUTH_CLIENT_ID= OAUTH_CLIENT_SECRET= diff --git a/frontend/src/api/generated.ts b/frontend/src/api/generated.ts index a5ed32d43..5ac3f23a0 100644 --- a/frontend/src/api/generated.ts +++ b/frontend/src/api/generated.ts @@ -843,14 +843,9 @@ export const Frequency = { * Schema to be returned to the client for the features control. */ export interface FeaturesSchema { - max_models: number; signup_enabled: boolean; slack_enabled: boolean; rows_per_minute: number; - custom_checks_enabled: boolean; - data_retention_months: number; - monthly_predictions_limit: number; - sso_enabled: boolean; onboarding_enabled: boolean; update_roles: boolean; model_assignment: boolean; diff --git a/frontend/src/helpers/base/permissionControl.tsx b/frontend/src/helpers/base/permissionControl.tsx index 45fa77972..28d34bf3e 100644 --- a/frontend/src/helpers/base/permissionControl.tsx +++ b/frontend/src/helpers/base/permissionControl.tsx @@ -9,14 +9,9 @@ interface Dict { } export const featuresList = { - max_models: 'max_models', signup_enabled: 'signup_enabled', slack_enabled: 'slack_enabled', rows_per_minute: 'rows_per_minute', - custom_checks_enabled: 'custom_checks_enabled', - data_retention_months: 'data_retention_months', - monthly_predictions_limit: 'monthly_predictions_limit', - sso_enabled: 'sso_enabled', onboarding_enabled: 'onboarding_enabled', email_enabled: 'email_enabled' }; diff --git a/makefile b/makefile index 40df09f66..7fa02aaf1 100644 --- a/makefile +++ b/makefile @@ -318,11 +318,11 @@ external-services-setup: @sleep 2 env-setup: external-services-setup - @docker run -d --env-file $(E2E)/.development.env -e LAUCHDARKLY_SDK_KEY -e OAUTH_CLIENT_ID -e OAUTH_CLIENT_SECRET --network deepchecks -p 8000:8000 deepchecks-enterprise-testing start-test.sh + @docker run -d --env-file $(E2E)/.development.env -e IS_ON_PREM -e OAUTH_CLIENT_ID -e OAUTH_CLIENT_SECRET --network deepchecks -p 8000:8000 deepchecks-enterprise-testing start-test.sh @sleep 15 - @docker run -d --env-file $(E2E)/.development.env -e LAUCHDARKLY_SDK_KEY --network deepchecks deepchecks-enterprise-testing start-alert-scheduler.sh - @docker run -d --env-file $(E2E)/.development.env -e LAUCHDARKLY_SDK_KEY --network deepchecks deepchecks-enterprise-testing start-task-queuer.sh - @docker run -d --env-file $(E2E)/.development.env -e LAUCHDARKLY_SDK_KEY --network deepchecks deepchecks-enterprise-testing start-task-runner.sh + @docker run -d --env-file $(E2E)/.development.env --network deepchecks deepchecks-enterprise-testing start-alert-scheduler.sh + @docker run -d --env-file $(E2E)/.development.env --network deepchecks deepchecks-enterprise-testing start-task-queuer.sh + @docker run -d --env-file $(E2E)/.development.env --network deepchecks deepchecks-enterprise-testing start-task-runner.sh @sleep 10 cypress: env-setup