
Enabling automatic pylint with tox and zull for each new patchset. Test plan: PASS: Run "tox -e pylint" in the terminal, this will: - Run pylint in all python files - Show the report Story: 2005051 Task: 47900 Change-Id: I2f66a5f72e3f8746c00aae96287ad3e4edb88e28 Signed-off-by: Lindley Werner <lindley.vieira@encora.com>
96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
#!/usr/bin/python3
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
"""
|
|
This module provides functions to track and report key performance indicators (KPIs) for a program.
|
|
"""
|
|
|
|
import time
|
|
from utils.install_log import LOG
|
|
|
|
STAGES = []
|
|
METRICS = {}
|
|
START = 0
|
|
|
|
def init_kpi_metrics():
|
|
"""
|
|
Initializes the global variable START with the current time to start tracking the
|
|
duration of a program.
|
|
"""
|
|
|
|
global START # pylint: disable=global-statement
|
|
START = time.time()
|
|
|
|
|
|
def get_formated_time(sec):
|
|
"""
|
|
Takes the duration in seconds and formats it in hours, minutes and seconds.
|
|
Returns the formatted string.
|
|
"""
|
|
|
|
hours = sec // 3600
|
|
sec %= 3600
|
|
minutes = sec // 60
|
|
sec %= 60
|
|
seconds = sec
|
|
if hours:
|
|
return f"{hours:.0f}h {minutes:.0f}m {seconds:.2f}s"
|
|
if minutes:
|
|
return f"{minutes:.0f}m {seconds:.2f}s"
|
|
return f"{seconds:.2f}s"
|
|
|
|
|
|
def set_kpi_metric(metric, duration):
|
|
"""Sets the duration of a metric and adds the metric to the global list of STAGES."""
|
|
|
|
global METRICS, STAGES # pylint: disable=global-statement, global-variable-not-assigned
|
|
METRICS[metric] = duration
|
|
STAGES.append(metric)
|
|
|
|
|
|
def print_kpi(metric):
|
|
"""Takes a metric as input and prints the duration of that metric using the LOG module."""
|
|
|
|
if metric in STAGES:
|
|
sec = METRICS[metric]
|
|
LOG.info(" Time in stage '%s': %s ", metric, get_formated_time(sec))
|
|
elif metric == 'total' and START:
|
|
duration = time.time() - START
|
|
LOG.info(" Total time: %s", get_formated_time(duration))
|
|
|
|
|
|
def get_kpi_str(metric):
|
|
"""Takes a metric as input and returns the duration of that metric as a formatted string."""
|
|
|
|
msg = ""
|
|
if metric in STAGES:
|
|
sec = METRICS[metric]
|
|
msg += (f" Time in stage '{metric}': {get_formated_time(sec)} \n")
|
|
elif metric == 'total' and START:
|
|
duration = time.time() - START
|
|
msg += (f" Total time: {get_formated_time(duration)}\n")
|
|
return msg
|
|
|
|
|
|
def get_kpi_metrics_str():
|
|
"""Returns a formatted string with all the metrics and their durations."""
|
|
|
|
msg = "===================== Metrics ====================\n"
|
|
for stage in STAGES:
|
|
msg += get_kpi_str(stage)
|
|
msg += get_kpi_str('total')
|
|
msg += "===============================================\n"
|
|
return msg
|
|
|
|
|
|
def print_kpi_metrics():
|
|
"""Prints all the metrics and their durations using the LOG module."""
|
|
|
|
LOG.info("===================== Metrics ====================")
|
|
for stage in STAGES:
|
|
print_kpi(stage)
|
|
print_kpi('total')
|
|
LOG.info("==================================================")
|