Skip to content

Commit d4ebfe9

Browse files
Merge pull request #140 from Contrast-Security-OSS/SS-107_remove_redundant_otel_key
SS-107, SS-110, SS-111, and SS-112 remove redundant otel key
2 parents d6134d0 + 84cef58 commit d4ebfe9

9 files changed

Lines changed: 12 additions & 20 deletions

File tree

src/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def __init__(self, env: Dict[str, str] = os.environ, testing: bool = False) -> N
5656
self.testing = testing
5757

5858
# --- Preset ---
59-
self.VERSION = "v1.0.11"
59+
self.VERSION = "v1.0.15"
6060
self.USER_AGENT = f"contrast-smart-fix {self.VERSION}"
6161

6262
# --- Paths (initialized early for use in command detection) ---

src/main.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,6 @@ def _main_impl(vuln_count): # noqa: C901
341341
op_span.set_attribute("contrast.finding.source", "runtime")
342342
op_span.set_attribute("contrast.finding.rule_id", vulnerability.rule_name)
343343
op_span.set_attribute("contrast.smartfix.coding_agent", config.CODING_AGENT.lower())
344-
if config.CODING_AGENT == CodingAgents.SMARTFIX.name:
345-
op_span.set_attribute(
346-
"contrast.smartfix.llm_provider",
347-
"contrast" if config.USE_CONTRAST_LLM else "byollm",
348-
)
349344

350345
try:
351346
context = RemediationContext(

src/smartfix/domains/telemetry/otel_provider.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ def initialize_otel(config) -> None:
7676
resource = Resource.create({
7777
SERVICE_NAME: "smartfix",
7878
"service.version": config.VERSION,
79-
"contrast.org_id": config.CONTRAST_ORG_ID,
8079
"vcs.repository.url.full": f"{config.GITHUB_SERVER_URL}/{config.GITHUB_REPOSITORY}",
8180
"vcs.repository.name": config.GITHUB_REPOSITORY.split("/")[-1],
8281
"vcs.owner.name": config.GITHUB_REPOSITORY.split("/")[0],

src/smartfix/extensions/smartfix_litellm.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ async def _call_llm_with_retry(self, completion_args: dict) -> dict:
443443
llm_span.set_attribute("gen_ai.system", _derive_system(model))
444444
llm_span.set_attribute("gen_ai.request.model", model)
445445
llm_span.set_attribute("gen_ai.operation.name", "chat")
446-
llm_span.set_attribute("gen_ai.retry.attempt", attempt)
446+
llm_span.set_attribute("contrast.smartfix.retry_attempt", attempt)
447447
max_tokens = completion_args.get("max_tokens")
448448
if max_tokens is not None:
449449
llm_span.set_attribute("gen_ai.request.max_tokens", max_tokens)
@@ -458,9 +458,9 @@ async def _call_llm_with_retry(self, completion_args: dict) -> dict:
458458
llm_span.set_attribute("gen_ai.usage.input_tokens", input_tokens)
459459
llm_span.set_attribute("gen_ai.usage.output_tokens", output_tokens)
460460
if cache_read:
461-
llm_span.set_attribute("gen_ai.usage.cache_read_input_tokens", cache_read)
461+
llm_span.set_attribute("gen_ai.usage.cache_read.input_tokens", cache_read)
462462
if cache_write:
463-
llm_span.set_attribute("gen_ai.usage.cache_creation_input_tokens", cache_write)
463+
llm_span.set_attribute("gen_ai.usage.cache_creation.input_tokens", cache_write)
464464

465465
return response
466466

test/test_main.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,6 @@ def mock_start_span(name):
323323
self.assertEqual(attrs.get("contrast.finding.source"), "runtime")
324324
self.assertEqual(attrs.get("contrast.finding.rule_id"), "sql-injection")
325325
self.assertEqual(attrs.get("contrast.smartfix.coding_agent"), "smartfix")
326-
self.assertEqual(attrs.get("contrast.smartfix.llm_provider"), "byollm")
327326

328327
def test_fix_vulnerability_span_response_attributes_no_changes(self):
329328
"""fix-vulnerability span has fix_applied=False and pr_created=False when no code changes."""

test/test_otel_provider.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ def test_initialize_sets_correct_resource_attributes(self, mock_exporter_cls):
8686
attrs = otel_provider._tracer_provider.resource.attributes
8787
self.assertEqual(attrs["service.name"], "smartfix")
8888
self.assertEqual(attrs["service.version"], cfg.VERSION)
89-
self.assertEqual(attrs["contrast.org_id"], cfg.CONTRAST_ORG_ID)
9089
self.assertEqual(
9190
attrs["vcs.repository.url.full"],
9291
f"{cfg.GITHUB_SERVER_URL}/{cfg.GITHUB_REPOSITORY}",

test/test_otel_spans.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,14 +271,14 @@ def test_llm_span_has_gen_ai_operation_name_chat(self):
271271
spans = _spans_named(self.exporter, f"chat {model}")
272272
self.assertEqual(spans[0].attributes["gen_ai.operation.name"], "chat")
273273

274-
def test_llm_span_has_gen_ai_retry_attempt(self):
274+
def test_llm_span_has_contrast_smartfix_retry_attempt(self):
275275
import src.smartfix.domains.telemetry.otel_provider as otel_provider
276276
model = "test-retry-model"
277277
with otel_provider.start_span(f"chat {model}") as span:
278-
span.set_attribute("gen_ai.retry.attempt", 0)
278+
span.set_attribute("contrast.smartfix.retry_attempt", 0)
279279

280280
spans = _spans_named(self.exporter, f"chat {model}")
281-
self.assertEqual(spans[0].attributes["gen_ai.retry.attempt"], 0)
281+
self.assertEqual(spans[0].attributes["contrast.smartfix.retry_attempt"], 0)
282282

283283
def test_llm_span_has_usage_input_and_output_tokens(self):
284284
import src.smartfix.domains.telemetry.otel_provider as otel_provider

test/test_smartfix_litellm.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def mock_start_span(name, context=None):
506506

507507
@patch('src.smartfix.extensions.smartfix_litellm.debug_log')
508508
def test_span_has_request_attributes(self, _mock_log):
509-
"""gen_ai.system, gen_ai.request.model, gen_ai.operation.name, gen_ai.retry.attempt are set."""
509+
"""gen_ai.system, gen_ai.request.model, gen_ai.operation.name, contrast.smartfix.retry_attempt are set."""
510510
mock_response = self._make_mock_response()
511511
self.model.llm_client = MagicMock()
512512
self.model.llm_client.acompletion = AsyncMock(return_value=mock_response)
@@ -529,7 +529,7 @@ def mock_start_span(name, context=None):
529529
self.assertEqual(attrs.get("gen_ai.system"), "anthropic")
530530
self.assertEqual(attrs.get("gen_ai.request.model"), "anthropic/claude-3-opus")
531531
self.assertEqual(attrs.get("gen_ai.operation.name"), "chat")
532-
self.assertEqual(attrs.get("gen_ai.retry.attempt"), 0)
532+
self.assertEqual(attrs.get("contrast.smartfix.retry_attempt"), 0)
533533

534534
@patch('src.smartfix.extensions.smartfix_litellm.debug_log')
535535
def test_span_has_response_model_attribute(self, _mock_log):

tests/otel/verify_spans.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,8 @@ def verify_llm_span(span: Span, parent_id: str) -> Checker:
243243
str(span.attr("gen_ai.request.model")))
244244
c.check(span.attr("gen_ai.operation.name") == "chat",
245245
"gen_ai.operation.name == 'chat'", str(span.attr("gen_ai.operation.name")))
246-
c.check(span.has_attr("gen_ai.retry.attempt"), "Has gen_ai.retry.attempt",
247-
str(span.attr("gen_ai.retry.attempt")))
246+
c.check(span.has_attr("contrast.smartfix.retry_attempt"), "Has contrast.smartfix.retry_attempt",
247+
str(span.attr("contrast.smartfix.retry_attempt")))
248248
c.check(span.has_attr("gen_ai.usage.input_tokens"), "Has gen_ai.usage.input_tokens",
249249
str(span.attr("gen_ai.usage.input_tokens")))
250250
c.check(span.has_attr("gen_ai.usage.output_tokens"), "Has gen_ai.usage.output_tokens",
@@ -319,7 +319,7 @@ def verify_trace(spans: List[Span]) -> bool:
319319
else:
320320
print(f"\n ── chat spans ({len(llm_spans)} LLM calls) ──")
321321
for j, llm in enumerate(llm_spans):
322-
attempt = llm.attr("gen_ai.retry.attempt", "?")
322+
attempt = llm.attr("contrast.smartfix.retry_attempt", "?")
323323
model = llm.attr("gen_ai.request.model", llm.name)
324324
print(f"\n [{j+1}] {llm.name} attempt={attempt} model={model}")
325325
c = verify_llm_span(llm, op.span_id)

0 commit comments

Comments
 (0)