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 pandas import Series
from errors import PresentationError
from jumpavg.BitCountingClassifier import BitCountingClassifier
:returns: Stdev.
:rtype: float
"""
-
- avg = mean(items)
- variance = [(x - avg) ** 2 for x in items]
- stddev = sqrt(mean(variance))
- return stddev
+ return Series.std(Series(items))
def relative_change(nr1, nr2):
: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()
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.
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)
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