holmesgpt 0.13.3__py3-none-any.whl → 0.14.0a0__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/core/tool_calling_llm.py +95 -78
- holmes/core/tracing.py +6 -1
- holmes/plugins/toolsets/datadog/toolset_datadog_general.py +1 -2
- holmes/plugins/toolsets/datadog/toolset_datadog_logs.py +1 -2
- holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py +1 -2
- holmes/plugins/toolsets/datadog/toolset_datadog_traces.py +1 -2
- holmes/plugins/toolsets/git.py +1 -1
- holmes/plugins/toolsets/grafana/common.py +12 -0
- holmes/plugins/toolsets/grafana/grafana_tempo_api.py +473 -0
- holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2 +146 -11
- holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py +773 -259
- holmes/plugins/toolsets/grafana/trace_parser.py +1 -1
- holmes/plugins/toolsets/newrelic.py +3 -3
- {holmesgpt-0.13.3.dist-info → holmesgpt-0.14.0a0.dist-info}/METADATA +2 -2
- {holmesgpt-0.13.3.dist-info → holmesgpt-0.14.0a0.dist-info}/RECORD +19 -19
- holmes/plugins/toolsets/grafana/tempo_api.py +0 -124
- {holmesgpt-0.13.3.dist-info → holmesgpt-0.14.0a0.dist-info}/LICENSE.txt +0 -0
- {holmesgpt-0.13.3.dist-info → holmesgpt-0.14.0a0.dist-info}/WHEEL +0 -0
- {holmesgpt-0.13.3.dist-info → holmesgpt-0.14.0a0.dist-info}/entry_points.txt +0 -0
|
@@ -187,7 +187,7 @@ def format_traces_list(trace_data: Dict) -> str:
|
|
|
187
187
|
else "\n"
|
|
188
188
|
)
|
|
189
189
|
trace_str += f"\tstartTime={unix_nano_to_rfc3339(int(trace.get('startTimeUnixNano')))}"
|
|
190
|
-
trace_str += f" rootServiceName={trace.get('
|
|
190
|
+
trace_str += f" rootServiceName={trace.get('rootServiceName')}"
|
|
191
191
|
trace_str += f" rootTraceName={trace.get('rootTraceName')}"
|
|
192
192
|
traces_str.append(trace_str)
|
|
193
193
|
return "\n".join(traces_str)
|
|
@@ -79,7 +79,7 @@ class GetLogs(BaseNewRelicTool):
|
|
|
79
79
|
|
|
80
80
|
try:
|
|
81
81
|
logging.info(f"Getting New Relic logs for app {app} since {since}")
|
|
82
|
-
response = requests.post(url, headers=headers, json=query)
|
|
82
|
+
response = requests.post(url, headers=headers, json=query) # type: ignore[arg-type]
|
|
83
83
|
|
|
84
84
|
if response.status_code == 200:
|
|
85
85
|
return success(response.json())
|
|
@@ -164,7 +164,7 @@ class GetTraces(BaseNewRelicTool):
|
|
|
164
164
|
|
|
165
165
|
try:
|
|
166
166
|
logging.info(f"Getting New Relic traces with duration > {duration}s")
|
|
167
|
-
response = requests.post(url, headers=headers, json=query)
|
|
167
|
+
response = requests.post(url, headers=headers, json=query) # type: ignore[arg-type]
|
|
168
168
|
|
|
169
169
|
if response.status_code == 200:
|
|
170
170
|
return success(response.json())
|
|
@@ -197,7 +197,7 @@ class NewRelicToolset(Toolset):
|
|
|
197
197
|
super().__init__(
|
|
198
198
|
name="newrelic",
|
|
199
199
|
description="Toolset for interacting with New Relic to fetch logs and traces",
|
|
200
|
-
docs_url="https://
|
|
200
|
+
docs_url="https://holmesgpt.dev/data-sources/builtin-toolsets/newrelic/",
|
|
201
201
|
icon_url="https://companieslogo.com/img/orig/NEWR-de5fcb2e.png?t=1720244493",
|
|
202
202
|
prerequisites=[CallablePrerequisite(callable=self.prerequisites_callable)],
|
|
203
203
|
tools=[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: holmesgpt
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0a0
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Natan Yellin
|
|
6
6
|
Author-email: natan@robusta.dev
|
|
@@ -35,7 +35,7 @@ Requires-Dist: mcp (==v1.12.2)
|
|
|
35
35
|
Requires-Dist: openai (>=1.6.1,<1.100.0)
|
|
36
36
|
Requires-Dist: opensearch-py (>=2.8.0,<3.0.0)
|
|
37
37
|
Requires-Dist: postgrest (==0.16.8)
|
|
38
|
-
Requires-Dist: prometrix (==0.2.
|
|
38
|
+
Requires-Dist: prometrix (==0.2.5)
|
|
39
39
|
Requires-Dist: prompt-toolkit (>=3.0.51,<4.0.0)
|
|
40
40
|
Requires-Dist: protobuf (>=6.31.1)
|
|
41
41
|
Requires-Dist: pydantic (>=2.7,<3.0)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
holmes/.git_archival.json,sha256=PbwdO7rNhEJ4ALiO12DPPb81xNAIsVxCA0m8OrVoqsk,182
|
|
2
|
-
holmes/__init__.py,sha256=
|
|
2
|
+
holmes/__init__.py,sha256=6EFHBvUBpblW6V0uBPWb-MI_VRb2nAh-QMWNn_XRRVQ,263
|
|
3
3
|
holmes/clients/robusta_client.py,sha256=lHV02aKJmAb08jVhjQ6jWvhhmjQ86Ajbo_lgbhqfn3s,1221
|
|
4
4
|
holmes/common/env_vars.py,sha256=-P834z71-S7cklgTB7DX0OuTLzxwmAT3WETt3svBUY0,3013
|
|
5
5
|
holmes/common/openshift.py,sha256=akbQ0GpnmuzXOqTcotpTDQSDKIROypS9mgPOprUgkCw,407
|
|
@@ -20,13 +20,13 @@ holmes/core/runbooks.py,sha256=Oj5ICmiGgaq57t4erPzQDvHQ0rMGj1nhiiYhl8peH3Q,939
|
|
|
20
20
|
holmes/core/safeguards.py,sha256=SAw-J9y3uAehJVZJYsFs4C62jzLV4p_C07F2jUuJHug,4895
|
|
21
21
|
holmes/core/supabase_dal.py,sha256=-AtQ6oDyIpoc2a46xA26e8416kUD4tj2Q3p4P42PFP4,21291
|
|
22
22
|
holmes/core/todo_tasks_formatter.py,sha256=USyJZcoX6zoxID1UV-abAKdaWFYLO6QJd-UKryJAurI,1487
|
|
23
|
-
holmes/core/tool_calling_llm.py,sha256=
|
|
23
|
+
holmes/core/tool_calling_llm.py,sha256=B1D-0QyVfYW-p3pfbbDo4DRoBEpzV7uN6IiH48i61XQ,42018
|
|
24
24
|
holmes/core/tools.py,sha256=Xj7Yoztf9OqrGMSwhWBNmIwoZ147P6qi7U6vt0PNgBQ,21380
|
|
25
25
|
holmes/core/tools_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
26
|
holmes/core/tools_utils/tool_executor.py,sha256=wLuyr1O8zkNXaZ_MzWm5hUDcOI3tB9I4YiserDhIu-E,2375
|
|
27
27
|
holmes/core/tools_utils/toolset_utils.py,sha256=SvWzen8Fg_TB_6Idw1hK0nCPrJL40ueWVMfsv8Kh2RY,2363
|
|
28
28
|
holmes/core/toolset_manager.py,sha256=PVmhRaSZntcJ_-jE3W2vHwZgAXIprPIgq0YMGYhmcZs,18451
|
|
29
|
-
holmes/core/tracing.py,sha256=
|
|
29
|
+
holmes/core/tracing.py,sha256=o1vTLCbnFvBOVnQKqRaj4HDNYGYAd4ub2IgkV1E3qY4,9130
|
|
30
30
|
holmes/interactive.py,sha256=l1kh0ABXO_RWIzkEuLkedM-73k1ezENAvXMrgNeqsKA,41836
|
|
31
31
|
holmes/main.py,sha256=e_J4B1oMPbBiKz8cf-m_UJbhdk98AgAPS1LsU67PEe8,34813
|
|
32
32
|
holmes/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -149,24 +149,24 @@ holmes/plugins/toolsets/datadog/datadog_metrics_instructions.jinja2,sha256=_59Dz
|
|
|
149
149
|
holmes/plugins/toolsets/datadog/datadog_rds_instructions.jinja2,sha256=lbI6lkcMjG1CVKeL0XDkq5zl-fRDVxZ_t_CjS-Uh_OM,3119
|
|
150
150
|
holmes/plugins/toolsets/datadog/datadog_traces_formatter.py,sha256=uTtWTrsbvO9cZcUDskJE9p5sEscieXwhEpxvRKkaiEw,10275
|
|
151
151
|
holmes/plugins/toolsets/datadog/instructions_datadog_traces.jinja2,sha256=9j3-46UNE35DE2xBDTCRt1EedgNdgRXuC1u-X3yB-9I,1487
|
|
152
|
-
holmes/plugins/toolsets/datadog/toolset_datadog_general.py,sha256=
|
|
153
|
-
holmes/plugins/toolsets/datadog/toolset_datadog_logs.py,sha256=
|
|
154
|
-
holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py,sha256=
|
|
152
|
+
holmes/plugins/toolsets/datadog/toolset_datadog_general.py,sha256=ZYMqyycrnbr530xuF0WYiKyAbCdxeDPKYIvw0ito1Dc,27265
|
|
153
|
+
holmes/plugins/toolsets/datadog/toolset_datadog_logs.py,sha256=lpZYyrMeg9225gY8vuwAGGQb0XzfhYpdrVyVNE0PANE,9940
|
|
154
|
+
holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py,sha256=_3C-x-P4KmaKmuqNQI9vlI7n-aqU30a8Qabu3xPhGOA,24793
|
|
155
155
|
holmes/plugins/toolsets/datadog/toolset_datadog_rds.py,sha256=5nxqZ93Fx8AmGr7KvF76erk-YsFDIL35KhEJrWsklcQ,29015
|
|
156
|
-
holmes/plugins/toolsets/datadog/toolset_datadog_traces.py,sha256=
|
|
156
|
+
holmes/plugins/toolsets/datadog/toolset_datadog_traces.py,sha256=1NXO1gnqSB2qKFSRw3M9kex5mVTiOX393CBeyQ_TXfE,26044
|
|
157
157
|
holmes/plugins/toolsets/docker.yaml,sha256=O0Q0z0kZS8_QBEhwrUfbXdGUn1nP1K9k0FlQd6EZVJ4,1559
|
|
158
|
-
holmes/plugins/toolsets/git.py,sha256=
|
|
158
|
+
holmes/plugins/toolsets/git.py,sha256=JVDHl_im9GZepk2Ir4AAaeMbDVqfkMzrsUgR-GaGDck,32029
|
|
159
159
|
holmes/plugins/toolsets/grafana/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
160
|
holmes/plugins/toolsets/grafana/base_grafana_toolset.py,sha256=AjvbS4txSo97YqeeFlXUnu95oPFt8rB-CD1Ccf92a04,1760
|
|
161
|
-
holmes/plugins/toolsets/grafana/common.py,sha256=
|
|
161
|
+
holmes/plugins/toolsets/grafana/common.py,sha256=ycAuGVGL0iAUh1K_cukG2UyTHWDXhj1gBOYkU3A1Ofo,2439
|
|
162
162
|
holmes/plugins/toolsets/grafana/grafana_api.py,sha256=nq7KWoUAfFxp1-3VqKadPNKbTifLTgKUAZOFUH5QWUY,1665
|
|
163
|
+
holmes/plugins/toolsets/grafana/grafana_tempo_api.py,sha256=bcCPEwOwm1Og9LYR6PlAtjGgQopvySNjf5nTwILuFt4,15697
|
|
163
164
|
holmes/plugins/toolsets/grafana/loki_api.py,sha256=f7oTzfhJ1LojsPoAfsKt32ADWffLEywBJQWG9eyfb7I,2529
|
|
164
|
-
holmes/plugins/toolsets/grafana/tempo_api.py,sha256=UbLfyzA5TbP-5jx4Dkc20xLlR-6Z4z-4nPKrMlzgCRU,3565
|
|
165
165
|
holmes/plugins/toolsets/grafana/toolset_grafana.py,sha256=GsCxsaWNXzOoA6eoaH9LN6ezUcxdFSgg1iWpqqvcVX0,4882
|
|
166
166
|
holmes/plugins/toolsets/grafana/toolset_grafana_loki.py,sha256=Xc80raV16wlt05hdPslkb8ru40h2GYFc2Y80bR1bvlM,3846
|
|
167
|
-
holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2,sha256=
|
|
168
|
-
holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py,sha256=
|
|
169
|
-
holmes/plugins/toolsets/grafana/trace_parser.py,sha256=
|
|
167
|
+
holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2,sha256=VU49G5fxIJFny2wS2gvRBiyuCXEnvB7JqrJGLF6i0dY,6490
|
|
168
|
+
holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py,sha256=bgydZ-jAOxQANdSFN_p_7B7wurcNKVTs2RbqVeMwNEU,43794
|
|
169
|
+
holmes/plugins/toolsets/grafana/trace_parser.py,sha256=8PjqPGDGo9uB2Z8WWWknMKdhcqlqZEVncQCCkl2F06A,7024
|
|
170
170
|
holmes/plugins/toolsets/helm.yaml,sha256=-IPDChKMHcxGbzA0z9GKczRshL-mD24cHpBizfNM1jM,1604
|
|
171
171
|
holmes/plugins/toolsets/internet/internet.py,sha256=zuI6tTdGF1ahg16xsIisRw3EPT6Tb1dCPlZ8bvCVry8,7749
|
|
172
172
|
holmes/plugins/toolsets/internet/notion.py,sha256=dIeXJUCOZBdGmcgJJWeH2RcTyXdPsfNONj7T0_5iap4,4757
|
|
@@ -182,7 +182,7 @@ holmes/plugins/toolsets/logging_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
182
182
|
holmes/plugins/toolsets/logging_utils/logging_api.py,sha256=seW5DNSzREQx4nmkt9NEqN21j8jTPNSJyOkCrdcdWoQ,11615
|
|
183
183
|
holmes/plugins/toolsets/logging_utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
184
184
|
holmes/plugins/toolsets/mcp/toolset_mcp.py,sha256=tYc_fjBE3ycM2HPJjwW_EviSb2B8Psf3pj_AnMQZ01g,4874
|
|
185
|
-
holmes/plugins/toolsets/newrelic.py,sha256=
|
|
185
|
+
holmes/plugins/toolsets/newrelic.py,sha256=0WyGqtr836J3mEvpC0j3fKa4VzRb3YgLYm68q_-G6Mc,7906
|
|
186
186
|
holmes/plugins/toolsets/opensearch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
187
|
holmes/plugins/toolsets/opensearch/opensearch.py,sha256=rLbwYQJbKsPRA57rbo9Kae9v7SNd8B0GZqHVUk3UJWQ,8616
|
|
188
188
|
holmes/plugins/toolsets/opensearch/opensearch_logs.py,sha256=-WlOPzjLwQuEoKi_4r5KZZNnKuvBZO0EFO2NnFflf1M,5859
|
|
@@ -227,8 +227,8 @@ holmes/utils/pydantic_utils.py,sha256=g0e0jLTa8Je8JKrhEP4N5sMxj0_hhPOqFZr0Vpd67s
|
|
|
227
227
|
holmes/utils/stream.py,sha256=Z9duSET8uXx-1dqPBjGuDKBxkJMaMsCrOqOXrVbtjGw,2806
|
|
228
228
|
holmes/utils/tags.py,sha256=SU4EZMBtLlIb7OlHsSpguFaypczRzOcuHYxDSanV3sQ,3364
|
|
229
229
|
holmes/version.py,sha256=uDRPOvVaHreROj_9HPe81RVpTzHcG8ojpGTsnJIlQOM,5220
|
|
230
|
-
holmesgpt-0.
|
|
231
|
-
holmesgpt-0.
|
|
232
|
-
holmesgpt-0.
|
|
233
|
-
holmesgpt-0.
|
|
234
|
-
holmesgpt-0.
|
|
230
|
+
holmesgpt-0.14.0a0.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
|
|
231
|
+
holmesgpt-0.14.0a0.dist-info/METADATA,sha256=TT4hUs10TqA-shY5RUPfIWdPhiza6qETumt_fFJvASI,16239
|
|
232
|
+
holmesgpt-0.14.0a0.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
|
|
233
|
+
holmesgpt-0.14.0a0.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
|
|
234
|
+
holmesgpt-0.14.0a0.dist-info/RECORD,,
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import requests # type: ignore
|
|
2
|
-
from typing import Dict, List, Optional
|
|
3
|
-
import backoff
|
|
4
|
-
|
|
5
|
-
from holmes.plugins.toolsets.grafana.common import build_headers
|
|
6
|
-
from holmes.plugins.toolsets.grafana.trace_parser import process_trace
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def execute_tempo_query_with_retry(
|
|
10
|
-
base_url: str,
|
|
11
|
-
api_key: Optional[str],
|
|
12
|
-
headers: Optional[Dict[str, str]],
|
|
13
|
-
query_params: dict,
|
|
14
|
-
retries: int = 3,
|
|
15
|
-
timeout: int = 5,
|
|
16
|
-
):
|
|
17
|
-
"""
|
|
18
|
-
Execute a Tempo API query through Grafana with retries and timeout.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
tempo_datasource_uid: The UID of the Tempo datasource.
|
|
22
|
-
query_params: Query parameters for the API.
|
|
23
|
-
retries: Number of retries for the request.
|
|
24
|
-
timeout: Timeout for each request in seconds.
|
|
25
|
-
|
|
26
|
-
Returns:
|
|
27
|
-
List of trace results.
|
|
28
|
-
"""
|
|
29
|
-
url = f"{base_url}/api/search"
|
|
30
|
-
|
|
31
|
-
@backoff.on_exception(
|
|
32
|
-
backoff.expo, # Exponential backoff
|
|
33
|
-
requests.exceptions.RequestException, # Retry on request exceptions
|
|
34
|
-
max_tries=retries, # Maximum retries
|
|
35
|
-
giveup=lambda e: isinstance(e, requests.exceptions.HTTPError)
|
|
36
|
-
and e.response.status_code < 500,
|
|
37
|
-
)
|
|
38
|
-
def make_request():
|
|
39
|
-
response = requests.post(
|
|
40
|
-
url,
|
|
41
|
-
headers=build_headers(api_key=api_key, additional_headers=headers),
|
|
42
|
-
json=query_params,
|
|
43
|
-
timeout=timeout, # Set timeout for the request
|
|
44
|
-
)
|
|
45
|
-
response.raise_for_status() # Raise an error for non-2xx responses
|
|
46
|
-
return response.json()
|
|
47
|
-
|
|
48
|
-
try:
|
|
49
|
-
return make_request()
|
|
50
|
-
except requests.exceptions.RequestException as e:
|
|
51
|
-
raise Exception(f"Request to Tempo API failed after retries: {e}")
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def query_tempo_traces(
|
|
55
|
-
base_url: str,
|
|
56
|
-
api_key: Optional[str],
|
|
57
|
-
headers: Optional[Dict[str, str]],
|
|
58
|
-
query: Optional[str],
|
|
59
|
-
start: int,
|
|
60
|
-
end: int,
|
|
61
|
-
limit: int,
|
|
62
|
-
) -> Dict:
|
|
63
|
-
query_params = {
|
|
64
|
-
"start": str(start),
|
|
65
|
-
"end": str(end),
|
|
66
|
-
"limit": str(limit),
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if query:
|
|
70
|
-
query_params["q"] = query
|
|
71
|
-
data = execute_tempo_query_with_retry(
|
|
72
|
-
base_url=base_url,
|
|
73
|
-
api_key=api_key,
|
|
74
|
-
headers=headers,
|
|
75
|
-
query_params=query_params,
|
|
76
|
-
)
|
|
77
|
-
return data
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def query_tempo_trace_by_id(
|
|
81
|
-
base_url: str,
|
|
82
|
-
api_key: Optional[str],
|
|
83
|
-
headers: Optional[Dict[str, str]],
|
|
84
|
-
trace_id: str,
|
|
85
|
-
key_labels: List[str],
|
|
86
|
-
retries: int = 3,
|
|
87
|
-
timeout: int = 5,
|
|
88
|
-
) -> str:
|
|
89
|
-
"""
|
|
90
|
-
Query Tempo for a specific trace by its ID with retries and backoff.
|
|
91
|
-
|
|
92
|
-
Args:
|
|
93
|
-
tempo_datasource_id: The ID of the Tempo datasource.
|
|
94
|
-
trace_id: The trace ID to retrieve.
|
|
95
|
-
retries: Number of retries for the request.
|
|
96
|
-
timeout: Timeout for each request in seconds.
|
|
97
|
-
|
|
98
|
-
Returns:
|
|
99
|
-
A formatted trace details string
|
|
100
|
-
"""
|
|
101
|
-
url = f"{base_url}/api/traces/{trace_id}"
|
|
102
|
-
|
|
103
|
-
@backoff.on_exception(
|
|
104
|
-
backoff.expo,
|
|
105
|
-
requests.exceptions.RequestException,
|
|
106
|
-
max_tries=retries,
|
|
107
|
-
giveup=lambda e: isinstance(e, requests.exceptions.HTTPError)
|
|
108
|
-
and e.response.status_code < 500,
|
|
109
|
-
)
|
|
110
|
-
def make_request():
|
|
111
|
-
response = requests.get(
|
|
112
|
-
url,
|
|
113
|
-
headers=build_headers(api_key=api_key, additional_headers=headers),
|
|
114
|
-
timeout=timeout,
|
|
115
|
-
)
|
|
116
|
-
response.raise_for_status()
|
|
117
|
-
return process_trace(response.json(), key_labels)
|
|
118
|
-
|
|
119
|
-
try:
|
|
120
|
-
return make_request()
|
|
121
|
-
except requests.exceptions.RequestException as e:
|
|
122
|
-
raise Exception(
|
|
123
|
-
f"Failed to retrieve trace by ID after retries: {e} \n for URL: {url}"
|
|
124
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|