robusta-cli 0.10.27a2__tar.gz → 0.10.28a0__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 (275) hide show
  1. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/PKG-INFO +1 -1
  2. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/pyproject.toml +1 -1
  3. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/_version.py +1 -1
  4. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/api/__init__.py +7 -1
  5. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/backend_profile.py +11 -7
  6. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/self_host.py +52 -14
  7. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/utils.py +10 -3
  8. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/base_params.py +33 -1
  9. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/env_vars.py +6 -1
  10. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/events.py +5 -2
  11. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/runner_config.py +4 -0
  12. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/container_playbook_utils.py +4 -1
  13. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/internal/discovery_events.py +2 -1
  14. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/node_playbook_utils.py +5 -1
  15. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/oom_killer_utils.py +3 -0
  16. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/pod_utils/imagepull_utils.py +1 -0
  17. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py +111 -45
  18. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/base.py +20 -2
  19. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/blocks.py +49 -2
  20. robusta_cli-0.10.28a0/src/robusta/core/sinks/google_chat/google_chat.py +19 -0
  21. robusta_cli-0.10.28a0/src/robusta/core/sinks/google_chat/google_chat_params.py +15 -0
  22. robusta_cli-0.10.28a0/src/robusta/core/sinks/pushover/__init__.py +2 -0
  23. robusta_cli-0.10.28a0/src/robusta/core/sinks/pushover/pushover_client.py +60 -0
  24. robusta_cli-0.10.28a0/src/robusta/core/sinks/pushover/pushover_sink.py +123 -0
  25. robusta_cli-0.10.28a0/src/robusta/core/sinks/pushover/pushover_sink_params.py +17 -0
  26. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/dal/model_conversion.py +13 -0
  27. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/robusta_sink.py +6 -3
  28. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/rrm/rrm.py +4 -0
  29. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/sink_factory.py +5 -1
  30. robusta_cli-0.10.28a0/src/robusta/core/sinks/slack/slack_sink_params.py +116 -0
  31. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/multi_resources_trigger.py +1 -2
  32. robusta_cli-0.10.28a0/src/robusta/integrations/google_chat/sender.py +143 -0
  33. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/jira/client.py +1 -1
  34. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/custom_models.py +1 -0
  35. robusta_cli-0.10.28a0/src/robusta/integrations/openshift/__init__.py +1 -0
  36. robusta_cli-0.10.28a0/src/robusta/integrations/openshift/token.py +17 -0
  37. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/prometheus/models.py +4 -3
  38. robusta_cli-0.10.28a0/src/robusta/runner/__init__.py +0 -0
  39. robusta_cli-0.10.28a0/src/robusta/runner/ssl_utils.py +40 -0
  40. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/web.py +11 -3
  41. robusta_cli-0.10.28a0/src/robusta/utils/__init__.py +0 -0
  42. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/silence_utils.py +14 -0
  43. robusta_cli-0.10.27a2/src/robusta/core/sinks/slack/slack_sink_params.py +0 -82
  44. robusta_cli-0.10.27a2/src/robusta/runner/ssl_utils.py +0 -15
  45. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/LICENSE +0 -0
  46. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/__init__.py +0 -0
  47. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/__init__.py +0 -0
  48. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/auth.py +0 -0
  49. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/eula.py +0 -0
  50. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/integrations_cmd.py +0 -0
  51. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/main.py +0 -0
  52. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/playbooks_cmd.py +0 -0
  53. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/slack_feedback_message.py +0 -0
  54. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/cli/slack_verification.py +0 -0
  55. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/__init__.py +0 -0
  56. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/discovery/__init__.py +0 -0
  57. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/discovery/discovery.py +0 -0
  58. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/discovery/resource_names.py +0 -0
  59. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/discovery/top_service_resolver.py +0 -0
  60. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/discovery/utils.py +0 -0
  61. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/exceptions.py +0 -0
  62. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/__init__.py +0 -0
  63. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/cluster_status.py +0 -0
  64. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/helm_release.py +0 -0
  65. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/jobs.py +0 -0
  66. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/k8s_operation_type.py +0 -0
  67. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/namespaces.py +0 -0
  68. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/nodes.py +0 -0
  69. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/pods.py +0 -0
  70. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/model/services.py +0 -0
  71. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/persistency/__init__.py +0 -0
  72. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/persistency/in_memory.py +0 -0
  73. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/persistency/scheduled_jobs_states_dal.py +0 -0
  74. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/__init__.py +0 -0
  75. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/actions_registry.py +0 -0
  76. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/base_trigger.py +0 -0
  77. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/common.py +0 -0
  78. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/generation.py +0 -0
  79. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/job_utils.py +0 -0
  80. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/playbook_utils.py +0 -0
  81. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/playbooks_event_handler.py +0 -0
  82. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/playbooks_event_handler_impl.py +0 -0
  83. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/pod_utils/crashloop_utils.py +0 -0
  84. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/pod_utils/pending_pod_utils.py +0 -0
  85. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/playbooks/trigger.py +0 -0
  86. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/__init__.py +0 -0
  87. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/action_requests.py +0 -0
  88. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/callbacks.py +0 -0
  89. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/consts.py +0 -0
  90. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/custom_rendering.py +0 -0
  91. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/finding_subjects.py +0 -0
  92. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/reporting/utils.py +0 -0
  93. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/schedule/__init__.py +0 -0
  94. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/schedule/model.py +0 -0
  95. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/schedule/scheduler.py +0 -0
  96. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/__init__.py +0 -0
  97. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/datadog/__init__.py +0 -0
  98. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/datadog/datadog_sink.py +0 -0
  99. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/datadog/datadog_sink_params.py +0 -0
  100. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/discord/__init__.py +0 -0
  101. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/discord/discord_sink.py +0 -0
  102. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/discord/discord_sink_params.py +0 -0
  103. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/file/__init__.py +0 -0
  104. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/file/file_sink.py +0 -0
  105. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/file/file_sink_params.py +0 -0
  106. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/file/object_traverser.py +0 -0
  107. {robusta_cli-0.10.27a2/src/robusta/core/sinks/mail → robusta_cli-0.10.28a0/src/robusta/core/sinks/google_chat}/__init__.py +0 -0
  108. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/jira/__init__.py +0 -0
  109. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/jira/jira_sink.py +0 -0
  110. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/jira/jira_sink_params.py +0 -0
  111. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/kafka/__init__.py +0 -0
  112. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/kafka/kafka_sink.py +0 -0
  113. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/kafka/kafka_sink_params.py +0 -0
  114. {robusta_cli-0.10.27a2/src/robusta/core/sinks/robusta/dal → robusta_cli-0.10.28a0/src/robusta/core/sinks/mail}/__init__.py +0 -0
  115. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/mail/mail_sink.py +0 -0
  116. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/mail/mail_sink_params.py +0 -0
  117. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/mattermost/__init__.py +0 -0
  118. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/mattermost/mattermost_sink.py +0 -0
  119. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/mattermost/mattermost_sink_params.py +0 -0
  120. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/msteams/__init__.py +0 -0
  121. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/msteams/msteams_sink.py +0 -0
  122. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/msteams/msteams_sink_params.py +0 -0
  123. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/opsgenie/__init__.py +0 -0
  124. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink.py +0 -0
  125. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py +0 -0
  126. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/pagerduty/__init__.py +0 -0
  127. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink.py +0 -0
  128. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/pagerduty/pagerduty_sink_params.py +0 -0
  129. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/__init__.py +0 -0
  130. {robusta_cli-0.10.27a2/src/robusta/core/sinks/robusta/rrm → robusta_cli-0.10.28a0/src/robusta/core/sinks/robusta/dal}/__init__.py +0 -0
  131. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py +0 -0
  132. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/discovery_metrics.py +0 -0
  133. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/prometheus_health_checker.py +0 -0
  134. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/robusta_sink_params.py +0 -0
  135. {robusta_cli-0.10.27a2/src/robusta/core/sinks/rocketchat → robusta_cli-0.10.28a0/src/robusta/core/sinks/robusta/rrm}/__init__.py +0 -0
  136. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/rrm/account_resource_fetcher.py +0 -0
  137. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/rrm/base_resource_manager.py +0 -0
  138. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/rrm/prometheus_alert_resource_manager.py +0 -0
  139. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/robusta/rrm/types.py +0 -0
  140. {robusta_cli-0.10.27a2/src/robusta/integrations → robusta_cli-0.10.28a0/src/robusta/core/sinks/rocketchat}/__init__.py +0 -0
  141. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink.py +0 -0
  142. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/rocketchat/rocketchat_sink_params.py +0 -0
  143. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/sink_base.py +0 -0
  144. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/sink_base_params.py +0 -0
  145. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/sink_config.py +0 -0
  146. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/slack/__init__.py +0 -0
  147. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/slack/slack_sink.py +0 -0
  148. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/telegram/__init__.py +0 -0
  149. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/telegram/telegram_client.py +0 -0
  150. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/telegram/telegram_sink.py +0 -0
  151. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/telegram/telegram_sink_params.py +0 -0
  152. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/timing.py +0 -0
  153. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/transformer.py +0 -0
  154. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/victorops/__init__.py +0 -0
  155. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/victorops/victorops_sink.py +0 -0
  156. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/victorops/victorops_sink_params.py +0 -0
  157. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/webex/__init__.py +0 -0
  158. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/webex/webex_sink.py +0 -0
  159. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/webex/webex_sink_params.py +0 -0
  160. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/webhook/__init__.py +0 -0
  161. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/webhook/webhook_sink.py +0 -0
  162. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/webhook/webhook_sink_params.py +0 -0
  163. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/yamessenger/__init__.py +0 -0
  164. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/yamessenger/yamessenger_client.py +0 -0
  165. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink.py +0 -0
  166. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/sinks/yamessenger/yamessenger_sink_params.py +0 -0
  167. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/container_oom_killed_trigger.py +0 -0
  168. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/custom_triggers.py +0 -0
  169. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/error_event_trigger.py +0 -0
  170. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/helm_releases_triggers.py +0 -0
  171. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/job_failed_trigger.py +0 -0
  172. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/oom_killed_trigger_base.py +0 -0
  173. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/pod_crash_loop_trigger.py +0 -0
  174. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/pod_image_pull_backoff.py +0 -0
  175. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/core/triggers/pod_oom_killed_trigger.py +0 -0
  176. {robusta_cli-0.10.27a2/src/robusta/integrations/common → robusta_cli-0.10.28a0/src/robusta/integrations}/__init__.py +0 -0
  177. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/argocd/argocd_client.py +0 -0
  178. {robusta_cli-0.10.27a2/src/robusta/integrations/discord → robusta_cli-0.10.28a0/src/robusta/integrations/common}/__init__.py +0 -0
  179. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/common/requests.py +0 -0
  180. {robusta_cli-0.10.27a2/src/robusta/integrations/git → robusta_cli-0.10.28a0/src/robusta/integrations/discord}/__init__.py +0 -0
  181. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/discord/sender.py +0 -0
  182. {robusta_cli-0.10.27a2/src/robusta/integrations/jira → robusta_cli-0.10.28a0/src/robusta/integrations/git}/__init__.py +0 -0
  183. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/git/git_repo.py +0 -0
  184. {robusta_cli-0.10.27a2/src/robusta/integrations/kubernetes → robusta_cli-0.10.28a0/src/robusta/integrations/google_chat}/__init__.py +0 -0
  185. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/grafana.py +0 -0
  186. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/helper.py +0 -0
  187. {robusta_cli-0.10.27a2/src/robusta/integrations/kubernetes/autogenerated → robusta_cli-0.10.28a0/src/robusta/integrations/jira}/__init__.py +0 -0
  188. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/jira/sender.py +0 -0
  189. {robusta_cli-0.10.27a2/src/robusta/integrations/kubernetes/autogenerated/v1 → robusta_cli-0.10.28a0/src/robusta/integrations/kubernetes}/__init__.py +0 -0
  190. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/api_client_utils.py +0 -0
  191. {robusta_cli-0.10.27a2/src/robusta/integrations/mail → robusta_cli-0.10.28a0/src/robusta/integrations/kubernetes/autogenerated}/__init__.py +0 -0
  192. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/autogenerated/events.py +0 -0
  193. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/autogenerated/models.py +0 -0
  194. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/autogenerated/triggers.py +0 -0
  195. {robusta_cli-0.10.27a2/src/robusta/integrations/mattermost → robusta_cli-0.10.28a0/src/robusta/integrations/kubernetes/autogenerated/v1}/__init__.py +0 -0
  196. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/autogenerated/v1/models.py +0 -0
  197. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/base_event.py +0 -0
  198. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/base_triggers.py +0 -0
  199. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/model_not_found_exception.py +0 -0
  200. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/process_utils.py +0 -0
  201. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/kubernetes/templates.py +0 -0
  202. {robusta_cli-0.10.27a2/src/robusta/integrations/msteams/msteams_elements → robusta_cli-0.10.28a0/src/robusta/integrations/mail}/__init__.py +0 -0
  203. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/mail/sender.py +0 -0
  204. {robusta_cli-0.10.27a2/src/robusta/integrations/prometheus → robusta_cli-0.10.28a0/src/robusta/integrations/mattermost}/__init__.py +0 -0
  205. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/mattermost/client.py +0 -0
  206. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/mattermost/sender.py +0 -0
  207. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/__init__.py +0 -0
  208. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files.py +0 -0
  209. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_image.py +0 -0
  210. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_text.py +0 -0
  211. {robusta_cli-0.10.27a2/src/robusta/integrations/resource_analysis → robusta_cli-0.10.28a0/src/robusta/integrations/msteams/msteams_elements}/__init__.py +0 -0
  212. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_action.py +0 -0
  213. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_base.py +0 -0
  214. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_card.py +0 -0
  215. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_column.py +0 -0
  216. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_container.py +0 -0
  217. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_images.py +0 -0
  218. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_table.py +0 -0
  219. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_elements/msteams_text_block.py +0 -0
  220. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_mark_down_fix_url.py +0 -0
  221. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/msteams_msg.py +0 -0
  222. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/msteams/sender.py +0 -0
  223. {robusta_cli-0.10.27a2/src/robusta/integrations/rocketchat → robusta_cli-0.10.28a0/src/robusta/integrations/prometheus}/__init__.py +0 -0
  224. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/prometheus/trigger.py +0 -0
  225. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/prometheus/utils.py +0 -0
  226. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/receiver.py +0 -0
  227. {robusta_cli-0.10.27a2/src/robusta/integrations/scheduled → robusta_cli-0.10.28a0/src/robusta/integrations/resource_analysis}/__init__.py +0 -0
  228. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/resource_analysis/cpu_analyzer.py +0 -0
  229. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/resource_analysis/memory_analyzer.py +0 -0
  230. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/resource_analysis/node_cpu_analyzer.py +0 -0
  231. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/resource_analysis/prometheus_analyzer.py +0 -0
  232. {robusta_cli-0.10.27a2/src/robusta/integrations/webex → robusta_cli-0.10.28a0/src/robusta/integrations/rocketchat}/__init__.py +0 -0
  233. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/rocketchat/sender.py +0 -0
  234. {robusta_cli-0.10.27a2/src/robusta/runner → robusta_cli-0.10.28a0/src/robusta/integrations/scheduled}/__init__.py +0 -0
  235. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/scheduled/event.py +0 -0
  236. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/scheduled/models.py +0 -0
  237. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/scheduled/playbook_scheduler.py +0 -0
  238. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager.py +0 -0
  239. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/scheduled/playbook_scheduler_manager_impl.py +0 -0
  240. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/scheduled/trigger.py +0 -0
  241. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/slack/__init__.py +0 -0
  242. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/slack/sender.py +0 -0
  243. {robusta_cli-0.10.27a2/src/robusta/utils → robusta_cli-0.10.28a0/src/robusta/integrations/webex}/__init__.py +0 -0
  244. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/integrations/webex/sender.py +0 -0
  245. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/model/alert_relabel_config.py +0 -0
  246. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/model/config.py +0 -0
  247. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/model/playbook_action.py +0 -0
  248. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/model/playbook_definition.py +0 -0
  249. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/patch/patch.py +0 -0
  250. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/config_loader.py +0 -0
  251. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/log_init.py +0 -0
  252. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/main.py +0 -0
  253. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/not_found_exception.py +0 -0
  254. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/object_updater.py +0 -0
  255. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/process_setup.py +0 -0
  256. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/telemetry.py +0 -0
  257. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/telemetry_service.py +0 -0
  258. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/runner/web_api.py +0 -0
  259. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/auth_provider.py +0 -0
  260. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/base64_utils.py +0 -0
  261. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/cluster_provider_discovery.py +0 -0
  262. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/common.py +0 -0
  263. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/decorators.py +0 -0
  264. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/docs.py +0 -0
  265. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/documented_pydantic.py +0 -0
  266. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/error_codes.py +0 -0
  267. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/file_system_watcher.py +0 -0
  268. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/function_hashes.py +0 -0
  269. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/json_schema.py +0 -0
  270. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/parsing.py +0 -0
  271. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/rate_limiter.py +0 -0
  272. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/server_start.py +0 -0
  273. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/service_discovery.py +0 -0
  274. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/src/robusta/utils/stack_tracer.py +0 -0
  275. {robusta_cli-0.10.27a2 → robusta_cli-0.10.28a0}/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.10.27a2
3
+ Version: 0.10.28a0
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: aantn@users.noreply.github.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "robusta-cli"
3
- version = "0.10.27-alpha2"
3
+ version = "0.10.28-alpha"
4
4
  description = ""
5
5
  authors = ["Natan Yellin <aantn@users.noreply.github.com>"]
6
6
  packages = [
@@ -1,2 +1,2 @@
1
1
  # this is updated by .github/workflows/release.yaml
2
- __version__ = "0.10.27-alpha2"
2
+ __version__ = "0.10.28-alpha"
@@ -33,6 +33,8 @@ from robusta.core.model.base_params import (
33
33
  ResourceChartItemType,
34
34
  ResourceChartResourceType,
35
35
  ResourceGraphEnricherParams,
36
+ OOMGraphEnricherParams,
37
+ OomKillParams,
36
38
  TimedPrometheusParams,
37
39
  VideoEnricherParams,
38
40
  )
@@ -153,8 +155,11 @@ from robusta.core.reporting import (
153
155
  ScanReportBlock,
154
156
  ScanReportRow,
155
157
  TableBlock,
156
- VideoLink,
158
+ VideoLink
157
159
  )
160
+
161
+ from robusta.core.reporting.base import EnrichmentType
162
+ from robusta.core.reporting.blocks import GraphBlock
158
163
  from robusta.core.reporting.action_requests import (
159
164
  ActionRequestBody,
160
165
  ExternalActionRequest,
@@ -182,6 +187,7 @@ from robusta.core.schedule.model import (
182
187
  ScheduledJob,
183
188
  SchedulingInfo,
184
189
  )
190
+ from robusta.core.playbooks.node_playbook_utils import create_node_graph_enrichment
185
191
  from robusta.core.sinks import SinkBase, SinkBaseParams, SinkConfigBase
186
192
  from robusta.core.sinks.kafka import KafkaSink, KafkaSinkConfigWrapper, KafkaSinkParams
187
193
  from robusta.core.triggers.helm_releases_triggers import HelmReleasesEvent, HelmReleasesTriggerEvent
@@ -4,6 +4,8 @@ import sys
4
4
  import typer
5
5
  from pydantic.main import BaseModel
6
6
 
7
+ from robusta.cli.utils import host_for_params
8
+
7
9
  ROBUSTA_BACKEND_PROFILE = os.environ.get("ROBUSTA_BACKEND_PROFILE", "")
8
10
 
9
11
 
@@ -17,14 +19,16 @@ class BackendProfile(BaseModel):
17
19
  custom_profile: bool = False
18
20
 
19
21
  @classmethod
20
- def fromDomain(cls, domain: str):
22
+ def fromDomainProvider(
23
+ cls, domain: str, api_endpoint_prefix: str, platform_endpoint_prefix: str, relay_endpoint_prefix: str
24
+ ):
21
25
  return cls(
22
- robusta_cloud_api_host=f"https://api.{domain}",
23
- robusta_ui_domain=f"https://platform.{domain}",
24
- robusta_relay_ws_address=f"wss://relay.{domain}",
25
- robusta_relay_external_actions_url=f"https://api.{domain}/integrations/generic/actions",
26
- robusta_telemetry_endpoint=f"https://api.{domain}/telemetry",
27
- robusta_store_token_url=f"https://api.{domain}/auth/server/tokens",
26
+ robusta_cloud_api_host=host_for_params(api_endpoint_prefix, domain),
27
+ robusta_ui_domain=host_for_params(platform_endpoint_prefix, domain),
28
+ robusta_relay_ws_address=host_for_params(relay_endpoint_prefix, domain, "wss"),
29
+ robusta_relay_external_actions_url=f"{host_for_params(api_endpoint_prefix, domain)}/integrations/generic/actions",
30
+ robusta_telemetry_endpoint=f"{host_for_params(api_endpoint_prefix, domain)}/telemetry",
31
+ robusta_store_token_url=f"{host_for_params(api_endpoint_prefix, domain)}/auth/server/tokens",
28
32
  )
29
33
 
30
34
 
@@ -10,6 +10,7 @@ import yaml
10
10
  from pydantic import BaseModel
11
11
 
12
12
  from robusta.cli.backend_profile import BackendProfile
13
+ from robusta.cli.utils import host_for_params
13
14
 
14
15
  ISSUER: str = "supabase"
15
16
 
@@ -47,13 +48,15 @@ class RobustaUI(BaseModel):
47
48
  RELAY_HOST: str
48
49
  SUPABASE_URL: str
49
50
  SUPABASE_KEY: str
51
+ provider: str
50
52
  service = {"nodePort": 30311} # platform.domain
51
53
 
52
- def __init__(self, domain: str, anon_key: str):
54
+ def __init__(self, domain: str, anon_key: str, provider: str, api_endpoint_prefix: str, db_endpoint_prefix: str):
53
55
  super().__init__(
54
- RELAY_HOST=f"https://api.{domain}",
55
- SUPABASE_URL=f"https://db.{domain}",
56
+ RELAY_HOST=host_for_params(api_endpoint_prefix, domain),
57
+ SUPABASE_URL=host_for_params(db_endpoint_prefix, domain),
56
58
  SUPABASE_KEY=anon_key,
59
+ provider=provider,
57
60
  )
58
61
 
59
62
 
@@ -68,17 +71,28 @@ class RobustaRelay(BaseModel):
68
71
  slackSigningSecret: str = "your-signing-secret"
69
72
  syncActionAllowedOrigins: str
70
73
  provider: str
74
+ apiEndpointPrefix: str
71
75
  apiNodePort: int = 30313 # api.domain
72
76
  wsNodePort: int = 30314 # relay.domain
73
77
 
74
- def __init__(self, domain: str, anon_key: str, provider: str, storePW: str):
78
+ def __init__(
79
+ self,
80
+ domain: str,
81
+ anon_key: str,
82
+ provider: str,
83
+ storePW: str,
84
+ db_endpoint_prefix: str,
85
+ platform_endpoint_prefix: str,
86
+ api_endpoint_prefix: str,
87
+ ):
75
88
  super().__init__(
76
89
  domain=domain,
77
- storeUrl=f"https://db.{domain}",
78
- syncActionAllowedOrigins=f"https://platform.{domain}",
90
+ storeUrl=host_for_params(db_endpoint_prefix, domain),
91
+ syncActionAllowedOrigins=host_for_params(platform_endpoint_prefix, domain),
79
92
  storeApiKey=anon_key,
80
93
  provider=provider,
81
94
  storePassword=storePW,
95
+ apiEndpointPrefix=api_endpoint_prefix,
82
96
  )
83
97
 
84
98
 
@@ -131,7 +145,7 @@ app = typer.Typer(add_completion=False)
131
145
  def gen_config(
132
146
  provider: str = typer.Option(
133
147
  ...,
134
- help='Cloud host provider. options are "on-prem", "gke", "eks"',
148
+ help='Cloud host provider. options are "on-prem", "gke", "eks", "openshift"',
135
149
  ),
136
150
  domain: str = typer.Option(..., help="domain used to route the on-prem services."),
137
151
  storage_class_name: str = typer.Option(None, help="database PVC storageClassName."),
@@ -140,11 +154,15 @@ def gen_config(
140
154
  db_nport: int = typer.Option(30312, help="node port Robusta database."),
141
155
  api_nport: int = typer.Option(30313, help="node port for Robusta API."),
142
156
  ws_nport: int = typer.Option(30314, help="node port for Robusta websocket."),
157
+ db_endpoint_prefix: str = typer.Option("db", help="Endpoint prefix for the db"),
158
+ api_endpoint_prefix: str = typer.Option("api", help="Endpoint prefix for the api"),
159
+ platform_endpoint_prefix: str = typer.Option("platform", help="Endpoint prefix for the platform"),
160
+ relay_ws_endpoint_prefix: str = typer.Option("relay", help="Endpoint prefix for the relay websocket"),
143
161
  ):
144
162
  """Create self host configuration files"""
145
- if provider not in {"on-prem", "gke", "eks"}:
163
+ if provider not in {"on-prem", "gke", "eks", "openshift"}:
146
164
  typer.secho(
147
- f'Invalid provider {provider}. options are "on-prem", "gke", "eks"',
165
+ f'Invalid provider {provider}. options are "on-prem", "gke", "eks", "openshift"',
148
166
  fg=typer.colors.RED,
149
167
  )
150
168
  return
@@ -159,8 +177,8 @@ def gen_config(
159
177
  values = SelfHostValues(
160
178
  PROVIDER=provider,
161
179
  DOMAIN=domain,
162
- SITE_URL=f"https://platform.{domain}",
163
- PUBLIC_REST_URL=f"https://db.{domain}/rest/v1/",
180
+ SITE_URL=host_for_params(platform_endpoint_prefix, domain),
181
+ PUBLIC_REST_URL=f"{host_for_params(db_endpoint_prefix, domain)}/rest/v1/",
164
182
  STORAGE_CLASS_NAME=storage_class_name,
165
183
  EKS_CERTIFICATE_ARN=eks_certificate_arn,
166
184
  )
@@ -171,18 +189,38 @@ def gen_config(
171
189
  anon_key=values.ANON_KEY,
172
190
  provider=provider,
173
191
  storePW=values.RELAY_PASSWORD,
192
+ db_endpoint_prefix=db_endpoint_prefix,
193
+ platform_endpoint_prefix=platform_endpoint_prefix,
194
+ api_endpoint_prefix=api_endpoint_prefix,
174
195
  )
175
196
  relayValues.apiNodePort = api_nport
176
197
  relayValues.wsNodePort = ws_nport
177
198
 
178
- uiValues = RobustaUI(domain=domain, anon_key=values.ANON_KEY)
199
+ uiValues = RobustaUI(
200
+ domain=domain,
201
+ anon_key=values.ANON_KEY,
202
+ provider=provider,
203
+ api_endpoint_prefix=api_endpoint_prefix,
204
+ db_endpoint_prefix=db_endpoint_prefix,
205
+ )
179
206
  uiValues.service["nodePort"] = platform_nport
180
207
 
181
208
  values_dict = values.dict(exclude_none=True)
182
209
  values_dict["robusta-ui"] = uiValues.dict()
183
210
  values_dict["robusta-relay"] = relayValues.dict()
184
-
185
- backendProfile = BackendProfile.fromDomain(domain=domain)
211
+ values_dict["ENDPOINT_PREFIXES"] = {
212
+ "DB": db_endpoint_prefix,
213
+ "API": api_endpoint_prefix,
214
+ "PLATFORM": platform_endpoint_prefix,
215
+ "RELAY": relay_ws_endpoint_prefix,
216
+ }
217
+
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
+ )
186
224
  self_host_approval_url = "https://api.robusta.dev/terms-of-service.html"
187
225
  typer.echo(f"By using this software you agree to the terms of service ({self_host_approval_url})\n")
188
226
  write_values_files("self_host_values.yaml", "robusta_cli_config.json", values_dict, backendProfile)
@@ -91,6 +91,10 @@ def replace_in_file(path, original, replacement):
91
91
  w.write(text)
92
92
 
93
93
 
94
+ def host_for_params(component, domain, scheme="https"):
95
+ return f"{scheme}://{component}.{domain}"
96
+
97
+
94
98
  @contextmanager
95
99
  def fetch_runner_logs(namespace: Optional[str], all_logs=False):
96
100
  start = time.time()
@@ -134,6 +138,9 @@ def get_runner_pod(namespace: Optional[str]) -> str:
134
138
  ).stdout.strip()
135
139
 
136
140
  if not output:
137
- typer.secho(f"Could not find robusta pod in namespace {namespace}. Are you missing the --namespace flag correctly?", fg="red")
138
-
139
- return output
141
+ typer.secho(
142
+ f"Could not find robusta pod in namespace {namespace}. Are you missing the --namespace flag correctly?",
143
+ fg="red",
144
+ )
145
+
146
+ return output
@@ -4,6 +4,7 @@ from typing import Dict, List, Optional, Union
4
4
 
5
5
  from pydantic import BaseModel, SecretStr, validator
6
6
 
7
+ from robusta.integrations import openshift
7
8
  from robusta.utils.documented_pydantic import DocumentedModel
8
9
 
9
10
 
@@ -17,6 +18,8 @@ class ChartValuesFormat(Enum):
17
18
  Percentage = auto()
18
19
  CPUUsage = auto()
19
20
 
21
+ def __str__(self):
22
+ return self.name
20
23
 
21
24
  class ResourceChartItemType(Enum):
22
25
  """
@@ -148,6 +151,19 @@ class PrometheusParams(ActionParams):
148
151
  logging.info(f"Stripping '?' off prometheus_url_query_string: {v}")
149
152
  return v
150
153
 
154
+ @validator("prometheus_auth", allow_reuse=True, always=True)
155
+ def auto_openshift_token(cls, v: Optional[SecretStr]):
156
+ # If openshift is enabled, and the user didn't configure prometheus_auth, we will try to load the token from the service account
157
+ if v is not None:
158
+ return v
159
+
160
+ openshift_token = openshift.load_token()
161
+ if openshift_token is not None:
162
+ logging.debug(f"Using openshift token from {openshift.TOKEN_LOCATION} for prometheus auth")
163
+ return SecretStr(f"Bearer {openshift_token}")
164
+
165
+ return None
166
+
151
167
 
152
168
  class PrometheusDuration(BaseModel):
153
169
  """
@@ -208,6 +224,7 @@ class CustomGraphEnricherParams(PrometheusParams):
208
224
  graph_title: Optional[str] = None
209
225
  graph_duration_minutes: int = 60
210
226
  chart_values_format: str = "Plain"
227
+ hide_legends: Optional[bool] = False
211
228
 
212
229
 
213
230
  class ResourceGraphEnricherParams(PrometheusParams):
@@ -310,5 +327,20 @@ class LogEnricherParams(ActionParams):
310
327
  filter_regex: Optional[str] = None
311
328
 
312
329
 
313
- class OomKillParams(ActionParams):
330
+ class OOMGraphEnricherParams(ResourceGraphEnricherParams):
331
+ """
332
+ :var delay_graph_s: the amount of seconds to delay getting the graph inorder to record the memory spike
333
+ """
334
+
335
+ delay_graph_s: int = 0
336
+
337
+
338
+ class OomKillParams(OOMGraphEnricherParams):
314
339
  attach_logs: Optional[bool] = False
340
+ container_memory_graph: Optional[bool] = False
341
+ node_memory_graph: Optional[bool] = False
342
+
343
+ def __init__(self, attach_logs: Optional[bool] = False, container_memory_graph: Optional[bool] = False,
344
+ node_memory_graph: Optional[bool] = False, **kwargs):
345
+ super().__init__(attach_logs=attach_logs, container_memory_graph=container_memory_graph,
346
+ node_memory_graph=node_memory_graph, resource_type=ResourceChartResourceType.Memory.name, **kwargs)
@@ -77,6 +77,7 @@ WEBSOCKET_PING_INTERVAL = int(os.environ.get("WEBSOCKET_PING_INTERVAL", 120))
77
77
  WEBSOCKET_PING_TIMEOUT = int(os.environ.get("WEBSOCKET_PING_TIMEOUT", 30))
78
78
 
79
79
  TRACE_INCOMING_REQUESTS = load_bool("TRACE_INCOMING_REQUESTS", False)
80
+ TRACE_INCOMING_ALERTS = load_bool("TRACE_INCOMING_ALERTS", False)
80
81
 
81
82
  SERVICE_CACHE_TTL_SEC = int(os.environ.get("SERVICE_CACHE_TTL_SEC", 900))
82
83
  SERVICE_CACHE_MAX_SIZE = int(os.environ.get("SERVICE_CACHE_MAX_SIZE", 1000))
@@ -87,7 +88,7 @@ PORT = int(os.environ.get("PORT", 5000)) # PORT
87
88
  ADDITIONAL_CERTIFICATE: str = os.environ.get("CERTIFICATE", "")
88
89
 
89
90
  DISCOVERY_MAX_BATCHES = int(os.environ.get("DISCOVERY_MAX_BATCHES", 25))
90
- DISCOVERY_BATCH_SIZE = int(os.environ.get("DISCOVERY_BATCH_SIZE", 2000))
91
+ DISCOVERY_BATCH_SIZE = int(os.environ.get("DISCOVERY_BATCH_SIZE", 30000))
91
92
  DISCOVERY_POD_OWNED_PODS = load_bool("DISCOVERY_POD_OWNED_PODS", False)
92
93
 
93
94
  DISABLE_HELM_MONITORING = load_bool("DISABLE_HELM_MONITORING", False)
@@ -101,3 +102,7 @@ MAX_ALLOWED_RULES_PER_CRD_ALERT = int(os.environ.get("MAX_ALLOWED_RULES_PER_CRD_
101
102
  IMAGE_REGISTRY = os.environ.get("IMAGE_REGISTRY", "us-central1-docker.pkg.dev/genuine-flight-317411/devel")
102
103
 
103
104
  CLUSTER_DOMAIN = os.environ.get("CLUSTER_DOMAIN", "cluster.local")
105
+
106
+ IS_OPENSHIFT = load_bool("IS_OPENSHIFT", False)
107
+
108
+ ENABLE_GRAPH_BLOCK = load_bool("ENABLE_GRAPH_BLOCK", False)
@@ -15,7 +15,7 @@ from robusta.core.reporting.base import (
15
15
  FindingSource,
16
16
  FindingSubject,
17
17
  FindingSubjectType,
18
- VideoLink,
18
+ VideoLink, EnrichmentType,
19
19
  )
20
20
  from robusta.core.sinks import SinkBase
21
21
  from robusta.integrations.scheduled.playbook_scheduler import PlaybooksScheduler
@@ -95,10 +95,13 @@ class ExecutionBaseEvent:
95
95
  self,
96
96
  enrichment_blocks: List[BaseBlock],
97
97
  annotations=None,
98
+ enrichment_type: Optional[EnrichmentType] = None,
99
+ title: Optional[str] = None,
98
100
  ):
99
101
  self.__prepare_sinks_findings()
100
102
  for sink in self.named_sinks:
101
- self.sink_findings[sink][0].add_enrichment(enrichment_blocks, annotations, True)
103
+ self.sink_findings[sink][0].add_enrichment(enrichment_blocks, annotations, True,
104
+ enrichment_type=enrichment_type, title=title)
102
105
 
103
106
  def add_finding(self, finding: Finding, suppress_warning: bool = False):
104
107
  finding.dirty = True # Warn if new enrichments are added to this finding directly
@@ -7,6 +7,7 @@ from robusta.core.playbooks.playbook_utils import get_env_replacement, replace_e
7
7
  from robusta.core.sinks.datadog.datadog_sink_params import DataDogSinkConfigWrapper
8
8
  from robusta.core.sinks.discord.discord_sink_params import DiscordSinkConfigWrapper
9
9
  from robusta.core.sinks.file.file_sink_params import FileSinkConfigWrapper
10
+ from robusta.core.sinks.google_chat.google_chat_params import GoogleChatSinkConfigWrapper
10
11
  from robusta.core.sinks.jira.jira_sink_params import JiraSinkConfigWrapper
11
12
  from robusta.core.sinks.kafka.kafka_sink_params import KafkaSinkConfigWrapper
12
13
  from robusta.core.sinks.mattermost.mattermost_sink_params import MattermostSinkConfigWrapper
@@ -22,6 +23,7 @@ from robusta.core.sinks.victorops.victorops_sink_params import VictoropsConfigWr
22
23
  from robusta.core.sinks.webex.webex_sink_params import WebexSinkConfigWrapper
23
24
  from robusta.core.sinks.webhook.webhook_sink_params import WebhookSinkConfigWrapper
24
25
  from robusta.core.sinks.yamessenger.yamessenger_sink_params import YaMessengerSinkConfigWrapper
26
+ from robusta.core.sinks.pushover.pushover_sink_params import PushoverSinkConfigWrapper
25
27
  from robusta.model.alert_relabel_config import AlertRelabel
26
28
  from robusta.model.playbook_definition import PlaybookDefinition
27
29
  from robusta.utils.base64_utils import is_base64_encoded
@@ -57,6 +59,8 @@ class RunnerConfig(BaseModel):
57
59
  JiraSinkConfigWrapper,
58
60
  FileSinkConfigWrapper,
59
61
  MailSinkConfigWrapper,
62
+ PushoverSinkConfigWrapper,
63
+ GoogleChatSinkConfigWrapper,
60
64
  ]
61
65
  ]
62
66
  ]
@@ -1,4 +1,5 @@
1
1
  from datetime import datetime
2
+ from typing import Optional, List
2
3
 
3
4
  from hikaru.model.rel_1_26 import Container, Pod
4
5
 
@@ -8,7 +9,8 @@ from robusta.core.playbooks.prometheus_enrichment_utils import XAxisLine, YAxisL
8
9
  from robusta.integrations.kubernetes.api_client_utils import parse_kubernetes_datetime
9
10
 
10
11
 
11
- def create_container_graph(params: ResourceGraphEnricherParams, pod: Pod, oomkilled_container: PodContainer, show_limit=False):
12
+ def create_container_graph(params: ResourceGraphEnricherParams, pod: Pod, oomkilled_container: PodContainer, show_limit=False,
13
+ metrics_legends_labels: Optional[List[str]] = None,):
12
14
  container = oomkilled_container.container
13
15
  oom_killed_status = oomkilled_container.state
14
16
  labels = {
@@ -62,5 +64,6 @@ def create_container_graph(params: ResourceGraphEnricherParams, pod: Pod, oomkil
62
64
  graph_duration_minutes=params.graph_duration_minutes,
63
65
  lines=limit_lines,
64
66
  title_override=f"{params.resource_type} Usage for container {container.name}",
67
+ metrics_legends_labels=metrics_legends_labels,
65
68
  )
66
69
  return graph_enrichment
@@ -15,6 +15,7 @@ from robusta.api import (
15
15
  )
16
16
  from robusta.core.discovery.top_service_resolver import TopLevelResource, TopServiceResolver
17
17
  from robusta.core.playbooks.common import get_event_timestamp, get_events_list
18
+ from robusta.core.reporting.base import EnrichmentType
18
19
 
19
20
 
20
21
  @action
@@ -53,7 +54,7 @@ def event_history(event: ExecutionBaseEvent):
53
54
  warning_event.regarding.namespace,
54
55
  )
55
56
  if events_table:
56
- finding.add_enrichment([events_table])
57
+ finding.add_enrichment([events_table], enrichment_type=EnrichmentType.k8s_events, title="Resource Events")
57
58
  event.add_finding(finding, True)
58
59
  reported_obj_history_list.append(warning_event_key)
59
60
 
@@ -1,12 +1,15 @@
1
1
  from datetime import datetime
2
+ from typing import Optional, List
2
3
 
3
4
  from hikaru.model.rel_1_26 import Node
4
5
 
5
6
  from robusta.core.model.base_params import ResourceChartItemType, ResourceChartResourceType, ResourceGraphEnricherParams
6
7
  from robusta.core.playbooks.prometheus_enrichment_utils import create_resource_enrichment, get_node_internal_ip
8
+ from robusta.core.reporting.blocks import GraphBlock
7
9
 
8
10
 
9
- def create_node_graph_enrichment(params: ResourceGraphEnricherParams, node: Node):
11
+ def create_node_graph_enrichment(params: ResourceGraphEnricherParams, node: Node,
12
+ metrics_legends_labels: Optional[List[str]] = None,) -> GraphBlock:
10
13
  start_at = datetime.now()
11
14
  labels = {"node": node.metadata.name}
12
15
  internal_ip = get_node_internal_ip(node)
@@ -20,5 +23,6 @@ def create_node_graph_enrichment(params: ResourceGraphEnricherParams, node: Node
20
23
  ResourceChartItemType.Node,
21
24
  prometheus_params=params,
22
25
  graph_duration_minutes=params.graph_duration_minutes,
26
+ metrics_legends_labels=metrics_legends_labels,
23
27
  )
24
28
  return graph_enrichment
@@ -10,6 +10,7 @@ from robusta.api import (
10
10
  RegexReplacementStyle,
11
11
  RobustaPod,
12
12
  )
13
+ from robusta.core.reporting.base import EnrichmentType
13
14
 
14
15
 
15
16
  def start_log_enrichment(
@@ -61,6 +62,8 @@ def start_log_enrichment(
61
62
  log_name += f"/{container}"
62
63
  event.add_enrichment(
63
64
  [FileBlock(filename=f"{pod.metadata.name}.log", contents=log_data.encode())],
65
+ enrichment_type=EnrichmentType.text_file,
66
+ title="Pod Logs"
64
67
  )
65
68
  break
66
69
 
@@ -40,6 +40,7 @@ def get_pod_issue_message_and_reason(pod: Pod) -> Tuple[Optional[str], Optional[
40
40
  pod.status.containerStatuses[0].state.waiting.message,
41
41
  reason,
42
42
  )
43
+ return None, None
43
44
 
44
45
 
45
46
  def decompose_flag(flag: Flag) -> List[Flag]: