X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Futils.py;h=3fdec857740e5a6f70c8f09810b70f695584b041;hb=e19b6a5860556426663a11cbf6376893854618f3;hp=a2aa0dc0717a925b685bba71482bf040b20f462e;hpb=2e63ef13b419da1198439617e66cb0f1cfe6be65;p=csit.git diff --git a/resources/tools/presentation/utils.py b/resources/tools/presentation/utils.py index a2aa0dc071..3fdec85774 100644 --- a/resources/tools/presentation/utils.py +++ b/resources/tools/presentation/utils.py @@ -25,6 +25,7 @@ from os import walk, makedirs, environ from os.path import join, isdir from shutil import move, Error from math import sqrt +from datetime import datetime from errors import PresentationError from jumpavg.BitCountingClassifier import BitCountingClassifier @@ -120,8 +121,8 @@ def execute_command(cmd): :param cmd: Command to execute. :type cmd: str - :returns: Return code of the executed command. - :rtype: int + :returns: Return code of the executed command, stdout and stderr. + :rtype: tuple(int, str, str) """ env = environ.copy() @@ -178,6 +179,29 @@ def get_last_completed_build_number(jenkins_url, job_name): return execute_command(cmd) +def get_build_timestamp(jenkins_url, job_name, build_nr): + """Get the timestamp of the build of the given job. + + :param jenkins_url: Jenkins URL. + :param job_name: Job name. + :param build_nr: Build number. + :type jenkins_url: str + :type job_name: str + :type build_nr: int + :returns: The timestamp. + :rtype: datetime.datetime + """ + + url = "{jenkins_url}/{job_name}/{build_nr}".format(jenkins_url=jenkins_url, + job_name=job_name, + build_nr=build_nr) + cmd = "wget -qO- {url}".format(url=url) + + timestamp = execute_command(cmd) + + return datetime.fromtimestamp(timestamp/1000) + + def archive_input_data(spec): """Archive the report. @@ -217,13 +241,13 @@ def classify_anomalies(data): the first value of changed average as a regression, or a progression. :param data: Full data set with unavailable samples replaced by nan. - :type data: pandas.Series + :type data: OrderedDict :returns: Classification and trend values :rtype: 2-tuple, list of strings and list of floats """ # Nan mean something went wrong. # Use 0.0 to cause that being reported as a severe regression. - bare_data = [0.0 if np.isnan(sample) else sample + bare_data = [0.0 if np.isnan(sample.avg) else sample for _, sample in data.iteritems()] # TODO: Put analogous iterator into jumpavg library. groups = BitCountingClassifier().classify(bare_data) @@ -234,9 +258,9 @@ def classify_anomalies(data): values_left = 0 avg = 0.0 for _, sample in data.iteritems(): - if np.isnan(sample): + if np.isnan(sample.avg): classification.append("outlier") - avgs.append(sample) + avgs.append(sample.avg) continue if values_left < 1 or active_group is None: values_left = 0