robusta-cli 0.12.0__tar.gz → 0.12.1a0__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_cli-0.12.0 → robusta_cli-0.12.1a0}/PKG-INFO +1 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/pyproject.toml +2 -6
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/_version.py +1 -1
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/env_vars.py +1 -6
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/base.py +2 -11
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/datadog_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/discord_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/file_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/google_chat_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/jira/jira_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/kafka/kafka_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mail/mail_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mattermost/mattermost_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/msteams_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_sink_params.py +0 -5
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/robusta_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/servicenow/servicenow_sink_params.py +0 -4
- robusta_cli-0.12.1a0/src/robusta/core/sinks/sink_base.py +63 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/sink_base_params.py +1 -62
- robusta_cli-0.12.1a0/src/robusta/core/sinks/slack/slack_sink.py +15 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/slack/slack_sink_params.py +0 -8
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/victorops/victorops_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webex/webex_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/webhook_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink_params.py +0 -4
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/multi_resources_trigger.py +5 -2
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/api_client_utils.py +1 -23
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/triggers.py +9 -32
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/base_triggers.py +3 -1
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/custom_models.py +1 -1
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/slack/sender.py +10 -142
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/web.py +2 -30
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/scope.py +8 -11
- robusta_cli-0.12.0/src/robusta/core/sinks/sink_base.py +0 -185
- robusta_cli-0.12.0/src/robusta/core/sinks/slack/slack_sink.py +0 -80
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/LICENSE +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/api/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/auth.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/backend_profile.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/eula.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/integrations_cmd.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/main.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/playbooks_cmd.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/self_host.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/slack_feedback_message.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/slack_verification.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/discovery.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/resource_names.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/top_service_resolver.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/exceptions.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/base_params.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/cluster_status.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/events.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/helm_release.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/jobs.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/k8s_operation_type.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/namespaces.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/nodes.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/pods.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/runner_config.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/services.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/persistency/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/persistency/in_memory.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/persistency/scheduled_jobs_states_dal.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/actions_registry.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/base_trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/common.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/container_playbook_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/crash_reporter.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/generation.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/internal/discovery_events.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/job_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/node_playbook_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/oom_killer_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/playbook_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/playbooks_event_handler.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/playbooks_event_handler_impl.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/pod_utils/crashloop_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/pod_utils/imagepull_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/pod_utils/pending_pod_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/event_emitter.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/event_subscriber.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/events_pubsub.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/action_requests.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/blocks.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/callbacks.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/consts.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/custom_rendering.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/finding_subjects.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/schedule/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/schedule/model.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/schedule/scheduler.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/common/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/common/channel_transformer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/common/html_tools.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/datadog_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/discord_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/file_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/object_traverser.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/google_chat.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/jira/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/jira/jira_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/kafka/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/kafka/kafka_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mail/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mail/mail_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mattermost/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mattermost/mattermost_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/msteams_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pagerduty/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_client.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/dal/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/dal/model_conversion.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/discovery_metrics.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/prometheus_health_checker.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/robusta_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/account_resource_fetcher.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/base_resource_manager.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/prometheus_alert_resource_manager.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/rrm.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/types.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/rocketchat/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/servicenow/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/servicenow/servicenow_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/sink_config.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/sink_factory.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/slack/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_client.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/timing.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/transformer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/victorops/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/victorops/victorops_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webex/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webex/webex_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/webhook_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/yamessenger_client.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/zulip/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/zulip/zulip_sink.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/zulip/zulip_sink_params.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/container_oom_killed_trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/custom_triggers.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/error_event_trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/helm_releases_triggers.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/job_failed_trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/oom_killed_trigger_base.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/pod_crash_loop_trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/pod_image_pull_backoff.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/pod_oom_killed_trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/argocd/argocd_client.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/common/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/common/requests.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/discord/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/discord/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/git/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/git/git_repo.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/git/well_known_hosts.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/google_chat/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/google_chat/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/grafana.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/helper.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/jira/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/jira/client.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/jira/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/events.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/models.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/v1/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/v1/models.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/base_event.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/model_not_found_exception.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/process_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/templates.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mail/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mail/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mattermost/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mattermost/client.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mattermost/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_image.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_text.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_action.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_base.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_card.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_column.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_container.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_images.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_table.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_text_block.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_mark_down_fix_url.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_msg.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/openshift/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/openshift/token.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/models.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/receiver.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/cpu_analyzer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/memory_analyzer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/node_cpu_analyzer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/prometheus_analyzer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/rocketchat/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/rocketchat/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/event.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/models.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/playbook_scheduler.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager_impl.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/trigger.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/servicenow/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/servicenow/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/slack/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/webex/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/webex/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/zulip/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/zulip/sender.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/alert_relabel_config.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/config.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/playbook_action.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/playbook_definition.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/patch/patch.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/config_loader.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/log_init.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/main.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/not_found_exception.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/object_updater.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/process_setup.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/ssl_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/telemetry.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/telemetry_service.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/web_api.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/__init__.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/auth_provider.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/base64_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/cluster_provider_discovery.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/common.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/decorators.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/docs.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/documented_pydantic.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/error_codes.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/file_system_watcher.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/function_hashes.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/json_schema.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/parsing.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/rate_limiter.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/server_start.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/service_discovery.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/silence_utils.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/stack_tracer.py +0 -0
- {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/task_queue.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: robusta-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.1a0
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Natan Yellin
|
|
6
6
|
Author-email: aantn@users.noreply.github.com
|
|
@@ -17,8 +17,6 @@ Requires-Dist: apprise (>=1.5.0,<2.0.0)
|
|
|
17
17
|
Requires-Dist: attrs (>=23.1.0,<24.0.0)
|
|
18
18
|
Requires-Dist: better-exceptions (>=0.3.3,<0.4.0) ; extra == "all"
|
|
19
19
|
Requires-Dist: bitmath (>=1.3.3.1,<2.0.0.0)
|
|
20
|
-
Requires-Dist: boto3 (==1.28.72)
|
|
21
|
-
Requires-Dist: botocore (==1.31.72)
|
|
22
20
|
Requires-Dist: click-spinner (>=0.1.10,<0.2.0)
|
|
23
21
|
Requires-Dist: colorlog (>=5.0.1,<6.0.0)
|
|
24
22
|
Requires-Dist: croniter (>=1.3.15,<2.0.0)
|
|
@@ -30,7 +28,6 @@ Requires-Dist: dulwich (==0.20.28) ; extra == "all"
|
|
|
30
28
|
Requires-Dist: fpdf2 (>=2.7.1,<3.0.0)
|
|
31
29
|
Requires-Dist: grafana-api (>=1.0.3,<2.0.0) ; extra == "all"
|
|
32
30
|
Requires-Dist: hikaru-model-26 (>=1.1.1,<2.0.0)
|
|
33
|
-
Requires-Dist: humanize (>=3.13.1,<4.0.0)
|
|
34
31
|
Requires-Dist: jinja2 (==3.1.3)
|
|
35
32
|
Requires-Dist: kafka-python (>=2.0.2,<3.0.0) ; extra == "all"
|
|
36
33
|
Requires-Dist: kubernetes (>=26.1.0,<27.0.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "robusta-cli"
|
|
3
|
-
version = "0.12.
|
|
3
|
+
version = "0.12.1-alpha"
|
|
4
4
|
description = ""
|
|
5
5
|
authors = ["Natan Yellin <aantn@users.noreply.github.com>"]
|
|
6
6
|
packages = [
|
|
@@ -58,11 +58,6 @@ watchgod = "^0.7"
|
|
|
58
58
|
webexteamssdk = "^1.6.1"
|
|
59
59
|
bitmath = "^1.3.3.1"
|
|
60
60
|
croniter = "^1.3.15"
|
|
61
|
-
humanize = "^3.13.1"
|
|
62
|
-
|
|
63
|
-
# The following are added to speed up poetry dependency resolution
|
|
64
|
-
botocore = "1.31.72"
|
|
65
|
-
boto3 = "1.28.72"
|
|
66
61
|
|
|
67
62
|
# we're freezing a specific version here because the latest version doesn't have prebuilt wheels on pypi
|
|
68
63
|
# and therefore requires gcc to install which we'd like to avoid
|
|
@@ -93,6 +88,7 @@ sphinxcontrib-images = "^0.9.4"
|
|
|
93
88
|
jsonref = "^0.2"
|
|
94
89
|
Pillow = "^10.3.0"
|
|
95
90
|
sphinxcontrib-mermaid = "^0.7.1"
|
|
91
|
+
humanize = "^3.13.1"
|
|
96
92
|
cssselect = "^1.1.0"
|
|
97
93
|
pygal = "^3.0.0"
|
|
98
94
|
tinycss = "^0.4"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# this is updated by .github/workflows/release.yaml
|
|
2
|
-
__version__ = "0.12.
|
|
2
|
+
__version__ = "0.12.1-alpha"
|
|
@@ -100,7 +100,7 @@ RRM_PERIOD_SEC = int(os.environ.get("RRM_PERIOD_SEC", 90))
|
|
|
100
100
|
|
|
101
101
|
MAX_ALLOWED_RULES_PER_CRD_ALERT = int(os.environ.get("MAX_ALLOWED_RULES_PER_CRD_ALERT", 600))
|
|
102
102
|
|
|
103
|
-
IMAGE_REGISTRY = os.environ.get("IMAGE_REGISTRY", "
|
|
103
|
+
IMAGE_REGISTRY = os.environ.get("IMAGE_REGISTRY", "robustadev")
|
|
104
104
|
|
|
105
105
|
CLUSTER_DOMAIN = os.environ.get("CLUSTER_DOMAIN", "cluster.local")
|
|
106
106
|
|
|
@@ -113,8 +113,3 @@ RUN_AS_SUBPROCESS = load_bool("RUN_AS_SUBPROCESS", True)
|
|
|
113
113
|
ARGO_ROLLOUTS = load_bool("ARGO_ROLLOUTS", False)
|
|
114
114
|
# lowered case k8s kinds in a json array string. "[\"configmap\", \"secret\"]"
|
|
115
115
|
RESOURCE_YAML_BLOCK_LIST = json.loads(os.environ.get("RESOURCE_YAML_BLOCK_LIST", "[]"))
|
|
116
|
-
|
|
117
|
-
NAMESPACE_DATA_TTL = int(os.environ.get("NAMESPACE_DATA_TTL", 30*60)) # in seconds
|
|
118
|
-
|
|
119
|
-
PROCESSED_ALERTS_CACHE_TTL = int(os.environ.get("PROCESSED_ALERT_CACHE_TTL", 2*3600))
|
|
120
|
-
PROCESSED_ALERTS_CACHE_MAX_SIZE = int(os.environ.get("PROCESSED_ALERTS_CACHE_MAX_SIZE", 100_000))
|
|
@@ -14,7 +14,6 @@ from pydantic.main import BaseModel
|
|
|
14
14
|
from robusta.core.discovery.top_service_resolver import TopServiceResolver
|
|
15
15
|
from robusta.core.model.env_vars import ROBUSTA_UI_DOMAIN
|
|
16
16
|
from robusta.core.reporting.consts import FindingSource, FindingSubjectType, FindingType
|
|
17
|
-
from robusta.integrations.kubernetes.api_client_utils import get_namespace_labels
|
|
18
17
|
from robusta.utils.scope import BaseScopeMatcher
|
|
19
18
|
|
|
20
19
|
|
|
@@ -107,7 +106,7 @@ class EnrichmentType(Enum):
|
|
|
107
106
|
|
|
108
107
|
|
|
109
108
|
class Enrichment:
|
|
110
|
-
#
|
|
109
|
+
# These is the actual enrichment data
|
|
111
110
|
blocks: List[BaseBlock] = []
|
|
112
111
|
# General purpose rendering flags, that can be used by specific sinks
|
|
113
112
|
annotations: Dict[str, str] = {}
|
|
@@ -139,9 +138,6 @@ class FilterableScopeMatcher(BaseScopeMatcher):
|
|
|
139
138
|
def get_data(self) -> Dict:
|
|
140
139
|
return self.data
|
|
141
140
|
|
|
142
|
-
def scope_match_namespace_labels(self, attr_matcher, attr_value):
|
|
143
|
-
return self.match_labels_annotations(attr_matcher, attr_value)
|
|
144
|
-
|
|
145
141
|
|
|
146
142
|
class Filterable(ABC):
|
|
147
143
|
@property
|
|
@@ -173,12 +169,7 @@ class Filterable(ABC):
|
|
|
173
169
|
# 1. "scope" check
|
|
174
170
|
accept = True
|
|
175
171
|
if scope_requirements is not None:
|
|
176
|
-
|
|
177
|
-
try:
|
|
178
|
-
data["namespace_labels"] = get_namespace_labels(data["namespace"])
|
|
179
|
-
except KeyError:
|
|
180
|
-
data["namespace_labels"] = {}
|
|
181
|
-
matcher = FilterableScopeMatcher(data)
|
|
172
|
+
matcher = FilterableScopeMatcher(self.attribute_map)
|
|
182
173
|
if scope_requirements.exclude:
|
|
183
174
|
if matcher.scope_inc_exc_matches(scope_requirements.exclude):
|
|
184
175
|
return False
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/datadog_sink_params.py
RENAMED
|
@@ -5,10 +5,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
5
5
|
class DataDogSinkParams(SinkBaseParams):
|
|
6
6
|
api_key: str
|
|
7
7
|
|
|
8
|
-
@classmethod
|
|
9
|
-
def _get_sink_type(cls):
|
|
10
|
-
return "datadog"
|
|
11
|
-
|
|
12
8
|
|
|
13
9
|
class DataDogSinkConfigWrapper(SinkConfigBase):
|
|
14
10
|
datadog_sink: DataDogSinkParams
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/discord_sink_params.py
RENAMED
|
@@ -5,10 +5,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
5
5
|
class DiscordSinkParams(SinkBaseParams):
|
|
6
6
|
url: str
|
|
7
7
|
|
|
8
|
-
@classmethod
|
|
9
|
-
def _get_sink_type(cls):
|
|
10
|
-
return "discord"
|
|
11
|
-
|
|
12
8
|
|
|
13
9
|
class DiscordSinkConfigWrapper(SinkConfigBase):
|
|
14
10
|
discord_sink: DiscordSinkParams
|
|
@@ -7,10 +7,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
7
7
|
class FileSinkParms(SinkBaseParams):
|
|
8
8
|
file_name: str = None
|
|
9
9
|
|
|
10
|
-
@classmethod
|
|
11
|
-
def _get_sink_type(cls):
|
|
12
|
-
return "file"
|
|
13
|
-
|
|
14
10
|
|
|
15
11
|
class FileSinkConfigWrapper(SinkConfigBase):
|
|
16
12
|
file_sink: FileSinkParms
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/google_chat_params.py
RENAMED
|
@@ -7,10 +7,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
7
7
|
class GoogleChatSinkParams(SinkBaseParams):
|
|
8
8
|
webhook_url: SecretStr
|
|
9
9
|
|
|
10
|
-
@classmethod
|
|
11
|
-
def _get_sink_type(cls):
|
|
12
|
-
return "google_chat"
|
|
13
|
-
|
|
14
10
|
|
|
15
11
|
class GoogleChatSinkConfigWrapper(SinkConfigBase):
|
|
16
12
|
google_chat_sink: GoogleChatSinkParams
|
|
@@ -19,10 +19,6 @@ class JiraSinkParams(SinkBaseParams):
|
|
|
19
19
|
reopenStatusName: Optional[str] = "To Do"
|
|
20
20
|
noReopenResolution: Optional[str] = ""
|
|
21
21
|
|
|
22
|
-
@classmethod
|
|
23
|
-
def _get_sink_type(cls):
|
|
24
|
-
return "jira"
|
|
25
|
-
|
|
26
22
|
|
|
27
23
|
class JiraSinkConfigWrapper(SinkConfigBase):
|
|
28
24
|
jira_sink: JiraSinkParams
|
|
@@ -7,10 +7,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
7
7
|
class MailSinkParams(SinkBaseParams):
|
|
8
8
|
mailto: str
|
|
9
9
|
|
|
10
|
-
@classmethod
|
|
11
|
-
def _get_sink_type(cls):
|
|
12
|
-
return "mail"
|
|
13
|
-
|
|
14
10
|
@validator("mailto")
|
|
15
11
|
def validate_mailto(cls, mailto):
|
|
16
12
|
# Make sure we only handle emails and exclude other schemes provided by apprise
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/msteams_sink_params.py
RENAMED
|
@@ -5,10 +5,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
5
5
|
class MsTeamsSinkParams(SinkBaseParams):
|
|
6
6
|
webhook_url: str
|
|
7
7
|
|
|
8
|
-
@classmethod
|
|
9
|
-
def _get_sink_type(cls):
|
|
10
|
-
return "msteams"
|
|
11
|
-
|
|
12
8
|
|
|
13
9
|
class MsTeamsSinkConfigWrapper(SinkConfigBase):
|
|
14
10
|
ms_teams_sink: MsTeamsSinkParams
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py
RENAMED
|
@@ -10,10 +10,6 @@ class OpsGenieSinkParams(SinkBaseParams):
|
|
|
10
10
|
tags: List[str] = []
|
|
11
11
|
host: Optional[str] = None # NOTE: If None, the default value will be used from opsgenie_sdk
|
|
12
12
|
|
|
13
|
-
@classmethod
|
|
14
|
-
def _get_sink_type(cls):
|
|
15
|
-
return "opsgenie"
|
|
16
|
-
|
|
17
13
|
|
|
18
14
|
class OpsGenieSinkConfigWrapper(SinkConfigBase):
|
|
19
15
|
opsgenie_sink: OpsGenieSinkParams
|
|
@@ -5,10 +5,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
5
5
|
class PagerdutySinkParams(SinkBaseParams):
|
|
6
6
|
api_key: str
|
|
7
7
|
|
|
8
|
-
@classmethod
|
|
9
|
-
def _get_sink_type(cls):
|
|
10
|
-
return "pagerduty"
|
|
11
|
-
|
|
12
8
|
|
|
13
9
|
class PagerdutyConfigWrapper(SinkConfigBase):
|
|
14
10
|
pagerduty_sink: PagerdutySinkParams
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_sink_params.py
RENAMED
|
@@ -10,11 +10,6 @@ class PushoverSinkParams(SinkBaseParams):
|
|
|
10
10
|
device: str = None
|
|
11
11
|
pushover_url: str = "https://api.pushover.net/1/messages.json"
|
|
12
12
|
|
|
13
|
-
@classmethod
|
|
14
|
-
def _get_sink_type(cls):
|
|
15
|
-
return "pushover"
|
|
16
|
-
|
|
17
|
-
|
|
18
13
|
class PushoverSinkConfigWrapper(SinkConfigBase):
|
|
19
14
|
pushover_sink: PushoverSinkParams
|
|
20
15
|
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/robusta_sink_params.py
RENAMED
|
@@ -17,10 +17,6 @@ class RobustaSinkParams(SinkBaseParams):
|
|
|
17
17
|
ttl_hours: int = 4380 # Time before unactive cluster data is deleted. 6 Months default.
|
|
18
18
|
persist_events: bool = False
|
|
19
19
|
|
|
20
|
-
@classmethod
|
|
21
|
-
def _get_sink_type(cls):
|
|
22
|
-
return "robusta"
|
|
23
|
-
|
|
24
20
|
|
|
25
21
|
class RobustaSinkConfigWrapper(SinkConfigBase):
|
|
26
22
|
robusta_sink: RobustaSinkParams
|
|
@@ -12,10 +12,6 @@ class ServiceNowSinkParams(SinkBaseParams):
|
|
|
12
12
|
password: SecretStr
|
|
13
13
|
caller_id: Optional[str]
|
|
14
14
|
|
|
15
|
-
@classmethod
|
|
16
|
-
def _get_sink_type(cls):
|
|
17
|
-
return "servicenow"
|
|
18
|
-
|
|
19
15
|
|
|
20
16
|
class ServiceNowSinkConfigWrapper(SinkConfigBase):
|
|
21
17
|
service_now_sink: ServiceNowSinkParams
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from robusta.core.model.k8s_operation_type import K8sOperationType
|
|
4
|
+
from robusta.core.reporting.base import Finding
|
|
5
|
+
from robusta.core.sinks.sink_base_params import ActivityInterval, ActivityParams, SinkBaseParams
|
|
6
|
+
from robusta.core.sinks.timing import TimeSlice, TimeSliceAlways
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class SinkBase:
|
|
10
|
+
def __init__(self, sink_params: SinkBaseParams, registry):
|
|
11
|
+
self.sink_name = sink_params.name
|
|
12
|
+
self.params = sink_params
|
|
13
|
+
self.default = sink_params.default
|
|
14
|
+
self.registry = registry
|
|
15
|
+
global_config = self.registry.get_global_config()
|
|
16
|
+
|
|
17
|
+
self.account_id: str = global_config.get("account_id", "")
|
|
18
|
+
self.cluster_name: str = global_config.get("cluster_name", "")
|
|
19
|
+
self.signing_key = global_config.get("signing_key", "")
|
|
20
|
+
|
|
21
|
+
self.time_slices = self._build_time_slices_from_params(self.params.activity)
|
|
22
|
+
|
|
23
|
+
def _build_time_slices_from_params(self, params: ActivityParams):
|
|
24
|
+
if params is None:
|
|
25
|
+
return [TimeSliceAlways()]
|
|
26
|
+
else:
|
|
27
|
+
timezone = params.timezone
|
|
28
|
+
return [self._interval_to_time_slice(timezone, interval) for interval in params.intervals]
|
|
29
|
+
|
|
30
|
+
def _interval_to_time_slice(self, timezone: str, interval: ActivityInterval):
|
|
31
|
+
return TimeSlice(interval.days, [(time.start, time.end) for time in interval.hours], timezone)
|
|
32
|
+
|
|
33
|
+
def is_global_config_changed(self):
|
|
34
|
+
# registry global config can be updated without these stored values being changed
|
|
35
|
+
global_config = self.registry.get_global_config()
|
|
36
|
+
account_id = global_config.get("account_id", "")
|
|
37
|
+
cluster_name = global_config.get("cluster_name", "")
|
|
38
|
+
signing_key = global_config.get("signing_key", "")
|
|
39
|
+
return self.account_id != account_id or self.cluster_name != cluster_name or self.signing_key != signing_key
|
|
40
|
+
|
|
41
|
+
def stop(self):
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
def accepts(self, finding: Finding) -> bool:
|
|
45
|
+
return (
|
|
46
|
+
finding.matches(self.params.match, self.params.scope)
|
|
47
|
+
and any(time_slice.is_active_now for time_slice in self.time_slices)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
def write_finding(self, finding: Finding, platform_enabled: bool):
|
|
51
|
+
raise NotImplementedError(f"write_finding not implemented for sink {self.sink_name}")
|
|
52
|
+
|
|
53
|
+
def is_healthy(self) -> bool:
|
|
54
|
+
"""
|
|
55
|
+
Sink health check. Concrete sinks can implement real health checks
|
|
56
|
+
"""
|
|
57
|
+
return True
|
|
58
|
+
|
|
59
|
+
def handle_service_diff(self, new_obj: Any, operation: K8sOperationType):
|
|
60
|
+
pass
|
|
61
|
+
|
|
62
|
+
def set_cluster_active(self, active: bool):
|
|
63
|
+
pass
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
3
|
from typing import Dict, List, Optional, Union
|
|
5
4
|
|
|
6
5
|
from pydantic import BaseModel, root_validator, validator
|
|
7
|
-
from pydantic.types import PositiveInt
|
|
8
6
|
import pytz
|
|
9
7
|
|
|
10
8
|
from robusta.core.playbooks.playbook_utils import replace_env_vars_values
|
|
@@ -57,57 +55,13 @@ class ActivityParams(BaseModel):
|
|
|
57
55
|
return intervals
|
|
58
56
|
|
|
59
57
|
|
|
60
|
-
class
|
|
61
|
-
# This is mandatory because using the regular mode without setting it
|
|
62
|
-
# would make no sense - all the notifications would just pass through
|
|
63
|
-
# normally.
|
|
64
|
-
ignore_first: PositiveInt
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
# a list of attribute names, which can be strings or dicts of the form
|
|
68
|
-
# {"labels": ["app", "label-xyz"]} etc.
|
|
69
|
-
GroupingAttributeSelectorListT = List[Union[str, Dict[str, List[str]]]]
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
class SummaryNotificationModeParams(BaseModel):
|
|
73
|
-
threaded: bool = True
|
|
74
|
-
by: GroupingAttributeSelectorListT = ["identifier"]
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
class NotificationModeParams(BaseModel):
|
|
78
|
-
regular: Optional[RegularNotificationModeParams]
|
|
79
|
-
summary: Optional[SummaryNotificationModeParams]
|
|
80
|
-
# TODO should we enforce that only one of these is set?
|
|
81
|
-
|
|
82
|
-
@root_validator
|
|
83
|
-
def validate_exactly_one_defined(cls, values: Dict):
|
|
84
|
-
if values.get("regular") and values.get("summary"):
|
|
85
|
-
raise ValueError('"regular" and "summary" notification grouping modes must not be defined at the same time')
|
|
86
|
-
if not (values.get("regular") or values.get("summary")):
|
|
87
|
-
raise ValueError('either "regular" or "summary" notification grouping mode must be defined')
|
|
88
|
-
return values
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
class GroupingParams(BaseModel):
|
|
92
|
-
group_by: GroupingAttributeSelectorListT = ["cluster"]
|
|
93
|
-
interval: int = 15*60 # in seconds
|
|
94
|
-
notification_mode: Optional[NotificationModeParams]
|
|
95
|
-
|
|
96
|
-
@root_validator
|
|
97
|
-
def validate_notification_mode(cls, values: Dict):
|
|
98
|
-
if values is None:
|
|
99
|
-
return {"summary": SummaryNotificationModeParams()}
|
|
100
|
-
return values
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
class SinkBaseParams(ABC, BaseModel):
|
|
58
|
+
class SinkBaseParams(BaseModel):
|
|
104
59
|
name: str
|
|
105
60
|
send_svg: bool = False
|
|
106
61
|
default: bool = True
|
|
107
62
|
match: dict = {}
|
|
108
63
|
scope: Optional[ScopeParams]
|
|
109
64
|
activity: Optional[ActivityParams]
|
|
110
|
-
grouping: Optional[GroupingParams]
|
|
111
65
|
stop: bool = False # Stop processing if this sink has been matched
|
|
112
66
|
|
|
113
67
|
@root_validator
|
|
@@ -123,12 +77,6 @@ class SinkBaseParams(ABC, BaseModel):
|
|
|
123
77
|
match["annotations"] = cls.__parse_dict_matchers(annotations)
|
|
124
78
|
return updated
|
|
125
79
|
|
|
126
|
-
@root_validator
|
|
127
|
-
def validate_grouping(cls, values: Dict):
|
|
128
|
-
if values.get("grouping") and not cls._supports_grouping():
|
|
129
|
-
logging.warning(f"Sinks of type {cls._get_sink_type()} do not support notification grouping")
|
|
130
|
-
return values
|
|
131
|
-
|
|
132
80
|
@classmethod
|
|
133
81
|
def __parse_dict_matchers(cls, matchers) -> Union[Dict, List[Dict]]:
|
|
134
82
|
if isinstance(matchers, List):
|
|
@@ -147,12 +95,3 @@ class SinkBaseParams(ABC, BaseModel):
|
|
|
147
95
|
return {}
|
|
148
96
|
result[kv[0].strip()] = kv[1].strip()
|
|
149
97
|
return result
|
|
150
|
-
|
|
151
|
-
@classmethod
|
|
152
|
-
def _supports_grouping(cls):
|
|
153
|
-
return False
|
|
154
|
-
|
|
155
|
-
@classmethod
|
|
156
|
-
@abstractmethod
|
|
157
|
-
def _get_sink_type(cls):
|
|
158
|
-
raise NotImplementedError
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from robusta.core.reporting.base import Finding
|
|
2
|
+
from robusta.core.sinks.sink_base import SinkBase
|
|
3
|
+
from robusta.core.sinks.slack.slack_sink_params import SlackSinkConfigWrapper
|
|
4
|
+
from robusta.integrations import slack as slack_module
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class SlackSink(SinkBase):
|
|
8
|
+
def __init__(self, sink_config: SlackSinkConfigWrapper, registry):
|
|
9
|
+
super().__init__(sink_config.slack_sink, registry)
|
|
10
|
+
self.slack_channel = sink_config.slack_sink.slack_channel
|
|
11
|
+
self.api_key = sink_config.slack_sink.api_key
|
|
12
|
+
self.slack_sender = slack_module.SlackSender(self.api_key, self.account_id, self.cluster_name, self.signing_key)
|
|
13
|
+
|
|
14
|
+
def write_finding(self, finding: Finding, platform_enabled: bool):
|
|
15
|
+
self.slack_sender.send_finding_to_slack(finding, self.params, platform_enabled)
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/slack/slack_sink_params.py
RENAMED
|
@@ -12,14 +12,6 @@ class SlackSinkParams(SinkBaseParams):
|
|
|
12
12
|
channel_override: Optional[str] = None
|
|
13
13
|
max_log_file_limit_kb: int = 1000
|
|
14
14
|
|
|
15
|
-
@classmethod
|
|
16
|
-
def _supports_grouping(cls):
|
|
17
|
-
return True
|
|
18
|
-
|
|
19
|
-
@classmethod
|
|
20
|
-
def _get_sink_type(cls):
|
|
21
|
-
return "slack"
|
|
22
|
-
|
|
23
15
|
@validator("channel_override")
|
|
24
16
|
def validate_channel_override(cls, v: str):
|
|
25
17
|
return ChannelTransformer.validate_channel_override(v)
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_sink_params.py
RENAMED
|
@@ -10,10 +10,6 @@ class TelegramSinkParams(SinkBaseParams):
|
|
|
10
10
|
thread_id: int = None
|
|
11
11
|
send_files: bool = True # Change to False, to omit file attachments
|
|
12
12
|
|
|
13
|
-
@classmethod
|
|
14
|
-
def _get_sink_type(cls):
|
|
15
|
-
return "telegram"
|
|
16
|
-
|
|
17
13
|
|
|
18
14
|
class TelegramSinkConfigWrapper(SinkConfigBase):
|
|
19
15
|
telegram_sink: TelegramSinkParams
|
|
@@ -5,10 +5,6 @@ from robusta.core.sinks.sink_config import SinkConfigBase
|
|
|
5
5
|
class VictoropsSinkParams(SinkBaseParams):
|
|
6
6
|
url: str
|
|
7
7
|
|
|
8
|
-
@classmethod
|
|
9
|
-
def _get_sink_type(cls):
|
|
10
|
-
return "victorops"
|
|
11
|
-
|
|
12
8
|
|
|
13
9
|
class VictoropsConfigWrapper(SinkConfigBase):
|
|
14
10
|
victorops_sink: VictoropsSinkParams
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/webhook_sink_params.py
RENAMED
|
@@ -10,10 +10,6 @@ class WebhookSinkParams(SinkBaseParams):
|
|
|
10
10
|
authorization: SecretStr = None
|
|
11
11
|
format: str = "text"
|
|
12
12
|
|
|
13
|
-
@classmethod
|
|
14
|
-
def _get_sink_type(cls):
|
|
15
|
-
return "webhook"
|
|
16
|
-
|
|
17
13
|
|
|
18
14
|
class WebhookSinkConfigWrapper(SinkConfigBase):
|
|
19
15
|
webhook_sink: WebhookSinkParams
|
|
@@ -14,10 +14,6 @@ class YaMessengerSinkParams(SinkBaseParams):
|
|
|
14
14
|
mark_important: bool = False # Mark sent messages as important
|
|
15
15
|
send_files: bool = True # Send files (logs, images)
|
|
16
16
|
|
|
17
|
-
@classmethod
|
|
18
|
-
def _get_sink_type(cls):
|
|
19
|
-
return "yamessenger"
|
|
20
|
-
|
|
21
17
|
@root_validator()
|
|
22
18
|
def validate_fields(cls, fields):
|
|
23
19
|
assert fields["chat_id"] is not None or fields["user_name"] is not None, "chat_id or user_name must be defined for the Yandex Messenger sink"
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/multi_resources_trigger.py
RENAMED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
from typing import Any, Dict, List
|
|
2
2
|
|
|
3
3
|
from robusta.core.playbooks.base_trigger import TriggerEvent
|
|
4
|
-
from robusta.integrations.kubernetes.autogenerated.triggers import
|
|
5
|
-
|
|
4
|
+
from robusta.integrations.kubernetes.autogenerated.triggers import (
|
|
5
|
+
DEFAULT_CHANGE_FILTERS,
|
|
6
|
+
KubernetesAnyAllChangesTrigger,
|
|
7
|
+
)
|
|
8
|
+
from robusta.integrations.kubernetes.base_triggers import K8sTriggerEvent
|
|
6
9
|
from robusta.utils.scope import ScopeParams
|
|
7
10
|
|
|
8
11
|
|
{robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/api_client_utils.py
RENAMED
|
@@ -7,18 +7,14 @@ import tarfile
|
|
|
7
7
|
import tempfile
|
|
8
8
|
import time
|
|
9
9
|
import traceback
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import List, Optional
|
|
11
11
|
|
|
12
|
-
from cachetools import TTLCache, cached
|
|
13
12
|
from hikaru.model.rel_1_26 import Job
|
|
14
13
|
from kubernetes import config
|
|
15
14
|
from kubernetes.client.api import core_v1_api
|
|
16
15
|
from kubernetes.client.rest import ApiException
|
|
17
16
|
from kubernetes.stream import stream
|
|
18
17
|
|
|
19
|
-
from robusta.core.model.env_vars import NAMESPACE_DATA_TTL
|
|
20
|
-
|
|
21
|
-
|
|
22
18
|
RUNNING_STATE = "Running"
|
|
23
19
|
SUCCEEDED_STATE = "Succeeded"
|
|
24
20
|
|
|
@@ -268,21 +264,3 @@ def parse_kubernetes_datetime_to_ms(k8s_datetime: str) -> float:
|
|
|
268
264
|
return parse_kubernetes_datetime(k8s_datetime).timestamp() * 1000
|
|
269
265
|
except ValueError:
|
|
270
266
|
return parse_kubernetes_datetime_with_ms(k8s_datetime).timestamp() * 1000
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
# The expected amount of cached data here is in tens of kilobytes (maybe hundreds in extreme cases),
|
|
274
|
-
# so we don't bother to pick what we exactly need (currently just labels - see below in
|
|
275
|
-
# get_namespace_labels) and just cache all namespace data.
|
|
276
|
-
@cached(cache=TTLCache(maxsize=1, ttl=NAMESPACE_DATA_TTL))
|
|
277
|
-
def get_all_namespace_data():
|
|
278
|
-
logging.info("(re)loading all namespace data")
|
|
279
|
-
core_v1 = core_v1_api.CoreV1Api()
|
|
280
|
-
try:
|
|
281
|
-
return {ns.metadata.name: ns.metadata for ns in core_v1.list_namespace().items}
|
|
282
|
-
except ApiException:
|
|
283
|
-
logging.exception("failed to list namespaces")
|
|
284
|
-
return {}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
def get_namespace_labels(namespace_name: str) -> Dict[str, str]:
|
|
288
|
-
return get_all_namespace_data()[namespace_name].labels
|