robusta-cli 0.12.0__tar.gz → 0.13.0a0__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 (294) hide show
  1. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/PKG-INFO +5 -3
  2. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/pyproject.toml +8 -8
  3. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/_version.py +1 -1
  4. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/api/__init__.py +1 -1
  5. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/self_host.py +18 -6
  6. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/env_vars.py +2 -1
  7. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py +80 -90
  8. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/robusta_sink.py +48 -51
  9. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/sink_base.py +1 -1
  10. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/webhook/webhook_sink.py +14 -1
  11. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/webhook/webhook_sink_params.py +1 -0
  12. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/custom_triggers.py +2 -0
  13. robusta_cli-0.13.0a0/src/robusta/core/triggers/pod_evicted_trigger.py +55 -0
  14. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/custom_models.py +2 -2
  15. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/zulip/sender.py +2 -2
  16. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/LICENSE +0 -0
  17. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/__init__.py +0 -0
  18. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/__init__.py +0 -0
  19. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/auth.py +0 -0
  20. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/backend_profile.py +0 -0
  21. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/eula.py +0 -0
  22. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/integrations_cmd.py +0 -0
  23. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/main.py +0 -0
  24. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/playbooks_cmd.py +0 -0
  25. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/slack_feedback_message.py +0 -0
  26. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/slack_verification.py +0 -0
  27. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/cli/utils.py +0 -0
  28. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/__init__.py +0 -0
  29. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/discovery/__init__.py +0 -0
  30. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/discovery/discovery.py +0 -0
  31. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/discovery/resource_names.py +0 -0
  32. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/discovery/top_service_resolver.py +0 -0
  33. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/discovery/utils.py +0 -0
  34. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/exceptions.py +0 -0
  35. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/__init__.py +0 -0
  36. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/base_params.py +0 -0
  37. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/cluster_status.py +0 -0
  38. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/events.py +0 -0
  39. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/helm_release.py +0 -0
  40. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/jobs.py +0 -0
  41. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/k8s_operation_type.py +0 -0
  42. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/namespaces.py +0 -0
  43. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/nodes.py +0 -0
  44. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/pods.py +0 -0
  45. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/runner_config.py +0 -0
  46. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/model/services.py +0 -0
  47. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/persistency/__init__.py +0 -0
  48. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/persistency/in_memory.py +0 -0
  49. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/persistency/scheduled_jobs_states_dal.py +0 -0
  50. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/__init__.py +0 -0
  51. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/actions_registry.py +0 -0
  52. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/base_trigger.py +0 -0
  53. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/common.py +0 -0
  54. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/container_playbook_utils.py +0 -0
  55. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/crash_reporter.py +0 -0
  56. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/generation.py +0 -0
  57. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/internal/discovery_events.py +0 -0
  58. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/job_utils.py +0 -0
  59. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/node_playbook_utils.py +0 -0
  60. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/oom_killer_utils.py +0 -0
  61. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/playbook_utils.py +0 -0
  62. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/playbooks_event_handler.py +0 -0
  63. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/playbooks_event_handler_impl.py +0 -0
  64. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/pod_utils/crashloop_utils.py +0 -0
  65. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/pod_utils/imagepull_utils.py +0 -0
  66. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/pod_utils/pending_pod_utils.py +0 -0
  67. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py +0 -0
  68. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/playbooks/trigger.py +0 -0
  69. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/pubsub/__init__.py +0 -0
  70. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/pubsub/event_emitter.py +0 -0
  71. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/pubsub/event_subscriber.py +0 -0
  72. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/pubsub/events_pubsub.py +0 -0
  73. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/__init__.py +0 -0
  74. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/action_requests.py +0 -0
  75. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/base.py +0 -0
  76. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/blocks.py +0 -0
  77. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/callbacks.py +0 -0
  78. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/consts.py +0 -0
  79. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/custom_rendering.py +0 -0
  80. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/finding_subjects.py +0 -0
  81. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/reporting/utils.py +0 -0
  82. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/schedule/__init__.py +0 -0
  83. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/schedule/model.py +0 -0
  84. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/schedule/scheduler.py +0 -0
  85. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/__init__.py +0 -0
  86. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/common/__init__.py +0 -0
  87. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/common/channel_transformer.py +0 -0
  88. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/common/html_tools.py +0 -0
  89. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/datadog/__init__.py +0 -0
  90. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/datadog/datadog_sink.py +0 -0
  91. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/datadog/datadog_sink_params.py +0 -0
  92. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/discord/__init__.py +0 -0
  93. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/discord/discord_sink.py +0 -0
  94. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/discord/discord_sink_params.py +0 -0
  95. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/file/__init__.py +0 -0
  96. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/file/file_sink.py +0 -0
  97. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/file/file_sink_params.py +0 -0
  98. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/file/object_traverser.py +0 -0
  99. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/google_chat/__init__.py +0 -0
  100. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/google_chat/google_chat.py +0 -0
  101. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/google_chat/google_chat_params.py +0 -0
  102. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/jira/__init__.py +0 -0
  103. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/jira/jira_sink.py +0 -0
  104. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/jira/jira_sink_params.py +0 -0
  105. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/kafka/__init__.py +0 -0
  106. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/kafka/kafka_sink.py +0 -0
  107. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/kafka/kafka_sink_params.py +0 -0
  108. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/mail/__init__.py +0 -0
  109. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/mail/mail_sink.py +0 -0
  110. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/mail/mail_sink_params.py +0 -0
  111. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/mattermost/__init__.py +0 -0
  112. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/mattermost/mattermost_sink.py +0 -0
  113. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/mattermost/mattermost_sink_params.py +0 -0
  114. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/msteams/__init__.py +0 -0
  115. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/msteams/msteams_sink.py +0 -0
  116. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/msteams/msteams_sink_params.py +0 -0
  117. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/opsgenie/__init__.py +0 -0
  118. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink.py +0 -0
  119. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py +0 -0
  120. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pagerduty/__init__.py +0 -0
  121. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink.py +0 -0
  122. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink_params.py +0 -0
  123. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pushover/__init__.py +0 -0
  124. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pushover/pushover_client.py +0 -0
  125. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pushover/pushover_sink.py +0 -0
  126. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/pushover/pushover_sink_params.py +0 -0
  127. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/__init__.py +0 -0
  128. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/dal/__init__.py +0 -0
  129. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/dal/model_conversion.py +0 -0
  130. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/discovery_metrics.py +0 -0
  131. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/prometheus_health_checker.py +0 -0
  132. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/robusta_sink_params.py +0 -0
  133. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/rrm/__init__.py +0 -0
  134. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/rrm/account_resource_fetcher.py +0 -0
  135. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/rrm/base_resource_manager.py +0 -0
  136. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/rrm/prometheus_alert_resource_manager.py +0 -0
  137. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/rrm/rrm.py +0 -0
  138. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/robusta/rrm/types.py +0 -0
  139. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/rocketchat/__init__.py +0 -0
  140. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink.py +0 -0
  141. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink_params.py +0 -0
  142. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/servicenow/__init__.py +0 -0
  143. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/servicenow/servicenow_sink.py +0 -0
  144. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/servicenow/servicenow_sink_params.py +0 -0
  145. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/sink_base_params.py +0 -0
  146. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/sink_config.py +0 -0
  147. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/sink_factory.py +0 -0
  148. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/slack/__init__.py +0 -0
  149. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/slack/slack_sink.py +0 -0
  150. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/slack/slack_sink_params.py +0 -0
  151. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/telegram/__init__.py +0 -0
  152. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/telegram/telegram_client.py +0 -0
  153. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/telegram/telegram_sink.py +0 -0
  154. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/telegram/telegram_sink_params.py +0 -0
  155. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/timing.py +0 -0
  156. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/transformer.py +0 -0
  157. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/victorops/__init__.py +0 -0
  158. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/victorops/victorops_sink.py +0 -0
  159. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/victorops/victorops_sink_params.py +0 -0
  160. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/webex/__init__.py +0 -0
  161. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/webex/webex_sink.py +0 -0
  162. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/webex/webex_sink_params.py +0 -0
  163. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/webhook/__init__.py +0 -0
  164. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/yamessenger/__init__.py +0 -0
  165. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/yamessenger/yamessenger_client.py +0 -0
  166. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink.py +0 -0
  167. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink_params.py +0 -0
  168. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/zulip/__init__.py +0 -0
  169. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/zulip/zulip_sink.py +0 -0
  170. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/sinks/zulip/zulip_sink_params.py +0 -0
  171. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/container_oom_killed_trigger.py +0 -0
  172. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/error_event_trigger.py +0 -0
  173. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/helm_releases_triggers.py +0 -0
  174. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/job_failed_trigger.py +0 -0
  175. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/multi_resources_trigger.py +0 -0
  176. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/oom_killed_trigger_base.py +0 -0
  177. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/pod_crash_loop_trigger.py +0 -0
  178. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/pod_image_pull_backoff.py +0 -0
  179. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/core/triggers/pod_oom_killed_trigger.py +0 -0
  180. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/__init__.py +0 -0
  181. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/argocd/argocd_client.py +0 -0
  182. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/common/__init__.py +0 -0
  183. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/common/requests.py +0 -0
  184. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/discord/__init__.py +0 -0
  185. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/discord/sender.py +0 -0
  186. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/git/__init__.py +0 -0
  187. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/git/git_repo.py +0 -0
  188. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/git/well_known_hosts.py +0 -0
  189. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/google_chat/__init__.py +0 -0
  190. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/google_chat/sender.py +0 -0
  191. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/grafana.py +0 -0
  192. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/helper.py +0 -0
  193. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/jira/__init__.py +0 -0
  194. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/jira/client.py +0 -0
  195. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/jira/sender.py +0 -0
  196. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/__init__.py +0 -0
  197. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/api_client_utils.py +0 -0
  198. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/autogenerated/__init__.py +0 -0
  199. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/autogenerated/events.py +0 -0
  200. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/autogenerated/models.py +0 -0
  201. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/autogenerated/triggers.py +0 -0
  202. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/autogenerated/v1/__init__.py +0 -0
  203. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/autogenerated/v1/models.py +0 -0
  204. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/base_event.py +0 -0
  205. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/base_triggers.py +0 -0
  206. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/model_not_found_exception.py +0 -0
  207. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/process_utils.py +0 -0
  208. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/kubernetes/templates.py +0 -0
  209. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/mail/__init__.py +0 -0
  210. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/mail/sender.py +0 -0
  211. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/mattermost/__init__.py +0 -0
  212. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/mattermost/client.py +0 -0
  213. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/mattermost/sender.py +0 -0
  214. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/__init__.py +0 -0
  215. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files.py +0 -0
  216. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_image.py +0 -0
  217. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_text.py +0 -0
  218. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/__init__.py +0 -0
  219. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_action.py +0 -0
  220. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_base.py +0 -0
  221. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_card.py +0 -0
  222. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_column.py +0 -0
  223. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_container.py +0 -0
  224. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_images.py +0 -0
  225. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_table.py +0 -0
  226. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_elements/msteams_text_block.py +0 -0
  227. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_mark_down_fix_url.py +0 -0
  228. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/msteams_msg.py +0 -0
  229. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/msteams/sender.py +0 -0
  230. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/openshift/__init__.py +0 -0
  231. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/openshift/token.py +0 -0
  232. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/prometheus/__init__.py +0 -0
  233. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/prometheus/models.py +0 -0
  234. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/prometheus/trigger.py +0 -0
  235. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/prometheus/utils.py +0 -0
  236. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/receiver.py +0 -0
  237. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/resource_analysis/__init__.py +0 -0
  238. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/resource_analysis/cpu_analyzer.py +0 -0
  239. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/resource_analysis/memory_analyzer.py +0 -0
  240. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/resource_analysis/node_cpu_analyzer.py +0 -0
  241. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/resource_analysis/prometheus_analyzer.py +0 -0
  242. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/rocketchat/__init__.py +0 -0
  243. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/rocketchat/sender.py +0 -0
  244. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/__init__.py +0 -0
  245. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/event.py +0 -0
  246. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/models.py +0 -0
  247. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/playbook_scheduler.py +0 -0
  248. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager.py +0 -0
  249. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager_impl.py +0 -0
  250. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/scheduled/trigger.py +0 -0
  251. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/servicenow/__init__.py +0 -0
  252. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/servicenow/sender.py +0 -0
  253. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/slack/__init__.py +0 -0
  254. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/slack/sender.py +0 -0
  255. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/webex/__init__.py +0 -0
  256. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/webex/sender.py +0 -0
  257. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/integrations/zulip/__init__.py +0 -0
  258. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/model/alert_relabel_config.py +0 -0
  259. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/model/config.py +0 -0
  260. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/model/playbook_action.py +0 -0
  261. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/model/playbook_definition.py +0 -0
  262. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/patch/patch.py +0 -0
  263. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/__init__.py +0 -0
  264. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/config_loader.py +0 -0
  265. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/log_init.py +0 -0
  266. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/main.py +0 -0
  267. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/not_found_exception.py +0 -0
  268. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/object_updater.py +0 -0
  269. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/process_setup.py +0 -0
  270. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/ssl_utils.py +0 -0
  271. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/telemetry.py +0 -0
  272. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/telemetry_service.py +0 -0
  273. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/web.py +0 -0
  274. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/runner/web_api.py +0 -0
  275. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/__init__.py +0 -0
  276. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/auth_provider.py +0 -0
  277. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/base64_utils.py +0 -0
  278. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/cluster_provider_discovery.py +0 -0
  279. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/common.py +0 -0
  280. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/decorators.py +0 -0
  281. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/docs.py +0 -0
  282. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/documented_pydantic.py +0 -0
  283. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/error_codes.py +0 -0
  284. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/file_system_watcher.py +0 -0
  285. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/function_hashes.py +0 -0
  286. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/json_schema.py +0 -0
  287. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/parsing.py +0 -0
  288. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/rate_limiter.py +0 -0
  289. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/scope.py +0 -0
  290. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/server_start.py +0 -0
  291. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/service_discovery.py +0 -0
  292. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/silence_utils.py +0 -0
  293. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/src/robusta/utils/stack_tracer.py +0 -0
  294. {robusta_cli-0.12.0 → robusta_cli-0.13.0a0}/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.13.0a0
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: aantn@users.noreply.github.com
@@ -31,7 +31,8 @@ Requires-Dist: fpdf2 (>=2.7.1,<3.0.0)
31
31
  Requires-Dist: grafana-api (>=1.0.3,<2.0.0) ; extra == "all"
32
32
  Requires-Dist: hikaru-model-26 (>=1.1.1,<2.0.0)
33
33
  Requires-Dist: humanize (>=3.13.1,<4.0.0)
34
- Requires-Dist: jinja2 (==3.1.3)
34
+ Requires-Dist: idna (>=3.7)
35
+ Requires-Dist: jinja2 (>=3.1.4)
35
36
  Requires-Dist: kafka-python (>=2.0.2,<3.0.0) ; extra == "all"
36
37
  Requires-Dist: kubernetes (>=26.1.0,<27.0.0)
37
38
  Requires-Dist: markdown2 (>=2.4.2,<3.0.0)
@@ -48,7 +49,7 @@ Requires-Dist: rocketchat-api (>=1.30.0,<2.0.0)
48
49
  Requires-Dist: sentry-sdk (>=1.5.2,<2.0.0) ; extra == "all"
49
50
  Requires-Dist: setuptools (>=68.2.2,<69.0.0)
50
51
  Requires-Dist: slack-sdk (>=3.23.0,<4.0.0)
51
- Requires-Dist: supabase (>=1.0.3,<2.0.0) ; extra == "all"
52
+ Requires-Dist: supabase (>=2.4,<3.0) ; extra == "all"
52
53
  Requires-Dist: tabulate (>=0.8.10,<0.9.0) ; extra == "all"
53
54
  Requires-Dist: toml (>=0.10.2,<0.11.0)
54
55
  Requires-Dist: typer (>=0.4.1,<0.5.0)
@@ -56,3 +57,4 @@ Requires-Dist: watchdog (>=2.1.0,<3.0.0) ; extra == "all"
56
57
  Requires-Dist: watchgod (>=0.7,<0.8)
57
58
  Requires-Dist: webexteamssdk (>=1.6.1,<2.0.0)
58
59
  Requires-Dist: websocket-client (==1.3.3)
60
+ Requires-Dist: werkzeug (>=3.0.3)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "robusta-cli"
3
- version = "0.12.0"
3
+ version = "0.13.0-alpha"
4
4
  description = ""
5
5
  authors = ["Natan Yellin <aantn@users.noreply.github.com>"]
6
6
  packages = [
@@ -32,11 +32,13 @@ pydantic = "^1.8.1"
32
32
  kubernetes = "^26.1.0"
33
33
  click-spinner = "^0.1.10"
34
34
  pymsteams = "^0.1.16"
35
- supabase = { version = "^1.0.3", optional = true }
35
+ idna= { version = ">=3.7", optional = true }
36
+ supabase = "^2.4"
36
37
  tabulate = { version = "^0.8.10" }
37
38
  slack-sdk = { version = "^3.23.0" }
38
39
  Flask = { version = "^3.0.0", optional = true }
39
- jinja2 = { version ="3.1.3", optional = true } # indirect dependency
40
+ werkzeug = { version = ">=3.0.3", optional = true }
41
+ jinja2 = { version = ">=3.1.4", optional = true }
40
42
  grafana-api = { version = "^1.0.3", optional = true }
41
43
  watchdog = { version = "^2.1.0", optional = true }
42
44
  better-exceptions = { version = "^0.3.3", optional = true }
@@ -59,11 +61,6 @@ webexteamssdk = "^1.6.1"
59
61
  bitmath = "^1.3.3.1"
60
62
  croniter = "^1.3.15"
61
63
  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
-
67
64
  # we're freezing a specific version here because the latest version doesn't have prebuilt wheels on pypi
68
65
  # and therefore requires gcc to install which we'd like to avoid
69
66
  # this is similar to the issue at https://github.com/dulwich/dulwich/issues/839
@@ -77,6 +74,9 @@ hikaru-model-26 = "^1.1.1"
77
74
  apprise = "^1.5.0"
78
75
  rocketchat-api = "^1.30.0"
79
76
  pydash = "8.0.0"
77
+ # The following are added to speed up poetry dependency resolution
78
+ botocore = "1.31.72"
79
+ boto3 = "1.28.72"
80
80
 
81
81
  [tool.poetry.dev-dependencies]
82
82
  pre-commit = "^2.13.0"
@@ -1,2 +1,2 @@
1
1
  # this is updated by .github/workflows/release.yaml
2
- __version__ = "0.12.0"
2
+ __version__ = "0.13.0-alpha"
@@ -70,12 +70,12 @@ from robusta.core.model.env_vars import (
70
70
  ROBUSTA_LOGO_URL,
71
71
  ROBUSTA_TELEMETRY_ENDPOINT,
72
72
  ROBUSTA_UI_DOMAIN,
73
+ RUNNER_SERVICE_ACCOUNT,
73
74
  RUNNER_VERSION,
74
75
  SEND_ADDITIONAL_TELEMETRY,
75
76
  SERVICE_CACHE_MAX_SIZE,
76
77
  SERVICE_CACHE_TTL_SEC,
77
78
  SLACK_TABLE_COLUMNS_LIMIT,
78
- SUPABASE_LOGIN_RATE_LIMIT_SEC,
79
79
  TEAMS_IMAGE_WIDTH,
80
80
  TELEMETRY_PERIODIC_SEC,
81
81
  TRACE_INCOMING_REQUESTS,
@@ -74,6 +74,10 @@ class RobustaRelay(BaseModel):
74
74
  apiEndpointPrefix: str
75
75
  apiNodePort: int = 30313 # api.domain
76
76
  wsNodePort: int = 30314 # relay.domain
77
+ relayPrefix: str = "relay"
78
+ platformPrefix: str = "platform"
79
+ apiPrefix: str = "api"
80
+ isOnPrem: bool = True
77
81
 
78
82
  def __init__(
79
83
  self,
@@ -184,6 +188,13 @@ def gen_config(
184
188
  )
185
189
  values.KONG_HTTP_NODE_PORT = db_nport
186
190
 
191
+ backendProfile = BackendProfile.fromDomainProvider(
192
+ domain=domain,
193
+ api_endpoint_prefix=api_endpoint_prefix,
194
+ platform_endpoint_prefix=platform_endpoint_prefix,
195
+ relay_endpoint_prefix=relay_ws_endpoint_prefix,
196
+ )
197
+
187
198
  relayValues = RobustaRelay(
188
199
  domain=domain,
189
200
  anon_key=values.ANON_KEY,
@@ -193,8 +204,13 @@ def gen_config(
193
204
  platform_endpoint_prefix=platform_endpoint_prefix,
194
205
  api_endpoint_prefix=api_endpoint_prefix,
195
206
  )
207
+
196
208
  relayValues.apiNodePort = api_nport
197
209
  relayValues.wsNodePort = ws_nport
210
+ relayValues.relayPrefix = relay_ws_endpoint_prefix
211
+ relayValues.platformPrefix = platform_endpoint_prefix
212
+ relayValues.apiPrefix = api_endpoint_prefix
213
+
198
214
 
199
215
  uiValues = RobustaUI(
200
216
  domain=domain,
@@ -215,12 +231,8 @@ def gen_config(
215
231
  "RELAY": relay_ws_endpoint_prefix,
216
232
  }
217
233
 
218
- backendProfile = BackendProfile.fromDomainProvider(
219
- domain=domain,
220
- api_endpoint_prefix=api_endpoint_prefix,
221
- platform_endpoint_prefix=platform_endpoint_prefix,
222
- relay_endpoint_prefix=relay_ws_endpoint_prefix,
223
- )
234
+
235
+
224
236
  self_host_approval_url = "https://api.robusta.dev/terms-of-service.html"
225
237
  typer.echo(f"By using this software you agree to the terms of service ({self_host_approval_url})\n")
226
238
  write_values_files("self_host_values.yaml", "robusta_cli_config.json", values_dict, backendProfile)
@@ -27,7 +27,6 @@ CLUSTER_STATUS_PERIOD_SEC = int(os.environ.get("CLUSTER_STATUS_PERIOD_SEC", 60 *
27
27
  DISCOVERY_CHECK_THRESHOLD_SEC = int(os.environ.get("DISCOVERY_CHECK_THRESHOLD_SEC", 60 * 50)) # 50 min
28
28
  DISCOVERY_PROCESS_TIMEOUT_SEC = int(os.environ.get("DISCOVERY_PROCESS_TIMEOUT_SEC", 60 * 120)) # 120 min
29
29
  DISCOVERY_WATCHDOG_CHECK_SEC = int(os.environ.get("DISCOVERY_WATCHDOG_CHECK_SEC", 15 * 120)) # 15 min
30
- SUPABASE_LOGIN_RATE_LIMIT_SEC = int(os.environ.get("SUPABASE_LOGIN_RATE_LIMIT_SEC", 900))
31
30
  SUPABASE_TIMEOUT_SECONDS = int(os.environ.get("SUPABASE_TIMEOUT_SECONDS", 60))
32
31
  GRAFANA_RENDERER_URL = os.environ.get("GRAFANA_RENDERER_URL", "http://127.0.0.1:8281/render")
33
32
  RESOURCE_UPDATES_CACHE_TTL_SEC = os.environ.get("RESOURCE_UPDATES_CACHE_TTL_SEC", 120)
@@ -66,6 +65,8 @@ ENABLE_TELEMETRY = os.environ.get("ENABLE_TELEMETRY", "true").lower() == "true"
66
65
  SEND_ADDITIONAL_TELEMETRY = os.environ.get("SEND_ADDITIONAL_TELEMETRY", "false").lower() == "true"
67
66
  RELEASE_NAME = os.environ.get("RELEASE_NAME", "robusta")
68
67
 
68
+ RUNNER_SERVICE_ACCOUNT = os.environ.get("RUNNER_SERVICE_ACCOUNT", f"{RELEASE_NAME}-runner-service-account")
69
+
69
70
  TELEMETRY_PERIODIC_SEC = int(os.environ.get("TELEMETRY_PERIODIC_SEC", 60 * 60 * 24)) # 24H
70
71
 
71
72
  SLACK_TABLE_COLUMNS_LIMIT = int(os.environ.get("SLACK_TABLE_COLUMNS_LIMIT", 3))
@@ -1,6 +1,5 @@
1
1
  import json
2
2
  import logging
3
- import time
4
3
  from collections import defaultdict
5
4
  from datetime import datetime
6
5
  from typing import Any, Dict, List, Optional
@@ -13,7 +12,7 @@ from supabase import create_client
13
12
  from supabase.lib.client_options import ClientOptions
14
13
 
15
14
  from robusta.core.model.cluster_status import ClusterStatus
16
- from robusta.core.model.env_vars import SUPABASE_LOGIN_RATE_LIMIT_SEC, SUPABASE_TIMEOUT_SECONDS
15
+ from robusta.core.model.env_vars import SUPABASE_TIMEOUT_SECONDS
17
16
  from robusta.core.model.helm_release import HelmRelease
18
17
  from robusta.core.model.jobs import JobInfo
19
18
  from robusta.core.model.namespaces import NamespaceInfo
@@ -69,11 +68,10 @@ class SupabaseDal(AccountResourceFetcher):
69
68
  self.key = key
70
69
  self.account_id = account_id
71
70
  self.cluster = cluster_name
72
- options = ClientOptions(postgrest_client_timeout=SUPABASE_TIMEOUT_SECONDS)
71
+ options = ClientOptions(postgrest_client_timeout=SUPABASE_TIMEOUT_SECONDS, auto_refresh_token=True)
73
72
  self.client = create_client(url, key, options)
74
73
  self.email = email
75
74
  self.password = password
76
- self.sign_in_time = 0
77
75
  self.sign_in()
78
76
  self.client.auth.on_auth_state_change(self.__update_token_patch)
79
77
  self.sink_name = sink_name
@@ -96,12 +94,11 @@ class SupabaseDal(AccountResourceFetcher):
96
94
  ).eq("scan_id", scan_id).execute()
97
95
  except Exception as e:
98
96
  logging.error(f"Failed to set scan state {scan_id} error: {e}")
99
- self.handle_supabase_error()
100
97
  raise
101
98
 
102
99
  def insert_scan_meta(self, scan_id: str, start_time: datetime, scan_type: ScanType) -> None:
103
100
  try:
104
- self.__rpc_patch(
101
+ self.client.rpc(
105
102
  "insert_scan_meta_v2",
106
103
  {
107
104
  "_account_id": self.account_id,
@@ -116,7 +113,6 @@ class SupabaseDal(AccountResourceFetcher):
116
113
  raise
117
114
  except Exception as e:
118
115
  logging.exception(f"Failed to persist scan meta {scan_id} error: {e}")
119
- self.handle_supabase_error()
120
116
  raise
121
117
 
122
118
  def persist_scan(self, block: ScanReportBlock):
@@ -125,7 +121,6 @@ class SupabaseDal(AccountResourceFetcher):
125
121
  self.client.table(SCANS_RESULT_TABLE).insert(db_scanResults, returning=ReturnMethod.minimal).execute()
126
122
  except Exception as e:
127
123
  logging.exception(f"Failed to persist scan {block.scan_id} error: {e}")
128
- self.handle_supabase_error()
129
124
  raise
130
125
 
131
126
  try:
@@ -139,7 +134,6 @@ class SupabaseDal(AccountResourceFetcher):
139
134
  ).eq("scan_id", block.scan_id).execute()
140
135
  except Exception as e:
141
136
  logging.exception(f"Failed to set scan state {block.scan_id} error: {e}")
142
- self.handle_supabase_error()
143
137
  raise
144
138
 
145
139
  def persist_finding(self, finding: Finding):
@@ -148,13 +142,12 @@ class SupabaseDal(AccountResourceFetcher):
148
142
 
149
143
  scans, enrichments = [], []
150
144
  for enrich in finding.enrichments:
151
- (
145
+ if enrich.annotations.get(EnrichmentAnnotation.SCAN, False):
152
146
  scans.append(enrich)
153
- if enrich.annotations.get(EnrichmentAnnotation.SCAN, False)
154
- else enrichments.append(enrich)
155
- )
147
+ else:
148
+ enrichments.append(enrich)
156
149
 
157
- if (len(scans) > 0) and (len(enrichments)) == 0:
150
+ if scans and not enrichments:
158
151
  return
159
152
 
160
153
  for enrichment in enrichments:
@@ -172,20 +165,16 @@ class SupabaseDal(AccountResourceFetcher):
172
165
 
173
166
  try:
174
167
  self.client.table(EVIDENCE_TABLE).insert(evidence, returning=ReturnMethod.minimal).execute()
175
- except Exception as e:
176
- logging.error(f"Failed to persist finding {finding.id} enrichment {enrichment} error: {e}")
168
+ except Exception:
169
+ logging.exception(f"Failed to persist finding {finding.id} enrichment {enrichment}")
170
+
177
171
  try:
178
- (
179
- self.client.table(ISSUES_TABLE)
180
- .insert(
181
- ModelConversion.to_finding_json(self.account_id, self.cluster, finding),
182
- returning=ReturnMethod.minimal,
183
- )
184
- .execute()
185
- )
186
- except Exception as e:
187
- logging.error(f"Failed to persist finding {finding.id} error: {e}")
188
- self.handle_supabase_error()
172
+ self.client.table(ISSUES_TABLE).insert(
173
+ ModelConversion.to_finding_json(self.account_id, self.cluster, finding),
174
+ returning=ReturnMethod.minimal,
175
+ ).execute()
176
+ except Exception:
177
+ logging.exception(f"Failed to persist finding {finding.id}")
189
178
 
190
179
  def to_service(self, service: ServiceInfo) -> Dict[Any, Any]:
191
180
  return {
@@ -213,8 +202,7 @@ class SupabaseDal(AccountResourceFetcher):
213
202
  try:
214
203
  self.client.table(SERVICES_TABLE).upsert(db_services, returning=ReturnMethod.minimal).execute()
215
204
  except Exception as e:
216
- logging.error(f"Failed to persist services {services} error: {e}")
217
- self.handle_supabase_error()
205
+ logging.exception(f"Failed to persist services {services} error: {e}")
218
206
  raise
219
207
 
220
208
  def get_active_services(self) -> List[ServiceInfo]:
@@ -238,7 +226,6 @@ class SupabaseDal(AccountResourceFetcher):
238
226
  )
239
227
  except Exception as e:
240
228
  logging.error(f"Failed to get existing services (supabase) error: {e}")
241
- self.handle_supabase_error()
242
229
  raise
243
230
 
244
231
  return [
@@ -267,7 +254,6 @@ class SupabaseDal(AccountResourceFetcher):
267
254
  )
268
255
  except Exception as e:
269
256
  logging.error(f"Failed to check cluster issues: {e}")
270
- self.handle_supabase_error()
271
257
  raise
272
258
 
273
259
  return len(res.data) > 0
@@ -284,7 +270,6 @@ class SupabaseDal(AccountResourceFetcher):
284
270
  )
285
271
  except Exception as e:
286
272
  logging.error(f"Failed to get existing nodes (supabase) error: {e}")
287
- self.handle_supabase_error()
288
273
  raise
289
274
 
290
275
  return [
@@ -327,7 +312,6 @@ class SupabaseDal(AccountResourceFetcher):
327
312
  self.client.table(NODES_TABLE).upsert(db_nodes, returning=ReturnMethod.minimal).execute()
328
313
  except Exception as e:
329
314
  logging.error(f"Failed to persist node {nodes} error: {e}")
330
- self.handle_supabase_error()
331
315
  raise
332
316
 
333
317
  @staticmethod
@@ -351,7 +335,6 @@ class SupabaseDal(AccountResourceFetcher):
351
335
  )
352
336
  except Exception as e:
353
337
  logging.error(f"Failed to get existing jobs (supabase) error: {e}")
354
- self.handle_supabase_error()
355
338
  raise
356
339
 
357
340
  return [JobInfo.from_db_row(job) for job in res.data]
@@ -368,7 +351,9 @@ class SupabaseDal(AccountResourceFetcher):
368
351
  def is_job_healthy(self, job: JobInfo) -> bool:
369
352
  is_running = job.status.active > 0
370
353
  is_completed = [condition for condition in job.status.conditions if condition.type == "Complete"]
371
- return is_running or len(is_completed) > 0
354
+ is_starting = not any([job.status.active, job.status.failed, job.status.succeeded, job.status.conditions])
355
+
356
+ return is_running or len(is_completed) > 0 or is_starting
372
357
 
373
358
  def publish_jobs(self, jobs: List[JobInfo]):
374
359
  if not jobs:
@@ -379,7 +364,40 @@ class SupabaseDal(AccountResourceFetcher):
379
364
  self.client.table(JOBS_TABLE).upsert(db_jobs, returning=ReturnMethod.minimal).execute()
380
365
  except Exception as e:
381
366
  logging.error(f"Failed to persist jobs {jobs} error: {e}")
382
- self.handle_supabase_error()
367
+ raise
368
+
369
+ def remove_deleted_node(self, node_name: str):
370
+ if not node_name:
371
+ return
372
+
373
+ try:
374
+ (
375
+ self.client.table(NODES_TABLE)
376
+ .delete(returning=ReturnMethod.minimal)
377
+ .eq("account_id", self.account_id)
378
+ .eq("cluster_id", self.cluster)
379
+ .eq("name", node_name)
380
+ .execute()
381
+ )
382
+ except Exception as e:
383
+ logging.exception(f"Failed to delete node {node_name} error: {e}")
384
+ raise
385
+
386
+ def remove_deleted_service(self, service_key: str):
387
+ if not service_key:
388
+ return
389
+
390
+ try:
391
+ (
392
+ self.client.table(SERVICES_TABLE)
393
+ .delete(returning=ReturnMethod.minimal)
394
+ .eq("account_id", self.account_id)
395
+ .eq("cluster", self.cluster)
396
+ .eq("service_key", service_key)
397
+ .execute()
398
+ )
399
+ except Exception as e:
400
+ logging.exception(f"Failed to delete service {service_key} error: {e}")
383
401
  raise
384
402
 
385
403
  def remove_deleted_job(self, job: JobInfo):
@@ -396,8 +414,24 @@ class SupabaseDal(AccountResourceFetcher):
396
414
  .execute()
397
415
  )
398
416
  except Exception as e:
399
- logging.error(f"Failed to delete job {job} error: {e}")
400
- self.handle_supabase_error()
417
+ logging.exception(f"Failed to delete job {job} error: {e}")
418
+ raise
419
+
420
+ def remove_deleted_namespace(self, namespace_name: str):
421
+ if not namespace_name:
422
+ return
423
+
424
+ try:
425
+ (
426
+ self.client.table(NAMESPACES_TABLE)
427
+ .delete(returning=ReturnMethod.minimal)
428
+ .filter("account_id", "eq", self.account_id)
429
+ .filter("cluster_id", "eq", self.cluster)
430
+ .eq("name", namespace_name)
431
+ .execute()
432
+ )
433
+ except Exception as e:
434
+ logging.exception(f"Failed to delete namespace {namespace_name} error: {e}")
401
435
  raise
402
436
 
403
437
  # helm release
@@ -413,7 +447,6 @@ class SupabaseDal(AccountResourceFetcher):
413
447
  )
414
448
  except Exception as e:
415
449
  logging.error(f"Failed to get existing helm releases (supabase) error: {e}")
416
- self.handle_supabase_error()
417
450
  raise
418
451
 
419
452
  return [HelmRelease.from_db_row(helm_release) for helm_release in res.data]
@@ -437,27 +470,13 @@ class SupabaseDal(AccountResourceFetcher):
437
470
  self.client.table(HELM_RELEASES_TABLE).upsert(db_helm_releases, returning=ReturnMethod.minimal).execute()
438
471
  except Exception as e:
439
472
  logging.error(f"Failed to persist helm_releases {helm_releases} error: {e}")
440
- self.handle_supabase_error()
441
473
  raise
442
474
 
443
475
  def sign_in(self):
444
- if time.time() > self.sign_in_time + SUPABASE_LOGIN_RATE_LIMIT_SEC:
445
- logging.info("Supabase dal login")
446
- self.sign_in_time = time.time()
447
- res = self.client.auth.sign_in_with_password({"email": self.email, "password": self.password})
448
- self.client.auth.set_session(res.session.access_token, res.session.refresh_token)
449
- self.client.postgrest.auth(res.session.access_token)
450
-
451
- def handle_supabase_error(self):
452
- """Workaround for Gotrue bug in refresh token."""
453
- # If there's an error during refresh token, no new refresh timer task is created, and the client remains not authenticated for good
454
- # When there's an error connecting to supabase server, we will re-login, to re-authenticate the session.
455
- # Adding rate-limiting mechanism, not to login too much because of other errors
456
- # https://github.com/supabase/gotrue-py/issues/9
457
- try:
458
- self.sign_in()
459
- except Exception:
460
- logging.error("Failed to sign in on error", exc_info=True)
476
+ logging.info("Supabase dal login")
477
+ res = self.client.auth.sign_in_with_password({"email": self.email, "password": self.password})
478
+ self.client.auth.set_session(res.session.access_token, res.session.refresh_token)
479
+ self.client.postgrest.auth(res.session.access_token)
461
480
 
462
481
  def to_db_cluster_status(self, data: ClusterStatus) -> Dict[str, Any]:
463
482
  db_cluster_status = data.dict()
@@ -481,7 +500,6 @@ class SupabaseDal(AccountResourceFetcher):
481
500
  )
482
501
  except Exception as e:
483
502
  logging.error(f"Failed to upsert {self.to_db_cluster_status(cluster_status)} error: {e}")
484
- self.handle_supabase_error()
485
503
 
486
504
  def get_active_namespaces(self) -> List[NamespaceInfo]:
487
505
  try:
@@ -495,7 +513,6 @@ class SupabaseDal(AccountResourceFetcher):
495
513
  )
496
514
  except Exception as e:
497
515
  logging.error(f"Failed to get existing namespaces (supabase) error: {e}")
498
- self.handle_supabase_error()
499
516
  raise
500
517
 
501
518
  return [NamespaceInfo.from_db_row(namespace) for namespace in res.data]
@@ -516,7 +533,6 @@ class SupabaseDal(AccountResourceFetcher):
516
533
  self.client.table(NAMESPACES_TABLE).upsert(db_namespaces, returning=ReturnMethod.minimal).execute()
517
534
  except Exception as e:
518
535
  logging.error(f"Failed to persist namespaces {namespaces} error: {e}")
519
- self.handle_supabase_error()
520
536
  raise
521
537
 
522
538
  def publish_cluster_nodes(self, node_count: int, pod_count: int):
@@ -527,10 +543,9 @@ class SupabaseDal(AccountResourceFetcher):
527
543
  "_pod_count": pod_count,
528
544
  }
529
545
  try:
530
- self.__rpc_patch(UPDATE_CLUSTER_NODE_COUNT, data)
546
+ self.client.rpc(UPDATE_CLUSTER_NODE_COUNT, data)
531
547
  except Exception as e:
532
548
  logging.error(f"Failed to publish node count {data} error: {e}")
533
- self.handle_supabase_error()
534
549
 
535
550
  logging.debug(f"cluster nodes: {UPDATE_CLUSTER_NODE_COUNT} => {data}")
536
551
 
@@ -548,7 +563,6 @@ class SupabaseDal(AccountResourceFetcher):
548
563
  ).execute()
549
564
  except Exception as e:
550
565
  logging.error(f"Failed to persist resource events error: {e}")
551
- self.handle_supabase_error()
552
566
  raise
553
567
 
554
568
  def persist_platform_blocks(self, enrichment: Enrichment, finding_id):
@@ -601,9 +615,8 @@ class SupabaseDal(AccountResourceFetcher):
601
615
 
602
616
  res = query_builder.execute()
603
617
  except Exception as e:
604
- msg = f"Failed to get existing account resources (supabase) error"
618
+ msg = "Failed to get existing account resources (supabase) error"
605
619
  logging.error(msg, exc_info=True)
606
- self.handle_supabase_error()
607
620
  raise e
608
621
 
609
622
  account_resources_map: Dict[ResourceKind, List[AccountResource]] = defaultdict(list)
@@ -656,32 +669,10 @@ class SupabaseDal(AccountResourceFetcher):
656
669
  )
657
670
 
658
671
  self.client.table(ACCOUNT_RESOURCE_STATUS_TABLE).upsert(data).execute()
659
- except Exception as e:
660
- logging.error(f"Failed to set account resource status to {status_type}", exc_info=True)
661
- self.handle_supabase_error()
672
+ except Exception:
673
+ logging.exception(f"Failed to set account resource status to {status_type}")
662
674
  raise
663
675
 
664
- def __rpc_patch(self, func_name: str, params: dict) -> Dict[str, Any]:
665
- """
666
- Supabase client is async. Sync impl of rpc call
667
- """
668
- headers = self.client.table("").session.headers
669
- url: str = f"{self.client.rest_url}/rpc/{func_name}"
670
-
671
- response = requests.post(url, headers=headers, json=params)
672
- response.raise_for_status()
673
- response_data = {}
674
- try:
675
- if response.content:
676
- response_data = response.json()
677
- except Exception: # this can be okay if no data is expected
678
- logging.debug("Failed to parse rpc response data")
679
-
680
- return {
681
- "data": response_data,
682
- "status_code": response.status_code,
683
- }
684
-
685
676
  def __update_token_patch(self, event, session):
686
677
  logging.debug(f"Event {event}, Session {session}")
687
678
  if session and event == "TOKEN_REFRESHED":
@@ -698,4 +689,3 @@ class SupabaseDal(AccountResourceFetcher):
698
689
  )
699
690
  except Exception as e:
700
691
  logging.error(f"Failed to set cluster status active=False error: {e}")
701
- self.handle_supabase_error()