Skip to content

Commit dba0563

Browse files
Maffoochclaude
andcommitted
fix: recalibrate perf counts to rebased dev + drop classic-search vuln-id lane
Second CI pass after the rebase onto newer dev: - test_importers_performance: rebased dev shifted the baseline again (-1 on import/dedup steps, -2 more on reimport1). Reset all 22 affected counts to the current CI actuals; the warm-up primes FindingVulnerabilityReference. - dojo/search/views.py: the classic /simple_search vuln-id lane queried the deleted Vulnerability_Id via watson. An earlier stub (authorized_vulnerability_ids = []) 500'd on watson.filter/.prefetch_related ('list' has no attribute ...), breaking search_test and any UI test that visits /simple_search. Remove the lane entirely (model is gone and unregistered from watson); Vue global search covers vuln ids. The dev DD_WATSON_SEARCH_ENABLED toggle still 410s when watson is off. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent a6ba587 commit dba0563

2 files changed

Lines changed: 25 additions & 61 deletions

File tree

dojo/search/views.py

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import itertools
21
import logging
32
import re
43
import shlex
@@ -114,8 +113,6 @@ def simple_search(request):
114113
"not-tag" in operators or "not-test-tag" in operators or "not-engagement-tag" in operators or "not-product-tag" in operators or \
115114
"not-tags" in operators or "not-test-tags" in operators or "not-engagement-tags" in operators or "not-product-tags" in operators
116115

117-
search_vulnerability_ids = "vulnerability_id" in operators or not operators
118-
119116
search_finding_id = "id" in operators
120117
search_findings = "finding" in operators or search_finding_id or search_tags or not operators
121118

@@ -139,9 +136,8 @@ def simple_search(request):
139136
authorized_endpoints = get_authorized_endpoints("view")
140137
authorized_finding_templates = Finding_Template.objects.all()
141138
authorized_app_analysis = get_authorized_app_analysis("view")
142-
# Legacy watson-backed vuln-id search is retired (this view returns 410); the entity
143-
# store has no classic-search reader. Vue global search covers vulnerability ids.
144-
authorized_vulnerability_ids = []
139+
# The legacy Vulnerability_Id watson index was removed (entity-only cutover), so classic
140+
# search no longer has a vulnerability-id lane. The Vue global search covers vuln ids.
145141

146142
# TODO: better get findings in their own query and match on id. that would allow filtering on additional fields such prod_id, etc.
147143

@@ -151,7 +147,6 @@ def simple_search(request):
151147
products = authorized_products
152148
endpoints = authorized_endpoints
153149
app_analysis = authorized_app_analysis
154-
vulnerability_ids = authorized_vulnerability_ids
155150

156151
findings_filter = None
157152
title_words = None
@@ -330,26 +325,13 @@ def simple_search(request):
330325
else:
331326
app_analysis = None
332327

333-
if search_vulnerability_ids:
334-
logger.debug("searching vulnerability_ids")
335-
336-
vulnerability_ids = authorized_vulnerability_ids
337-
vulnerability_ids = apply_vulnerability_id_filter(vulnerability_ids, operators)
338-
if keywords_query:
339-
watson_results = watson.filter(vulnerability_ids, keywords_query)
340-
vulnerability_ids = vulnerability_ids.filter(id__in=[watson.id for watson in watson_results])
341-
vulnerability_ids = vulnerability_ids.prefetch_related("finding__test__engagement__product", "finding__test__engagement__product__tags")
342-
vulnerability_ids = vulnerability_ids[:max_results]
343-
else:
344-
vulnerability_ids = None
345-
346328
if keywords_query:
347329
logger.debug("searching generic")
348330
logger.debug("going generic with: %s", keywords_query)
349331
generic = watson.search(keywords_query, models=(
350332
authorized_findings, authorized_tests, authorized_engagements,
351333
authorized_products, authorized_endpoints,
352-
authorized_finding_templates, authorized_vulnerability_ids, authorized_app_analysis)) \
334+
authorized_finding_templates, authorized_app_analysis)) \
353335
.prefetch_related("object")[:max_results]
354336
else:
355337
generic = None
@@ -539,24 +521,6 @@ def apply_endpoint_filter(qs, operators):
539521
return qs
540522

541523

542-
def apply_vulnerability_id_filter(qs, operators):
543-
if "vulnerability_id" in operators:
544-
value = operators["vulnerability_id"]
545-
546-
# possible value:
547-
# ['CVE-2020-6754]
548-
# ['CVE-2020-6754,CVE-2018-7489']
549-
# or when entered multiple times:
550-
# ['CVE-2020-6754,CVE-2018-7489', 'CVE-2020-1234']
551-
552-
# so flatten like mad:
553-
vulnerability_ids = list(itertools.chain.from_iterable([vulnerability_id.split(",") for vulnerability_id in value]))
554-
logger.debug("vulnerability_id filter: %s", vulnerability_ids)
555-
qs = qs.filter(Q(vulnerability_id__in=vulnerability_ids))
556-
557-
return qs
558-
559-
560524
def perform_keyword_search_for_operator(qs, operators, operator, keywords_query):
561525
watson_results = None
562526
operator_query = ""

unittests/test_importers_performance.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,9 @@ def test_import_reimport_reimport_performance_pghistory_async(self):
343343
configure_pghistory_triggers()
344344

345345
self._import_reimport_performance(
346-
expected_num_queries1=163,
346+
expected_num_queries1=162,
347347
expected_num_async_tasks1=2,
348-
expected_num_queries2=131,
348+
expected_num_queries2=129,
349349
expected_num_async_tasks2=1,
350350
expected_num_queries3=30,
351351
expected_num_async_tasks3=1,
@@ -367,9 +367,9 @@ def test_import_reimport_reimport_performance_pghistory_no_async(self):
367367
testuser.usercontactinfo.save()
368368

369369
self._import_reimport_performance(
370-
expected_num_queries1=182,
370+
expected_num_queries1=181,
371371
expected_num_async_tasks1=2,
372-
expected_num_queries2=141,
372+
expected_num_queries2=139,
373373
expected_num_async_tasks2=1,
374374
expected_num_queries3=40,
375375
expected_num_async_tasks3=1,
@@ -392,9 +392,9 @@ def test_import_reimport_reimport_performance_pghistory_no_async_with_product_gr
392392
self.system_settings(enable_product_grade=True)
393393

394394
self._import_reimport_performance(
395-
expected_num_queries1=192,
395+
expected_num_queries1=191,
396396
expected_num_async_tasks1=5,
397-
expected_num_queries2=151,
397+
expected_num_queries2=149,
398398
expected_num_async_tasks2=4,
399399
expected_num_queries3=49,
400400
expected_num_async_tasks3=3,
@@ -526,9 +526,9 @@ def test_deduplication_performance_pghistory_async(self):
526526
self.system_settings(enable_deduplication=True)
527527

528528
self._deduplication_performance(
529-
expected_num_queries1=99,
529+
expected_num_queries1=98,
530530
expected_num_async_tasks1=2,
531-
expected_num_queries2=77,
531+
expected_num_queries2=76,
532532
expected_num_async_tasks2=2,
533533
check_duplicates=False, # Async mode - deduplication happens later
534534
)
@@ -547,9 +547,9 @@ def test_deduplication_performance_pghistory_no_async(self):
547547
testuser.usercontactinfo.save()
548548

549549
self._deduplication_performance(
550-
expected_num_queries1=118,
550+
expected_num_queries1=117,
551551
expected_num_async_tasks1=2,
552-
expected_num_queries2=97,
552+
expected_num_queries2=96,
553553
expected_num_async_tasks2=2,
554554
)
555555

@@ -580,9 +580,9 @@ def test_deduplication_performance_pghistory_async_wait(self):
580580
# returns instantly without executing dedup on the request's DB connection.
581581
with patch("celery.result.AsyncResult.get", return_value=None):
582582
self._deduplication_performance(
583-
expected_num_queries1=100,
583+
expected_num_queries1=99,
584584
expected_num_async_tasks1=2,
585-
expected_num_queries2=78,
585+
expected_num_queries2=77,
586586
expected_num_async_tasks2=2,
587587
dedup_mode="async_wait",
588588
check_duplicates=False,
@@ -670,9 +670,9 @@ def test_import_reimport_reimport_performance_pghistory_async(self):
670670
configure_pghistory_triggers()
671671

672672
self._import_reimport_performance(
673-
expected_num_queries1=170,
673+
expected_num_queries1=169,
674674
expected_num_async_tasks1=2,
675-
expected_num_queries2=140,
675+
expected_num_queries2=138,
676676
expected_num_async_tasks2=1,
677677
expected_num_queries3=38,
678678
expected_num_async_tasks3=1,
@@ -694,9 +694,9 @@ def test_import_reimport_reimport_performance_pghistory_no_async(self):
694694
testuser.usercontactinfo.save()
695695

696696
self._import_reimport_performance(
697-
expected_num_queries1=191,
697+
expected_num_queries1=190,
698698
expected_num_async_tasks1=2,
699-
expected_num_queries2=152,
699+
expected_num_queries2=150,
700700
expected_num_async_tasks2=1,
701701
expected_num_queries3=50,
702702
expected_num_async_tasks3=1,
@@ -719,9 +719,9 @@ def test_import_reimport_reimport_performance_pghistory_no_async_with_product_gr
719719
self.system_settings(enable_product_grade=True)
720720

721721
self._import_reimport_performance(
722-
expected_num_queries1=204,
722+
expected_num_queries1=203,
723723
expected_num_async_tasks1=5,
724-
expected_num_queries2=165,
724+
expected_num_queries2=163,
725725
expected_num_async_tasks2=4,
726726
expected_num_queries3=59,
727727
expected_num_async_tasks3=3,
@@ -826,9 +826,9 @@ def test_deduplication_performance_pghistory_async(self):
826826
self.system_settings(enable_deduplication=True)
827827

828828
self._deduplication_performance(
829-
expected_num_queries1=106,
829+
expected_num_queries1=105,
830830
expected_num_async_tasks1=2,
831-
expected_num_queries2=80,
831+
expected_num_queries2=79,
832832
expected_num_async_tasks2=2,
833833
check_duplicates=False, # Async mode - deduplication happens later
834834
)
@@ -846,8 +846,8 @@ def test_deduplication_performance_pghistory_no_async(self):
846846
testuser.usercontactinfo.save()
847847

848848
self._deduplication_performance(
849-
expected_num_queries1=127,
849+
expected_num_queries1=126,
850850
expected_num_async_tasks1=2,
851-
expected_num_queries2=208,
851+
expected_num_queries2=207,
852852
expected_num_async_tasks2=2,
853853
)

0 commit comments

Comments
 (0)