Skip to content

Commit a3704b0

Browse files
committed
format changes
1 parent 51ac42b commit a3704b0

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

mcp_servers/integration_test_generator/constants.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from pathlib import Path
2+
13
METRIC_TYPES = {"sum", "gauge"}
2-
GH_BASE_API = "https://api.github.com/repos/open-telemetry/opentelemetry-collector-contrib/"
4+
GH_BASE_API = "https://api.github.com/repos/open-telemetry/opentelemetry-collector-contrib"
35

46
# Path to reference test files
57
SYSTEM_TESTS_ROOT = Path(__file__).parent.parent.parent

mcp_servers/integration_test_generator/server.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"""
77

88
import json
9+
import sys
910
from pathlib import Path
1011
from typing import Any
1112
import requests
@@ -14,15 +15,19 @@
1415
from templates.test_integration_file_template import get_test_file_template
1516
from templates.prompt_template import get_generate_with_reference_prompt
1617
from metric_operations_generator import generate_smoke_operations_from_metrics
18+
from utils._logger import logger
19+
import yaml
20+
import base64 # The content is base64-encoded per GitHub API
1721

1822
# MCP SDK imports
1923
try:
2024
from mcp.server import Server
2125
from mcp.types import Tool, TextContent, Resource
26+
from mcp.types import Prompt, PromptArgument
2227
import mcp.server.stdio
2328
except ImportError:
24-
print("Error: MCP SDK not installed. Install with: pip install mcp")
25-
exit(1)
29+
logger.error("Error: MCP SDK not installed. Install with: pip install mcp")
30+
sys.exit(1)
2631

2732

2833
def generate_test_file(
@@ -196,7 +201,7 @@ def generate_metrics_file(integration_name: str) -> str:
196201
"Accept": "application/vnd.github+json",
197202
}
198203

199-
response = requests.get(url, headers=headers)
204+
response = requests.get(url, headers=headers, timeout=2)
200205
response.raise_for_status()
201206

202207
releases = response.json() # list[dict]
@@ -205,36 +210,32 @@ def generate_metrics_file(integration_name: str) -> str:
205210

206211
latest = releases[0]
207212

208-
metaDataUrl = f"{constants.GH_BASE_API}/contents/receiver/{integration_name.lower()}receiver/metadata.yaml?ref={latest.get('tag_name')}"
213+
receiver_path = f"receiver/{integration_name.lower()}receiver/metadata.yaml"
214+
metadata_url = f"{constants.GH_BASE_API}/contents/{receiver_path}?ref={latest.get('tag_name')}"
209215

210-
response = requests.get(metaDataUrl, headers=headers)
216+
response = requests.get(metadata_url, headers=headers, timeout=2)
211217
if response.status_code != 200:
212218
return f"Failed to fetch metadata.yaml for {integration_name}."
213219

214220
metadata_content = response.json().get("content")
215221
if not metadata_content:
216222
return "No content found in metadata.yaml."
217223

218-
# The content is base64-encoded per GitHub API
219-
import base64
220-
221224
try:
222225
decoded_yaml = base64.b64decode(metadata_content).decode("utf-8")
223226
except Exception as e:
224227
return f"Error decoding metadata.yaml content: {e}"
225228

226229
# Parse YAML to get metrics info
227230
try:
228-
import yaml
229-
230231
yaml_data = yaml.safe_load(decoded_yaml)
231232
except Exception as e:
232233
return f"Error parsing YAML: {e}"
233234

234235
metric_template = {}
235236
metrics_dict = yaml_data.get("metrics", {})
236237
for metric_name, metric_info in metrics_dict.items():
237-
metric_type = set(metric_info.keys()) & METRIC_TYPES
238+
metric_type = set(metric_info.keys()) & constants.METRIC_TYPES
238239
metric_template[metric_name] = {
239240
"data_type": metric_type.pop() if metric_type else None,
240241
"description": metric_info.get("description", ""),
@@ -249,9 +250,8 @@ def generate_metrics_file(integration_name: str) -> str:
249250
return "There is already a metric file created. Please delete and try again"
250251
# Create the parent directory if it doesn't exist
251252
metric_file_path.parent.mkdir(parents=True, exist_ok=True)
252-
f = open(metric_file_path, "x")
253-
f.write(result_json)
254-
f.close()
253+
with open(metric_file_path, "x") as file:
254+
file.write(result_json)
255255

256256
return metric_template
257257

@@ -299,7 +299,10 @@ async def list_tools() -> list[Tool]:
299299
},
300300
"feature_name": {
301301
"type": "string",
302-
"description": "Feature name for the @features decorator (optional, defaults to <integration>_receiver_metrics)",
302+
"description": (
303+
"Feature name for the @features decorator "
304+
"(optional, defaults to <integration>_receiver_metrics)"
305+
),
303306
},
304307
},
305308
"required": ["integration_name", "metrics_json_file"],
@@ -351,7 +354,7 @@ async def list_resources() -> list[Resource]:
351354
if constants.MYSQL_TEST_PATH.exists():
352355
resources.append(
353356
Resource(
354-
uri=f"file://{MYSQL_TEST_PATH}",
357+
uri=f"file://{constants.MYSQL_TEST_PATH}",
355358
name="MySQL Metrics Test (Reference)",
356359
description="MySQL metrics test implementation following PostgreSQL patterns",
357360
mimeType="text/x-python",
@@ -402,7 +405,6 @@ async def read_resource(uri: str) -> str:
402405
@app.list_prompts()
403406
async def list_prompts():
404407
"""List available prompts."""
405-
from mcp.types import Prompt, PromptArgument
406408

407409
return [
408410
Prompt(

0 commit comments

Comments
 (0)