robusta-api 0.45.0__tar.gz → 0.46.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. {robusta_api-0.45.0 → robusta_api-0.46.0}/PKG-INFO +9 -6
  2. {robusta_api-0.45.0 → robusta_api-0.46.0}/pyproject.toml +24 -9
  3. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/_version.py +1 -1
  4. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/env_vars.py +4 -0
  5. robusta_api-0.46.0/src/robusta/runner/log_init.py +44 -0
  6. robusta_api-0.45.0/src/robusta/runner/log_init.py +0 -21
  7. {robusta_api-0.45.0 → robusta_api-0.46.0}/LICENSE +0 -0
  8. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/__init__.py +0 -0
  9. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/api/__init__.py +0 -0
  10. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/clients/robusta_client.py +0 -0
  11. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/__init__.py +0 -0
  12. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/discovery/__init__.py +0 -0
  13. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/discovery/discovery.py +0 -0
  14. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/discovery/resource_names.py +0 -0
  15. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/discovery/top_service_resolver.py +0 -0
  16. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/discovery/utils.py +0 -0
  17. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/exceptions.py +0 -0
  18. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/__init__.py +0 -0
  19. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/base_params.py +0 -0
  20. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/cluster_status.py +0 -0
  21. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/events.py +0 -0
  22. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/helm_release.py +0 -0
  23. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/jobs.py +0 -0
  24. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/k8s_operation_type.py +0 -0
  25. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/namespaces.py +0 -0
  26. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/nodes.py +0 -0
  27. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/openshift_group.py +0 -0
  28. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/pods.py +0 -0
  29. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/runner_config.py +0 -0
  30. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/model/services.py +0 -0
  31. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/persistency/__init__.py +0 -0
  32. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/persistency/in_memory.py +0 -0
  33. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/persistency/scheduled_jobs_states_dal.py +0 -0
  34. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/__init__.py +0 -0
  35. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/actions_registry.py +0 -0
  36. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/base_trigger.py +0 -0
  37. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/common.py +0 -0
  38. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/container_playbook_utils.py +0 -0
  39. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/crash_reporter.py +0 -0
  40. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/generation.py +0 -0
  41. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/internal/CRD_API_DOCUMENTATION.md +0 -0
  42. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/internal/__init__.py +0 -0
  43. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/internal/ai_integration.py +0 -0
  44. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/internal/crds.py +0 -0
  45. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/internal/discovery_events.py +0 -0
  46. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/job_utils.py +0 -0
  47. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/node_enrichment_utils.py +0 -0
  48. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/node_playbook_utils.py +0 -0
  49. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/oom_killer_utils.py +0 -0
  50. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/playbook_utils.py +0 -0
  51. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/playbooks_event_handler.py +0 -0
  52. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/playbooks_event_handler_impl.py +0 -0
  53. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/pod_utils/crashloop_utils.py +0 -0
  54. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/pod_utils/imagepull_utils.py +0 -0
  55. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/pod_utils/pending_pod_utils.py +0 -0
  56. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/prometheus_enrichment_utils.py +0 -0
  57. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/playbooks/trigger.py +0 -0
  58. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/pubsub/__init__.py +0 -0
  59. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/pubsub/event_emitter.py +0 -0
  60. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/pubsub/event_subscriber.py +0 -0
  61. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/pubsub/events_pubsub.py +0 -0
  62. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/__init__.py +0 -0
  63. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/action_requests.py +0 -0
  64. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/base.py +0 -0
  65. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/blocks.py +0 -0
  66. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/callbacks.py +0 -0
  67. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/consts.py +0 -0
  68. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/custom_rendering.py +0 -0
  69. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/finding_subjects.py +0 -0
  70. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/holmes.py +0 -0
  71. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/url_helpers.py +0 -0
  72. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/reporting/utils.py +0 -0
  73. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/schedule/__init__.py +0 -0
  74. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/schedule/model.py +0 -0
  75. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/schedule/scheduler.py +0 -0
  76. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/__init__.py +0 -0
  77. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/common/__init__.py +0 -0
  78. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/common/channel_transformer.py +0 -0
  79. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/common/html_tools.py +0 -0
  80. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/datadog/__init__.py +0 -0
  81. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/datadog/datadog_sink.py +0 -0
  82. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/datadog/datadog_sink_params.py +0 -0
  83. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/discord/__init__.py +0 -0
  84. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/discord/discord_sink.py +0 -0
  85. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/discord/discord_sink_params.py +0 -0
  86. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/file/__init__.py +0 -0
  87. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/file/file_sink.py +0 -0
  88. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/file/file_sink_params.py +0 -0
  89. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/file/object_traverser.py +0 -0
  90. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/google_chat/__init__.py +0 -0
  91. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/google_chat/google_chat.py +0 -0
  92. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/google_chat/google_chat_params.py +0 -0
  93. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/incidentio/__init__.py +0 -0
  94. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/incidentio/incidentio_api.py +0 -0
  95. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/incidentio/incidentio_client.py +0 -0
  96. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/incidentio/incidentio_sink.py +0 -0
  97. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/incidentio/incidentio_sink_params.py +0 -0
  98. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/jira/__init__.py +0 -0
  99. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/jira/jira_sink.py +0 -0
  100. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/jira/jira_sink_params.py +0 -0
  101. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/kafka/__init__.py +0 -0
  102. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/kafka/kafka_sink.py +0 -0
  103. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/kafka/kafka_sink_params.py +0 -0
  104. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/mail/__init__.py +0 -0
  105. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/mail/mail_sink.py +0 -0
  106. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/mail/mail_sink_params.py +0 -0
  107. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/mattermost/__init__.py +0 -0
  108. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/mattermost/mattermost_sink.py +0 -0
  109. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/mattermost/mattermost_sink_params.py +0 -0
  110. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/msteams/__init__.py +0 -0
  111. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/msteams/msteams_sink.py +0 -0
  112. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/msteams/msteams_sink_params.py +0 -0
  113. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/msteams/msteams_webhook_tranformer.py +0 -0
  114. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/opsgenie/__init__.py +0 -0
  115. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/opsgenie/opsgenie_sink.py +0 -0
  116. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/opsgenie/opsgenie_sink_params.py +0 -0
  117. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pagerduty/__init__.py +0 -0
  118. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pagerduty/pagerduty_sink.py +0 -0
  119. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pagerduty/pagerduty_sink_params.py +0 -0
  120. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pushover/__init__.py +0 -0
  121. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pushover/pushover_client.py +0 -0
  122. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pushover/pushover_sink.py +0 -0
  123. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/pushover/pushover_sink_params.py +0 -0
  124. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/__init__.py +0 -0
  125. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/dal/__init__.py +0 -0
  126. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/dal/model_conversion.py +0 -0
  127. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/dal/supabase_dal.py +0 -0
  128. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/discovery_metrics.py +0 -0
  129. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/prometheus_discovery_utils.py +0 -0
  130. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/robusta_sink.py +0 -0
  131. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/robusta_sink_params.py +0 -0
  132. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/rrm/__init__.py +0 -0
  133. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/rrm/account_resource_fetcher.py +0 -0
  134. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/rrm/base_resource_manager.py +0 -0
  135. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/rrm/prometheus_alert_resource_manager.py +0 -0
  136. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/rrm/rrm.py +0 -0
  137. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/robusta/rrm/types.py +0 -0
  138. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/rocketchat/__init__.py +0 -0
  139. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/rocketchat/rocketchat_sink.py +0 -0
  140. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/rocketchat/rocketchat_sink_params.py +0 -0
  141. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/servicenow/__init__.py +0 -0
  142. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/servicenow/servicenow_sink.py +0 -0
  143. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/servicenow/servicenow_sink_params.py +0 -0
  144. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/sink_base.py +0 -0
  145. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/sink_base_params.py +0 -0
  146. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/sink_config.py +0 -0
  147. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/sink_factory.py +0 -0
  148. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/__init__.py +0 -0
  149. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/preview/slack_sink_preview.py +0 -0
  150. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/preview/slack_sink_preview_params.py +0 -0
  151. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/slack_sink.py +0 -0
  152. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/slack_sink_params.py +0 -0
  153. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/templates/header.j2 +0 -0
  154. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/slack/templates/template_loader.py +0 -0
  155. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/telegram/__init__.py +0 -0
  156. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/telegram/telegram_client.py +0 -0
  157. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/telegram/telegram_sink.py +0 -0
  158. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/telegram/telegram_sink_params.py +0 -0
  159. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/timing.py +0 -0
  160. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/transformer.py +0 -0
  161. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/victorops/__init__.py +0 -0
  162. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/victorops/victorops_sink.py +0 -0
  163. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/victorops/victorops_sink_params.py +0 -0
  164. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/webex/__init__.py +0 -0
  165. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/webex/webex_sink.py +0 -0
  166. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/webex/webex_sink_params.py +0 -0
  167. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/webhook/__init__.py +0 -0
  168. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/webhook/webhook_sink.py +0 -0
  169. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/webhook/webhook_sink_params.py +0 -0
  170. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/yamessenger/__init__.py +0 -0
  171. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/yamessenger/yamessenger_client.py +0 -0
  172. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/yamessenger/yamessenger_sink.py +0 -0
  173. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/yamessenger/yamessenger_sink_params.py +0 -0
  174. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/zulip/__init__.py +0 -0
  175. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/zulip/zulip_sink.py +0 -0
  176. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/sinks/zulip/zulip_sink_params.py +0 -0
  177. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/stream/utils.py +0 -0
  178. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/container_oom_killed_trigger.py +0 -0
  179. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/custom_triggers.py +0 -0
  180. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/error_event_trigger.py +0 -0
  181. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/helm_releases_triggers.py +0 -0
  182. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/job_failed_trigger.py +0 -0
  183. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/multi_resources_trigger.py +0 -0
  184. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/oom_killed_trigger_base.py +0 -0
  185. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/pod_crash_loop_trigger.py +0 -0
  186. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/pod_evicted_trigger.py +0 -0
  187. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/pod_image_pull_backoff.py +0 -0
  188. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/core/triggers/pod_oom_killed_trigger.py +0 -0
  189. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/__init__.py +0 -0
  190. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/argocd/argocd_client.py +0 -0
  191. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/common/__init__.py +0 -0
  192. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/common/requests.py +0 -0
  193. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/discord/__init__.py +0 -0
  194. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/discord/sender.py +0 -0
  195. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/git/__init__.py +0 -0
  196. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/git/git_repo.py +0 -0
  197. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/git/well_known_hosts.py +0 -0
  198. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/google_chat/__init__.py +0 -0
  199. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/google_chat/sender.py +0 -0
  200. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/grafana.py +0 -0
  201. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/helper.py +0 -0
  202. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/jira/__init__.py +0 -0
  203. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/jira/client.py +0 -0
  204. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/jira/sender.py +0 -0
  205. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/__init__.py +0 -0
  206. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/api_client_utils.py +0 -0
  207. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/autogenerated/__init__.py +0 -0
  208. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/autogenerated/events.py +0 -0
  209. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/autogenerated/models.py +0 -0
  210. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/autogenerated/triggers.py +0 -0
  211. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/autogenerated/v1/__init__.py +0 -0
  212. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/autogenerated/v1/models.py +0 -0
  213. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/base_event.py +0 -0
  214. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/base_triggers.py +0 -0
  215. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/custom_crds.py +0 -0
  216. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/custom_models.py +0 -0
  217. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/model_not_found_exception.py +0 -0
  218. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/process_utils.py +0 -0
  219. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/kubernetes/templates.py +0 -0
  220. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/mail/__init__.py +0 -0
  221. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/mail/sender.py +0 -0
  222. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/mattermost/__init__.py +0 -0
  223. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/mattermost/client.py +0 -0
  224. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/mattermost/sender.py +0 -0
  225. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/__init__.py +0 -0
  226. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_adaptive_card_files.py +0 -0
  227. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_image.py +0 -0
  228. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_adaptive_card_files_text.py +0 -0
  229. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/__init__.py +0 -0
  230. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_action.py +0 -0
  231. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_base.py +0 -0
  232. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_card.py +0 -0
  233. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_column.py +0 -0
  234. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_container.py +0 -0
  235. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_images.py +0 -0
  236. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_table.py +0 -0
  237. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_elements/msteams_text_block.py +0 -0
  238. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_mark_down_fix_url.py +0 -0
  239. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/msteams_msg.py +0 -0
  240. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/msteams/sender.py +0 -0
  241. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/openshift/__init__.py +0 -0
  242. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/openshift/token.py +0 -0
  243. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/prometheus/__init__.py +0 -0
  244. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/prometheus/models.py +0 -0
  245. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/prometheus/trigger.py +0 -0
  246. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/prometheus/utils.py +0 -0
  247. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/receiver.py +0 -0
  248. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/resource_analysis/__init__.py +0 -0
  249. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/resource_analysis/cpu_analyzer.py +0 -0
  250. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/resource_analysis/memory_analyzer.py +0 -0
  251. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/resource_analysis/node_cpu_analyzer.py +0 -0
  252. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/resource_analysis/prometheus_analyzer.py +0 -0
  253. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/rocketchat/__init__.py +0 -0
  254. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/rocketchat/sender.py +0 -0
  255. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/__init__.py +0 -0
  256. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/event.py +0 -0
  257. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/models.py +0 -0
  258. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/playbook_scheduler.py +0 -0
  259. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/playbook_scheduler_manager.py +0 -0
  260. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/playbook_scheduler_manager_impl.py +0 -0
  261. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/scheduled/trigger.py +0 -0
  262. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/servicenow/__init__.py +0 -0
  263. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/servicenow/sender.py +0 -0
  264. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/slack/__init__.py +0 -0
  265. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/slack/sender.py +0 -0
  266. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/webex/__init__.py +0 -0
  267. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/webex/sender.py +0 -0
  268. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/zulip/__init__.py +0 -0
  269. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/integrations/zulip/sender.py +0 -0
  270. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/model/alert_relabel_config.py +0 -0
  271. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/model/config.py +0 -0
  272. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/model/playbook_action.py +0 -0
  273. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/model/playbook_definition.py +0 -0
  274. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/patch/patch.py +0 -0
  275. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/__init__.py +0 -0
  276. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/config_loader.py +0 -0
  277. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/main.py +0 -0
  278. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/not_found_exception.py +0 -0
  279. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/object_updater.py +0 -0
  280. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/process_setup.py +0 -0
  281. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/ssl_utils.py +0 -0
  282. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/telemetry.py +0 -0
  283. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/telemetry_service.py +0 -0
  284. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/web.py +0 -0
  285. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/runner/web_api.py +0 -0
  286. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/__init__.py +0 -0
  287. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/auth_provider.py +0 -0
  288. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/base64_utils.py +0 -0
  289. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/cluster_provider_discovery.py +0 -0
  290. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/common.py +0 -0
  291. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/decorators.py +0 -0
  292. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/docs.py +0 -0
  293. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/documented_pydantic.py +0 -0
  294. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/error_codes.py +0 -0
  295. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/file_system_watcher.py +0 -0
  296. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/function_hashes.py +0 -0
  297. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/json_schema.py +0 -0
  298. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/parsing.py +0 -0
  299. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/rate_limiter.py +0 -0
  300. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/scope.py +0 -0
  301. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/server_start.py +0 -0
  302. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/service_discovery.py +0 -0
  303. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/silence_utils.py +0 -0
  304. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/stack_tracer.py +0 -0
  305. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/task_queue.py +0 -0
  306. {robusta_api-0.45.0 → robusta_api-0.46.0}/src/robusta/utils/time_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robusta-api
3
- Version: 0.45.0
3
+ Version: 0.46.0
4
4
  Summary:
5
5
  Author: Arik Alon
6
6
  Author-email: arikalon1@users.noreply.github.com
@@ -18,9 +18,10 @@ Requires-Dist: bitmath (>=1.3.3.1,<2.0.0.0)
18
18
  Requires-Dist: boto3 (>=1.42.19,<2.0.0)
19
19
  Requires-Dist: botocore (>=1.42.19,<2.0.0)
20
20
  Requires-Dist: certifi (>=2026.4.22)
21
+ Requires-Dist: click (>=8.3.3)
21
22
  Requires-Dist: colorlog (>=5.0.1,<6.0.0)
22
23
  Requires-Dist: croniter (>=1.3.15,<2.0.0)
23
- Requires-Dist: cryptography (>=46.0.7,<47.0.0)
24
+ Requires-Dist: cryptography (>=48.0.1,<49.0.0)
24
25
  Requires-Dist: datadog-api-client (>=1.2.0,<2.0.0) ; extra == "all"
25
26
  Requires-Dist: docutils (==0.19)
26
27
  Requires-Dist: dpath (>=2.0.5,<3.0.0)
@@ -31,23 +32,25 @@ Requires-Dist: h2 (>=4.3.0,<5.0.0)
31
32
  Requires-Dist: hikaru-model-26 (>=1.1.1,<2.0.0)
32
33
  Requires-Dist: httpx (==0.27.2)
33
34
  Requires-Dist: humanize (>=3.13.1,<4.0.0)
34
- Requires-Dist: idna (>=3.7)
35
+ Requires-Dist: idna (>=3.15)
35
36
  Requires-Dist: jinja2 (>=3.1.5)
36
- Requires-Dist: kafka-python (>=2.0.2,<3.0.0) ; extra == "all"
37
+ Requires-Dist: kafka-python (>=2.3.2,<3.0.0) ; extra == "all"
37
38
  Requires-Dist: kubernetes (>=26.1.0,<27.0.0)
38
39
  Requires-Dist: markdown2 (==2.4.13)
39
40
  Requires-Dist: opsgenie-sdk (>=2.1.5,<3.0.0)
41
+ Requires-Dist: pillow (>=12.3.0,<13.0.0)
40
42
  Requires-Dist: poetry-core (==1.1.0a7) ; extra == "all"
41
43
  Requires-Dist: postgrest (==0.16.8)
42
44
  Requires-Dist: prometheus-api-client (==0.5.4) ; extra == "all"
43
45
  Requires-Dist: prometheus-client (>=0.12.0,<0.13.0)
44
46
  Requires-Dist: prometrix (==0.2.11)
45
- Requires-Dist: pyasn1 (>=0.6.3)
47
+ Requires-Dist: pyasn1 (>=0.6.4)
46
48
  Requires-Dist: pydantic (>=1.8.1,<2.0.0)
47
49
  Requires-Dist: pydash (==8.0.0)
48
50
  Requires-Dist: pygal (>=3.0.0,<4.0.0)
49
- Requires-Dist: pyjwt (>=2.12.0,<3.0.0)
51
+ Requires-Dist: pyjwt (>=2.13.0,<3.0.0)
50
52
  Requires-Dist: pymsteams (>=0.1.16,<0.2.0)
53
+ Requires-Dist: python-json-logger (>=3.0.0,<4.0.0)
51
54
  Requires-Dist: pytz (>=2021.3,<2022.0)
52
55
  Requires-Dist: pyyaml (>=6.0,<7.0)
53
56
  Requires-Dist: regex (==2024.5.15)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "robusta-api"
3
- version = "0.45.0"
3
+ version = "0.46.0"
4
4
  description = ""
5
5
  authors = ["Arik Alon <arikalon1@users.noreply.github.com>"]
6
6
  packages = [
@@ -20,10 +20,13 @@ include_trailing_comma = true
20
20
  python = ">=3.10, <3.12"
21
21
  setuptools = "^80.9.0"
22
22
  colorlog = "^5.0.1"
23
+ python-json-logger = "^3.0.0"
23
24
  pydantic = "^1.8.1"
24
25
  kubernetes = "^26.1.0"
25
26
  pymsteams = "^0.1.16"
26
- idna= { version = ">=3.7", optional = true }
27
+ # Bump to fix CVE-2026-45409 / GHSA-65pc-fj4g-8rjx (Moderate, GHSA published
28
+ # 2026-05-19, older than 60 days): idna.encode() bypass of the CVE-2024-3651 fix
29
+ idna= { version = ">=3.15", optional = true }
27
30
  supabase = "2.5.1"
28
31
  tabulate = { version = "^0.8.10" }
29
32
  slack-sdk = { version = "^3.23.0" }
@@ -34,7 +37,8 @@ grafana-api = { version = "^1.0.3", optional = true }
34
37
  watchdog = { version = "^2.1.0", optional = true }
35
38
  better-exceptions = { version = "^0.3.3", optional = true }
36
39
  CairoSVG = { version = "^2.5.2", optional = true }
37
- kafka-python = { version = "^2.0.2", optional = true }
40
+ # Bump to fix CVE-2026-10142, CVE-2026-10143 (High): kafka-python protocol-parser DoS
41
+ kafka-python = { version = "^2.3.2", optional = true }
38
42
  datadog-api-client = { version = "^1.2.0", optional = true }
39
43
  dpath = "^2.0.5"
40
44
  websocket-client = "1.3.3"
@@ -57,7 +61,8 @@ humanize = "^3.13.1"
57
61
  # and therefore requires gcc to install which we'd like to avoid
58
62
  # this is similar to the issue at https://github.com/dulwich/dulwich/issues/839
59
63
  # Pin to fix CVE-2026-39892 (Critical): cryptography buffer overflow with non-contiguous buffers
60
- cryptography = "^46.0.7"
64
+ # Pin to fix GHSA-537c-gmf6-5ccf (High): cryptography
65
+ cryptography = "^48.0.1"
61
66
  fpdf2 = "^2.7.1"
62
67
  attrs = "^23.1.0"
63
68
  prometrix = "0.2.11"
@@ -73,24 +78,34 @@ requests = "^2.33.0"
73
78
  # Bump to fix certifi CVE flagged by customer scan; date-versioned, so use >= rather than caret
74
79
  certifi = ">=2026.4.22"
75
80
  regex = "2024.5.15"
76
- pyjwt = "^2.12.0"
81
+ # Pin to fix CVE-2026-48526 (High) + CVE-2026-48522/48523/48525 (Medium): PyJWT
82
+ pyjwt = "^2.13.0"
77
83
  urllib3 = "^2.7.0"
78
84
  httpx = "0.27.2"
79
85
  postgrest = "0.16.8"
80
86
  # Pin to fix cve https://github.com/robusta-dev/robusta/security/dependabot/85
81
87
  h2 = "^4.3.0"
82
88
  # Pin to fix CVE-2026-30922 (transitive via google-auth)
83
- pyasn1 = ">=0.6.3"
89
+ # Bump to fix CVE-2026-59885, CVE-2026-59886 (High)
90
+ pyasn1 = ">=0.6.4"
84
91
  # Pin to fix CVE-2026-22701 (transitive via virtualenv/pre-commit)
85
92
  filelock = ">=3.20.3"
86
93
  # Pin to fix CVE-2026-22702 (transitive via pre-commit)
87
94
  virtualenv = "^20.36.1"
95
+ # Pillow is pulled in transitively (fpdf2, CairoSVG). Pin to fix CVE-2026-54058,
96
+ # CVE-2026-54059, CVE-2026-54060, CVE-2026-55379, CVE-2026-55380, CVE-2026-59197,
97
+ # CVE-2026-59199, CVE-2026-59200, CVE-2026-59204, CVE-2026-59205 (High)
98
+ pillow = "^12.3.0"
99
+ # click is pulled in transitively (flask, typer). Pin to fix CVE-2026-7246 (High):
100
+ # command injection via unsanitized filename in click.edit()
101
+ click = ">=8.3.3"
88
102
 
89
103
  [tool.poetry.dev-dependencies]
90
104
  pre-commit = "^2.13.0"
91
105
  # Pin to fix CVE-2025-71176 (pytest < 9.0.3)
92
106
  pytest = "^9.0.3"
93
- python-dotenv = "^0.18.0"
107
+ # Bump to fix CVE-2026-28684 (Medium, published 2026-04-20)
108
+ python-dotenv = "^1.2.2"
94
109
  Sphinx = "6.2.1"
95
110
  #furo = "^2021.11.12"
96
111
  sphinx-autobuild = "^2021.3.14"
@@ -100,7 +115,6 @@ witchhazel = "^2018.8.23"
100
115
  sphinx-autodoc-typehints = "^1.12.0"
101
116
  sphinxcontrib-images = "^0.9.4"
102
117
  jsonref = "^0.2"
103
- Pillow = "^12.2.0"
104
118
  sphinxcontrib-mermaid = "^0.7.1"
105
119
  cssselect = "^1.1.0"
106
120
  tinycss = "^0.4"
@@ -130,7 +144,8 @@ all = ["Flask", "grafana-api", "watchdog", "better-exceptions", "CairoSVG", "tab
130
144
  sphinx-jinja = { git = "https://github.com/robusta-dev/sphinx-jinja.git" }
131
145
  sphinx-reredirects = "^0.1.1"
132
146
  freezegun = "^1.4.0"
133
- tornado = "^6.5.5"
147
+ # Bump to fix CVE-2026-49853, CVE-2026-49855 (High) and GHSA-pw6j-qg29-8w7f (Medium)
148
+ tornado = "^6.5.7"
134
149
  responses = "^0.25.7"
135
150
 
136
151
  [build-system]
@@ -1,2 +1,2 @@
1
1
  # this is updated by .github/workflows/release.yaml
2
- __version__ = "0.45.0"
2
+ __version__ = "0.46.0"
@@ -104,6 +104,10 @@ DISABLE_FINDINGS_PERSISTENCE = load_bool("DISABLE_FINDINGS_PERSISTENCE", False)
104
104
  DISABLE_DISCOVERY = load_bool("DISABLE_DISCOVERY", False)
105
105
  DISABLE_RESOURCE_WATCH_PERSISTENCE = load_bool("DISABLE_RESOURCE_WATCH_PERSISTENCE", False)
106
106
 
107
+ # When true, logs are emitted as JSON (one object per line) instead of the default
108
+ # colored text format. Useful for log scrapers like Filebeat. Defaults to false.
109
+ ENABLE_JSON_LOGS_FORMAT = load_bool("ENABLE_JSON_LOGS_FORMAT", False)
110
+
107
111
  PROMETHEUS_ERROR_LOG_PERIOD_SEC = int(os.environ.get("DISCOVERY_MAX_BATCHES", 14400))
108
112
 
109
113
  RRM_PERIOD_SEC = int(os.environ.get("RRM_PERIOD_SEC", 90))
@@ -0,0 +1,44 @@
1
+ import logging
2
+ import os
3
+ import os.path
4
+ import sys
5
+
6
+ import colorlog
7
+ from pythonjsonlogger.json import JsonFormatter
8
+
9
+ from robusta.core.model.env_vars import ENABLE_JSON_LOGS_FORMAT
10
+
11
+
12
+ def init_logging():
13
+ logging_level = os.environ.get("LOG_LEVEL", "INFO")
14
+ logging_datefmt = "%Y-%m-%d %H:%M:%S"
15
+
16
+ if ENABLE_JSON_LOGS_FORMAT:
17
+ # JSON logs (one object per line) are easier for log scrapers like
18
+ # Filebeat to index, search, and filter. Rename levelname -> severity
19
+ # to match the convention used across Robusta services (relay, holmes).
20
+ # Avoid printing anything to stdout here so the JSON stream is not
21
+ # corrupted by a plain-text line.
22
+ handler = logging.StreamHandler(sys.stdout)
23
+ handler.setFormatter(
24
+ JsonFormatter(
25
+ fmt="%(asctime)s %(levelname)s %(name)s %(filename)s %(lineno)d %(funcName)s %(message)s",
26
+ datefmt="%Y-%m-%dT%H:%M:%S",
27
+ rename_fields={"levelname": "severity"},
28
+ )
29
+ )
30
+ logging.basicConfig(handlers=[handler], level=logging_level, force=True)
31
+ else:
32
+ logging_format = "%(log_color)s%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s"
33
+ # force=True so a prior configuration (e.g. a JSON handler from an
34
+ # earlier init_logging() call) is replaced, mirroring the JSON branch.
35
+ colorlog.basicConfig(
36
+ format=logging_format, level=logging_level, datefmt=logging_datefmt, force=True
37
+ )
38
+
39
+ logging.getLogger().setLevel(logging_level)
40
+ for logger_name in ["werkzeug", "telethon"]:
41
+ log = logging.getLogger(logger_name)
42
+ log.setLevel(logging.ERROR)
43
+
44
+ logging.info(f"logger initialized using {logging_level} log level")
@@ -1,21 +0,0 @@
1
- import logging
2
- import os
3
- import os.path
4
-
5
- import colorlog
6
-
7
-
8
- def init_logging():
9
- logging_level = os.environ.get("LOG_LEVEL", "INFO")
10
- logging_format = "%(log_color)s%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s"
11
- logging_datefmt = "%Y-%m-%d %H:%M:%S"
12
-
13
- print("setting up colored logging")
14
- colorlog.basicConfig(format=logging_format, level=logging_level, datefmt=logging_datefmt)
15
-
16
- logging.getLogger().setLevel(logging_level)
17
- for logger_name in ["werkzeug", "telethon"]:
18
- log = logging.getLogger(logger_name)
19
- log.setLevel(logging.ERROR)
20
-
21
- logging.info(f"logger initialized using {logging_level} log level")
File without changes