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.
- holmes/__init__.py +1 -1
- holmes/common/env_vars.py +8 -4
- holmes/config.py +52 -13
- holmes/core/investigation_structured_output.py +7 -0
- holmes/core/llm.py +14 -4
- holmes/core/models.py +24 -0
- holmes/core/tool_calling_llm.py +48 -6
- holmes/core/tools.py +7 -4
- holmes/core/toolset_manager.py +24 -5
- holmes/core/tracing.py +224 -0
- holmes/interactive.py +761 -44
- holmes/main.py +59 -127
- holmes/plugins/prompts/_fetch_logs.jinja2 +4 -0
- holmes/plugins/prompts/kubernetes_workload_ask.jinja2 +2 -10
- holmes/plugins/toolsets/__init__.py +10 -2
- holmes/plugins/toolsets/azure_sql/apis/azure_sql_api.py +2 -1
- holmes/plugins/toolsets/coralogix/toolset_coralogix_logs.py +3 -0
- holmes/plugins/toolsets/datadog/datadog_api.py +161 -0
- holmes/plugins/toolsets/datadog/datadog_metrics_instructions.jinja2 +26 -0
- holmes/plugins/toolsets/datadog/datadog_traces_formatter.py +310 -0
- holmes/plugins/toolsets/datadog/instructions_datadog_traces.jinja2 +51 -0
- holmes/plugins/toolsets/datadog/toolset_datadog_logs.py +267 -0
- holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py +488 -0
- holmes/plugins/toolsets/datadog/toolset_datadog_traces.py +689 -0
- holmes/plugins/toolsets/grafana/toolset_grafana_loki.py +3 -0
- holmes/plugins/toolsets/internet/internet.py +1 -1
- holmes/plugins/toolsets/logging_utils/logging_api.py +9 -3
- holmes/plugins/toolsets/opensearch/opensearch_logs.py +3 -0
- holmes/plugins/toolsets/utils.py +6 -2
- holmes/utils/cache.py +4 -4
- holmes/utils/console/consts.py +2 -0
- holmes/utils/console/logging.py +95 -0
- holmes/utils/console/result.py +37 -0
- {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/METADATA +3 -4
- {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/RECORD +38 -29
- {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/WHEEL +1 -1
- holmes/__init__.py.bak +0 -76
- holmes/plugins/toolsets/datadog.py +0 -153
- {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/LICENSE.txt +0 -0
- {holmesgpt-0.11.5.dist-info → holmesgpt-0.12.0.dist-info}/entry_points.txt +0 -0
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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(
|
holmes/plugins/toolsets/utils.py
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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,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.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: holmesgpt
|
|
3
|
-
Version: 0.
|
|
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=
|
|
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=
|
|
6
|
-
holmes/config.py,sha256=
|
|
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=
|
|
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=
|
|
13
|
-
holmes/core/models.py,sha256=
|
|
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=
|
|
22
|
-
holmes/core/tools.py,sha256=
|
|
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=
|
|
27
|
-
holmes/
|
|
28
|
-
holmes/
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
180
|
-
holmesgpt-0.
|
|
181
|
-
holmesgpt-0.
|
|
182
|
-
holmesgpt-0.
|
|
183
|
-
holmesgpt-0.
|
|
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,,
|
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"
|