Add filtering onto the images query in get_matching_tags_for_images

Should make the query even faster in the security notification case
This commit is contained in:
Joseph Schorr 2017-05-02 18:29:14 -04:00
parent d77463cc8b
commit 977bbc20a2
3 changed files with 40 additions and 18 deletions

View file

@ -5,7 +5,9 @@ from collections import defaultdict
from enum import Enum
from app import secscan_api
from data.model.tag import filter_tags_have_repository_event, get_matching_tags_for_images
from data.model.tag import (filter_has_repository_event, filter_tags_have_repository_event,
get_matching_tags_for_images)
from data.database import (Image, ImageStorage, ExternalNotificationEvent, Repository,
RepositoryTag)
from endpoints.notificationhelper import notification_batch
@ -159,12 +161,15 @@ class SecurityNotificationHandler(object):
pairs = [tuple(layer_id.split('.', 2)) for layer_id in self.layer_ids]
def filter_notifying_repos(query):
query = query.join(ImageStorage)
return filter_has_repository_event(query, self.event)
def filter_and_order(query):
return filter_tags_have_repository_event(query, self.event)
# Find the matching tags.
tags = get_matching_tags_for_images(pairs, selections=[RepositoryTag, Image, ImageStorage],
filter_query=filter_notifying_repos)
filter_images=filter_notifying_repos,
filter_tags=filter_and_order)
cve_id = self.vulnerability_info['Name']
for tag in tags: