Skip to content

Commit

Permalink
chore: reduce log pollution and increase retention period
Browse files Browse the repository at this point in the history
  • Loading branch information
richardzilincikPantheon committed Jun 27, 2023
1 parent fc6e8ab commit c93c4fd
Show file tree
Hide file tree
Showing 16 changed files with 48 additions and 52 deletions.
2 changes: 1 addition & 1 deletion api/my_flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def process_response(self, response):
def preprocess_request(self):
super().preprocess_request()
g.special_id = 0
if 'admin/' not in request.path or 'api/job/' not in request.path:
if not any(i in request.path for i in ('admin/', 'api/job', 'healthcheck/')):
self.logger.info(request.path)
client_ip = request.remote_addr
data = MatomoTrackerData(self.config.m_matomo_api_url, self.config.m_matomo_site_id)
Expand Down
3 changes: 0 additions & 3 deletions api/views/health_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,9 @@ def health_check_opensearch():
try:
# try to ping OpenSearch
if app_config.opensearch_manager.ping():
bp.logger.info('Successfully connected to OpenSearch')
# get health of cluster
health = app_config.opensearch_manager.cluster_health()
health_status = health.get('status')
bp.logger.info('Health status of cluster: {}'.format(health_status))
# get list of indices
indices = app_config.opensearch_manager.get_indices()
if len(indices) > 0:
Expand Down Expand Up @@ -162,7 +160,6 @@ def health_check_redis():
try:
result = app_config.redis.ping()
if result:
bp.logger.info('Redis ping responsed successfully')
response = {'info': 'Success'}
else:
bp.logger.error('Redis ping failed to respond')
Expand Down
40 changes: 20 additions & 20 deletions api/views/yang_search/yang_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -610,32 +610,32 @@ def get_modules_revision_organization(module_name: str, revision: t.Optional[str
:param warnings (bool) Whether return with warnings or not
:return: tuple (list of revisions and organization) of specified module name
"""
try:
if revision is None:
hits = app_config.opensearch_manager.get_sorted_module_revisions(OpenSearchIndices.YINDEX, module_name)
else:
module = {'name': module_name, 'revision': revision}
hits = app_config.opensearch_manager.get_module_by_name_revision(OpenSearchIndices.YINDEX, module)

organization = hits[0]['_source']['organization']
revisions = []
for hit in hits:
hit = hit['_source']
revision = hit['revision']
revision_mat_level = {
'revision': revision,
'is_rfc': hit['rfc'] if 'rfc' in hit else False,
}
if revision_mat_level not in revisions:
revisions.append(revision_mat_level)
return revisions, organization
except IndexError:
if revision is None:
hits = app_config.opensearch_manager.get_sorted_module_revisions(OpenSearchIndices.YINDEX, module_name)
else:
module = {'name': module_name, 'revision': revision}
hits = app_config.opensearch_manager.get_module_by_name_revision(OpenSearchIndices.YINDEX, module)

if not hits:
name_rev = f'{module_name}@{revision}' if revision else module_name
bp.logger.warning(f'Failed to get revisions and organization for {name_rev}')
if warnings:
return {'warning': f'Failed to find module {name_rev}'}
abort(404, f'Failed to get revisions and organization for {name_rev}')

organization = hits[0]['_source']['organization']
revisions = []
for hit in hits:
hit = hit['_source']
revision = hit['revision']
revision_mat_level = {
'revision': revision,
'is_rfc': hit['rfc'] if 'rfc' in hit else False,
}
if revision_mat_level not in revisions:
revisions.append(revision_mat_level)
return revisions, organization


def get_latest_module_revision(module_name: str) -> str:
"""
Expand Down
12 changes: 12 additions & 0 deletions gunicorn.conf.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import logging

bind = 'unix:/var/run/yang/yang-catalog.sock'
# umask = os.umask('007')

Expand All @@ -19,3 +21,13 @@
# change log format
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
worker_class = 'gevent'


class HealthcheckFilter(logging.Filter):
def filter(self, record):
return record.getMessage().find('Amazon-Route53-Health-Check-Service') == -1


def on_starting(server):
server.log.access_log.addFilter(HealthcheckFilter())
server.log.error_log.addFilter(HealthcheckFilter())
4 changes: 2 additions & 2 deletions opensearch_indexing/process-drafts.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,12 @@ def main(script_config: ScriptConfig = DEFAULT_SCRIPT_CONFIG.copy()) -> list[Job
logger.info(f'Indexing draft {draft_name} - draft {i} out of {len(drafts)}')

try:
# it takes an hour to do this with a request for each draft
# would be much more efficient to cache it in a file
if not opensearch_manager.document_exists(OpenSearchIndices.DRAFTS, draft):
opensearch_manager.index_module(OpenSearchIndices.DRAFTS, draft)
logger.info(f'added {draft_name} to index')
done += 1
else:
logger.info(f'skipping - {draft_name} is already in index')
except Exception:
logger.exception(f'Problem while processing draft {draft_name}')
logger.info('Job finished successfully')
Expand Down
1 change: 0 additions & 1 deletion opensearch_indexing/process_changed_mods.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ def start_processing_changed_mods(self):
self.delete_cache = self._load_delete_cache(self.delete_cache_path)

if not self.changes_cache and not self.delete_cache:
self.logger.info('No new modules are added or removed. Exiting script!!!')
os.unlink(self.lock_file)
os.unlink(self.lock_file_cron)
sys.exit()
Expand Down
2 changes: 0 additions & 2 deletions parseAndPopulate/resolvers/generated_from.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import logging
import typing as t
from asyncio.log import logger

from parseAndPopulate.resolvers.resolver import Resolver

Expand All @@ -20,7 +19,6 @@ def __init__(self, logger: logging.Logger, name: str, namespace: t.Optional[str]
self.namespace = namespace

def resolve(self) -> str:
logger.debug('Resolving generated from')
if self.namespace and ':smi' in self.namespace:
return 'mib'
if 'cisco' in self.name.lower():
Expand Down
1 change: 0 additions & 1 deletion parseAndPopulate/resolvers/module_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ def __init__(self, parsed_yang: Statement, logger: logging.Logger) -> None:
self.logger = logger

def resolve(self) -> t.Optional[str]:
self.logger.debug('Resolving module type')
try:
module_type = self.parsed_yang.keyword
if module_type in ALLOWED:
Expand Down
10 changes: 4 additions & 6 deletions parseAndPopulate/resolvers/namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ def __init__(
self.belongs_to = belongs_to

def resolve(self) -> str:
self.logger.debug('Resolving namespace')
module_type = self.parsed_yang.keyword
if module_type == 'submodule':
return self._resolve_submodule_namespace()
Expand All @@ -39,25 +38,24 @@ def resolve(self) -> str:
def _resolve_submodule_namespace(self) -> str:
"""If the model is a submodule, then it is necessary to get a namespace from its parent."""
if not self.belongs_to:
self.logger.error('Belongs to not defined - unable to resolve namespace')
self.logger.error(f'Belongs to not defined - unable to resolve namespace - {self.name_revision}')
return MISSING_ELEMENT

self.logger.debug('Getting parent namespace - {} is a submodule'.format(self.name_revision))
yang_file = get_yang(self.belongs_to)
if yang_file is None:
self.logger.error('Parent module not found - unable to resolve namespace')
self.logger.error(f'Parent module not found - unable to resolve namespace - {self.name_revision}')
return MISSING_ELEMENT

try:
parsed_yang_parent = yangParser.parse(os.path.abspath(yang_file))
return parsed_yang_parent.search(self.property_name)[0].arg
except IndexError:
self.logger.error('Cannot parse out {} property'.format(self.property_name))
self.logger.error(f'Cannot parse out {self.property_name} property - {self.name_revision}')
return MISSING_ELEMENT

def _resolve_module_namespace(self) -> str:
try:
return self.parsed_yang.search(self.property_name)[0].arg
except IndexError:
self.logger.error('Cannot parse out {} property'.format(self.property_name))
self.logger.error(f'Cannot parse out {self.property_name} property - - {self.name_revision}')
return MISSING_ELEMENT
1 change: 0 additions & 1 deletion parseAndPopulate/resolvers/organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ def __init__(self, parsed_yang: Statement, logger: logging.Logger, namespace: t.
self.namespace = namespace

def resolve(self) -> str:
self.logger.debug('Resolving organization')
try:
parsed_organization = self.parsed_yang.search('organization')[0].arg.lower()
for possible_organization in ORGANIZATIONS:
Expand Down
6 changes: 2 additions & 4 deletions parseAndPopulate/resolvers/prefix.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ def __init__(

def resolve(self) -> t.Optional[str]:
module_type = self.parsed_yang.keyword
self.logger.debug('Resolving prefix of {}'.format(module_type))
if module_type == 'submodule':
return self._resolve_submodule_prefix()
return self._resolve_module_prefix()
Expand All @@ -42,17 +41,16 @@ def _resolve_submodule_prefix(self) -> t.Optional[str]:
self.logger.error('Belongs to not defined - unable to resolve namespace')
return DEFAULT

self.logger.debug('Getting parent namespace - {} is a submodule'.format(self.name_revision))
yang_file = get_yang(self.belongs_to)
if yang_file is None:
self.logger.error('Parent module not found - unable to resolve namespace')
self.logger.error(f'Parent module not found - unable to resolve namespace - {self.name_revision}')
return DEFAULT

try:
parsed_yang_parent = yangParser.parse(os.path.abspath(yang_file))
return parsed_yang_parent.search(self.property_name)[0].arg
except IndexError:
self.logger.error('Cannot parse out {} property'.format(self.property_name))
self.logger.error(f'Cannot parse out {self.property_name} property - {self.name_revision}')
return DEFAULT

def _resolve_module_prefix(self) -> t.Optional[str]:
Expand Down
3 changes: 1 addition & 2 deletions parseAndPopulate/resolvers/revision.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,10 @@ def __init__(self, parsed_yang: Statement, logger: logging.Logger) -> None:
self.logger = logger

def resolve(self) -> str:
self.logger.debug('Resolving revision')
try:
revision = self.parsed_yang.search('revision')[0].arg
except IndexError:
self.logger.exception('Error while resolving revision')
self.logger.exception(f'Error while resolving revision - {self.parsed_yang.arg}')
revision = DEFAULT

return validate_revision(revision)
1 change: 0 additions & 1 deletion parseAndPopulate/resolvers/semantic_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ def __init__(self, parsed_yang: Statement, logger: logging.Logger) -> None:
self.logger = logger

def resolve(self) -> t.Optional[str]:
self.logger.debug('Resolving semantic version')
# cisco specific modules - semver defined is inside revision - cisco-semver:module-version
try:
parsed_semver = self.parsed_yang.search('revision')[0].search(('cisco-semver', 'module-version'))[0].arg
Expand Down
1 change: 0 additions & 1 deletion parseAndPopulate/resolvers/submodule.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ def __init__(self, parsed_yang: Statement, logger: logging.Logger, domain_prefix
self.domain_prefix = domain_prefix

def resolve(self) -> t.Tuple[list, list]:
self.logger.debug('Resolving submodules')
submodules = []
dependencies = []
parsed_submodules = self.parsed_yang.search('include')
Expand Down
1 change: 0 additions & 1 deletion parseAndPopulate/resolvers/yang_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ def __init__(self, parsed_yang: Statement, logger: logging.Logger) -> None:
self.logger = logger

def resolve(self) -> str:
self.logger.debug('Resolving yang version')
try:
yang_version = self.parsed_yang.search('yang-version')[0].arg
except IndexError:
Expand Down
12 changes: 6 additions & 6 deletions yangcatalog-rotate
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/var/yang/logs/*.log {
rotate 7
daily
rotate 52
weekly
compress
missingok
copytruncate
Expand All @@ -9,8 +9,8 @@
}

/var/yang/logs/*/*.log {
rotate 7
daily
rotate 52
weekly
compress
missingok
copytruncate
Expand All @@ -19,8 +19,8 @@
}

/var/yang/logs/*.access {
rotate 7
daily
rotate 52
weekly
compress
missingok
copytruncate
Expand Down

0 comments on commit c93c4fd

Please sign in to comment.