Minor refactoring, and env variable for log-level

This commit is contained in:
Jack Jackson 2022-12-30 11:00:47 -08:00
parent f17e72f491
commit 52dad2e3c7
3 changed files with 46 additions and 28 deletions

View File

@ -4,47 +4,25 @@ import json
import os import os
import re import re
import requests import requests
import sys
from dataclasses import dataclass
from enum import auto
from http.server import HTTPServer, BaseHTTPRequestHandler from http.server import HTTPServer, BaseHTTPRequestHandler
from strenum import StrEnum
from typing import Iterable from typing import Iterable
from prometheus_client import start_http_server, Enum as PromEnum from prometheus_client import start_http_server, Enum as PromEnum
from prometheus_client.metrics_core import METRIC_NAME_RE from prometheus_client.metrics_core import METRIC_NAME_RE
import logging from model import Repo, BuildStatus
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# TODO - extract logging configuration somewhere from logging_setup import create_logger
handler = logging.StreamHandler(sys.stdout) logger = create_logger(__name__)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
global build_statuses global build_statuses
class BuildStatus(StrEnum):
running = auto()
success = auto()
failure = auto()
unknown = auto()
@dataclass
class Repo:
id: int
name: str
owner: str
build_status_tracker: PromEnum = None
def get_repos(access_token: str, drone_domain: str) -> Iterable[Repo]: def get_repos(access_token: str, drone_domain: str) -> Iterable[Repo]:
repo_response = requests.get(f'{drone_domain}/api/user/repos', headers={'Authorization': f'Bearer {access_token}'}) repo_response = requests.get(f'{drone_domain}/api/user/repos', headers={'Authorization': f'Bearer {access_token}'})
# TODO - must be possible to get status of a private repo if you are the owner, surely? # TODO - must be possible to get status of a private repo if you are the owner, surely?
@ -140,8 +118,11 @@ def create_promEnums():
global build_statuses global build_statuses
access_token = os.environ['ACCESS_TOKEN'] access_token = os.environ['ACCESS_TOKEN']
drone_domain = os.environ['DRONE_DOMAIN'] drone_domain = os.environ['DRONE_DOMAIN']
logger.debug(f'Access Token starts with {access_token[:4]}')
logger.debug(f'{drone_domain=}')
repo_list = get_repos(access_token, drone_domain) repo_list = get_repos(access_token, drone_domain)
build_statuses = {} build_statuses = {}
logger.info(f'{repo_list=}')
for repo in repo_list: for repo in repo_list:
repo.build_status_tracker =\ repo.build_status_tracker =\
make_build_status_tracker( make_build_status_tracker(

16
src/main/logging_setup.py Normal file
View File

@ -0,0 +1,16 @@
import os
import logging
import sys
def create_logger(name_for_logger: str) -> logging.Logger:
logger = logging.getLogger(name_for_logger)
log_level = os.environ.get('LOG_LEVEL', 'INFO').upper()
logger.setLevel(log_level)
# TODO - extract logging configuration somewhere
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(log_level)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger

21
src/main/model.py Normal file
View File

@ -0,0 +1,21 @@
from dataclasses import dataclass
from enum import auto
from strenum import StrEnum
from prometheus_client import Enum
class BuildStatus(StrEnum):
running = auto()
success = auto()
failure = auto()
unknown = auto()
@dataclass
class Repo:
id: int
name: str
owner: str
build_status_tracker: Enum = None