holmesgpt 0.11.5__py3-none-any.whl → 0.12.0__py3-none-any.whl

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.

Potentially problematic release.


This version of holmesgpt might be problematic. Click here for more details.

Files changed (40) hide show
  1. holmes/__init__.py +1 -1
  2. holmes/common/env_vars.py +8 -4
  3. holmes/config.py +52 -13
  4. holmes/core/investigation_structured_output.py +7 -0
  5. holmes/core/llm.py +14 -4
  6. holmes/core/models.py +24 -0
  7. holmes/core/tool_calling_llm.py +48 -6
  8. holmes/core/tools.py +7 -4
  9. holmes/core/toolset_manager.py +24 -5
  10. holmes/core/tracing.py +224 -0
  11. holmes/interactive.py +761 -44
  12. holmes/main.py +59 -127
  13. holmes/plugins/prompts/_fetch_logs.jinja2 +4 -0
  14. holmes/plugins/prompts/kubernetes_workload_ask.jinja2 +2 -10
  15. holmes/plugins/toolsets/__init__.py +10 -2
  16. holmes/plugins/toolsets/azure_sql/apis/azure_sql_api.py +2 -1
  17. holmes/plugins/toolsets/coralogix/toolset_coralogix_logs.py +3 -0
  18. holmes/plugins/toolsets/datadog/datadog_api.py +161 -0
  19. holmes/plugins/toolsets/datadog/datadog_metrics_instructions.jinja2 +26 -0
  20. holmes/plugins/toolsets/datadog/datadog_traces_formatter.py +310 -0
  21. holmes/plugins/toolsets/datadog/instructions_datadog_traces.jinja2 +51 -0
  22. holmes/plugins/toolsets/datadog/toolset_datadog_logs.py +267 -0
  23. holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py +488 -0
  24. holmes/plugins/toolsets/datadog/toolset_datadog_traces.py +689 -0
  25. holmes/plugins/toolsets/grafana/toolset_grafana_loki.py +3 -0
  26. holmes/plugins/toolsets/internet/internet.py +1 -1
  27. holmes/plugins/toolsets/logging_utils/logging_api.py +9 -3
  28. holmes/plugins/toolsets/opensearch/opensearch_logs.py +3 -0
  29. holmes/plugins/toolsets/utils.py +6 -2
  30. holmes/utils/cache.py +4 -4
  31. holmes/utils/console/consts.py +2 -0
  32. holmes/utils/console/logging.py +95 -0
  33. holmes/utils/console/result.py +37 -0
  34. {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/METADATA +3 -4
  35. {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/RECORD +38 -29
  36. {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/WHEEL +1 -1
  37. holmes/__init__.py.bak +0 -76
  38. holmes/plugins/toolsets/datadog.py +0 -153
  39. {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/LICENSE.txt +0 -0
  40. {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/entry_points.txt +0 -0
@@ -214,7 +214,7 @@ class FetchWebpage(Tool):
214
214
  )
215
215
 
216
216
  def get_parameterized_one_liner(self, params) -> str:
217
- url: str = params["url"]
217
+ url: str = params.get("url", "<missing url>")
218
218
  return f"fetched webpage {url}"
219
219
 
220
220
 
@@ -42,6 +42,9 @@ class BasePodLoggingToolset(Toolset, ABC):
42
42
  def fetch_pod_logs(self, params: FetchPodLogsParams) -> StructuredToolResult:
43
43
  pass
44
44
 
45
+ def logger_name(self) -> str:
46
+ return ""
47
+
45
48
 
46
49
  class PodLoggingTool(Tool):
47
50
  """Common tool for fetching pod logs across different logging backends"""
@@ -60,12 +63,12 @@ class PodLoggingTool(Tool):
60
63
  description="Kubernetes namespace", type="string", required=True
61
64
  ),
62
65
  "start_time": ToolParameter(
63
- description="Start time for logs. Can be an RFC3339 formatted timestamp (e.g. '2023-03-01T10:30:00Z') for absolute time or a negative integer (e.g. -3600) for relative seconds before end_time.",
66
+ description="Start time for logs. Can be an RFC3339 formatted datetime (e.g. '2023-03-01T10:30:00Z') for absolute time or a negative integer (e.g. -3600) for relative seconds before end_time.",
64
67
  type="string",
65
68
  required=False,
66
69
  ),
67
70
  "end_time": ToolParameter(
68
- description="End time for logs. Must be an RFC3339 formatted timestamp (e.g. '2023-03-01T12:30:00Z'). If not specified, defaults to current time.",
71
+ description="End time for logs. Must be an RFC3339 formatted datetime (e.g. '2023-03-01T12:30:00Z'). If not specified, defaults to current time.",
69
72
  type="string",
70
73
  required=False,
71
74
  ),
@@ -123,7 +126,10 @@ class PodLoggingTool(Tool):
123
126
  if limit:
124
127
  extra_params_str += f" limit={limit}"
125
128
 
126
- return f"Fetching logs for pod {pod_name} in namespace {namespace}.{extra_params_str}"
129
+ logger_name = (
130
+ f"{self._toolset.logger_name()}: " if self._toolset.logger_name() else ""
131
+ )
132
+ return f"{logger_name}Fetching logs for pod {pod_name} in namespace {namespace}.{extra_params_str}"
127
133
 
128
134
 
129
135
  def process_time_parameters(
@@ -66,6 +66,9 @@ class OpenSearchLogsToolset(BasePodLoggingToolset):
66
66
  def opensearch_config(self) -> Optional[OpenSearchLoggingConfig]:
67
67
  return self.config
68
68
 
69
+ def logger_name(self) -> str:
70
+ return "OpenSearch"
71
+
69
72
  def fetch_pod_logs(self, params: FetchPodLogsParams) -> StructuredToolResult:
70
73
  if not self.opensearch_config:
71
74
  return StructuredToolResult(
@@ -29,16 +29,20 @@ def is_rfc3339(timestamp_str: str) -> bool:
29
29
 
30
30
  def to_unix(timestamp_str: str) -> int:
31
31
  dt = parser.parse(timestamp_str)
32
+ if dt.tzinfo is None:
33
+ dt = dt.replace(tzinfo=datetime.timezone.utc)
32
34
  return int(dt.timestamp())
33
35
 
34
36
 
35
37
  def to_unix_ms(timestamp_str: str) -> int:
36
38
  dt = parser.parse(timestamp_str)
39
+ if dt.tzinfo is None:
40
+ dt = dt.replace(tzinfo=datetime.timezone.utc)
37
41
  return int(dt.timestamp() * 1000)
38
42
 
39
43
 
40
- def unix_nano_to_rfc3339(unix_nano: int) -> str:
41
- unix_seconds = unix_nano / 1_000_000_000
44
+ def unix_nano_to_rfc3339(unix_nano: int | float) -> str:
45
+ unix_seconds = int(unix_nano) / 1_000_000_000
42
46
 
43
47
  seconds_part = int(unix_seconds)
44
48
  milliseconds_part = int((unix_seconds - seconds_part) * 1000)
holmes/utils/cache.py CHANGED
@@ -1,8 +1,8 @@
1
+ import json
1
2
  import time
3
+ import zlib
2
4
  from threading import Timer
3
5
  from typing import Any, Dict, Optional
4
- import json
5
- import bz2
6
6
 
7
7
 
8
8
  class SetEncoder(json.JSONEncoder):
@@ -15,14 +15,14 @@ class SetEncoder(json.JSONEncoder):
15
15
  def compress(data):
16
16
  json_str = json.dumps(data, cls=SetEncoder)
17
17
  json_bytes = json_str.encode("utf-8")
18
- compressed = bz2.compress(json_bytes, compresslevel=1)
18
+ compressed = zlib.compress(json_bytes, level=1)
19
19
 
20
20
  return compressed
21
21
 
22
22
 
23
23
  def decompress(compressed_data):
24
24
  try:
25
- decompressed = bz2.decompress(compressed_data)
25
+ decompressed = zlib.decompress(compressed_data)
26
26
  json_str = decompressed.decode("utf-8")
27
27
  data = json.loads(json_str)
28
28
  return data
@@ -0,0 +1,2 @@
1
+ # Common help texts
2
+ system_prompt_help = "Advanced. System prompt for LLM. Values starting with builtin:// are loaded from holmes/plugins/prompts, values starting with file:// are loaded from the given path, other values are interpreted as a prompt string"
@@ -0,0 +1,95 @@
1
+ import logging
2
+ import warnings
3
+ from enum import Enum
4
+ from typing import List, Optional
5
+
6
+ from rich.console import Console
7
+ from rich.logging import RichHandler
8
+
9
+
10
+ class Verbosity(Enum):
11
+ NORMAL = 0
12
+ LOG_QUERIES = 1 # TODO: currently unused
13
+ VERBOSE = 2
14
+ VERY_VERBOSE = 3
15
+
16
+
17
+ def cli_flags_to_verbosity(verbose_flags: List[bool]) -> Verbosity:
18
+ if verbose_flags is None or len(verbose_flags) == 0:
19
+ return Verbosity.NORMAL
20
+ elif len(verbose_flags) == 1:
21
+ return Verbosity.LOG_QUERIES
22
+ elif len(verbose_flags) == 2:
23
+ return Verbosity.VERBOSE
24
+ else:
25
+ return Verbosity.VERY_VERBOSE
26
+
27
+
28
+ def suppress_noisy_logs():
29
+ # disable INFO logs from OpenAI
30
+ logging.getLogger("httpx").setLevel(logging.WARNING)
31
+ # disable INFO logs from LiteLLM
32
+ logging.getLogger("LiteLLM").setLevel(logging.WARNING)
33
+ # disable INFO logs from AWS (relevant when using bedrock)
34
+ logging.getLogger("boto3").setLevel(logging.WARNING)
35
+ logging.getLogger("botocore").setLevel(logging.WARNING)
36
+ # when running in --verbose mode we don't want to see DEBUG logs from these libraries
37
+ logging.getLogger("openai._base_client").setLevel(logging.INFO)
38
+ logging.getLogger("httpcore").setLevel(logging.INFO)
39
+ logging.getLogger("markdown_it").setLevel(logging.INFO)
40
+ # suppress UserWarnings from the slack_sdk module
41
+ warnings.filterwarnings("ignore", category=UserWarning, module="slack_sdk.*")
42
+
43
+
44
+ def init_logging(verbose_flags: Optional[List[bool]] = None):
45
+ verbosity = cli_flags_to_verbosity(verbose_flags) # type: ignore
46
+
47
+ if verbosity == Verbosity.VERY_VERBOSE:
48
+ logging.basicConfig(
49
+ level=logging.DEBUG,
50
+ format="%(message)s",
51
+ handlers=[
52
+ RichHandler(
53
+ show_level=False,
54
+ markup=True,
55
+ show_time=False,
56
+ show_path=False,
57
+ console=Console(width=None),
58
+ )
59
+ ],
60
+ )
61
+ elif verbosity == Verbosity.VERBOSE:
62
+ logging.basicConfig(
63
+ level=logging.INFO,
64
+ format="%(message)s",
65
+ handlers=[
66
+ RichHandler(
67
+ show_level=False,
68
+ markup=True,
69
+ show_time=False,
70
+ show_path=False,
71
+ console=Console(width=None),
72
+ )
73
+ ],
74
+ )
75
+ logging.getLogger().setLevel(logging.DEBUG)
76
+ suppress_noisy_logs()
77
+ else:
78
+ logging.basicConfig(
79
+ level=logging.INFO,
80
+ format="%(message)s",
81
+ handlers=[
82
+ RichHandler(
83
+ show_level=False,
84
+ markup=True,
85
+ show_time=False,
86
+ show_path=False,
87
+ console=Console(width=None),
88
+ )
89
+ ],
90
+ )
91
+ suppress_noisy_logs()
92
+
93
+ logging.debug(f"verbosity is {verbosity}")
94
+
95
+ return Console()
@@ -0,0 +1,37 @@
1
+ from rich.console import Console
2
+ from rich.markdown import Markdown
3
+ from rich.rule import Rule
4
+
5
+ from holmes.config import Config
6
+ from holmes.core.tool_calling_llm import LLMResult
7
+ from holmes.plugins.destinations import DestinationType
8
+ from holmes.plugins.interfaces import Issue
9
+
10
+
11
+ def handle_result(
12
+ result: LLMResult,
13
+ console: Console,
14
+ destination: DestinationType,
15
+ config: Config,
16
+ issue: Issue,
17
+ show_tool_output: bool,
18
+ add_separator: bool,
19
+ ):
20
+ if destination == DestinationType.CLI:
21
+ if show_tool_output and result.tool_calls:
22
+ for tool_call in result.tool_calls:
23
+ console.print("[bold magenta]Used Tool:[/bold magenta]", end="")
24
+ # we need to print this separately with markup=False because it contains arbitrary text and we don't want console.print to interpret it
25
+ console.print(
26
+ f"{tool_call.description}. Output=\n{tool_call.result}",
27
+ markup=False,
28
+ )
29
+
30
+ console.print("[bold green]AI:[/bold green]", end=" ")
31
+ console.print(Markdown(result.result)) # type: ignore
32
+ if add_separator:
33
+ console.print(Rule())
34
+
35
+ elif destination == DestinationType.SLACK:
36
+ slack = config.create_slack_destination()
37
+ slack.send_issue(issue, result)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: holmesgpt
3
- Version: 0.11.5
3
+ Version: 0.12.0
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: natan@robusta.dev
@@ -8,8 +8,6 @@ Requires-Python: >=3.10,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
11
  Requires-Dist: aiohttp (>=3.10.2,<4.0.0)
14
12
  Requires-Dist: azure-core (>=1.34.0,<2.0.0)
15
13
  Requires-Dist: azure-identity (>=1.23.0,<2.0.0)
@@ -53,6 +51,7 @@ Requires-Dist: slack-bolt (>=1.18.1,<2.0.0)
53
51
  Requires-Dist: starlette (>=0.40,<0.41)
54
52
  Requires-Dist: strenum (>=0.4.15,<0.5.0)
55
53
  Requires-Dist: supabase (>=2.5,<3.0)
54
+ Requires-Dist: tenacity (>=9.1.2,<10.0.0)
56
55
  Requires-Dist: typer (>=0.15.4,<0.16.0)
57
56
  Requires-Dist: urllib3 (>=1.26.19,<2.0.0)
58
57
  Requires-Dist: uvicorn (>=0.30,<0.31)
@@ -1,16 +1,15 @@
1
1
  holmes/.git_archival.json,sha256=PbwdO7rNhEJ4ALiO12DPPb81xNAIsVxCA0m8OrVoqsk,182
2
- holmes/__init__.py,sha256=AEq2gRYsQZQyg-8mDYfTxyrEhqdgtBuHbpDrwp6TnLk,2172
3
- holmes/__init__.py.bak,sha256=LvDwFZ_341DiYoJSrIAikbFoAj2aH6VXQT-8k9FhHvI,2171
2
+ holmes/__init__.py,sha256=TWmQpKeCu7EZ1vKhYE37-DAjea5-i4P_6rEEu8yVOg4,2172
4
3
  holmes/clients/robusta_client.py,sha256=b6zje8VF8aOpjXnluBcBDdf3Xb88yFXvKDcy2gV1DeM,672
5
- holmes/common/env_vars.py,sha256=MeAqdXZC1j7Vxmge4a13CJ8K2i4DBZ_FuEUVrAIV7Qc,1808
6
- holmes/config.py,sha256=WVxOkHVSzcQ7YZpnTgiYAEBsRU5hwxvO3XV7ifbCgTE,20018
4
+ holmes/common/env_vars.py,sha256=ayfuw30HnfWmEoghgWlF3vOwiarl7uQns_yxVfs7N_w,1915
5
+ holmes/config.py,sha256=8FixTd69Ljs218SXeqU46Zyk02joV86pNtIGYoZZYGw,21278
7
6
  holmes/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
7
  holmes/core/conversations.py,sha256=LXT3T-5hwl4xHXBhO4XyOKm6k9w58anQ3dw4F2aptqs,20769
9
8
  holmes/core/investigation.py,sha256=nSVkCfeliZjQT2PrgNPD3o1EwKe9je0Pq3F2bDNQiCU,5646
10
- holmes/core/investigation_structured_output.py,sha256=PdealN3TuLk8uXT34rFnv9Mol5_mvr6rud4Abfy1wkc,9841
9
+ holmes/core/investigation_structured_output.py,sha256=f9MDfhaI5OfaZ4J_UKqMFhWncoODuo6CBNMNWbdIkvE,9991
11
10
  holmes/core/issue.py,sha256=dbctGv8KHAXC1SeOMkEP-BudJ50u7kA8jLN5FN_d808,2426
12
- holmes/core/llm.py,sha256=LLKP-KwtTJsvN2OSI_Lu-KBgEr7BGeomQhqa3XdbEv0,10729
13
- holmes/core/models.py,sha256=i6cH1mL7JQUU1NyNoPM29398gDkoatM8tULbHjeLwN4,4866
11
+ holmes/core/llm.py,sha256=cC0B8p-mB3iiL2u1FgtcbwBgDv_Xg94DmYSXdIlGNdg,10995
12
+ holmes/core/models.py,sha256=Bfo-HxC4SjW1Y60fjwn8AAq2zyrTfM61x6OsWartmU8,5693
14
13
  holmes/core/openai_formatting.py,sha256=T5GguKhYiJbHx7mFTyJZZReV-s9LBX443BD_nJQZR2s,1677
15
14
  holmes/core/performance_timing.py,sha256=MTbTiiX2jjPmW7PuNA2eYON40eWsHPryR1ap_KlwZ_E,2217
16
15
  holmes/core/prompt.py,sha256=pc2qoCw0xeJDjGwG0DHOtEUvKsnUAtR6API10ThdlkU,1244
@@ -18,14 +17,15 @@ holmes/core/resource_instruction.py,sha256=rduue_t8iQi1jbWc3-k3jX867W1Fvc6Tah5uO
18
17
  holmes/core/runbooks.py,sha256=Oj5ICmiGgaq57t4erPzQDvHQ0rMGj1nhiiYhl8peH3Q,939
19
18
  holmes/core/safeguards.py,sha256=SAw-J9y3uAehJVZJYsFs4C62jzLV4p_C07F2jUuJHug,4895
20
19
  holmes/core/supabase_dal.py,sha256=spnBESlw5XK3BFjAFXUtKH069NHF0J-WCD_v--83ZdY,20031
21
- holmes/core/tool_calling_llm.py,sha256=SDgWzyNBLjpe-gjjllEtOYZEVkwTshv1OHxEyfH1iJU,33111
22
- holmes/core/tools.py,sha256=E2o4XsLVxryBYEE6D9nvro5STOQtQBOIo4t2qedCmLM,20019
20
+ holmes/core/tool_calling_llm.py,sha256=8HwqWCa6H6WaWr49UHBQS-VGSrgQ9SnzcWBzwohLnPo,34547
21
+ holmes/core/tools.py,sha256=gfs60sQ_4QQEKX785ejIoxgmrgBrSRolt6xLl2Px3GY,20203
23
22
  holmes/core/tools_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
23
  holmes/core/tools_utils/tool_executor.py,sha256=ZGrzn8c8RelQa_t6ZR9siWBBzOCQ1fgKhug4JDqqgUM,2100
25
24
  holmes/core/tools_utils/toolset_utils.py,sha256=1r7nlET4e7CjzMl9MUc_pYOTtRU7YSL8AKp6fQF3_3o,2217
26
- holmes/core/toolset_manager.py,sha256=M9aNFSS3p-v-wX6VioVtLPzFVNOFKv4b7Nnkocb_0c8,17263
27
- holmes/interactive.py,sha256=G9Ar6_zR_ROE51yEoxypjPGdzX395rJ_eNxKw_hB8vU,8301
28
- holmes/main.py,sha256=_6t2-F403hETb6y5nLaiEagMfSSPjCBUXtl4hwPSvYI,36862
25
+ holmes/core/toolset_manager.py,sha256=4oZGr8WinEIiFSVHkNSQ4Drj2k4h2ICMcC-i1aACddE,18166
26
+ holmes/core/tracing.py,sha256=Ei0x4Kp9D7LG9FVX-CjicLwEAindIxMbioe2sDdgJXo,7087
27
+ holmes/interactive.py,sha256=cK-9bg_wAxlMNvqrqVnLVQag2n8BLjerHvLc2W7Oh40,35315
28
+ holmes/main.py,sha256=Wsue8fVfaccnJ8cFfgW25yPSGk1yoa-OjG44jVc2s4k,34687
29
29
  holmes/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  holmes/plugins/destinations/__init__.py,sha256=vMYwTfA5nQ05us5Rzbaoe0R5C8Navo6ENVZhojtACTk,98
31
31
  holmes/plugins/destinations/slack/__init__.py,sha256=HVoDdTbdJJ1amXt12ZSMVcn3E04rcOrqk6BgNwvMbWY,56
@@ -34,7 +34,7 @@ holmes/plugins/interfaces.py,sha256=QpKx6BPOoDBS5p0En6-bU23fjNTC1bGR29xvJBQXhZ4,
34
34
  holmes/plugins/prompts/__init__.py,sha256=btqcrfUvVodB0hHp2FTdbXaRdd8QIKl-vFsY4QyAuUg,1416
35
35
  holmes/plugins/prompts/_current_date_time.jinja2,sha256=E-frERHJYxd1x4_7LoZZbOxxS8p1uMZTEBZ_ehXUNiM,178
36
36
  holmes/plugins/prompts/_default_log_prompt.jinja2,sha256=xEqUBW3AufzzoQxdxxYvbOcve7YWlQxElZEfbfR1SUI,1233
37
- holmes/plugins/prompts/_fetch_logs.jinja2,sha256=J5TD9zFz2JKlF3X9nA3J_9eSg4vx_klKV9AmUUq_Iro,2810
37
+ holmes/plugins/prompts/_fetch_logs.jinja2,sha256=3raniENVBjE7Psc0wSanCwOWlT3XE3JqHSgqflfcHoY,3020
38
38
  holmes/plugins/prompts/_general_instructions.jinja2,sha256=yA0ZkrK7KJa4Du-Xg3pq4ydP8axrctA_jH2RWRcfbAY,6917
39
39
  holmes/plugins/prompts/_global_instructions.jinja2,sha256=d_c-BtDhU_Rmx637TPAyzlIIim8ZAxy7JK3V4GV8IWI,1359
40
40
  holmes/plugins/prompts/_runbook_instructions.jinja2,sha256=EygoC5KdKGo2D6AvhePjXEeqBqFkQALrL2_uWqaE7d4,646
@@ -46,7 +46,7 @@ holmes/plugins/prompts/generic_investigation.jinja2,sha256=jnIDBg-6zYYj056QOCwXt
46
46
  holmes/plugins/prompts/generic_post_processing.jinja2,sha256=1YNBGKgpZkLNO6Xkbi4yqwWE2DZKACq4xl0ygywgY_w,596
47
47
  holmes/plugins/prompts/generic_ticket.jinja2,sha256=FVWvPVnX0JSeBbKu1RuBUcQ7hcsqz661n_QC_kWUPV0,437
48
48
  holmes/plugins/prompts/investigation_output_format.jinja2,sha256=C03_d4cQUhEvI5YBoVSkSZypM21wriGrocN4iP1_8co,1071
49
- holmes/plugins/prompts/kubernetes_workload_ask.jinja2,sha256=lne5fBSnM4qXSwii8nKJb_F5sNGqFJz5QNiee4pGu2o,6514
49
+ holmes/plugins/prompts/kubernetes_workload_ask.jinja2,sha256=ogMXgz70Eqx7cmnrKgNb2uUFkXqlxS-nCgIheC82_rk,5883
50
50
  holmes/plugins/prompts/kubernetes_workload_chat.jinja2,sha256=rjB6mAHk2SDg2cwZp5vp66ihCer17BE6o8Ezr2zGQE4,1770
51
51
  holmes/plugins/runbooks/README.md,sha256=NeEyRcgE6glxFk214APWJz5Biw5c3IW8g9LYXiy6iUA,1160
52
52
  holmes/plugins/runbooks/__init__.py,sha256=oPCMKFEZZgDxdmii7g6VKu_gdSq-f9Ijil5D0ZwNCKM,2895
@@ -62,7 +62,7 @@ holmes/plugins/sources/pagerduty/__init__.py,sha256=LYoN1dkUg7NCx7g-gdSomTTJhHyB
62
62
  holmes/plugins/sources/prometheus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  holmes/plugins/sources/prometheus/models.py,sha256=9TcDIRLWZQhwjYGfRZFP_2fGweCn4G5xvYrLoXiQZTc,2904
64
64
  holmes/plugins/sources/prometheus/plugin.py,sha256=oBmuOwNM67suy6HmasUnyVOlBq9-mAxLZLlUzRHIggg,5941
65
- holmes/plugins/toolsets/__init__.py,sha256=Z5WvaFIq9LGWue7vP6KjwMsK_oYCktmZRUJ0emRyu7A,6614
65
+ holmes/plugins/toolsets/__init__.py,sha256=Uo9EF4V4Xke-01F5Fnrx62I7bxQydqe_qYg346fj1e4,6904
66
66
  holmes/plugins/toolsets/aks-node-health.yaml,sha256=mdGQwOcxAOM-TqSLptyj-HyxHUF3OThhSSIqvhJujVQ,3768
67
67
  holmes/plugins/toolsets/aks.yaml,sha256=oa8XogT1c-lqEL08muvpCzrXArbGL7MXUS2yUqX0sec,5744
68
68
  holmes/plugins/toolsets/argocd.yaml,sha256=j8Vq_bCKRg6cHeAGZMNgl9YSSU2PUsSH1dNOWafg4ls,3551
@@ -71,7 +71,7 @@ holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py,sha256=bwEXXjuqUCchmUvyKz
71
71
  holmes/plugins/toolsets/aws.yaml,sha256=AZ15JNdlS2RGASteNhBt2vfJhWAulVfteO94gedBus8,4121
72
72
  holmes/plugins/toolsets/azure_sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  holmes/plugins/toolsets/azure_sql/apis/alert_monitoring_api.py,sha256=DSrKzzE6lofynViYr0SGaQrWjePpzbfdt3DcplbFGek,26397
74
- holmes/plugins/toolsets/azure_sql/apis/azure_sql_api.py,sha256=sPLSIBiW4k7ERU2zE4lMXCgOMOET4ebos66t8kPHus4,11467
74
+ holmes/plugins/toolsets/azure_sql/apis/azure_sql_api.py,sha256=6xUByjRLzGxTk3V5hoNs2oL-yc_ay23BNnakVYHPgoM,11492
75
75
  holmes/plugins/toolsets/azure_sql/apis/connection_failure_api.py,sha256=dw743eIM-K6M-oOU5UErzKB4exRP64zt4g2BvKdXpGo,19098
76
76
  holmes/plugins/toolsets/azure_sql/apis/connection_monitoring_api.py,sha256=10k5KY1CCDi2-G8qh9xMig0aW50Gl6nw6nwBpzw_Sy4,10189
77
77
  holmes/plugins/toolsets/azure_sql/apis/storage_analysis_api.py,sha256=sbz8b2IeGqwosA34ddbqnXbD_iPYKuAMyZrV0-__O9g,13835
@@ -111,9 +111,15 @@ holmes/plugins/toolsets/bash/parse_command.py,sha256=TmlOgvhqda1piNGQL7CdYpvkADS
111
111
  holmes/plugins/toolsets/confluence.yaml,sha256=mN3dw_oVieiRjGiS9Q_eZWgptUVkyDUAVXvek6kysXU,880
112
112
  holmes/plugins/toolsets/consts.py,sha256=vxzGJBF1XNAE9CDteUFIYNRmOagmJ-ktFEfVEU8tHl0,205
113
113
  holmes/plugins/toolsets/coralogix/api.py,sha256=GhdSufUiRZMzLqyjQQoSRXvi89GM-b8-CIdkAANIqLs,5148
114
- holmes/plugins/toolsets/coralogix/toolset_coralogix_logs.py,sha256=kCRLlIYOYo0aCC14CMVQY-gHl_3rYF9Wqxs43lPSPg4,3449
114
+ holmes/plugins/toolsets/coralogix/toolset_coralogix_logs.py,sha256=i7AsxTKyub6E0b5IIf_myOz6qXJsk4jvKPOvCc41_go,3511
115
115
  holmes/plugins/toolsets/coralogix/utils.py,sha256=ogBAPDD46rCnlLjUb1sVVvjG2LntMoj7EBHW1CwqLjw,6036
116
- holmes/plugins/toolsets/datadog.py,sha256=2tLO5W5vsqomu9wkmriNCwQsv6clcSywACkNDudPWrM,5205
116
+ holmes/plugins/toolsets/datadog/datadog_api.py,sha256=W_HhlBp56M94wb8HyAca8tMxnJjQfxDh7UYWLtlClVM,4931
117
+ holmes/plugins/toolsets/datadog/datadog_metrics_instructions.jinja2,sha256=kii2D0NleSR0xqSVq4G8q66lweQs5qPUcSLGjimgNKU,1085
118
+ holmes/plugins/toolsets/datadog/datadog_traces_formatter.py,sha256=uTtWTrsbvO9cZcUDskJE9p5sEscieXwhEpxvRKkaiEw,10275
119
+ holmes/plugins/toolsets/datadog/instructions_datadog_traces.jinja2,sha256=9j3-46UNE35DE2xBDTCRt1EedgNdgRXuC1u-X3yB-9I,1487
120
+ holmes/plugins/toolsets/datadog/toolset_datadog_logs.py,sha256=oHtH7EwHgHLmdkNu3HpxBmnBdCdSgBgnez5bebYRsgk,9021
121
+ holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py,sha256=hue98btAFfX04FKtUM36wZX_zr_M8fUH40Fzr4BPr9o,17598
122
+ holmes/plugins/toolsets/datadog/toolset_datadog_traces.py,sha256=QYdu4e-AAoykBXlDbxExiXYQVtJhbpYdOUD6bpvAkVU,25628
117
123
  holmes/plugins/toolsets/docker.yaml,sha256=AlJnUF3GssiFPnmqB-EfAfptB7Eyr8BBZ__v898i7Gs,1576
118
124
  holmes/plugins/toolsets/git.py,sha256=HQ8saTV3k_LvHx3G80eYWOMe3fAGd2N4hszK-UXiURU,31595
119
125
  holmes/plugins/toolsets/grafana/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -123,25 +129,25 @@ holmes/plugins/toolsets/grafana/grafana_api.py,sha256=_oupgGD7Gp6ChncLApQKTY2Nhl
123
129
  holmes/plugins/toolsets/grafana/loki_api.py,sha256=f7oTzfhJ1LojsPoAfsKt32ADWffLEywBJQWG9eyfb7I,2529
124
130
  holmes/plugins/toolsets/grafana/tempo_api.py,sha256=UbLfyzA5TbP-5jx4Dkc20xLlR-6Z4z-4nPKrMlzgCRU,3565
125
131
  holmes/plugins/toolsets/grafana/toolset_grafana.py,sha256=JygQwYd7OgOE8tudfiiXZMciStMxIXPbL9pnMM4mq4w,4207
126
- holmes/plugins/toolsets/grafana/toolset_grafana_loki.py,sha256=sjyvMsRXtbMxzdD1zMKDdj-dxBoM6TtJqB-9tWlgeOA,3459
132
+ holmes/plugins/toolsets/grafana/toolset_grafana_loki.py,sha256=ZXiW97YAf-M5ZHzMDQaVJDliaZHSloa396T0C-ysN78,3516
127
133
  holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2,sha256=yJlMJSIuNa2WUMJhwsh4XiXPNrdJdnLxfc_Zx_slZYk,1053
128
134
  holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py,sha256=i28-pR7U-zq5L16a_Bbx__O1GPcLHgeW6PflCIEf2-4,11463
129
135
  holmes/plugins/toolsets/grafana/trace_parser.py,sha256=O6fJqUwvpCKL5hAdDtPIZ3LkpTbcDSVPLlLIdNqAbuk,7025
130
136
  holmes/plugins/toolsets/helm.yaml,sha256=I_6LV-iF7za_X7u2aqzXp2_4sAAuJ1bhnImcMqyQPxQ,1621
131
- holmes/plugins/toolsets/internet/internet.py,sha256=jF9_dJBajWiXq5vo3t4qPBqZJ5wIT-pa_fG4j9YTsXY,7585
137
+ holmes/plugins/toolsets/internet/internet.py,sha256=SqyPjkaD3FdP17sTec_z8Yk7arrz9lfgqy0vU7qtlpM,7606
132
138
  holmes/plugins/toolsets/internet/notion.py,sha256=_-Xm3qVGaE4CNZGksOUAVf4HpNnOQLZyPs5hlPdpvp4,4621
133
139
  holmes/plugins/toolsets/kafka.py,sha256=2G8pqxGFkMBqVltg-upszhb5oep4ncUkh_C3amsxxYc,24149
134
140
  holmes/plugins/toolsets/kubernetes.yaml,sha256=b8Y6EM8JZDQPQ6i4kFkhX6MNdYKvo5yYCHhmsMwKmi8,14462
135
141
  holmes/plugins/toolsets/kubernetes_logs.py,sha256=MR_Va0sHqOl4DpBiGjtH_939wQ5W8RcXqlBurzALBCw,15314
136
142
  holmes/plugins/toolsets/kubernetes_logs.yaml,sha256=j5BXf5FkUqfCb0ky3YguZ8-80ljhzefNbD9DTcGuWDc,2677
137
143
  holmes/plugins/toolsets/logging_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- holmes/plugins/toolsets/logging_utils/logging_api.py,sha256=1swUmELjLy3aPpkBExVjQcw7efLMinWqkELKlViFnrg,7825
144
+ holmes/plugins/toolsets/logging_utils/logging_api.py,sha256=8FYLDpKueTxzT10MTEbFqaq_OrZ0P5yOifjxmb08a4Q,8009
139
145
  holmes/plugins/toolsets/logging_utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
146
  holmes/plugins/toolsets/mcp/toolset_mcp.py,sha256=Fj9Ev1RUm33wFGlvjiIjX_mSRqg09acoNcvRlfeRHYs,4858
141
147
  holmes/plugins/toolsets/newrelic.py,sha256=SX5YwdcTwHq4M09shO2aO8ojsHu5Av5aWNxgngjtnFA,7432
142
148
  holmes/plugins/toolsets/opensearch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
149
  holmes/plugins/toolsets/opensearch/opensearch.py,sha256=vtyOwFAgDAMzkiaBjTceufeA1S665bY8KE9cdRGI47E,8146
144
- holmes/plugins/toolsets/opensearch/opensearch_logs.py,sha256=ovQpQNRfkYArmrTZOAm6Myh5-zetNTEiwINooDB00uM,5394
150
+ holmes/plugins/toolsets/opensearch/opensearch_logs.py,sha256=TbBzLv7we91pTGqmsM1VGtNFZvTotC9xWCa7Yr4mfPE,5457
145
151
  holmes/plugins/toolsets/opensearch/opensearch_traces.py,sha256=gXV2yXrAn0Tu3r5GMiSdsLAKx9myUrHWD0U-OYBXN0g,8497
146
152
  holmes/plugins/toolsets/opensearch/opensearch_traces_instructions.jinja2,sha256=Xn8AW4XCMYV1VkBbF8nNB9fUpKQ1Vbm88iFczj-LQXo,1035
147
153
  holmes/plugins/toolsets/opensearch/opensearch_utils.py,sha256=mh9Wp22tOdJYmA9IaFS7tD3aEENljyeuPOsF-lEe5C0,5097
@@ -160,11 +166,14 @@ holmes/plugins/toolsets/servicenow/install.md,sha256=UeL069Qd2e4wC3kmc54wk62AoSp
160
166
  holmes/plugins/toolsets/servicenow/instructions.jinja2,sha256=koA2vJ1tOkGi2T5aGjmk9oTZPrt7WdoMSuVyxfO5-k4,491
161
167
  holmes/plugins/toolsets/servicenow/servicenow.py,sha256=qn2LGg2iBnFLsjvjbDP_181Ssb4-m9bl7nsYDPOABNc,7562
162
168
  holmes/plugins/toolsets/slab.yaml,sha256=7esaLXSAlfHdxq0Paz9sfNOjoYXudaZuuq9hVcXdNsE,777
163
- holmes/plugins/toolsets/utils.py,sha256=Ge4SjGFlZ5s2JlMkTYf24Mxz57Kbr8KAHvddC5YXzYM,4073
169
+ holmes/plugins/toolsets/utils.py,sha256=7rRmSJa9ZCdnakTz3CgAKRdtYEDjRJczXA3cMgj_n0Q,4246
164
170
  holmes/plugins/utils.py,sha256=Wn_UxZMB4V2_UiJDNy0pifGnIGS_zUwRhUlmttCywnY,372
165
171
  holmes/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
- holmes/utils/cache.py,sha256=khypN4j4B8aSsvwIzYQkHKryKfxgRB_jZObF3MKH-F4,2224
172
+ holmes/utils/cache.py,sha256=aPc7zTdpBQ3JQR7ET4wvIwzXhx2PpPKiBBSTgbVNXlY,2219
167
173
  holmes/utils/cert_utils.py,sha256=5YAUOY3LjFqqFpYHnHLvSc70LCxEWf0spw1vZwLLvOw,1193
174
+ holmes/utils/console/consts.py,sha256=klHl0_iXcw_mqtv-YUWBzx3oxi0maaHok_Eq_7ZZdb8,257
175
+ holmes/utils/console/logging.py,sha256=nKB3NN0lq45Ux1hMMGetk3TMb9WosTZVliVivkQv0sE,3000
176
+ holmes/utils/console/result.py,sha256=-n9QtaJtgagIYXu9XYF6foQ6poiCUcYZbK0CWbK9cJw,1334
168
177
  holmes/utils/default_toolset_installation_guide.jinja2,sha256=HEf7tX75HE3H4-YeLbJfa0WbiLEsI71usKrXHCO_sHo,992
169
178
  holmes/utils/definitions.py,sha256=WKVDFh1wfuo0UCV_1jXFjgP0gjGM3-U-UdxdVxmXaKM,287
170
179
  holmes/utils/env.py,sha256=7hLrfn6DGLJu2105CurM8UoJzDXLEXdiJwhgj79fYtI,1761
@@ -176,8 +185,8 @@ holmes/utils/markdown_utils.py,sha256=_yDc_IRB5zkj9THUlZ6nzir44VfirTjPccC_DrFrBk
176
185
  holmes/utils/pydantic_utils.py,sha256=g0e0jLTa8Je8JKrhEP4N5sMxj0_hhPOqFZr0Vpd67sg,1649
177
186
  holmes/utils/robusta.py,sha256=uYQ7v1CSfTM94sOPy09kRZh-lPwmTd-5hrqHu0PdtZ4,372
178
187
  holmes/utils/tags.py,sha256=SU4EZMBtLlIb7OlHsSpguFaypczRzOcuHYxDSanV3sQ,3364
179
- holmesgpt-0.11.5.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
180
- holmesgpt-0.11.5.dist-info/METADATA,sha256=SZmT22hOEsxxDiALwQFbzd5J548wSGzp3en2TiBoNn0,21701
181
- holmesgpt-0.11.5.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
182
- holmesgpt-0.11.5.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
183
- holmesgpt-0.11.5.dist-info/RECORD,,
188
+ holmesgpt-0.12.0.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
189
+ holmesgpt-0.12.0.dist-info/METADATA,sha256=q3BoYIunnghVlg98sv5JblegkmBTMj67PWskLq-y24s,21641
190
+ holmesgpt-0.12.0.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
191
+ holmesgpt-0.12.0.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
192
+ holmesgpt-0.12.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 1.5.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
holmes/__init__.py.bak DELETED
@@ -1,76 +0,0 @@
1
- import json
2
- import os
3
- import subprocess
4
- import sys
5
- from cachetools import cached # type: ignore
6
-
7
- # For relative imports to work in Python 3.6 - see https://stackoverflow.com/a/49375740
8
- this_path = os.path.dirname(os.path.realpath(__file__))
9
- sys.path.append(this_path)
10
-
11
- # This is patched by github actions during release
12
- __version__ = "0.0.0"
13
-
14
-
15
- def is_official_release() -> bool:
16
- return not __version__.startswith("0.0.0")
17
-
18
-
19
- @cached(cache=dict())
20
- def get_version() -> str:
21
- # the version string was patched by a release - return __version__ which will be correct
22
- if is_official_release():
23
- return __version__
24
-
25
- # we are running from an unreleased dev version
26
- try:
27
- # Get the latest git tag
28
- tag = (
29
- subprocess.check_output(
30
- ["git", "describe", "--tags"], stderr=subprocess.STDOUT, cwd=this_path
31
- )
32
- .decode()
33
- .strip()
34
- )
35
-
36
- # Get the current branch name
37
- branch = (
38
- subprocess.check_output(
39
- ["git", "rev-parse", "--abbrev-ref", "HEAD"],
40
- stderr=subprocess.STDOUT,
41
- cwd=this_path,
42
- )
43
- .decode()
44
- .strip()
45
- )
46
-
47
- # Check if there are uncommitted changes
48
- status = (
49
- subprocess.check_output(
50
- ["git", "status", "--porcelain"],
51
- stderr=subprocess.STDOUT,
52
- cwd=this_path,
53
- )
54
- .decode()
55
- .strip()
56
- )
57
- dirty = "-dirty" if status else ""
58
-
59
- return f"{tag}-{branch}{dirty}"
60
-
61
- except Exception:
62
- pass
63
-
64
- # we are running without git history, but we still might have git archival data (e.g. if we were pip installed)
65
- archival_file_path = os.path.join(this_path, ".git_archival.json")
66
- if os.path.exists(archival_file_path):
67
- try:
68
- with open(archival_file_path, "r") as f:
69
- archival_data = json.load(f)
70
- return f"dev-{archival_data['refs']}-{archival_data['hash-short']}"
71
- except Exception:
72
- pass
73
-
74
- return "dev-version"
75
-
76
- return "unknown-version"