Firewall: Aliases - better focus selected alias updates to in crease performance when either --aliases or --types is used.

This commit is contained in:
Ad Schellevis 2026-02-16 17:59:24 +01:00
parent dfa65e1589
commit df17f3ce81
2 changed files with 28 additions and 1 deletions

View file

@ -396,3 +396,23 @@ class AliasParser(object):
"""
for alias in self._aliases:
yield self._aliases[alias]
def get_affected_aliases(self, alias_names):
""" quick impact analysis on aliases to update given a certain list of names (recursive dig)
:param alias_names: list of names
:return: list Alias objects
"""
dep_lists = {}
names = set(alias_names)
retval = []
has_changed = True
while has_changed:
has_changed = False
for alias in self._aliases.values():
if alias.get_name() not in dep_lists:
dep_lists = set(alias.get_deps())
if (alias.get_name() in names or len(names.intersection(dep_lists)) > 0) and alias not in retval:
retval.append(alias)
names.add(alias.get_name())
has_changed = True
return retval

View file

@ -79,8 +79,15 @@ if __name__ == '__main__':
if alias.get_type() in inputargs.types:
to_update.append(alias.get_name())
query_aliases = aliases.get_affected_aliases(to_update)
if len(query_aliases) == 0:
# no selected target
sys.exit(0)
else:
query_aliases = list(aliases)
use_cached = lambda x: to_update is not None and x not in to_update
for alias in aliases:
for alias in query_aliases:
# determine if an alias has expired or updated and collect full chain of dependencies (so we can resolve them).
alias_changed_or_expired = max(alias.changed(), alias.expired())
alias_resolve_list = [alias]