The open-source AIOps and alert management platform
This report presents the forensic synthetic code analysis of keephq/keep, a Python project with 12,052 GitHub stars. SynthScan v2.0 examined 245,344 lines of code across 1738 source files, recording 2904 pattern matches distributed across 25 syntactic categories. The overall adjusted score of 16.5 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2904 distinct pattern matches across 25 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/workflowmanager/workflowstore.py | 55 | def get_workflow_execution_with_logs( | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 198 | def get_all_workflows_with_last_execution( | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 265 | def _get_workflows_from_directory( | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 518 | def _read_workflow_from_stream(self, stream) -> dict: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 539 | def get_random_workflow_templates( | CODE |
| LOW⚡ | keep/workflowmanager/workflowscheduler.py | 710 | def _finish_workflow_execution( | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 115 | def _handle_interval_workflows(self): | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 284 | def handle_manual_event_workflow( | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 355 | def _get_unique_execution_number(self, fingerprint=None, workflow_id=None): | CODE |
| LOW | keep/rulesengine/rulesengine.py | 361 | def _process_event_for_history_based_rule( | CODE |
| LOW | keep/iohandler/iohandler.py | 506 | def _encode_single_quotes_in_double_quotes(self, s): | CODE |
| LOW | keep/iohandler/iohandler.py | 576 | def _render_template_with_context( | CODE |
| LOW | keep/identitymanager/identitymanagerfactory.py | 143 | def _backward_compatible_get_identity_manager( | CODE |
| LOW | keep/identitymanager/identitymanager.py | 217 | def get_user_permission_on_resource_type( | CODE |
| LOW | keep/providers/providers_factory.py | 43 | def get_method_parameters_safe(raw_params: list[str]) -> list[str]: | CODE |
| LOW | keep/providers/providers_factory.py | 145 | def get_provider_required_config(provider_type: str) -> dict: | CODE |
| LOW | keep/providers/providers_factory.py | 656 | def get_default_deduplication_rules() -> list[DeduplicationRuleDto]: | CODE |
| LOW | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 433 | def _extract_project_key_from_board_name(self, board_name: str): | CODE |
| LOW | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 495 | def _extract_issue_key_from_issue_id(self, issue_id: str): | CODE |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 916 | def _get_specific_incident_with_incident_key(self, incident_key: str): # Query Incident via incident_key (dedup_key) | CODE |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 939 | def __get_all_incidents_or_alerts(self, incident_id: str = None, limit: int = 100): | CODE |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 662 | def _is_legacy_alerting_enabled(self) -> bool: | CODE |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 733 | def _setup_legacy_alerting_webhook( | CODE |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 1514 | def query_datasource_for_topology(self): | CODE |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 1577 | def __extract_schema_value_pair(results, query: str): | CODE |
| LOW | keep/providers/amazonsqs_provider/amazonsqs_provider.py | 75 | def get_client_id_from_caller(self): | CODE |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 107 | def __test_connection_via_rest_api(self): | CODE |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 523 | def __rollout_restart_deploymentconfig(self, name, namespace): | CODE |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 436 | def add_incident_timeline_note(self, incident_id: str, note: str): | CODE |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 1442 | def __get_service_deps_endpoint(api_client) -> Endpoint: | CODE |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 1564 | def _translate_metric_query_to_span_query( | CODE |
| LOW | keep/providers/ilert_provider/ilert_provider.py | 243 | def __create_or_update_incident( | CODE |
| LOW | keep/providers/splunk_provider/splunk_provider.py | 92 | def __debug_fetch_users_response(self): | CODE |
| LOW | keep/providers/gitlab_provider/gitlab_provider.py | 137 | def __build_params_from_kwargs(self, kwargs: dict): | CODE |
| LOW | keep/providers/newrelic_provider/newrelic_provider.py | 129 | def __make_add_webhook_destination_query(self, url: str, name: str) -> dict: | CODE |
| LOW | keep/providers/newrelic_provider/newrelic_provider.py | 150 | def __make_delete_webhook_destination_query(self, destination_id: str): | CODE |
| LOW | keep/providers/newrelic_provider/newrelic_provider.py | 510 | def __get_webhook_destination_id_by_name_and_url( | STRING |
| LOW | keep/providers/newrelic_provider/newrelic_provider.py | 546 | def __add_webhook_destination(self, name: str, url: str) -> str | None: | STRING |
| LOW | keep/providers/newrelic_provider/newrelic_provider.py | 560 | def __get_channel_id_by_destination_and_name(self, destination_id: str, name: str): | STRING |
| LOW | keep/providers/newrelic_provider/newrelic_provider.py | 659 | def __get_workflow_by_name_and_channel( | STRING |
| LOW | keep/providers/posthog_provider/posthog_provider.py | 147 | def get_session_recording_domains( | CODE |
| LOW | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 97 | def test_api_server_with_hyphen(self): | CODE |
| LOW | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 119 | def test_list_git_repositories(self): | CODE |
| LOW | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 262 | def test_get_fluxcd_resources(self): | CODE |
| LOW | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 326 | def test_no_kubernetes_cluster(self): | CODE |
| LOW | keep/providers/fluxcd_provider/fluxcd_provider.py | 783 | def __get_alerts_from_resource( | CODE |
| LOW | …p/providers/statuscake_provider/statuscake_provider.py | 274 | def __get_heartbeat_alerts_dto(self) -> list[AlertDto]: | CODE |
| LOW | …p/providers/statuscake_provider/statuscake_provider.py | 292 | def __get_pagespeed_alerts_dto(self) -> list[AlertDto]: | CODE |
| LOW | …providers/appdynamics_provider/appdynamics_provider.py | 255 | def __create_http_response_template(self, keep_api_url: str, api_key: str): | CODE |
| LOW | keep/providers/jira_provider/jira_provider.py | 277 | def __get_available_transitions(self, issue_id: str): | CODE |
| LOW | keep/providers/jira_provider/jira_provider.py | 509 | def _extract_project_key_from_board_name(self, board_name: str): | CODE |
| LOW | keep/providers/jira_provider/jira_provider.py | 533 | def _extract_issue_key_from_issue_id(self, issue_id: str): | CODE |
| LOW | …p/providers/quickchart_provider/quickchart_provider.py | 125 | def __get_total_alerts_gaugae(self, counter: int): | CODE |
| LOW | keep/providers/elastic_provider/elastic_provider.py | 76 | def check_api_key_or_username_password(cls, values): | CODE |
| LOW | keep/providers/elastic_provider/elastic_provider.py | 205 | def get_neccessary_config_keys(): | CODE |
| LOW | keep/providers/kibana_provider/kibana_provider.py | 552 | def format_alert_from_watcher(event: dict) -> AlertDto | list[AlertDto]: | CODE |
| LOW | …grafana_incident_provider/grafana_incident_provider.py | 512 | def _update_incident_event_time( | CODE |
| LOW | …grafana_incident_provider/grafana_incident_provider.py | 601 | def _update_incident_severity( | CODE |
| LOW | keep/providers/kafka_provider/kafka_provider.py | 75 | def get_client_id_from_caller(self): | CODE |
| LOW | keep/providers/sumologic_provider/sumologic_provider.py | 238 | def __update_existing_connection(self, connection_id: str, connection_payload): | CODE |
| 927 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | keep/workflowmanager/workflowstore.py | 689 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 117 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 296 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 449 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 508 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 578 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 640 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowstore.py | 677 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 87 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 114 | except Exception as ex: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 281 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 352 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 390 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 414 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 568 | except Exception as e: | STRING |
| LOW | keep/workflowmanager/workflowmanager.py | 700 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 760 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowmanager.py | 777 | except Exception as e: | CODE |
| MEDIUM | keep/workflowmanager/workflowmanager.py | 99 | def _get_workflow_from_store(self, tenant_id, workflow_model): | CODE |
| LOW | keep/workflowmanager/workflow.py | 137 | except Exception as e: | CODE |
| LOW⚡ | keep/workflowmanager/workflowscheduler.py | 684 | except Exception: | CODE |
| LOW⚡ | keep/workflowmanager/workflowscheduler.py | 694 | except Exception: | CODE |
| LOW⚡ | keep/workflowmanager/workflowscheduler.py | 704 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 60 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 64 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 125 | except Exception as ex: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 155 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 231 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 322 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 458 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 572 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 613 | except Exception as e: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 665 | except Exception: | CODE |
| LOW | keep/workflowmanager/workflowscheduler.py | 760 | except Exception as e: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 101 | except Exception: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 506 | except Exception: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 544 | except Exception: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 547 | except Exception: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 562 | except Exception: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 736 | except Exception: | CODE |
| LOW | keep/rulesengine/rulesengine.py | 746 | except Exception: | CODE |
| LOW | keep/iohandler/iohandler.py | 182 | except Exception: | CODE |
| LOW | keep/iohandler/iohandler.py | 243 | except Exception as e: | CODE |
| LOW | keep/iohandler/iohandler.py | 282 | except Exception as e: | CODE |
| LOW | keep/iohandler/iohandler.py | 431 | except Exception as e: | CODE |
| LOW | keep/iohandler/iohandler.py | 442 | except Exception: | CODE |
| LOW | keep/iohandler/iohandler.py | 647 | except Exception: | CODE |
| LOW | keep/identitymanager/authverifierbase.py | 174 | except Exception: | CODE |
| LOW | keep/identitymanager/authverifierbase.py | 191 | except Exception: | CODE |
| LOW | keep/identitymanager/authverifierbase.py | 309 | except Exception: | CODE |
| LOW | keep/identitymanager/authverifierbase.py | 386 | except Exception: | CODE |
| LOW | …anager/identity_managers/noauth/noauth_authverifier.py | 37 | except Exception: | CODE |
| LOW | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 65 | except Exception: | CODE |
| LOW | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 70 | except Exception: | CODE |
| LOW | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 156 | except Exception: | CODE |
| LOW | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 170 | except Exception: | CODE |
| LOW | …er/identity_managers/onelogin/onelogin_authverifier.py | 126 | except Exception: | CODE |
| LOW | …er/identity_managers/onelogin/onelogin_authverifier.py | 138 | except Exception: | CODE |
| LOW | …er/identity_managers/onelogin/onelogin_authverifier.py | 159 | except Exception as e: | CODE |
| LOW | …itymanager/identity_managers/okta/okta_authverifier.py | 98 | except Exception as e: | CODE |
| 783 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | keep/workflowmanager/workflowscheduler.py | 688 | for future in list(self.futures): # Create a copy of futures set | CODE |
| MEDIUM | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 104 | # Define the priority order of roles | COMMENT |
| MEDIUM | …er/identity_managers/onelogin/onelogin_authverifier.py | 74 | # Define the priority order of roles | COMMENT |
| MEDIUM | keep/providers/cilium_provider/cilium_provider.py | 144 | # Create a request for the last 1000 flows | COMMENT |
| MEDIUM | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 169 | # This class is part of an EXPERIMENTAL API. | COMMENT |
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 714 | # The following code is tolerant to missing data. | COMMENT |
| MEDIUM | keep/providers/datadog_provider/datadog_provider.py | 1156 | # Create the alert DTO | COMMENT |
| MEDIUM | keep/providers/telegram_provider/telegram_provider.py | 224 | # Create a new event loop for this thread | COMMENT |
| MEDIUM | keep/providers/bigquery_provider/bigquery_provider.py | 156 | # Create the provider | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 17 | # Create a mock kubernetes module | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 81 | # Create the provider with mocked dependencies | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 330 | # Create a provider with no Kubernetes client | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 367 | # Create a provider with a mocked Kubernetes client | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 390 | # Create a provider with a mocked Kubernetes client | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 405 | # Create a new provider instance for the second part of the test | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/test_fluxcd_provider.py | 412 | # Create a mock for the AppsV1Api | COMMENT |
| MEDIUM⚡ | keep/providers/fluxcd_provider/fluxcd_provider.py | 882 | # Create an Apps V1 API client | COMMENT |
| MEDIUM⚡ | keep/providers/fluxcd_provider/fluxcd_provider.py | 892 | # Create a mock AppsV1Api for testing | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/fluxcd_provider.py | 319 | # Create a temporary file with the kubeconfig content | COMMENT |
| MEDIUM | keep/providers/eks_provider/eks_provider.py | 642 | # Create a botocore session with our credentials | COMMENT |
| MEDIUM | keep/providers/opsgenie_provider/opsgenie_provider.py | 292 | # Create an incident | COMMENT |
| MEDIUM | keep/providers/wazuh_provider/custom-keep.py | 1 | # This file is not intended to be executed on the Keep side. | COMMENT |
| MEDIUM | keep/providers/auth0_provider/auth0_provider.py | 137 | # Create the provider | COMMENT |
| MEDIUM | keep/providers/sumologic_provider/sumologic_provider.py | 383 | # Creating a sumo logic connection | COMMENT |
| MEDIUM | …crosoft-planner-provider/microsoft-planner-provider.py | 133 | # Create a new task in the given plan | COMMENT |
| MEDIUM | keep/providers/keep_provider/keep_provider.py | 701 | # Create the workflow | COMMENT |
| MEDIUM | keep/secretmanager/gcpsecretmanager.py | 35 | # Create the secret if it does not exist | COMMENT |
| MEDIUM | keep/cli/cli.py | 379 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 599 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 655 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 694 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 870 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 1079 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 1361 | # Create a new table | COMMENT |
| MEDIUM | keep/cli/cli.py | 1534 | # Define the FastAPI app running logic here | COMMENT |
| MEDIUM | keep/topologies/topologies_service.py | 451 | """This function is used for creating services manually. services.is_manual=True""" | STRING |
| MEDIUM | keep/api/logging.py | 242 | # Create a new logger specifically for this adapter | COMMENT |
| MEDIUM | keep/api/config.py | 48 | """This function is called by the gunicorn server when it starts""" | STRING |
| MEDIUM | keep/api/arq_worker.py | 91 | # Create a new context that includes both the arq ctx and any other parameters | COMMENT |
| MEDIUM | keep/api/tasks/process_event_task.py | 699 | # Create a session to be used across the processing task | COMMENT |
| MEDIUM | keep/api/bl/ai_suggestion_bl.py | 327 | # Create the incident | COMMENT |
| MEDIUM | keep/api/core/db.py | 621 | # Create a new workflow | COMMENT |
| MEDIUM | keep/api/core/db.py | 1585 | # Create the query | COMMENT |
| MEDIUM | keep/api/core/db.py | 1693 | # Create the query | COMMENT |
| MEDIUM | keep/api/core/db.py | 1919 | # Create the query | COMMENT |
| MEDIUM | keep/api/core/db.py | 2784 | # Create a dictionary with deduplication stats for each rule | COMMENT |
| MEDIUM | keep/api/core/db.py | 2854 | # Create a dictionary from the results | COMMENT |
| MEDIUM | keep/api/core/db.py | 3027 | # Create a complete list of timestamps within the specified range | COMMENT |
| MEDIUM | keep/api/core/db.py | 5849 | # Create a mapping of incident_id to enrichment | COMMENT |
| MEDIUM | keep/api/core/db.py | 5606 | # Create the query using SQLModel's select | STRING |
| MEDIUM | keep/api/core/db_on_start.py | 118 | # Create the default api key for the default user | COMMENT |
| MEDIUM | keep/api/core/db_utils.py | 80 | # Create a new MySQL connection with the obtained access token | COMMENT |
| MEDIUM | keep/api/models/db/incident.py | 236 | # Create a temporary session to get the next running number | COMMENT |
| MEDIUM | keep/api/models/db/alert.py | 131 | # Define a one-to-one relationship to AlertEnrichment using alert_fingerprint | COMMENT |
| MEDIUM | keep/api/routes/settings.py | 175 | # Create an HTML test email | COMMENT |
| MEDIUM⚡ | keep/api/routes/workflows.py | 695 | # Create the workflow | COMMENT |
| MEDIUM | keep/api/routes/workflows.py | 625 | # Create the workflow | COMMENT |
| MEDIUM⚡ | tests/test_counting.py | 27 | # Create a current alert | COMMENT |
| MEDIUM⚡ | tests/test_counting.py | 35 | # Create a previous alert with an existing firing counter | COMMENT |
| MEDIUM⚡ | tests/test_counting.py | 53 | # Create an acknowledged alert | COMMENT |
| 132 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …anager/identity_managers/noauth/noauth_authverifier.py | 0 | handles authentication and authorization for single tenant mode | STRING |
| HIGH | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 0 | handles authentication and authorization for single tenant mode | STRING |
| HIGH | …dentitymanager/identity_managers/db/db_authverifier.py | 0 | handles authentication and authorization for single tenant mode | STRING |
| HIGH | keep/providers/zendesk_provider/zendesk_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …p/providers/salesforce_provider/salesforce_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/cilium_provider/cilium_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …p/providers/servicenow_provider/servicenow_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/mock_provider/mock_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …p/providers/mattermost_provider/mattermost_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/pagerduty_provider/pagerduty_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/python_provider/python_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/splunk_provider/splunk_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/gitlab_provider/gitlab_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/teams_provider/teams_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/telegram_provider/telegram_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/posthog_provider/posthog_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/signl4_provider/signl4_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …github_workflows_provider/github_workflows_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/jira_provider/jira_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/resend_provider/resend_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/netxms_provider/netxms_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/linear_provider/linear_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/flashduty_provider/flashduty_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/vectordev_provider/vectordev_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/opsgenie_provider/opsgenie_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/slack_provider/slack_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/squadcast_provider/squadcast_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/discord_provider/discord_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/sendgrid_provider/sendgrid_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/pushover_provider/pushover_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …s/gitlabpipelines_provider/gitlabpipelines_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/zenduty_provider/zenduty_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/trello_provider/trello_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/bash_provider/bash_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/airflow_provider/airflow_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/redmine_provider/redmine_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | …providers/google_chat_provider/google_chat_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/twilio_provider/twilio_provider.py | 0 | no need to dispose of anything, so just do nothing. | STRING |
| HIGH | keep/providers/cilium_provider/cilium_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | …p/providers/servicenow_provider/servicenow_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | keep/providers/pagertree_provider/pagertree_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | keep/providers/mysql_provider/mysql_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | …p/providers/clickhouse_provider/clickhouse_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | keep/providers/squadcast_provider/squadcast_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | keep/providers/databend_provider/databend_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | keep/providers/postgres_provider/postgres_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | keep/providers/mongodb_provider/mongodb_provider.py | 0 | validates that the user has the required scopes to use the provider. | STRING |
| HIGH | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 0 | client and server classes corresponding to protobuf-defined services. | STRING |
| HIGH | …providers/cilium_provider/grpc/relay/relay_pb2_grpc.py | 0 | client and server classes corresponding to protobuf-defined services. | STRING |
| HIGH | …p/providers/cilium_provider/grpc/flow/flow_pb2_grpc.py | 0 | client and server classes corresponding to protobuf-defined services. | STRING |
| HIGH | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 0 | if _version_not_supported: raise runtimeerror( f"the grpc package installed is at version {grpc_version}," + " but the g | STRING |
| HIGH | …providers/cilium_provider/grpc/relay/relay_pb2_grpc.py | 0 | if _version_not_supported: raise runtimeerror( f"the grpc package installed is at version {grpc_version}," + " but the g | STRING |
| HIGH | …p/providers/cilium_provider/grpc/flow/flow_pb2_grpc.py | 0 | if _version_not_supported: raise runtimeerror( f"the grpc package installed is at version {grpc_version}," + " but the g | STRING |
| HIGH | …s/azuremonitoring_provider/azuremonitoring_provider.py | 0 | validates required configuration for prometheus's provider. | STRING |
| HIGH | …p/providers/prometheus_provider/prometheus_provider.py | 0 | validates required configuration for prometheus's provider. | STRING |
| HIGH | keep/providers/netdata_provider/netdata_provider.py | 0 | validates required configuration for prometheus's provider. | STRING |
| HIGH | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 0 | validate that the provider has the required scopes. | STRING |
| HIGH | keep/providers/pagerduty_provider/pagerduty_provider.py | 0 | validate that the provider has the required scopes. | STRING |
| HIGH | keep/providers/gitlab_provider/gitlab_provider.py | 0 | validate that the provider has the required scopes. | STRING |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/workflowmanager/workflowstore.py | 342 | CODE | |
| LOW | keep/workflowmanager/workflowstore.py | 584 | CODE | |
| LOW | keep/workflowmanager/workflowmanager.py | 180 | CODE | |
| LOW | keep/workflowmanager/workflowmanager.py | 287 | CODE | |
| LOW | keep/workflowmanager/workflowscheduler.py | 408 | CODE | |
| LOW | keep/workflowmanager/workflowscheduler.py | 710 | CODE | |
| LOW | keep/rulesengine/rulesengine.py | 73 | CODE | |
| LOW | keep/rulesengine/rulesengine.py | 249 | CODE | |
| LOW | keep/rulesengine/rulesengine.py | 460 | CODE | |
| LOW | keep/rulesengine/rulesengine.py | 680 | CODE | |
| LOW | keep/iohandler/iohandler.py | 118 | CODE | |
| LOW | keep/iohandler/iohandler.py | 189 | CODE | |
| LOW | keep/iohandler/iohandler.py | 293 | CODE | |
| LOW | keep/iohandler/iohandler.py | 506 | CODE | |
| LOW | keep/iohandler/iohandler.py | 525 | CODE | |
| LOW | keep/iohandler/iohandler.py | 295 | CODE | |
| LOW | keep/identitymanager/rbac.py | 79 | CODE | |
| LOW | keep/identitymanager/identitymanager.py | 232 | CODE | |
| LOW | keep/identitymanager/authverifierbase.py | 239 | CODE | |
| LOW | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 45 | CODE | |
| LOW | …er/identity_managers/onelogin/onelogin_authverifier.py | 46 | CODE | |
| LOW | keep/providers/providers_factory.py | 253 | CODE | |
| LOW | keep/providers/providers_factory.py | 479 | CODE | |
| LOW | keep/providers/providers_service.py | 55 | CODE | |
| LOW | keep/providers/providers_service.py | 475 | CODE | |
| LOW | keep/providers/cilium_provider/cilium_provider.py | 125 | CODE | |
| LOW | …p/providers/servicenow_provider/servicenow_provider.py | 340 | CODE | |
| LOW | …p/providers/servicenow_provider/servicenow_provider.py | 971 | CODE | |
| LOW | …p/providers/servicenow_provider/servicenow_provider.py | 982 | CODE | |
| LOW | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 433 | CODE | |
| LOW | keep/providers/graylog_provider/graylog_provider.py | 549 | CODE | |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 315 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 445 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 678 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 733 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 843 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 893 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 1100 | CODE | |
| LOW | keep/providers/zoom_chat_provider/zoom_chat_provider.py | 207 | CODE | |
| LOW | keep/providers/aks_provider/aks_provider.py | 129 | CODE | |
| LOW | keep/providers/amazonsqs_provider/amazonsqs_provider.py | 315 | CODE | |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 181 | CODE | |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 217 | CODE | |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 326 | CODE | |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 453 | CODE | |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 789 | CODE | |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 1015 | CODE | |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 1211 | CODE | |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 1317 | CODE | |
| LOW | keep/providers/python_provider/python_provider.py | 25 | CODE | |
| LOW | …p/providers/uptimekuma_provider/uptimekuma_provider.py | 110 | CODE | |
| LOW | keep/providers/ilert_provider/ilert_provider.py | 107 | CODE | |
| LOW | …p/providers/cloudwatch_provider/cloudwatch_provider.py | 399 | CODE | |
| LOW | …p/providers/cloudwatch_provider/cloudwatch_provider.py | 492 | CODE | |
| LOW | …oviders/victorialogs_provider/victorialogs_provider.py | 196 | CODE | |
| LOW | keep/providers/splunk_provider/splunk_provider.py | 109 | CODE | |
| LOW | keep/providers/teams_provider/teams_provider.py | 55 | CODE | |
| LOW | keep/providers/telegram_provider/telegram_provider.py | 55 | CODE | |
| LOW | …ers/grafana_oncall_provider/grafana_oncall_provider.py | 83 | CODE | |
| LOW | …p/providers/incidentio_provider/incidentio_provider.py | 196 | CODE | |
| 158 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | keep/workflowmanager/workflowstore.py | 519 | Parse a workflow from an IO stream. Args: stream (IOStream): The stream to read from | STRING |
| HIGH | keep/identitymanager/identitymanagerfactory.py | 87 | Load and instantiate a manager class based on the specified type and class. Args: manager_ | STRING |
| HIGH | keep/identitymanager/authverifierbase.py | 107 | Main entry point for authentication and authorization. Args: request (Request): The incomi | STRING |
| HIGH | keep/identitymanager/authverifierbase.py | 151 | Authenticate the request using either token, API key, or HTTP basic auth. Args: request (R | STRING |
| HIGH | keep/identitymanager/authverifierbase.py | 245 | Extract the API key from various sources in the request. Args: request (Request): The inco | STRING |
| HIGH | keep/identitymanager/authverifierbase.py | 340 | Verify the API key and return an authenticated entity. Args: request (Request): The incomi | STRING |
| HIGH | keep/identitymanager/authverifierbase.py | 454 | Verify the bearer token and return an authenticated entity. Args: token (str): The bearer | STRING |
| HIGH | keep/providers/gke_provider/gke_provider.py | 498 | Query GKE cluster resources. Args: command_type: Type of query to execute **kwargs: Add | STRING |
| HIGH | keep/providers/eks_provider/eks_provider.py | 383 | Check if pod has shell access and return appropriate shell. Args: pod: The Kubernetes pod | STRING |
| HIGH | keep/providers/sentry_provider/sentry_provider.py | 433 | Get all issues for a project Args: project_slug (str): project slug Raises: | STRING |
| HIGH | keep/providers/kibana_provider/kibana_provider.py | 142 | Parse the raw body from various input types into a dictionary. Args: raw_body: Can be byte | STRING |
| HIGH | keep/providers/kibana_provider/kibana_provider.py | 264 | Make a request to Kibana. Adds the API key to the headers. Args: method (POST|GET|PUT|DEL | STRING |
| HIGH | keep/providers/auth0_provider/auth0_provider.py | 65 | Query Auth0 logs. Args: log_type (str): The log type: https://auth0.com/docs/deploy-monito | STRING |
| HIGH | keep/providers/base/base_provider.py | 414 | Format an incoming alert. Args: event (dict): The raw provider event payload. Rai | STRING |
| HIGH | keep/providers/base/base_provider.py | 649 | Setup a webhook for the provider. Args: tenant_id (str): _description_ keep_ap | STRING |
| HIGH | keep/providers/base/base_provider.py | 943 | Setup a webhook for the provider. Args: tenant_id (str): _description_ keep_ap | STRING |
| HIGH | keep/secretmanager/awssecretmanager.py | 145 | Reads a secret from AWS Secrets Manager. Args: secret_name (str): The name of the secret. | STRING |
| HIGH | keep/parser/parser.py | 29 | Support both CLI and API workflows Args: workflow (dict): _description_ Raises: | STRING |
| HIGH | keep/parser/parser.py | 769 | Translate {{ <provider_id>.<config_id> }} to a provider id Args: provider_type (str): _des | STRING |
| HIGH | keep/parser/parser.py | 797 | Parse provider config. If the provider config is a dict, return it as is. If the provid | STRING |
| HIGH | keep/conditions/threshold_condition.py | 16 | Checks if this is a multithreshold condition. Args: compare_to (str): for single threshold could be | STRING |
| HIGH | keep/api/core/db.py | 2970 | Calculate the distribution of incidents created over time for a specific tenant. Args: tenant_id (str) | STRING |
| HIGH | keep/api/core/db.py | 3100 | Calculate the distribution of WorkflowExecutions started over time, combined across all workflows for a specific te | STRING |
| HIGH | keep/api/core/db.py | 3178 | Calculate the distribution of incidents created over time for a specific tenant. Args: tenant_id (str) | STRING |
| HIGH | keep/api/core/db.py | 3252 | Calculate the Mean Time to Resolve (MTTR) for incidents over time for a specific tenant. Args: tenant_ | STRING |
| HIGH | keep/api/core/cel_to_sql/sql_providers/base.py | 109 | Converts a CEL (Common Expression Language) expression to an SQL string. Args: cel (str): T | STRING |
| HIGH | keep/api/alert_deduplicator/alert_deduplicator.py | 525 | Updates an existing deduplication rule or creates a new one if the rule is a default rule. Args: | STRING |
| HIGH | keep/api/alert_deduplicator/alert_deduplicator.py | 580 | Deletes a deduplication rule by its ID. Args: rule_id (str): The ID of the deduplication ru | STRING |
| HIGH | keep/api/routes/pusher.py | 20 | Authenticate a user to a private channel Args: request (Request): The request object tenant_id | STRING |
| HIGH | keep/api/routes/workflows.py | 808 | Update a workflow Args: workflow_id (str): The workflow ID request (Request): The FastAPI Requ | STRING |
| HIGH | keep/api/routes/workflows.py | 1159 | Toggle the enabled/disabled state of a workflow Args: workflow_id (str): The workflow ID authe | STRING |
| HIGH | keep/functions/__init__.py | 505 | Check if the given time or current time is between start_hour and end_hour and falls on a business day Arg | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | keep/throttles/one_until_resolved_throttle.py | 34 | # if the last time the alert were triggered it was in resolved status, return false | COMMENT |
| HIGH | keep/rulesengine/rulesengine.py | 476 | # Shahar: rules such as "(source != null)" causing an exception: | COMMENT |
| HIGH | keep/api/core/db.py | 33 | null, | CODE |
| HIGH | keep/api/core/db.py | 3941 | timeframe (int|null): Return incidents only for the last <N> days | STRING |
| HIGH | keep/api/core/cel_to_sql/sql_providers/postgresql.py | 160 | return f"({prop}::jsonb @> '[null]' OR {prop} IS NULL OR jsonb_array_length({prop}::jsonb) = 0)" | CODE |
| HIGH | keep/api/core/cel_to_sql/sql_providers/mysql.py | 180 | return f"(JSON_CONTAINS({prop}, '[null]') OR {prop} IS NULL OR JSON_LENGTH({prop}) = 0)" | CODE |
| HIGH | keep/api/routes/rules.py | 103 | # params can be {} for example on '(( source is not null ))' | COMMENT |
| HIGH | keep/api/routes/rules.py | 218 | ): # params can be {} for example on '(( source is not null ))' | CODE |
| HIGH | tests/test_workflows.py | 610 | python script.py && rm script.py | CODE |
| HIGH⚡ | tests/test_provisioning.py | 318 | "KEEP_DASHBOARDS": '[{"dashboard_name":"Initial Dashboard","dashboard_config":{"layout":[{"i":"w-17282235035 | CODE |
| HIGH⚡ | tests/test_provisioning.py | 333 | '[{"dashboard_name":"New Dashboard","dashboard_config":{"layout":[{"i":"w-1728223503578","x":0,"y":0,"w":3,"h":3 | CODE |
| HIGH | tests/test_provisioning.py | 283 | "KEEP_DASHBOARDS": '[{"dashboard_name":"My Dashboard","dashboard_config":{"layout":[{"i":"w-1728223503577"," | CODE |
| HIGH⚡ | tests/test_search_alerts.py | 1656 | ("(incident.is_visible==false || incident.id==null)", 2), | CODE |
| HIGH⚡ | tests/test_search_alerts.py | 1656 | ("(incident.is_visible==false || incident.id==null)", 2), | CODE |
| HIGH | tests/test_search_alerts.py | 630 | "sql": "(assigned is null)", | CODE |
| HIGH | tests/test_search_alerts.py | 633 | cel_query="(assigned == null)", | CODE |
| HIGH | tests/test_search_alerts.py | 688 | cel_query="((metrics.requests > 100) && (metrics.errors.timeout > 15 || metrics.errors.server < 1))", | CODE |
| HIGH | tests/test_search_alerts.py | 1508 | by alerts without incidents, incident.id==null, | STRING |
| HIGH | tests/test_search_alerts.py | 1600 | the filter will show 1 alert if it is == null, (without incidents alive) | STRING |
| HIGH | tests/test_search_alerts.py | 1805 | cel_query='((responseTimes[0] < 200 || responseTimes[1] > 200) && status == "resolved")', | STRING |
| HIGH | tests/test_search_alerts.py | 1883 | search_query = 'event.value.listValue.values[0].numberValue == 100 && event.value.listValue.values[1].stringValue == | STRING |
| HIGH⚡ | tests/test_workflow_cel_filter.py | 363 | "metrics.cpu_usage > 90 && metrics.memory_usage >= 80", | CODE |
| HIGH | tests/test_iohandler.py | 239 | "context_line": " error && captureException(error, { extra: { test } });", | CODE |
| HIGH | tests/test_iohandler.py | 444 | expected_output = "Pod status report:\nPod name: pod1 || Namespace: default || Status: Running\nPod name: pod2 || Na | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 2 | print("=== Starting Environment Policy Evaluation ==="); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 11 | print("Evaluating policy for user ID: " + identity.getId()); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 14 | print("Requested resource: " + resource.getName()); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 22 | print("Requested scopes: " + scopeNames.join(", ")); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 26 | print("Client ID: " + contextAttributes.getValue("kc.client.id").asString(0)); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 27 | print( | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 31 | print( | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 37 | print("Checking resource attributes..."); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 39 | print("Resource attributes type: " + typeof resourceAttributes); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 44 | print("Env attribute found: " + (envAttribute !== null)); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 47 | print("Env attribute value: " + envAttribute); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 49 | print("Has dev environment: " + hasDevEnv); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 52 | print("Environment check passed: env=dev found in resource attributes"); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 60 | print("Environment check failed: env value is not 'dev'"); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 68 | print("No env attribute found"); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 73 | print("Error checking attributes: " + e.message); | CODE |
| HIGH⚡ | …ascript_providers/keep-abac-policy/keep-abac-policy.js | 81 | print("=== Environment Policy Evaluation Complete ==="); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/providers/cilium_provider/cilium_provider.py | 252 | # Check if this source service belongs to any applications | COMMENT |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 173 | # Check if the current epoch time (in seconds) has passed the expiration time | COMMENT |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 700 | # Check if notification already exists | COMMENT |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 765 | # Check if notification channel exists | COMMENT |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 306 | # Check if this is a legacy alert based on structure | STRING |
| LOW | keep/providers/amazonsqs_provider/amazonsqs_provider.py | 304 | # Check if status_value is a valid member of AlertStatus | COMMENT |
| LOW | keep/providers/openshift_provider/openshift_provider.py | 564 | # Check if the pod exists | COMMENT |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 996 | # Check if there are more pages | COMMENT |
| LOW | …p/providers/cloudwatch_provider/cloudwatch_provider.py | 689 | # Set StateChangeTime to current time | COMMENT |
| LOW | keep/providers/bigquery_provider/bigquery_provider.py | 175 | # Print the results | STRING |
| LOW | …p/providers/kubernetes_provider/kubernetes_provider.py | 778 | # Check if the pod exists | COMMENT |
| LOW⚡ | keep/providers/fluxcd_provider/fluxcd_provider.py | 884 | # Check if client is available (it might be None in tests) | COMMENT |
| LOW | keep/providers/fluxcd_provider/fluxcd_provider.py | 401 | # Check if the GitRepository CRD exists | COMMENT |
| LOW | keep/providers/fluxcd_provider/fluxcd_provider.py | 434 | # Check if we have a Kubernetes client | COMMENT |
| LOW | keep/providers/fluxcd_provider/fluxcd_provider.py | 438 | # Check if Flux CD is installed | COMMENT |
| LOW | keep/providers/fluxcd_provider/fluxcd_provider.py | 1218 | # Check if it depends on a HelmChart | COMMENT |
| LOW | keep/providers/elastic_provider/elastic_provider.py | 169 | # Check if the connection was successful | COMMENT |
| LOW | keep/providers/kibana_provider/kibana_provider.py | 157 | ): # Check if it's FormData | CODE |
| LOW | keep/providers/kibana_provider/kibana_provider.py | 662 | # Check if this is the new webhook format | COMMENT |
| LOW | keep/providers/keep_provider/keep_provider.py | 266 | # Check if should transition to FIRING | COMMENT |
| LOW | keep/providers/keep_provider/keep_provider.py | 875 | # Check if the value might contain a ternary expression | COMMENT |
| LOW | keep/secretmanager/awssecretmanager.py | 60 | # Check if secret exists by trying to describe it | COMMENT |
| LOW | keep/topologies/topologies_service.py | 389 | # Check if an application with the same name already exists for the tenant | COMMENT |
| LOW | keep/topologies/topology_processor.py | 290 | # Check if incident should be resolved | COMMENT |
| LOW | keep/topologies/topology_processor.py | 373 | # Assign alerts to incident | COMMENT |
| LOW | keep/api/arq_worker_gunicorn.py | 171 | # Check if heartbeat is too old | COMMENT |
| LOW | keep/api/consts.py | 36 | # Set ARQ_TASK_POOL_TO_EXECUTE to "none", "all", "basic_processing" or "ai" | COMMENT |
| LOW⚡ | keep/api/tasks/process_event_task.py | 811 | # Check if the last function matches the pattern | COMMENT |
| LOW | keep/api/bl/enrichments_bl.py | 358 | # Check if the alert has any of the attributes defined in matchers | COMMENT |
| LOW | keep/api/bl/dismissal_expiry_bl.py | 92 | # Check if it's expired (current time > dismissedUntil) | COMMENT |
| LOW | keep/api/core/demo_mode.py | 249 | # Check if any service does not have an id | COMMENT |
| LOW | keep/api/models/alert_audit.py | 49 | # Check if the current event is similar to the previous event | COMMENT |
| LOW | keep/api/alert_deduplicator/alert_deduplicator.py | 71 | # Check if the hash is already in the database. | COMMENT |
| LOW | keep/api/routes/provider_images.py | 40 | # Check if image already exists | COMMENT |
| LOW | keep/api/routes/providers.py | 694 | # Check if method exists | COMMENT |
| LOW | keep/functions/__init__.py | 567 | # Check if it's a business day | COMMENT |
| LOW | keep/functions/__init__.py | 574 | # Check if hour is between start_hour and end_hour | COMMENT |
| LOW⚡ | tests/conftest.py | 168 | # Check if the connection is established | COMMENT |
| LOW | tests/test_enrichments.py | 245 | # Check if the alert's service is now updated to "new_service" | COMMENT |
| LOW | tests/test_enrichments.py | 188 | assert enriched_event == mock_alert_dto # Check if event is unchanged | CODE |
| LOW | tests/test_workflow_execution.py | 922 | # # Check if the workflow execution was successful | COMMENT |
| LOW | tests/test_workflow_execution.py | 315 | # Check if the workflow execution was successful | STRING |
| LOW | tests/test_workflow_execution.py | 319 | # Verify if the correct tier action was triggered | STRING |
| LOW | tests/test_workflow_execution.py | 488 | # Check if the workflow execution was successful | STRING |
| LOW | tests/test_workflow_execution.py | 492 | # Verify if the correct action was triggered | STRING |
| LOW | tests/test_workflow_execution.py | 599 | # Check if the workflow execution was successful | STRING |
| LOW | tests/test_workflow_execution.py | 603 | # Verify if the correct tier action was triggered | STRING |
| LOW | tests/test_workflow_execution.py | 1156 | # Check if the actions were triggered as expected | STRING |
| LOW | tests/test_workflow_execution.py | 1328 | # Check if the actions were triggered as expected | STRING |
| LOW⚡ | tests/test_workflow_cel_filter.py | 81 | # Check if the workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 94 | # Check if no new workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 112 | # Check if the workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 125 | # Check if no new workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 143 | # Check if the workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 156 | # Check if no new workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 176 | # Check if the workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 191 | # Check if no new workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 234 | # Check if no new workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 297 | # Check if the workflow was scheduled to run | COMMENT |
| LOW⚡ | tests/test_workflow_cel_filter.py | 310 | # Check if no new workflow was scheduled to run | COMMENT |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/providers/cilium_provider/grpc/observer_pb2.py | 28 | CODE | |
| LOW | keep/providers/cilium_provider/grpc/observer_pb2.py | 29 | CODE | |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 20 | CODE | |
| LOW | …s/grafana_provider/grafana_alert_format_description.py | 1 | CODE | |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 21 | CODE | |
| LOW | keep/api/core/db.py | 67 | CODE | |
| LOW | keep/api/core/db.py | 68 | CODE | |
| LOW | keep/api/core/db.py | 69 | CODE | |
| LOW | keep/api/core/db.py | 70 | CODE | |
| LOW | keep/api/core/db.py | 71 | CODE | |
| LOW | keep/api/core/db.py | 72 | CODE | |
| LOW | keep/api/core/db.py | 73 | CODE | |
| LOW | keep/api/core/db.py | 74 | CODE | |
| LOW | keep/api/core/db.py | 75 | CODE | |
| LOW | keep/api/core/db.py | 76 | CODE | |
| LOW | keep/api/core/db.py | 77 | CODE | |
| LOW | keep/api/core/db.py | 78 | CODE | |
| LOW | keep/api/core/db.py | 79 | CODE | |
| LOW | keep/api/core/db.py | 80 | CODE | |
| LOW | keep/api/core/db.py | 81 | CODE | |
| LOW | keep/api/core/db.py | 82 | CODE | |
| LOW | keep/api/core/db_on_start.py | 27 | CODE | |
| LOW | keep/api/core/db_on_start.py | 28 | CODE | |
| LOW | keep/api/core/db_on_start.py | 29 | CODE | |
| LOW | keep/api/core/db_on_start.py | 30 | CODE | |
| LOW | keep/api/core/db_on_start.py | 31 | CODE | |
| LOW | keep/api/core/db_on_start.py | 32 | CODE | |
| LOW | keep/api/core/db_on_start.py | 33 | CODE | |
| LOW | keep/api/core/db_on_start.py | 34 | CODE | |
| LOW | keep/api/core/db_on_start.py | 35 | CODE | |
| LOW | keep/api/core/db_on_start.py | 36 | CODE | |
| LOW | keep/api/core/tracer.py | 3 | CODE | |
| LOW | keep/api/core/tracer.py | 6 | CODE | |
| LOW | keep/api/core/tracer.py | 7 | CODE | |
| LOW | keep/api/utils/pagination.py | 7 | CODE | |
| LOW | keep/api/models/incident.py | 19 | CODE | |
| LOW | keep/functions/cyaml.py | 2 | CODE | |
| LOW | tests/test_auto_resolve_workflow.py | 5 | CODE | |
| LOW | tests/test_workflow_api.py | 6 | CODE | |
| LOW | tests/test_search_alerts_configuration.py | 10 | CODE | |
| LOW | tests/conftest.py | 24 | CODE | |
| LOW | tests/conftest.py | 28 | CODE | |
| LOW | tests/conftest.py | 30 | CODE | |
| LOW | tests/conftest.py | 31 | CODE | |
| LOW | tests/conftest.py | 32 | CODE | |
| LOW | tests/conftest.py | 33 | CODE | |
| LOW | tests/conftest.py | 34 | CODE | |
| LOW | tests/test_enrichments.py | 20 | CODE | |
| LOW | tests/test_enrichments.py | 21 | CODE | |
| LOW | tests/test_enrichments.py | 21 | CODE | |
| LOW | tests/test_rules_engine.py | 7 | CODE | |
| LOW | tests/test_rules_engine.py | 24 | CODE | |
| LOW | tests/test_metrics.py | 7 | CODE | |
| LOW | tests/test_provisioning.py | 10 | CODE | |
| LOW | tests/test_provisioning.py | 10 | CODE | |
| LOW | tests/test_auth.py | 7 | CODE | |
| LOW | tests/test_incidents.py | 1 | CODE | |
| LOW | tests/test_incidents.py | 17 | CODE | |
| LOW | tests/test_incidents.py | 32 | CODE | |
| LOW | tests/test_incidents.py | 49 | CODE | |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/server_jobs_bg.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/identitymanager/identitymanagerfactory.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | …identity_managers/onelogin/onelogin_identitymanager.py | 100 | def update_group(self, group_name: str, members: list[str], roles: list[str]) -> None: | CODE |
| LOW | …er/identity_managers/onelogin/onelogin_authverifier.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | …itymanager/identity_managers/okta/okta_authverifier.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | …manager/identity_managers/okta/okta_identitymanager.py | 103 | def update_group(self, group_name: str, members: list[str], roles: list[str]) -> None: | CODE |
| LOW | keep/providers/providers_factory.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/providers_service.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/datadog_provider/datadog_provider.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ers/grafana_oncall_provider/grafana_oncall_provider.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/fluxcd_provider/__init__.py | 8 | __all__ = ["FluxcdProvider"] | CODE |
| LOW | keep/providers/zabbix_provider/zabbix_provider.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/dynatrace_provider/dynatrace_provider.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/mailgun_provider/mailgun_provider.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/checkmk_provider/checkmk_provider.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/vectordev_provider/vectordev_provider.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/providers/sendgrid_provider/sendgrid_provider.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/cli/cli.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/topologies/topologies_service.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/actions/actions_factory.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/arq_worker_gunicorn.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/logging.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/config.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/middlewares.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/api.py | 77 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/api.py | 379 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/arq_worker.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/tasks/process_watcher_task.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/tasks/process_topology_task.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/tasks/process_incident_task.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/tasks/process_event_task.py | 79 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/bl/mapping_rules_provisioning.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/bl/incident_reports.py | 77 | logger = logging.getLogger(__name__) | STRING |
| LOW | keep/api/core/alerts.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/db.py | 86 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/db_on_start.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/report_uptime.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/db_utils.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/facets.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/incidents.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/dependencies.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/demo_mode.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/limiter.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/core/cel_to_sql/cel_ast_converter.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/utils/enrichment_helpers.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/utils/tenant_utils.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/utils/email_utils.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/models/ai_external.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/models/alert.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/models/db/helpers.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/models/db/alert.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …alert_deduplicator/deduplication_rules_provisioning.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/routes/provider_images.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/routes/alerts.py | 83 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/routes/ai.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/routes/actions.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/routes/rules.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | keep/api/routes/preset.py | 45 | logger = logging.getLogger(__name__) | CODE |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | keep/workflowmanager/workflowstore.py | 695 | # Step 2: Process providers and add them to DTO | COMMENT |
| LOW | keep/workflowmanager/workflowstore.py | 660 | # Step 1: Load workflow YAML and handle potential parsing errors more thoroughly | COMMENT |
| LOW | keep/workflowmanager/workflowstore.py | 733 | # Step 3: Extract triggers from workflow | COMMENT |
| LOW | keep/rulesengine/rulesengine.py | 119 | # #If the alert recover its previous status, we need to check if there are any alerts with the s | COMMENT |
| LOW | keep/iohandler/iohandler.py | 336 | # 0 == False, so we need to check if the value is not False explicitly | COMMENT |
| LOW⚡ | keep/providers/grafana_provider/grafana_provider.py | 925 | # Step 2: Extract relevant datasources (Prometheus, Loki, Mimir) | COMMENT |
| LOW⚡ | keep/providers/grafana_provider/grafana_provider.py | 948 | # Step 3: Query alerts from each datasource | COMMENT |
| LOW⚡ | keep/providers/grafana_provider/grafana_provider.py | 1012 | # Step 4: Process and format the alerts | COMMENT |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 903 | # Step 1: Get all datasources | COMMENT |
| LOW | keep/providers/keep_provider/keep_provider.py | 506 | # if we need to check if_condition, handle the condition | COMMENT |
| LOW | keep/parser/parser.py | 275 | # before we can use cache, we need to check if new providers are added or deleted | COMMENT |
| LOW | keep/api/utils/enrichment_helpers.py | 32 | # they are kept as a list of timestamps and we need to check if the | COMMENT |
| LOW | keep/api/utils/enrichment_helpers.py | 100 | # if there is previous alert, we need to check if it has firing time | COMMENT |
| LOW | keep/api/utils/enrichment_helpers.py | 113 | # if there is no previous alert, we need to check if the alert is firing | COMMENT |
| LOW | keep/api/models/db/rule.py | 28 | # 2. scale - when event arrives, we need to check if the rule is applicable to the event | COMMENT |
| LOW | keep-ui/features/filter/facet.tsx | 99 | /** This variable stores placeholders for facet options that are selected, but don't exist. | COMMENT |
| LOW | keep-ui/utils/apiUrl.ts | 3 | // we need to check if we are on vercel or not | COMMENT |
| LOW⚡ | tests/test_provisioning.py | 131 | # Step 2: Change environment variables (simulating new provisioning) | COMMENT |
| LOW⚡ | tests/test_provisioning.py | 238 | # Step 2: Change environment variables (simulating new provisioning) | COMMENT |
| LOW⚡ | tests/test_provisioning.py | 330 | # Step 2: Change environment variables (simulating new provisioning) | COMMENT |
| LOW | tests/test_provisioning.py | 267 | # Step 3: Verify if the new provider is provisioned after reloading | COMMENT |
| LOW | tests/test_provisioning.py | 355 | # Step 3: Verify if the new dashboard is provisioned after reloading | COMMENT |
| LOW | tests/test_provider_reprovisioning.py | 34 | # Step 1: Verify initial provider is provisioned | COMMENT |
| LOW | tests/test_provider_reprovisioning.py | 51 | # Step 2: Change environment variables to update provider configuration and mock reload | COMMENT |
| LOW | tests/test_provider_reprovisioning.py | 74 | # Step 3: Verify the provider was updated with new configuration | COMMENT |
| LOW⚡ | tests/test_dismissal_expiry_bug.py | 676 | # Step 1: Create an alert that is NOT dismissed initially | COMMENT |
| LOW⚡ | tests/test_dismissal_expiry_bug.py | 1070 | # Step 3: Wait until the dismissedUntil timestamp has passed (as described in issue) | COMMENT |
| LOW⚡ | tests/test_dismissal_expiry_bug.py | 1074 | # Step 4: Before running watcher - verify the bug exists | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 116 | # Step 1: Create an alert that is NOT dismissed initially | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 149 | # Step 2: Dismiss the alert with a future dismissUntil timestamp (1 hour from now) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 187 | # Step 3: Time travel to AFTER the dismissUntil timestamp has expired | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 263 | # Step 1: Create alerts | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 295 | # Step 2: Dismiss the "temporary" alert for 2 hours | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 333 | # Step 3: Time travel to after dismissal expires | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 709 | # Step 2: Dismiss the alert with a future dismissUntil timestamp (1 hour from now) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 747 | # Step 3: Time travel to AFTER the dismissUntil timestamp has expired | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 863 | # Step 1: Create an alert | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 895 | # Step 2: Dismiss the alert with status and disposable fields (like a maintenance workflow would) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 921 | # Step 3: Time travel past dismissal expiry and run watcher | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 999 | # Step 1: Send an alert with dismissed: false (as described in issue) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1033 | # Step 2: Apply a workflow that enriches the alert (as described in issue) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1164 | # Step 1: Create an alert that is NOT dismissed initially | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1196 | # Step 2: Dismiss the alert with a future dismissUntil timestamp (1 hour from now) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1218 | # Step 3: Time travel to AFTER the dismissUntil timestamp has expired | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 182 | # Step 1: Start infrastructure | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 186 | # Step 2: Wait for Keep API to be healthy | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 191 | # Step 3: Simulate alert | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 200 | # Step 4: Check Redis keys | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 329 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 331 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 458 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 460 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 656 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …p/providers/servicenow_provider/servicenow_provider.py | 658 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 22 | // ─── Mock navigation ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 30 | // ─── Mock data hooks ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 44 | // ─── Mock UI utilities ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 51 | // ─── Mock all heavy child components ──────────────────────────────────────── | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 104 | // ─── Helpers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 135 | // ─── Global setup ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …)/alerts/[id]/ui/__tests__/alerts-fingerprint.test.tsx | 167 | // ─── Tests ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_assignee_facet_filter.py | 61 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_assignee_facet_filter.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_assignee_facet_filter.py | 6 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_assignee_facet_filter.py | 8 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_assignee_facet_filter.py | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_assignee_facet_filter.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_iohandler.py | 1028 | # ── fn.* Mustache lambda helper tests ──────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_iohandler.py | 1078 | # ── Security regression tests (RCE via eval) ───────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | keep/workflowmanager/workflowstore.py | 695 | # Step 2: Process providers and add them to DTO | COMMENT |
| LOW | keep/workflowmanager/workflowstore.py | 660 | # Step 1: Load workflow YAML and handle potential parsing errors more thoroughly | COMMENT |
| LOW | keep/workflowmanager/workflowstore.py | 733 | # Step 3: Extract triggers from workflow | COMMENT |
| LOW⚡ | keep/providers/grafana_provider/grafana_provider.py | 925 | # Step 2: Extract relevant datasources (Prometheus, Loki, Mimir) | COMMENT |
| LOW⚡ | keep/providers/grafana_provider/grafana_provider.py | 948 | # Step 3: Query alerts from each datasource | COMMENT |
| LOW⚡ | keep/providers/grafana_provider/grafana_provider.py | 1012 | # Step 4: Process and format the alerts | COMMENT |
| LOW | keep/providers/grafana_provider/grafana_provider.py | 903 | # Step 1: Get all datasources | COMMENT |
| LOW⚡ | tests/test_provisioning.py | 131 | # Step 2: Change environment variables (simulating new provisioning) | COMMENT |
| LOW⚡ | tests/test_provisioning.py | 238 | # Step 2: Change environment variables (simulating new provisioning) | COMMENT |
| LOW⚡ | tests/test_provisioning.py | 330 | # Step 2: Change environment variables (simulating new provisioning) | COMMENT |
| LOW | tests/test_provisioning.py | 267 | # Step 3: Verify if the new provider is provisioned after reloading | COMMENT |
| LOW | tests/test_provisioning.py | 355 | # Step 3: Verify if the new dashboard is provisioned after reloading | COMMENT |
| LOW | tests/test_provider_reprovisioning.py | 34 | # Step 1: Verify initial provider is provisioned | COMMENT |
| LOW | tests/test_provider_reprovisioning.py | 51 | # Step 2: Change environment variables to update provider configuration and mock reload | COMMENT |
| LOW | tests/test_provider_reprovisioning.py | 74 | # Step 3: Verify the provider was updated with new configuration | COMMENT |
| LOW⚡ | tests/test_dismissal_expiry_bug.py | 676 | # Step 1: Create an alert that is NOT dismissed initially | COMMENT |
| LOW⚡ | tests/test_dismissal_expiry_bug.py | 1070 | # Step 3: Wait until the dismissedUntil timestamp has passed (as described in issue) | COMMENT |
| LOW⚡ | tests/test_dismissal_expiry_bug.py | 1074 | # Step 4: Before running watcher - verify the bug exists | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 116 | # Step 1: Create an alert that is NOT dismissed initially | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 149 | # Step 2: Dismiss the alert with a future dismissUntil timestamp (1 hour from now) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 187 | # Step 3: Time travel to AFTER the dismissUntil timestamp has expired | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 263 | # Step 1: Create alerts | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 295 | # Step 2: Dismiss the "temporary" alert for 2 hours | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 333 | # Step 3: Time travel to after dismissal expires | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 709 | # Step 2: Dismiss the alert with a future dismissUntil timestamp (1 hour from now) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 747 | # Step 3: Time travel to AFTER the dismissUntil timestamp has expired | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 863 | # Step 1: Create an alert | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 895 | # Step 2: Dismiss the alert with status and disposable fields (like a maintenance workflow would) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 921 | # Step 3: Time travel past dismissal expiry and run watcher | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 999 | # Step 1: Send an alert with dismissed: false (as described in issue) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1033 | # Step 2: Apply a workflow that enriches the alert (as described in issue) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1164 | # Step 1: Create an alert that is NOT dismissed initially | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1196 | # Step 2: Dismiss the alert with a future dismissUntil timestamp (1 hour from now) | COMMENT |
| LOW | tests/test_dismissal_expiry_bug.py | 1218 | # Step 3: Time travel to AFTER the dismissUntil timestamp has expired | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 182 | # Step 1: Start infrastructure | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 186 | # Step 2: Wait for Keep API to be healthy | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 191 | # Step 3: Simulate alert | COMMENT |
| LOW⚡ | tests/e2e_tests/test_redis_sentinel_e2e_full.py | 200 | # Step 4: Check Redis keys | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | keep/providers/openshift_provider/openshift_provider.py | 74 | self._k8s_client.api_client.rest_client.pool_manager.clear() | CODE |
| CRITICAL | keep/providers/gke_provider/gke_provider.py | 184 | self._client.api_client.rest_client.pool_manager.clear() | CODE |
| CRITICAL | keep/providers/eks_provider/eks_provider.py | 196 | self._client.api_client.rest_client.pool_manager.clear() | CODE |
| CRITICAL | keep/secretmanager/vaultsecretmanager.py | 48 | self.client.secrets.kv.v2.create_or_update_secret( | CODE |
| CRITICAL | keep/secretmanager/vaultsecretmanager.py | 57 | secret = self.client.secrets.kv.v2.read_secret_version(path=secret_name) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/providers/ilert_provider/ilert_provider.py | 427 | message="Lorem Ipsum", | STRING |
| LOW⚡ | keep/providers/teams_provider/teams_provider.py | 77 | Example: [{"id": "user-id-123", "name": "John Doe"}, {"id": "john.doe@example.com", "name": "John Doe"}] | STRING |
| LOW | keep/providers/signl4_provider/signl4_provider.py | 75 | user="John Doe", | CODE |
| LOW | keep/providers/signl4_provider/signl4_provider.py | 187 | # user="John Doe", | COMMENT |
| LOW | keep/providers/opsgenie_provider/opsgenie_provider.py | 361 | # user="John Doe", | COMMENT |
| LOW | keep/api/models/smtp.py | 27 | "username": "user@example.com", | CODE |
| LOW | keep-ui/app/(keep)/settings/settings.client.tsx | 133 | name: "John Doe", | CODE |
| LOW⚡ | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 75 | "x-forwarded-user": "John Doe", | CODE |
| LOW⚡ | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 84 | expect(user!.name).toBe("John Doe"); | CODE |
| LOW⚡ | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 93 | "x-forwarded-user": "Jane Doe", | CODE |
| LOW⚡ | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 99 | expect(user!.name).toBe("Jane Doe"); | CODE |
| LOW⚡ | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 100 | expect(user!.email).toBe("Jane Doe"); | CODE |
| LOW⚡ | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 101 | expect(user!.id).toBe("Jane Doe"); | CODE |
| LOW | keep-ui/shared/lib/__tests__/oauth2proxy-auth.test.ts | 240 | "x-forwarded-email": "user@example.com", | CODE |
| LOW | keep-ui/shared/lib/__tests__/object-utils.test.ts | 121 | "user name": "John Doe", | CODE |
| LOW | keep-ui/shared/lib/__tests__/object-utils.test.ts | 128 | expect(getNestedValue(obj, "user name")).toBe("John Doe"); | CODE |
| LOW | keep-ui/shared/api/__tests__/ApiClient.test.ts | 37 | user: { id: "1", name: "Test User", email: "test@test.com" }, | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 29 | name: "John Doe", | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 94 | name: "John Doe", | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 117 | name: "Jane Doe", | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 159 | name: "John Doe", | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 182 | "John Doe" | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 204 | name: "John Doe", | CODE |
| LOW | …gets/alerts-table/ui/__tests__/alert-assignee.test.tsx | 221 | expect(avatar).toHaveAttribute("data-name", "John Doe"); | CODE |
| LOW | tests/test_servicenow_provider.py | 52 | "assigned_to": {"display_value": "John Doe", "value": "abc123"}, | CODE |
| LOW | tests/test_servicenow_provider.py | 65 | assert result.assignee == "John Doe" | CODE |
| LOW | tests/test_teams_provider.py | 48 | mentions=[{"id": "john.doe@example.com", "name": "John Doe"}], | CODE |
| LOW | tests/test_teams_provider.py | 89 | assert entity["mentioned"]["name"] == "John Doe" | CODE |
| LOW | tests/test_teams_provider.py | 108 | {"id": "john.doe@example.com", "name": "John Doe"}, | CODE |
| LOW | tests/test_teams_provider.py | 131 | assert entity1["mentioned"]["name"] == "John Doe" | CODE |
| LOW | tests/test_teams_provider.py | 156 | mentions=[{"name": "John Doe"}], # Missing 'id' field | CODE |
| LOW | tests/test_teams_provider.py | 186 | mentions='[{"id": "john.doe@example.com", "name": "John Doe"}]', | CODE |
| LOW | tests/test_teams_provider.py | 206 | assert entity["mentioned"]["name"] == "John Doe" | CODE |
| LOW⚡ | tests/test_iohandler.py | 523 | "result": {"customer_name": "Acme Corp", "tier": "enterprise"} | CODE |
| LOW | tests/test_iohandler.py | 466 | "name": "John Doe", | CODE |
| LOW | tests/providers/jira_provider/test_jira_priority_fix.py | 21 | "email": "test@test.com", | CODE |
| LOW⚡ | docs/openapi.json | 1 | {"openapi": "3.0.2", "info": {"title": "Keep API", "description": "Rest API powering https://platform.keephq.dev and fri | CODE |
| LOW | …ples/workflows/teams-adaptive-cards-with-mentions.yaml | 24 | mentions: '[{"id": "john.doe@example.com", "name": "John Doe"}]' | CODE |
| LOW | keycloak/generate_ldap.py | 10 | "cn": "John Doe", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/workflowmanager/workflowscheduler.py | 365 | # else, just return random | COMMENT |
| LOW | keep/iohandler/iohandler.py | 253 | # and its a dict, just return the dict | COMMENT |
| LOW | …ty_managers/oauth2proxy/oauth2proxy_identitymanager.py | 38 | # Implementation or just return None | COMMENT |
| LOW | …ntity_managers/oauth2proxy/oauth2proxy_authverifier.py | 112 | # map the role if its a mapped one, or just use the role | COMMENT |
| MEDIUM | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 476 | # todo: should be more robust way but that's enough for now. note that the user can use projectKey d | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/fluxcd_provider.py | 385 | # Return None instead of raising an exception to make the provider more robust | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/fluxcd_provider.py | 1245 | # Return empty topology to make the provider more robust | COMMENT |
| MEDIUM | keep/providers/fluxcd_provider/fluxcd_provider.py | 1364 | # Return empty resources with error information to make the provider more robust | COMMENT |
| MEDIUM | keep/api/utils/tenant_utils.py | 303 | # TODO: make it more robust | COMMENT |
| LOW | keep/api/models/alert.py | 222 | # if there's no dismissUntil, return just return dismissed | COMMENT |
| LOW | keep/api/alert_deduplicator/alert_deduplicator.py | 266 | # just return a default deduplication rule with lastReceived field | COMMENT |
| LOW | keep/api/alert_deduplicator/alert_deduplicator.py | 397 | # else, just use the custom deduplication rule | COMMENT |
| MEDIUM | keep/api/routes/providers.py | 51 | # the more robust way is to try access KEEP_API_URL from another tool (such as wtfismy.com but the opposite) | COMMENT |
| MEDIUM | keep/contextmanager/contextmanager.py | 1 | # TODO - refactor context manager to support multitenancy in a more robust way | COMMENT |
| MEDIUM | …tures/presets/presets-manager/lib/eval-with-context.ts | 73 | // this pattern is far from robust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/workflowmanager/workflow.py | 23 | CODE | |
| LOW | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 176 | CODE | |
| LOW | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 206 | CODE | |
| LOW | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 236 | CODE | |
| LOW | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 266 | CODE | |
| LOW | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 296 | CODE | |
| LOW | …ep/providers/cilium_provider/grpc/observer_pb2_grpc.py | 326 | CODE | |
| LOW | …p/providers/jiraonprem_provider/jiraonprem_provider.py | 513 | CODE | |
| LOW | keep/providers/pagertree_provider/pagertree_provider.py | 207 | CODE | |
| LOW | keep/providers/pagerduty_provider/pagerduty_provider.py | 710 | CODE | |
| LOW | …oviders/grafana_loki_provider/grafana_loki_provider.py | 166 | CODE | |
| LOW | keep/providers/ilert_provider/ilert_provider.py | 316 | CODE | |
| LOW | keep/providers/ilert_provider/ilert_provider.py | 348 | CODE | |
| LOW | …oviders/victorialogs_provider/victorialogs_provider.py | 196 | CODE | |
| LOW | keep/providers/telegram_provider/telegram_provider.py | 55 | CODE | |
| LOW | keep/providers/signl4_provider/signl4_provider.py | 91 | CODE | |
| LOW | keep/providers/jira_provider/jira_provider.py | 546 | CODE | |
| LOW | keep/providers/opsgenie_provider/opsgenie_provider.py | 151 | CODE | |
| LOW | keep/providers/opsgenie_provider/opsgenie_provider.py | 254 | CODE | |
| LOW | keep/providers/slack_provider/slack_provider.py | 140 | CODE | |
| LOW | keep/providers/squadcast_provider/squadcast_provider.py | 164 | CODE | |
| LOW | …grafana_incident_provider/grafana_incident_provider.py | 279 | CODE | |
| LOW | keep/providers/webhook_provider/webhook_provider.py | 169 | CODE | |
| LOW | keep/providers/wazuh_provider/custom-keep.py | 137 | CODE | |
| LOW | keep/providers/linearb_provider/linearb_provider.py | 67 | CODE | |
| LOW | keep/providers/keep_provider/keep_provider.py | 648 | CODE | |
| LOW | keep/api/observability.py | 108 | CODE | |
| LOW | keep/api/bl/incidents_bl.py | 396 | CODE | |
| LOW | keep/api/core/db.py | 2225 | CODE | |
| LOW | keep/api/core/db.py | 3920 | CODE | |
| LOW | keep/api/core/incidents.py | 377 | CODE | |
| LOW | keep/api/core/incidents.py | 464 | CODE | |
| LOW | keep/api/core/demo_mode.py | 435 | CODE | |
| LOW | keep/api/routes/incidents.py | 129 | CODE | |
| LOW | tests/test_change_password.py | 28 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/rulesengine/rulesengine.py | 561 | return str(left_val) != str(right_val) | COMMENT |
| LOW | keep/iohandler/iohandler.py | 201 | # break the string to tokens | COMMENT |
| LOW | keep/providers/fluxcd_provider/example.yaml | 41 | # token: MY_TOKEN | COMMENT |
| LOW | …s/incidentmanager_provider/incidentmanager_provider.py | 481 | # keep_api_url="https://1064-2401-4900-1c0f-ae0f-dbba-8aae-8a51-8d29.ngrok-free.app/alerts/event/incidentmanager | COMMENT |
| LOW | keep/api/models/db/incident.py | 241 | ) | COMMENT |
| LOW | keep/contextmanager/contextmanager.py | 301 | # }, | COMMENT |
| LOW | keep-ui/next-env.d.ts | 1 | /// <reference types="next" /> | COMMENT |
| LOW | keep-ui/auth.ts | 181 | // Override profile since it uses fetch without customFetch | COMMENT |
| LOW | keep-ui/app/(keep)/rules/flatten-cel-ast.ts | 1 | // import { CelAst } from "@/utils/cel-ast"; | COMMENT |
| LOW | …ures/workflows/ai-assistant/ui/WorkflowBuilderChat.tsx | 981 | // { | COMMENT |
| LOW | …ures/workflows/ai-assistant/ui/WorkflowBuilderChat.tsx | 1001 | // description: "The parameters of the step to test", | COMMENT |
| LOW | …ures/workflows/ai-assistant/ui/WorkflowBuilderChat.tsx | 1021 | // { | COMMENT |
| LOW | tests/test_workflow_execution.py | 861 | '"deleted incident: incident"\n' | COMMENT |
| LOW | tests/test_workflow_execution.py | 881 | # ): | COMMENT |
| LOW | tests/test_workflow_execution.py | 901 | # severity="critical", | COMMENT |
| LOW | tests/test_workflow_execution.py | 921 | COMMENT | |
| LOW | tests/test_iohandler.py | 821 | expected_date = datetime.datetime( | COMMENT |
| LOW | tests/test_iohandler.py | 841 | # "duplicateReason": None, | COMMENT |
| LOW | tests/test_iohandler.py | 861 | # "dismissUntil": None, | COMMENT |
| LOW | tests/e2e_tests/test_end_to_end.py | 1 | # This file contains the end-to-end tests for Keep. | COMMENT |
| LOW | tests/e2e_tests/test_end_to_end.py | 41 | install_webhook_provider, | COMMENT |
| LOW | …tests/incidents_alerts_tests/incidents_alerts_setup.py | 321 | # url = f"{KEEP_API_URL}/incidents/{incident_id}/alerts" | COMMENT |
| LOW | …tests/incidents_alerts_tests/incidents_alerts_setup.py | 341 | # f"Failed to query alerts for incident {incident_id} after {5} attempts" | COMMENT |
| LOW | examples/workflows/openshift_pod_restart.yml | 121 | - Scaled DeploymentConfig {{ alert.deploymentconfig_name }} to {{ alert.replicas }} replicas | COMMENT |
| LOW | examples/workflows/openshift_pod_restart.yml | 141 | # "deployment_name": "web-app", | COMMENT |
| LOW | …les/workflows/openshift_monitoring_and_remediation.yml | 201 | # "name": "High CPU Usage", | COMMENT |
| LOW | …les/workflows/openshift_monitoring_and_remediation.yml | 221 | # { | COMMENT |
| LOW | examples/workflows/monday_create_pulse.yml | 21 | # Specify the column IDs and their corresponding values for the new item/pulse. | COMMENT |
| LOW | examples/workflows/webhook_example_foreach.yml | 41 | # body: | COMMENT |
| LOW | scripts/migrate_to_elastic.py | 21 | # PUT /keep-alerts-TENANT-ID | COMMENT |
| LOW | scripts/migrate_to_elastic.py | 41 | # "tags": { | COMMENT |
| LOW | .github/workflows/release-workflow-schema.yml | 101 | # | COMMENT |
| LOW | .github/workflows/release-workflow-schema.yml | 121 | # echo "branch=${{ github.ref_name }}" >> $GITHUB_OUTPUT | COMMENT |
| LOW | .github/workflows/release-workflow-schema.yml | 141 | # '. + {version: $version, "$id": $id}' \ | COMMENT |
| LOW | .github/workflows/release-workflow-schema.yml | 161 | # git config user.name "Keep Schema Bot" | COMMENT |
| LOW | .github/workflows/test-pr-ut-ui.yml | 41 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | keep/providers/signalfx_provider/signalfx_provider.py | 273 | # you must have User API access token and you can use the Org access token | COMMENT |
| MEDIUM | keep/api/routes/metrics.py | 81 | # Optional, you can add labels to exported incidents. | STRING |
| MEDIUM⚡ | docs/openapi.json | 1 | {"openapi": "3.0.2", "info": {"title": "Keep API", "description": "Rest API powering https://platform.keephq.dev and fri | CODE |
| MEDIUM⚡ | scripts/simulate_rules.py | 2 | # Written for demonstration purposes only | COMMENT |
| LOW | scripts/docs_generate_api_docs_from_openapi.sh | 6 | # Before running this script, make sure you have update the openapi.json from the backend & backend is in the latest sta | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | keep/api/routes/incidents.py | 390 | description="Whether the incident update request was generated by AI", | CODE |
| HIGH⚡ | docs/openapi.json | 1 | {"openapi": "3.0.2", "info": {"title": "Keep API", "description": "Rest API powering https://platform.keephq.dev and fri | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/workflows/slack-workflow-trigger.yml | 34 | # url: "https://api.keephq.dev/workflows/WORKFLOW_ID_TO_EXECUTE/run?alert={{alert.id}}&api_key=YOUR_AP | COMMENT |
| HIGH | examples/workflows/slack-workflow-trigger.yml | 36 | url: "https://api.keephq.dev/workflows/WORKFLOW_ID_TO_EXECUTE/run?name={{alert.name}}&api_key=YOUR_API | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | keep/api/core/cel_to_sql/properties_mapper.py | 238 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/identitymanager/rbac.py | 13 | # TODO: implement a solid RBAC mechanism (probably OPA over Keycloak) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | keep/providers/python_provider/python_provider.py | 65 | # Example usage | COMMENT |