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.
Files changed (295) hide show
  1. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/PKG-INFO +1 -4
  2. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/pyproject.toml +2 -6
  3. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/_version.py +1 -1
  4. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/env_vars.py +1 -6
  5. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/base.py +2 -11
  6. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/datadog_sink_params.py +0 -4
  7. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/discord_sink_params.py +0 -4
  8. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/file_sink_params.py +0 -4
  9. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/google_chat_params.py +0 -4
  10. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/jira/jira_sink_params.py +0 -4
  11. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/kafka/kafka_sink_params.py +0 -4
  12. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mail/mail_sink_params.py +0 -4
  13. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mattermost/mattermost_sink_params.py +0 -4
  14. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/msteams_sink_params.py +0 -4
  15. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py +0 -4
  16. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink_params.py +0 -4
  17. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_sink_params.py +0 -5
  18. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/robusta_sink_params.py +0 -4
  19. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink_params.py +0 -4
  20. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/servicenow/servicenow_sink_params.py +0 -4
  21. robusta_cli-0.12.1a0/src/robusta/core/sinks/sink_base.py +63 -0
  22. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/sink_base_params.py +1 -62
  23. robusta_cli-0.12.1a0/src/robusta/core/sinks/slack/slack_sink.py +15 -0
  24. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/slack/slack_sink_params.py +0 -8
  25. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_sink_params.py +0 -4
  26. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/victorops/victorops_sink_params.py +0 -4
  27. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webex/webex_sink_params.py +0 -4
  28. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/webhook_sink_params.py +0 -4
  29. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink_params.py +0 -4
  30. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/multi_resources_trigger.py +5 -2
  31. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/api_client_utils.py +1 -23
  32. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/triggers.py +9 -32
  33. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/base_triggers.py +3 -1
  34. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/custom_models.py +1 -1
  35. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/slack/sender.py +10 -142
  36. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/web.py +2 -30
  37. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/scope.py +8 -11
  38. robusta_cli-0.12.0/src/robusta/core/sinks/sink_base.py +0 -185
  39. robusta_cli-0.12.0/src/robusta/core/sinks/slack/slack_sink.py +0 -80
  40. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/LICENSE +0 -0
  41. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/__init__.py +0 -0
  42. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/api/__init__.py +0 -0
  43. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/__init__.py +0 -0
  44. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/auth.py +0 -0
  45. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/backend_profile.py +0 -0
  46. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/eula.py +0 -0
  47. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/integrations_cmd.py +0 -0
  48. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/main.py +0 -0
  49. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/playbooks_cmd.py +0 -0
  50. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/self_host.py +0 -0
  51. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/slack_feedback_message.py +0 -0
  52. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/slack_verification.py +0 -0
  53. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/cli/utils.py +0 -0
  54. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/__init__.py +0 -0
  55. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/__init__.py +0 -0
  56. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/discovery.py +0 -0
  57. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/resource_names.py +0 -0
  58. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/top_service_resolver.py +0 -0
  59. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/discovery/utils.py +0 -0
  60. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/exceptions.py +0 -0
  61. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/__init__.py +0 -0
  62. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/base_params.py +0 -0
  63. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/cluster_status.py +0 -0
  64. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/events.py +0 -0
  65. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/helm_release.py +0 -0
  66. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/jobs.py +0 -0
  67. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/k8s_operation_type.py +0 -0
  68. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/namespaces.py +0 -0
  69. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/nodes.py +0 -0
  70. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/pods.py +0 -0
  71. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/runner_config.py +0 -0
  72. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/model/services.py +0 -0
  73. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/persistency/__init__.py +0 -0
  74. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/persistency/in_memory.py +0 -0
  75. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/persistency/scheduled_jobs_states_dal.py +0 -0
  76. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/__init__.py +0 -0
  77. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/actions_registry.py +0 -0
  78. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/base_trigger.py +0 -0
  79. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/common.py +0 -0
  80. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/container_playbook_utils.py +0 -0
  81. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/crash_reporter.py +0 -0
  82. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/generation.py +0 -0
  83. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/internal/discovery_events.py +0 -0
  84. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/job_utils.py +0 -0
  85. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/node_playbook_utils.py +0 -0
  86. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/oom_killer_utils.py +0 -0
  87. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/playbook_utils.py +0 -0
  88. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/playbooks_event_handler.py +0 -0
  89. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/playbooks_event_handler_impl.py +0 -0
  90. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/pod_utils/crashloop_utils.py +0 -0
  91. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/pod_utils/imagepull_utils.py +0 -0
  92. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/pod_utils/pending_pod_utils.py +0 -0
  93. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py +0 -0
  94. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/playbooks/trigger.py +0 -0
  95. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/__init__.py +0 -0
  96. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/event_emitter.py +0 -0
  97. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/event_subscriber.py +0 -0
  98. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/pubsub/events_pubsub.py +0 -0
  99. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/__init__.py +0 -0
  100. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/action_requests.py +0 -0
  101. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/blocks.py +0 -0
  102. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/callbacks.py +0 -0
  103. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/consts.py +0 -0
  104. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/custom_rendering.py +0 -0
  105. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/finding_subjects.py +0 -0
  106. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/reporting/utils.py +0 -0
  107. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/schedule/__init__.py +0 -0
  108. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/schedule/model.py +0 -0
  109. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/schedule/scheduler.py +0 -0
  110. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/__init__.py +0 -0
  111. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/common/__init__.py +0 -0
  112. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/common/channel_transformer.py +0 -0
  113. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/common/html_tools.py +0 -0
  114. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/__init__.py +0 -0
  115. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/datadog/datadog_sink.py +0 -0
  116. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/__init__.py +0 -0
  117. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/discord/discord_sink.py +0 -0
  118. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/__init__.py +0 -0
  119. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/file_sink.py +0 -0
  120. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/file/object_traverser.py +0 -0
  121. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/__init__.py +0 -0
  122. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/google_chat/google_chat.py +0 -0
  123. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/jira/__init__.py +0 -0
  124. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/jira/jira_sink.py +0 -0
  125. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/kafka/__init__.py +0 -0
  126. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/kafka/kafka_sink.py +0 -0
  127. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mail/__init__.py +0 -0
  128. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mail/mail_sink.py +0 -0
  129. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mattermost/__init__.py +0 -0
  130. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/mattermost/mattermost_sink.py +0 -0
  131. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/__init__.py +0 -0
  132. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/msteams/msteams_sink.py +0 -0
  133. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/__init__.py +0 -0
  134. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink.py +0 -0
  135. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pagerduty/__init__.py +0 -0
  136. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink.py +0 -0
  137. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/__init__.py +0 -0
  138. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_client.py +0 -0
  139. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/pushover/pushover_sink.py +0 -0
  140. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/__init__.py +0 -0
  141. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/dal/__init__.py +0 -0
  142. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/dal/model_conversion.py +0 -0
  143. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py +0 -0
  144. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/discovery_metrics.py +0 -0
  145. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/prometheus_health_checker.py +0 -0
  146. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/robusta_sink.py +0 -0
  147. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/__init__.py +0 -0
  148. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/account_resource_fetcher.py +0 -0
  149. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/base_resource_manager.py +0 -0
  150. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/prometheus_alert_resource_manager.py +0 -0
  151. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/rrm.py +0 -0
  152. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/robusta/rrm/types.py +0 -0
  153. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/rocketchat/__init__.py +0 -0
  154. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink.py +0 -0
  155. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/servicenow/__init__.py +0 -0
  156. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/servicenow/servicenow_sink.py +0 -0
  157. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/sink_config.py +0 -0
  158. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/sink_factory.py +0 -0
  159. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/slack/__init__.py +0 -0
  160. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/__init__.py +0 -0
  161. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_client.py +0 -0
  162. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/telegram/telegram_sink.py +0 -0
  163. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/timing.py +0 -0
  164. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/transformer.py +0 -0
  165. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/victorops/__init__.py +0 -0
  166. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/victorops/victorops_sink.py +0 -0
  167. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webex/__init__.py +0 -0
  168. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webex/webex_sink.py +0 -0
  169. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/__init__.py +0 -0
  170. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/webhook/webhook_sink.py +0 -0
  171. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/__init__.py +0 -0
  172. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/yamessenger_client.py +0 -0
  173. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink.py +0 -0
  174. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/zulip/__init__.py +0 -0
  175. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/zulip/zulip_sink.py +0 -0
  176. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/sinks/zulip/zulip_sink_params.py +0 -0
  177. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/container_oom_killed_trigger.py +0 -0
  178. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/custom_triggers.py +0 -0
  179. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/error_event_trigger.py +0 -0
  180. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/helm_releases_triggers.py +0 -0
  181. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/job_failed_trigger.py +0 -0
  182. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/oom_killed_trigger_base.py +0 -0
  183. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/pod_crash_loop_trigger.py +0 -0
  184. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/pod_image_pull_backoff.py +0 -0
  185. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/core/triggers/pod_oom_killed_trigger.py +0 -0
  186. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/__init__.py +0 -0
  187. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/argocd/argocd_client.py +0 -0
  188. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/common/__init__.py +0 -0
  189. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/common/requests.py +0 -0
  190. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/discord/__init__.py +0 -0
  191. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/discord/sender.py +0 -0
  192. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/git/__init__.py +0 -0
  193. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/git/git_repo.py +0 -0
  194. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/git/well_known_hosts.py +0 -0
  195. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/google_chat/__init__.py +0 -0
  196. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/google_chat/sender.py +0 -0
  197. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/grafana.py +0 -0
  198. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/helper.py +0 -0
  199. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/jira/__init__.py +0 -0
  200. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/jira/client.py +0 -0
  201. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/jira/sender.py +0 -0
  202. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/__init__.py +0 -0
  203. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/__init__.py +0 -0
  204. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/events.py +0 -0
  205. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/models.py +0 -0
  206. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/v1/__init__.py +0 -0
  207. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/autogenerated/v1/models.py +0 -0
  208. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/base_event.py +0 -0
  209. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/model_not_found_exception.py +0 -0
  210. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/process_utils.py +0 -0
  211. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/kubernetes/templates.py +0 -0
  212. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mail/__init__.py +0 -0
  213. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mail/sender.py +0 -0
  214. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mattermost/__init__.py +0 -0
  215. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mattermost/client.py +0 -0
  216. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/mattermost/sender.py +0 -0
  217. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/__init__.py +0 -0
  218. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files.py +0 -0
  219. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_image.py +0 -0
  220. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_text.py +0 -0
  221. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/__init__.py +0 -0
  222. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_action.py +0 -0
  223. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_base.py +0 -0
  224. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_card.py +0 -0
  225. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_column.py +0 -0
  226. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_container.py +0 -0
  227. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_images.py +0 -0
  228. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_table.py +0 -0
  229. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_elements/msteams_text_block.py +0 -0
  230. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_mark_down_fix_url.py +0 -0
  231. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/msteams_msg.py +0 -0
  232. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/msteams/sender.py +0 -0
  233. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/openshift/__init__.py +0 -0
  234. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/openshift/token.py +0 -0
  235. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/__init__.py +0 -0
  236. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/models.py +0 -0
  237. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/trigger.py +0 -0
  238. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/prometheus/utils.py +0 -0
  239. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/receiver.py +0 -0
  240. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/__init__.py +0 -0
  241. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/cpu_analyzer.py +0 -0
  242. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/memory_analyzer.py +0 -0
  243. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/node_cpu_analyzer.py +0 -0
  244. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/resource_analysis/prometheus_analyzer.py +0 -0
  245. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/rocketchat/__init__.py +0 -0
  246. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/rocketchat/sender.py +0 -0
  247. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/__init__.py +0 -0
  248. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/event.py +0 -0
  249. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/models.py +0 -0
  250. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/playbook_scheduler.py +0 -0
  251. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager.py +0 -0
  252. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager_impl.py +0 -0
  253. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/scheduled/trigger.py +0 -0
  254. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/servicenow/__init__.py +0 -0
  255. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/servicenow/sender.py +0 -0
  256. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/slack/__init__.py +0 -0
  257. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/webex/__init__.py +0 -0
  258. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/webex/sender.py +0 -0
  259. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/zulip/__init__.py +0 -0
  260. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/integrations/zulip/sender.py +0 -0
  261. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/alert_relabel_config.py +0 -0
  262. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/config.py +0 -0
  263. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/playbook_action.py +0 -0
  264. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/model/playbook_definition.py +0 -0
  265. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/patch/patch.py +0 -0
  266. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/__init__.py +0 -0
  267. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/config_loader.py +0 -0
  268. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/log_init.py +0 -0
  269. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/main.py +0 -0
  270. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/not_found_exception.py +0 -0
  271. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/object_updater.py +0 -0
  272. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/process_setup.py +0 -0
  273. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/ssl_utils.py +0 -0
  274. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/telemetry.py +0 -0
  275. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/telemetry_service.py +0 -0
  276. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/runner/web_api.py +0 -0
  277. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/__init__.py +0 -0
  278. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/auth_provider.py +0 -0
  279. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/base64_utils.py +0 -0
  280. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/cluster_provider_discovery.py +0 -0
  281. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/common.py +0 -0
  282. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/decorators.py +0 -0
  283. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/docs.py +0 -0
  284. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/documented_pydantic.py +0 -0
  285. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/error_codes.py +0 -0
  286. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/file_system_watcher.py +0 -0
  287. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/function_hashes.py +0 -0
  288. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/json_schema.py +0 -0
  289. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/parsing.py +0 -0
  290. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/rate_limiter.py +0 -0
  291. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/server_start.py +0 -0
  292. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/service_discovery.py +0 -0
  293. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/silence_utils.py +0 -0
  294. {robusta_cli-0.12.0 → robusta_cli-0.12.1a0}/src/robusta/utils/stack_tracer.py +0 -0
  295. {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.0
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.0"
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.0"
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", "us-central1-docker.pkg.dev/genuine-flight-317411/devel")
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
- # This is the actual enrichment data
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
- data = self.attribute_map
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
@@ -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
@@ -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
@@ -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 @@ class KafkaSinkParams(SinkBaseParams):
7
7
  topic: str
8
8
  auth: dict = {}
9
9
 
10
- @classmethod
11
- def _get_sink_type(cls):
12
- return "kafka"
13
-
14
10
 
15
11
  class KafkaSinkConfigWrapper(SinkConfigBase):
16
12
  kafka_sink: KafkaSinkParams
@@ -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
@@ -15,10 +15,6 @@ class MattermostSinkParams(SinkBaseParams):
15
15
  team: Optional[str]
16
16
  team_id: Optional[str]
17
17
 
18
- @classmethod
19
- def _get_sink_type(cls):
20
- return "mattermost"
21
-
22
18
  @validator("url")
23
19
  def set_http_schema(cls, url):
24
20
  parsed_url = urlparse(url)
@@ -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
@@ -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
@@ -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
 
@@ -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 RocketchatSinkParams(SinkBaseParams):
12
12
  user_id: str
13
13
  server_url: str
14
14
 
15
- @classmethod
16
- def _get_sink_type(cls):
17
- return "rocketchat"
18
-
19
15
  def get_rocketchat_channel(self) -> str:
20
16
  return self.channel
21
17
 
@@ -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 RegularNotificationModeParams(BaseModel):
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)
@@ -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)
@@ -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
@@ -6,10 +6,6 @@ class WebexSinkParams(SinkBaseParams):
6
6
  bot_access_token: str
7
7
  room_id: str
8
8
 
9
- @classmethod
10
- def _get_sink_type(cls):
11
- return "webex"
12
-
13
9
 
14
10
  class WebexSinkConfigWrapper(SinkConfigBase):
15
11
  webex_sink: WebexSinkParams
@@ -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"
@@ -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 KubernetesAnyAllChangesTrigger
5
- from robusta.integrations.kubernetes.base_triggers import DEFAULT_CHANGE_FILTERS, K8sTriggerEvent
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
 
@@ -7,18 +7,14 @@ import tarfile
7
7
  import tempfile
8
8
  import time
9
9
  import traceback
10
- from typing import Dict, List, Optional
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