robusta-api 0.48.0__tar.gz → 0.49.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {robusta_api-0.48.0 → robusta_api-0.49.0}/PKG-INFO +4 -4
- {robusta_api-0.48.0 → robusta_api-0.49.0}/pyproject.toml +5 -4
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/_version.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/discovery/discovery.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/discovery/resource_names.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/discovery/top_service_resolver.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/base_params.py +5 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/cluster_status.py +3 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/env_vars.py +2 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/events.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/helm_release.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/jobs.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/namespaces.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/nodes.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/openshift_group.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/pods.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/runner_config.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/services.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/persistency/in_memory.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/actions_registry.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/base_trigger.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/playbook_utils.py +2 -2
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/trigger.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/action_requests.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/base.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/blocks.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/callbacks.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/custom_rendering.py +12 -3
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/holmes.py +5 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/schedule/model.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/google_chat/google_chat_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/incidentio/incidentio_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/mail/mail_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/mattermost/mattermost_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/msteams/msteams_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py +57 -9
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/prometheus_discovery_utils.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/robusta_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/rrm/types.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/rocketchat/rocketchat_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/servicenow/servicenow_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/sink_base.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/sink_base_params.py +2 -2
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/sink_config.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/preview/slack_sink_preview_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/slack_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/webex/webex_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/webhook/webhook_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/yamessenger/yamessenger_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/zulip/zulip_sink_params.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/custom_triggers.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/helm_releases_triggers.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/oom_killed_trigger_base.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/autogenerated/events.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/autogenerated/triggers.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/base_triggers.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/custom_crds.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/custom_models.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/prometheus/models.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/prometheus/trigger.py +27 -8
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/receiver.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/models.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/playbook_scheduler_manager_impl.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/trigger.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/model/alert_relabel_config.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/model/playbook_action.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/model/playbook_definition.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/telemetry.py +2 -2
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/documented_pydantic.py +2 -2
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/function_hashes.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/scope.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/silence_utils.py +1 -1
- {robusta_api-0.48.0 → robusta_api-0.49.0}/LICENSE +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/api/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/clients/robusta_client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/discovery/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/discovery/utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/exceptions.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/model/k8s_operation_type.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/persistency/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/persistency/scheduled_jobs_states_dal.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/common.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/container_playbook_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/crash_reporter.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/generation.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/internal/CRD_API_DOCUMENTATION.md +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/internal/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/internal/ai_integration.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/internal/crds.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/internal/discovery_events.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/job_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/node_enrichment_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/node_playbook_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/oom_killer_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/playbooks_event_handler.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/playbooks_event_handler_impl.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/pod_utils/crashloop_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/pod_utils/imagepull_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/pod_utils/pending_pod_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/pubsub/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/pubsub/event_emitter.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/pubsub/event_subscriber.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/pubsub/events_pubsub.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/consts.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/finding_subjects.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/url_helpers.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/reporting/utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/schedule/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/schedule/scheduler.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/common/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/common/channel_transformer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/common/html_tools.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/datadog/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/datadog/datadog_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/datadog/datadog_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/discord/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/discord/discord_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/discord/discord_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/file/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/file/file_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/file/file_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/file/object_traverser.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/google_chat/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/google_chat/google_chat.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/incidentio/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/incidentio/incidentio_api.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/incidentio/incidentio_client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/incidentio/incidentio_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/jira/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/jira/jira_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/jira/jira_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/kafka/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/kafka/kafka_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/kafka/kafka_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/mail/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/mail/mail_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/mattermost/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/mattermost/mattermost_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/msteams/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/msteams/msteams_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/msteams/msteams_webhook_tranformer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/opsgenie/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/opsgenie/opsgenie_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pagerduty/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pagerduty/pagerduty_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pagerduty/pagerduty_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pushover/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pushover/pushover_client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pushover/pushover_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/pushover/pushover_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/dal/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/dal/model_conversion.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/discovery_metrics.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/robusta_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/rrm/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/rrm/account_resource_fetcher.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/rrm/base_resource_manager.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/rrm/prometheus_alert_resource_manager.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/rrm/rrm.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/rocketchat/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/rocketchat/rocketchat_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/servicenow/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/servicenow/servicenow_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/sink_factory.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/preview/slack_sink_preview.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/slack_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/templates/header.j2 +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/slack/templates/template_loader.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/telegram/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/telegram/telegram_client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/telegram/telegram_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/telegram/telegram_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/timing.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/transformer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/victorops/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/victorops/victorops_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/victorops/victorops_sink_params.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/webex/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/webex/webex_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/webhook/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/webhook/webhook_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/yamessenger/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/yamessenger/yamessenger_client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/yamessenger/yamessenger_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/zulip/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/zulip/zulip_sink.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/stream/utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/container_oom_killed_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/error_event_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/job_failed_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/multi_resources_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/pod_crash_loop_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/pod_evicted_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/pod_image_pull_backoff.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/triggers/pod_oom_killed_trigger.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/argocd/argocd_client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/common/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/common/requests.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/discord/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/discord/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/git/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/git/git_repo.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/git/well_known_hosts.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/google_chat/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/google_chat/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/grafana.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/helper.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/jira/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/jira/client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/jira/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/api_client_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/autogenerated/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/autogenerated/models.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/autogenerated/v1/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/autogenerated/v1/models.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/base_event.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/model_not_found_exception.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/process_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/kubernetes/templates.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/mail/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/mail/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/mattermost/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/mattermost/client.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/mattermost/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_adaptive_card_files.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_image.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_text.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_action.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_base.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_card.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_column.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_container.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_images.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_table.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_elements/msteams_text_block.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_mark_down_fix_url.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/msteams_msg.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/msteams/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/openshift/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/openshift/token.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/prometheus/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/prometheus/utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/resource_analysis/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/resource_analysis/cpu_analyzer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/resource_analysis/memory_analyzer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/resource_analysis/node_cpu_analyzer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/resource_analysis/prometheus_analyzer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/rocketchat/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/rocketchat/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/event.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/playbook_scheduler.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/scheduled/playbook_scheduler_manager.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/servicenow/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/servicenow/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/slack/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/slack/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/webex/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/webex/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/zulip/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/integrations/zulip/sender.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/model/config.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/patch/patch.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/config_loader.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/log_init.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/main.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/not_found_exception.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/object_updater.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/process_setup.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/ssl_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/telemetry_service.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/web.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/runner/web_api.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/__init__.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/archive.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/auth_provider.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/base64_utils.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/cluster_provider_discovery.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/common.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/decorators.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/docs.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/error_codes.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/file_system_watcher.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/json_schema.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/parsing.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/rate_limiter.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/server_start.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/service_discovery.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/stack_tracer.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/task_queue.py +0 -0
- {robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/utils/time_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: robusta-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.49.0
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Arik Alon
|
|
6
6
|
Author-email: arikalon1@users.noreply.github.com
|
|
@@ -38,12 +38,11 @@ Requires-Dist: markdown2 (==2.4.13)
|
|
|
38
38
|
Requires-Dist: opsgenie-sdk (>=2.1.5,<3.0.0)
|
|
39
39
|
Requires-Dist: pillow (>=12.3.0,<13.0.0)
|
|
40
40
|
Requires-Dist: poetry-core (==1.1.0a7) ; extra == "all"
|
|
41
|
-
Requires-Dist: postgrest (==0.16.8)
|
|
42
41
|
Requires-Dist: prometheus-api-client (==0.5.4) ; extra == "all"
|
|
43
42
|
Requires-Dist: prometheus-client (>=0.12.0,<0.13.0)
|
|
44
43
|
Requires-Dist: prometrix (==0.2.11)
|
|
45
44
|
Requires-Dist: pyasn1 (>=0.6.4)
|
|
46
|
-
Requires-Dist: pydantic (>=
|
|
45
|
+
Requires-Dist: pydantic (>=2.11.7,<3.0.0)
|
|
47
46
|
Requires-Dist: pydash (==8.0.0)
|
|
48
47
|
Requires-Dist: pygal (>=3.0.0,<4.0.0)
|
|
49
48
|
Requires-Dist: pyjwt (>=2.13.0,<3.0.0)
|
|
@@ -59,7 +58,7 @@ Requires-Dist: rocketchat-api (>=1.30.0,<2.0.0)
|
|
|
59
58
|
Requires-Dist: sentry-sdk[flask] (>=2.13.0,<3.0.0) ; extra == "all"
|
|
60
59
|
Requires-Dist: setuptools (>=80.9.0,<81.0.0)
|
|
61
60
|
Requires-Dist: slack-sdk (>=3.23.0,<4.0.0)
|
|
62
|
-
Requires-Dist: supabase (==2.
|
|
61
|
+
Requires-Dist: supabase (==2.28.1) ; extra == "all"
|
|
63
62
|
Requires-Dist: tabulate (>=0.8.10,<0.9.0) ; extra == "all"
|
|
64
63
|
Requires-Dist: tenacity (>=9.1.2,<10.0.0)
|
|
65
64
|
Requires-Dist: toml (>=0.10.2,<0.11.0)
|
|
@@ -69,4 +68,5 @@ Requires-Dist: watchdog (>=2.1.0,<3.0.0) ; extra == "all"
|
|
|
69
68
|
Requires-Dist: watchgod (>=0.7,<0.8)
|
|
70
69
|
Requires-Dist: webexteamssdk (>=1.6.1,<2.0.0)
|
|
71
70
|
Requires-Dist: websocket-client (==1.3.3)
|
|
71
|
+
Requires-Dist: websockets (>=13)
|
|
72
72
|
Requires-Dist: werkzeug (>=3.1.6)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "robusta-api"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.49.0"
|
|
4
4
|
description = ""
|
|
5
5
|
authors = ["Arik Alon <arikalon1@users.noreply.github.com>"]
|
|
6
6
|
packages = [
|
|
@@ -21,13 +21,13 @@ python = ">=3.10, <3.12"
|
|
|
21
21
|
setuptools = "^80.9.0"
|
|
22
22
|
colorlog = "^5.0.1"
|
|
23
23
|
python-json-logger = "^3.0.0"
|
|
24
|
-
pydantic = "^
|
|
24
|
+
pydantic = "^2.11.7"
|
|
25
25
|
kubernetes = "^26.1.0"
|
|
26
26
|
pymsteams = "^0.1.16"
|
|
27
27
|
# Bump to fix CVE-2026-45409 / GHSA-65pc-fj4g-8rjx (Moderate, GHSA published
|
|
28
28
|
# 2026-05-19, older than 60 days): idna.encode() bypass of the CVE-2024-3651 fix
|
|
29
29
|
idna= { version = ">=3.15", optional = true }
|
|
30
|
-
supabase = "2.
|
|
30
|
+
supabase = "2.28.1"
|
|
31
31
|
tabulate = { version = "^0.8.10" }
|
|
32
32
|
slack-sdk = { version = "^3.23.0" }
|
|
33
33
|
Flask = { version = "^3.1.3", optional = true }
|
|
@@ -88,7 +88,8 @@ regex = "2024.5.15"
|
|
|
88
88
|
pyjwt = "^2.13.0"
|
|
89
89
|
urllib3 = "^2.7.0"
|
|
90
90
|
httpx = "0.27.2"
|
|
91
|
-
|
|
91
|
+
# realtime (supabase dependency) requires websockets.asyncio, added in websockets 13
|
|
92
|
+
websockets = ">=13"
|
|
92
93
|
# Pin to fix cve https://github.com/robusta-dev/robusta/security/dependabot/85
|
|
93
94
|
h2 = "^4.3.0"
|
|
94
95
|
# Pin to fix CVE-2026-30922 (transitive via google-auth)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# this is updated by .github/workflows/release.yaml
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.49.0"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Callable, List, Optional
|
|
2
2
|
|
|
3
3
|
from kubernetes import client
|
|
4
|
-
from pydantic import BaseModel
|
|
4
|
+
from pydantic.v1 import BaseModel
|
|
5
5
|
|
|
6
6
|
from robusta.integrations.kubernetes.custom_models import DeploymentConfig, Rollout
|
|
7
7
|
from robusta.utils.error_codes import ActionException, ErrorCodes
|
|
@@ -2,7 +2,7 @@ import logging
|
|
|
2
2
|
from enum import Enum, auto
|
|
3
3
|
from typing import Any, Dict, List, Optional, Union
|
|
4
4
|
|
|
5
|
-
from pydantic import BaseModel, SecretStr, validator, Field
|
|
5
|
+
from pydantic.v1 import BaseModel, SecretStr, validator, Field
|
|
6
6
|
|
|
7
7
|
from robusta.integrations import openshift
|
|
8
8
|
from robusta.utils.documented_pydantic import DocumentedModel
|
|
@@ -213,6 +213,10 @@ class HolmesChatParams(HolmesParams):
|
|
|
213
213
|
source_ref: Optional[str] = None
|
|
214
214
|
conversation_id: Optional[str] = None
|
|
215
215
|
conversation_source: Optional[str] = None
|
|
216
|
+
# URL of the surface the chat originated from (Slack thread permalink,
|
|
217
|
+
# Teams message link, platform chat/workflow-run URL). Holmes renders it
|
|
218
|
+
# into the system prompt so PRs/issues it creates link back to it.
|
|
219
|
+
conversation_link: Optional[str] = None
|
|
216
220
|
is_internal: Optional[bool] = None
|
|
217
221
|
meta: Optional[Dict[str, Any]] = None
|
|
218
222
|
|
|
@@ -144,6 +144,8 @@ RESOURCE_YAML_BLOCK_LIST = json.loads(os.environ.get("RESOURCE_YAML_BLOCK_LIST",
|
|
|
144
144
|
|
|
145
145
|
NAMESPACE_DATA_TTL = int(os.environ.get("NAMESPACE_DATA_TTL", 30 * 60)) # in seconds
|
|
146
146
|
|
|
147
|
+
NODE_IP_CACHE_TTL_SEC = int(os.environ.get("NODE_IP_CACHE_TTL_SEC", 15 * 60))
|
|
148
|
+
|
|
147
149
|
PROCESSED_ALERTS_CACHE_TTL = int(os.environ.get("PROCESSED_ALERT_CACHE_TTL", 2 * 3600))
|
|
148
150
|
PROCESSED_ALERTS_CACHE_MAX_SIZE = int(os.environ.get("PROCESSED_ALERTS_CACHE_MAX_SIZE", 100_000))
|
|
149
151
|
|
|
@@ -6,7 +6,7 @@ from dataclasses import dataclass, field
|
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from typing import Any, Dict, List, Optional, Callable
|
|
8
8
|
|
|
9
|
-
from pydantic import BaseModel
|
|
9
|
+
from pydantic.v1 import BaseModel
|
|
10
10
|
|
|
11
11
|
from robusta.core.pubsub.event_emitter import EventEmitter
|
|
12
12
|
from robusta.core.reporting.base import (
|
|
@@ -3,7 +3,7 @@ from typing import Dict, List, Optional, Union
|
|
|
3
3
|
|
|
4
4
|
from hikaru.model.rel_1_26 import Job
|
|
5
5
|
from kubernetes.client import V1Container, V1Job, V1JobSpec, V1JobStatus, V1PodSpec
|
|
6
|
-
from pydantic import BaseModel
|
|
6
|
+
from pydantic.v1 import BaseModel
|
|
7
7
|
|
|
8
8
|
from robusta.core.discovery import utils
|
|
9
9
|
from robusta.core.model.pods import ContainerResources, ResourceAttributes
|
|
@@ -5,7 +5,7 @@ from typing import Dict, List, Optional, Union
|
|
|
5
5
|
from hikaru.model.rel_1_26 import Container, ContainerState, ContainerStatus, Pod
|
|
6
6
|
from kubernetes.client.models import V1Container, V1ContainerStatus, V1PodStatus, V1Pod, V1PodSpec, V1ResourceRequirements
|
|
7
7
|
|
|
8
|
-
from pydantic import BaseModel
|
|
8
|
+
from pydantic.v1 import BaseModel
|
|
9
9
|
|
|
10
10
|
from robusta.integrations.kubernetes.api_client_utils import parse_kubernetes_datetime_to_ms
|
|
11
11
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
from typing import Dict, List, Optional, Union, cast
|
|
3
3
|
|
|
4
|
-
from pydantic import BaseModel, SecretStr, root_validator, validator
|
|
4
|
+
from pydantic.v1 import BaseModel, SecretStr, root_validator, validator
|
|
5
5
|
|
|
6
6
|
from robusta.core.playbooks.playbook_utils import get_env_replacement, replace_env_vars_values
|
|
7
7
|
from robusta.core.sinks.datadog.datadog_sink_params import DataDogSinkConfigWrapper
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
from typing import Callable, Dict, List, Optional, Tuple, Type, cast
|
|
3
3
|
|
|
4
|
-
from pydantic.main import BaseModel
|
|
4
|
+
from pydantic.v1.main import BaseModel
|
|
5
5
|
|
|
6
6
|
from robusta.core.model.events import ExecutionBaseEvent, ExecutionEventBaseParams
|
|
7
7
|
from robusta.utils.decorators import doublewrap
|
|
@@ -3,8 +3,8 @@ import os
|
|
|
3
3
|
import re
|
|
4
4
|
from typing import Dict, Optional
|
|
5
5
|
|
|
6
|
-
from pydantic.main import BaseModel
|
|
7
|
-
from pydantic.types import SecretStr
|
|
6
|
+
from pydantic.v1.main import BaseModel
|
|
7
|
+
from pydantic.v1.types import SecretStr
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def get_env_replacement(value: str) -> Optional[str]:
|
{robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py
RENAMED
|
@@ -9,7 +9,7 @@ import humanize
|
|
|
9
9
|
import pygal
|
|
10
10
|
from hikaru.model.rel_1_26 import Node
|
|
11
11
|
from prometrix import PrometheusQueryResult
|
|
12
|
-
from pydantic import BaseModel
|
|
12
|
+
from pydantic.v1 import BaseModel
|
|
13
13
|
|
|
14
14
|
from robusta.core.model.base_params import (
|
|
15
15
|
ChartValuesFormat,
|
|
@@ -9,7 +9,7 @@ from enum import Enum
|
|
|
9
9
|
from typing import Any, Dict, List, Optional, Union
|
|
10
10
|
from urllib.parse import urlencode
|
|
11
11
|
|
|
12
|
-
from pydantic.main import BaseModel
|
|
12
|
+
from pydantic.v1.main import BaseModel
|
|
13
13
|
from strenum import StrEnum
|
|
14
14
|
|
|
15
15
|
from robusta.core.discovery.top_service_resolver import TopServiceResolver
|
|
@@ -16,7 +16,7 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple
|
|
|
16
16
|
import hikaru
|
|
17
17
|
from hikaru import DiffDetail, DiffType
|
|
18
18
|
from hikaru.model.rel_1_26 import HikaruDocumentBase
|
|
19
|
-
from pydantic import BaseModel
|
|
19
|
+
from pydantic.v1 import BaseModel
|
|
20
20
|
|
|
21
21
|
from robusta.core.model.base_params import ChartValuesFormat
|
|
22
22
|
|
|
@@ -37,6 +37,15 @@ def charts_style(
|
|
|
37
37
|
opacity_hover=".9",
|
|
38
38
|
transition="400ms ease-in",
|
|
39
39
|
colors=graph_colors,
|
|
40
|
+
# pygal's own default font stack ("Consolas, Liberation Mono, Menlo, Courier,
|
|
41
|
+
# monospace") has no match in our chart-rendering image (only fonts-dejavu-core is
|
|
42
|
+
# installed there), and resvg does exact font-family matching with no fontconfig-style
|
|
43
|
+
# generic-family fallback - so with the default, resvg silently drops every
|
|
44
|
+
# title/axis/legend text element while still drawing the plotted lines. "DejaVu Sans
|
|
45
|
+
# Mono" is the font we know that package provides. Setting it here propagates to every
|
|
46
|
+
# *_font_family Style attribute (title/legend/label/tooltip/...), since pygal's
|
|
47
|
+
# Style.__init__ defaults each of those to font_family when unset.
|
|
48
|
+
font_family="DejaVu Sans Mono",
|
|
40
49
|
)
|
|
41
50
|
|
|
42
51
|
|
|
@@ -50,15 +59,15 @@ class PlotCustomCSS:
|
|
|
50
59
|
{{ id }}.title {
|
|
51
60
|
fill: #11383A;
|
|
52
61
|
}
|
|
53
|
-
|
|
62
|
+
|
|
54
63
|
{{ id }}.legends .legend text {
|
|
55
64
|
fill: #3f3f3f;
|
|
56
65
|
}
|
|
57
|
-
|
|
66
|
+
|
|
58
67
|
{{ id }}.axis.y text {
|
|
59
68
|
fill: #3f3f3f;
|
|
60
69
|
}
|
|
61
|
-
|
|
70
|
+
|
|
62
71
|
{{ id }}.axis.x text {
|
|
63
72
|
fill: #3f3f3f;
|
|
64
73
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Any, Dict, List, Optional, Union
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic.v1 import BaseModel, Field
|
|
4
4
|
|
|
5
5
|
from robusta.core.model.base_params import (
|
|
6
6
|
ConversationType,
|
|
@@ -57,6 +57,10 @@ class HolmesChatRequest(BaseModel):
|
|
|
57
57
|
source_ref: Optional[str] = None
|
|
58
58
|
conversation_id: Optional[str] = None
|
|
59
59
|
conversation_source: Optional[str] = None
|
|
60
|
+
# URL of the surface the chat originated from (Slack thread permalink,
|
|
61
|
+
# Teams message link, platform chat/workflow-run URL). Holmes renders it
|
|
62
|
+
# into the system prompt so PRs/issues it creates link back to it.
|
|
63
|
+
conversation_link: Optional[str] = None
|
|
60
64
|
is_internal: Optional[bool] = None
|
|
61
65
|
meta: Optional[Dict[str, Any]] = None
|
|
62
66
|
|
|
@@ -3,7 +3,7 @@ from typing import Optional
|
|
|
3
3
|
from urllib.parse import urlparse
|
|
4
4
|
from robusta.core.playbooks.playbook_utils import get_env_replacement
|
|
5
5
|
|
|
6
|
-
from pydantic import validator
|
|
6
|
+
from pydantic.v1 import validator
|
|
7
7
|
|
|
8
8
|
from robusta.core.sinks.sink_base_params import SinkBaseParams
|
|
9
9
|
from robusta.core.sinks.sink_config import SinkConfigBase
|
{robusta_api-0.48.0 → robusta_api-0.49.0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py
RENAMED
|
@@ -9,19 +9,21 @@ from uuid import uuid4
|
|
|
9
9
|
from cachetools import TTLCache
|
|
10
10
|
import httpx
|
|
11
11
|
import requests
|
|
12
|
-
from
|
|
12
|
+
from supabase_auth.errors import AuthRetryableError
|
|
13
13
|
from postgrest._sync.request_builder import SyncQueryRequestBuilder
|
|
14
14
|
from postgrest.base_request_builder import BaseFilterRequestBuilder, QueryArgs
|
|
15
15
|
from postgrest.exceptions import APIError as PostgrestAPIError
|
|
16
16
|
from postgrest.types import ReturnMethod
|
|
17
17
|
from postgrest.utils import sanitize_param
|
|
18
18
|
from supabase import create_client
|
|
19
|
-
from supabase.lib.client_options import ClientOptions
|
|
20
|
-
from tenacity import RetryCallState, Retrying, retry_if_exception_type, stop_after_attempt, wait_exponential
|
|
19
|
+
from supabase.lib.client_options import SyncClientOptions as ClientOptions
|
|
20
|
+
from tenacity import RetryCallState, Retrying, retry, retry_if_exception_type, stop_after_attempt, wait_exponential
|
|
21
21
|
|
|
22
22
|
from robusta.core.model.cluster_status import ClusterStatus
|
|
23
23
|
from robusta.core.exceptions import SupabaseDnsException
|
|
24
24
|
from robusta.core.model.env_vars import (
|
|
25
|
+
ROBUSTA_API_ENDPOINT,
|
|
26
|
+
RUNNER_VERSION,
|
|
25
27
|
SUPABASE_CONNECT_TIMEOUT_SECONDS,
|
|
26
28
|
SUPABASE_LOGIN_RETRIES,
|
|
27
29
|
SUPABASE_LOGIN_RETRY_BACKOFF_SEC,
|
|
@@ -78,6 +80,36 @@ def pre_select_patched(*args, **kwargs) -> QueryArgs:
|
|
|
78
80
|
supabase_request_builder.pre_select = pre_select_patched
|
|
79
81
|
|
|
80
82
|
|
|
83
|
+
KEY_CACHE = TTLCache(maxsize=1, ttl=24 * 60 * 60)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@retry(
|
|
87
|
+
stop=stop_after_attempt(3),
|
|
88
|
+
wait=wait_exponential(multiplier=1, max=4),
|
|
89
|
+
retry=retry_if_exception_type((requests.ConnectionError, requests.Timeout)),
|
|
90
|
+
reraise=True,
|
|
91
|
+
)
|
|
92
|
+
def _request_supabase_api_key(params: dict) -> Optional[str]:
|
|
93
|
+
url = f"{ROBUSTA_API_ENDPOINT}/api/config/supabase-keys"
|
|
94
|
+
response = requests.get(url, params=params, timeout=10)
|
|
95
|
+
response.raise_for_status()
|
|
96
|
+
return response.json().get("api_key")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def fetch_supabase_api_key(account_id: str, cluster: str) -> Optional[str]:
|
|
100
|
+
params = {
|
|
101
|
+
"account_id": account_id,
|
|
102
|
+
"cluster": cluster,
|
|
103
|
+
"component": "runner",
|
|
104
|
+
"component_version": RUNNER_VERSION,
|
|
105
|
+
}
|
|
106
|
+
try:
|
|
107
|
+
return _request_supabase_api_key(params)
|
|
108
|
+
except Exception as e:
|
|
109
|
+
logging.warning(f"Failed to fetch the api key from relay: {e}")
|
|
110
|
+
return None
|
|
111
|
+
|
|
112
|
+
|
|
81
113
|
class _AuthHttpClient(httpx.Client):
|
|
82
114
|
"""The httpx client we hand to Supabase's auth (GoTrue) sub-client.
|
|
83
115
|
|
|
@@ -111,12 +143,10 @@ class SupabaseDal(AccountResourceFetcher):
|
|
|
111
143
|
self.account_id = account_id
|
|
112
144
|
self.cluster = cluster_name
|
|
113
145
|
options = ClientOptions(postgrest_client_timeout=SUPABASE_TIMEOUT_SECONDS, auto_refresh_token=True)
|
|
114
|
-
self.client = create_client(url, key, options)
|
|
115
|
-
self.__apply_auth_client_timeout()
|
|
116
|
-
self.patch_postgrest_execute()
|
|
117
146
|
self.email = email
|
|
118
147
|
self.password = password
|
|
119
|
-
self.
|
|
148
|
+
self.__connect(options)
|
|
149
|
+
self.patch_postgrest_execute()
|
|
120
150
|
self.client.auth.on_auth_state_change(self.__update_token_patch)
|
|
121
151
|
self.sink_name = sink_name
|
|
122
152
|
self.persist_events = persist_events
|
|
@@ -125,6 +155,23 @@ class SupabaseDal(AccountResourceFetcher):
|
|
|
125
155
|
self.token_cache = TTLCache(maxsize=1, ttl=ttl)
|
|
126
156
|
self.lock = threading.Lock()
|
|
127
157
|
|
|
158
|
+
def __connect(self, options: ClientOptions):
|
|
159
|
+
self.options = options
|
|
160
|
+
relay_key = fetch_supabase_api_key(self.account_id, self.cluster)
|
|
161
|
+
for key in filter(None, (KEY_CACHE.pop("key", None), relay_key)):
|
|
162
|
+
try:
|
|
163
|
+
self.__login(key, options)
|
|
164
|
+
KEY_CACHE["key"] = key
|
|
165
|
+
return
|
|
166
|
+
except Exception as e:
|
|
167
|
+
logging.warning(f"Supabase login with the relay api key failed: {e}")
|
|
168
|
+
self.__login(self.key, options)
|
|
169
|
+
|
|
170
|
+
def __login(self, api_key: str, options: ClientOptions):
|
|
171
|
+
self.client = create_client(self.url, api_key, options)
|
|
172
|
+
self.__apply_auth_client_timeout()
|
|
173
|
+
self.user_id = self.sign_in()
|
|
174
|
+
|
|
128
175
|
def __apply_auth_client_timeout(self) -> None:
|
|
129
176
|
"""Give the auth (GoTrue) client the configured timeout, over HTTP/1.1.
|
|
130
177
|
|
|
@@ -182,7 +229,7 @@ class SupabaseDal(AccountResourceFetcher):
|
|
|
182
229
|
if exc.code == "PGRST301" or "expired" in message.lower():
|
|
183
230
|
# JWT expired. Sign in again and retry the query
|
|
184
231
|
logging.error("JWT token expired/invalid, signing in to Supabase again")
|
|
185
|
-
self.
|
|
232
|
+
self.__connect(self.options)
|
|
186
233
|
return self._original_execute(_self)
|
|
187
234
|
else:
|
|
188
235
|
raise
|
|
@@ -468,7 +515,8 @@ class SupabaseDal(AccountResourceFetcher):
|
|
|
468
515
|
frq: BaseFilterRequestBuilder, operator: str, criteria: str
|
|
469
516
|
) -> BaseFilterRequestBuilder:
|
|
470
517
|
key, val = sanitize_param(operator), f"{criteria}"
|
|
471
|
-
|
|
518
|
+
target = frq.request if hasattr(frq, "request") else frq
|
|
519
|
+
target.params = target.params.set(key, val)
|
|
472
520
|
|
|
473
521
|
return frq
|
|
474
522
|
|
|
@@ -5,7 +5,7 @@ import time
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
from prometrix import PrometheusFlagsConnectionError, PrometheusNotFound, VictoriaMetricsNotFound
|
|
8
|
-
from pydantic import BaseModel
|
|
8
|
+
from pydantic.v1 import BaseModel
|
|
9
9
|
|
|
10
10
|
from robusta.core.exceptions import AlertsManagerNotFound, NoAlertManagerUrlFound, NoPrometheusUrlFound
|
|
11
11
|
from robusta.core.model.base_params import PrometheusParams
|
|
@@ -4,7 +4,7 @@ from abc import abstractmethod, ABC
|
|
|
4
4
|
from collections import defaultdict
|
|
5
5
|
from typing import Any, List, Dict, Tuple, DefaultDict, Optional
|
|
6
6
|
|
|
7
|
-
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic.v1 import BaseModel, Field
|
|
8
8
|
|
|
9
9
|
from robusta.core.model.k8s_operation_type import K8sOperationType
|
|
10
10
|
from robusta.core.reporting.base import Finding
|
|
@@ -3,8 +3,8 @@ import re
|
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
4
|
from typing import Dict, List, Optional, Union
|
|
5
5
|
|
|
6
|
-
from pydantic import BaseModel, root_validator, validator
|
|
7
|
-
from pydantic.types import PositiveInt
|
|
6
|
+
from pydantic.v1 import BaseModel, root_validator, validator
|
|
7
|
+
from pydantic.v1.types import PositiveInt
|
|
8
8
|
import pytz
|
|
9
9
|
|
|
10
10
|
from robusta.core.playbooks.playbook_utils import replace_env_vars_values
|