Skip to content

Commit a06c01c

Browse files
committed
Define errors log location and name it with product & version
1 parent 94742db commit a06c01c

11 files changed

Lines changed: 79 additions & 26 deletions

File tree

charon/cmd/command.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
"""
1616
from typing import List
1717
from charon.config import CharonConfig, get_config
18-
from charon.utils.logs import set_logging, getLogger
18+
from charon.utils.logs import set_logging, set_log_file_handler
1919
from charon.utils.archive import detect_npm_archive, download_archive, NpmArchiveType
2020
from charon.pkgs.maven import handle_maven_uploading, handle_maven_del
2121
from charon.pkgs.npm import handle_npm_uploading, handle_npm_del
22+
from charon.utils.product_version import ProductVersion
2223
from click import command, option, argument, group
2324
from json import loads
2425
from shutil import rmtree
@@ -28,7 +29,7 @@
2829
import os
2930
import sys
3031

31-
logger = getLogger(__name__)
32+
logger = logging.getLogger(__name__)
3233

3334

3435
@argument(
@@ -124,6 +125,7 @@ def upload(
124125
Service. The REPO points to a product released tarball which
125126
is hosted in a remote url or a local path.
126127
"""
128+
set_log_file_handler(logger, ProductVersion(product, version))
127129
tmp_dir = work_dir
128130
try:
129131
if dryrun:
@@ -277,6 +279,7 @@ def delete(
277279
Ronda Service. The REPO points to a product released
278280
tarball which is hosted in a remote url or a local path.
279281
"""
282+
set_log_file_handler(logger, ProductVersion(product, version))
280283
tmp_dir = work_dir
281284
try:
282285
if dryrun:

charon/config.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616
from typing import Dict, List
1717
from ruamel.yaml import YAML
1818
from pathlib import Path
19-
from charon.utils.logs import getLogger
19+
from charon.utils.logs import set_log_file_handler
2020
import os
21+
import logging
2122

2223
from charon.utils.strings import remove_prefix
24+
from charon.utils.product_version import ProductVersion
2325

2426
CONFIG_FILE = "charon.yaml"
2527

26-
logger = getLogger(__name__)
28+
logger = logging.getLogger(__name__)
2729

2830

2931
class CharonConfig(object):
@@ -74,6 +76,7 @@ def get_bucket_prefix(self, target: str) -> str:
7476

7577

7678
def get_config() -> CharonConfig:
79+
set_log_file_handler(logger, ProductVersion())
7780
config_file = os.path.join(os.getenv("HOME"), ".charon", CONFIG_FILE)
7881
try:
7982
yaml = YAML(typ='safe')

charon/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,5 @@
175175
'''
176176

177177
PROD_INFO_SUFFIX = ".prodinfo"
178+
179+
DEFAULT_ERRORS_LOG = "errors.log"

charon/pkgs/indexing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
from charon.storage import S3Client
1818
from charon.constants import (INDEX_HTML_TEMPLATE, NPM_INDEX_HTML_TEMPLATE,
1919
PACKAGE_TYPE_MAVEN, PACKAGE_TYPE_NPM, PROD_INFO_SUFFIX)
20-
from charon.utils.logs import getLogger
2120
from jinja2 import Template
2221
import os
22+
import logging
2323
from typing import List, Set
2424

2525
from charon.utils.strings import remove_prefix
2626

27-
logger = getLogger(__name__)
27+
logger = logging.getLogger(__name__)
2828

2929

3030
def __get_index_template(package_type: str) -> str:

charon/pkgs/maven.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,21 @@
2525
META_FILE_FAILED, MAVEN_METADATA_TEMPLATE,
2626
ARCHETYPE_CATALOG_TEMPLATE, ARCHETYPE_CATALOG_FILENAME,
2727
PACKAGE_TYPE_MAVEN)
28-
from charon.utils.logs import getLogger
28+
from charon.utils.logs import set_log_file_handler
29+
from charon.utils.product_version import ProductVersion
2930
from typing import Dict, List, Tuple
3031
from jinja2 import Template
3132
from datetime import datetime
3233
from zipfile import ZipFile, BadZipFile
3334
from tempfile import mkdtemp
3435
from defusedxml import ElementTree
3536

37+
import logging
3638
import os
3739
import sys
3840
import re
3941

40-
logger = getLogger(__name__)
42+
logger = logging.getLogger(__name__)
4143

4244

4345
def __get_mvn_template(kind: str, default: str) -> str:
@@ -278,6 +280,7 @@ def handle_maven_uploading(
278280
279281
Returns the directory used for archive processing.
280282
"""
283+
set_log_file_handler(logger, ProductVersion())
281284
# 1. extract tarball
282285
tmp_root = _extract_tarball(repo, prod_key, dir__=dir_)
283286

@@ -414,6 +417,7 @@ def handle_maven_del(
414417
415418
Returns the directory used for archive processing.
416419
"""
420+
set_log_file_handler(logger, ProductVersion())
417421
# 1. extract tarball
418422
tmp_root = _extract_tarball(repo, prod_key, dir__=dir_)
419423

charon/pkgs/npm.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@
2828
from charon.utils.archive import extract_npm_tarball
2929
from charon.pkgs.pkg_utils import upload_post_process, rollback_post_process
3030
from charon.utils.strings import remove_prefix
31-
from charon.utils.logs import getLogger
31+
from charon.utils.logs import set_log_file_handler
32+
from charon.utils.product_version import ProductVersion
3233

33-
logger = getLogger(__name__)
34+
import logging
35+
36+
logger = logging.getLogger(__name__)
3437

3538
PACKAGE_JSON = "package.json"
3639

@@ -80,6 +83,7 @@ def handle_npm_uploading(
8083
8184
Returns the directory used for archive processing.
8285
"""
86+
set_log_file_handler(logger, ProductVersion())
8387
target_dir, valid_paths, package_metadata = _scan_metadata_paths_from_archive(
8488
tarball_path, prod=product, dir__=dir_
8589
)
@@ -160,6 +164,7 @@ def handle_npm_del(
160164
161165
Returns the directory used for archive processing
162166
"""
167+
set_log_file_handler(logger, ProductVersion())
163168
target_dir, package_name_path, valid_paths = _scan_paths_from_archive(
164169
tarball_path, prod=product, dir__=dir_
165170
)

charon/pkgs/pkg_utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from typing import List
2-
from charon.utils.logs import getLogger
2+
from charon.utils.logs import set_log_file_handler
3+
from charon.utils.product_version import ProductVersion
34
import sys
5+
import logging
46

5-
logger = getLogger(__name__)
7+
logger = logging.getLogger(__name__)
68

79

810
def is_metadata(file: str) -> bool:
@@ -34,6 +36,7 @@ def __post_process(
3436
product_key: str,
3537
operation: str
3638
):
39+
set_log_file_handler(logger, ProductVersion())
3740
if len(failed_files) == 0 and len(failed_metas) == 0:
3841
logger.info("Product release is successfully %s "
3942
" %s Ronda service.", operation, product_key)

charon/storage.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"""
1616
from boto3_type_annotations.s3.service_resource import Object
1717
from charon.utils.files import read_sha1
18-
from charon.utils.logs import getLogger
18+
from charon.utils.logs import set_log_file_handler
19+
from charon.utils.product_version import ProductVersion
1920
from charon.constants import PROD_INFO_SUFFIX
2021

2122
from boto3 import session
@@ -26,8 +27,9 @@
2627
from typing import Callable, Dict, List, Optional, Tuple
2728
import os
2829
import mimetypes
30+
import logging
2931

30-
logger = getLogger(__name__)
32+
logger = logging.getLogger(__name__)
3133

3234
PRODUCT_META_KEY = "rh-products"
3335
CHECKSUM_META_KEY = "checksum"
@@ -47,6 +49,7 @@ def __init__(self, aws_profile=None, extra_conf=None, dry_run=False) -> None:
4749
self.__client: s3.ServiceResource = self.__init_aws_client(aws_profile, extra_conf)
4850
self.__bucket: s3.Bucket = None
4951
self.__dry_run = dry_run
52+
set_log_file_handler(logger, ProductVersion())
5053

5154
def __init_aws_client(
5255
self, aws_profile=None, extra_conf=None, enable_acc=False

charon/utils/archive.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
import requests
2020
import tempfile
2121
import shutil
22+
import logging
2223
from enum import Enum
2324
from json import load, JSONDecodeError
2425
from typing import Tuple
2526
from zipfile import ZipFile, is_zipfile
26-
from charon.utils.logs import getLogger
27+
from charon.utils.logs import set_log_file_handler
28+
from charon.utils.product_version import ProductVersion
2729

28-
logger = getLogger(__name__)
30+
logger = logging.getLogger(__name__)
2931

3032

3133
def extract_zip_all(zf: ZipFile, target_dir: str):
@@ -82,6 +84,7 @@ def _get_tgz_name(path: str):
8284

8385

8486
def __parse_npm_package_version_paths(path: str) -> list:
87+
set_log_file_handler(logger, ProductVersion())
8588
try:
8689
with open(path, encoding='utf-8') as version_package:
8790
data = load(version_package)
@@ -105,7 +108,7 @@ def detect_npm_archive(repo):
105108
:parameter repo repository directory
106109
:return NpmArchiveType value
107110
"""
108-
111+
set_log_file_handler(logger, ProductVersion())
109112
expanded_repo = os.path.expanduser(repo)
110113
if not os.path.exists(expanded_repo):
111114
logger.error("Repository %s does not exist!", expanded_repo)

charon/utils/logs.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,19 @@
1515
"""
1616
import logging
1717
import sys
18+
import os
1819
from locale import nl_langinfo, CODESET
19-
from os import fdopen, dup
2020

21-
from charon.constants import CHARON_LOGGING_FMT
21+
from charon.constants import CHARON_LOGGING_FMT, DEFAULT_ERRORS_LOG
22+
from charon.utils.product_version import ProductVersion
2223

2324

2425
class EncodedStream(object):
2526
# The point of this class is to force python to encode UTF-8
2627
# over stderr. Normal techniques were not working, so we dup
2728
# the file handler and force it UTF-8. :-(
2829
def __init__(self, fileno, encoding):
29-
self.binarystream = fdopen(dup(fileno), 'wb')
30+
self.binarystream = os.fdopen(os.dup(fileno), 'wb')
3031
self.encoding = encoding
3132

3233
def write(self, text):
@@ -74,13 +75,16 @@ def set_logging(name="charon", level=logging.DEBUG, handler=None):
7475
hdlr.setFormatter(formatter)
7576

7677

77-
def getLogger(name: str) -> logging:
78-
error_log = "./errors.log"
78+
def set_log_file_handler(logger: logging, pv: ProductVersion):
79+
log_loc = os.getenv("ERROR_LOG_LOCATION")
80+
error_log = DEFAULT_ERRORS_LOG
81+
if pv.get_product() and pv.get_version():
82+
error_log = "".join([pv.get_product(), "-", pv.get_version(), ".", DEFAULT_ERRORS_LOG])
83+
if log_loc:
84+
os.makedirs(log_loc, exist_ok=True)
85+
error_log = os.path.join(log_loc, error_log)
7986
handler = logging.FileHandler(error_log)
80-
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
87+
formatter = logging.Formatter(fmt=CHARON_LOGGING_FMT)
8188
handler.setFormatter(formatter)
8289
handler.setLevel(logging.WARN)
83-
84-
logger = logging.getLogger(name)
8590
logger.addHandler(handler)
86-
return logger

0 commit comments

Comments
 (0)