...
 
Commits (2)
......@@ -7,6 +7,8 @@ test:
image: python:3.6
tags:
- docker
variables:
FLASK_TESTING: True
script:
- pip install -e .
- python test.py
......
......@@ -105,7 +105,7 @@ class TestWeb(UsesModels):
def test_get(self):
build1 = Build(build_id=1, build_date=datetime.datetime.strptime("2018-01-01", "%Y-%m-%d"), build_status="pending", build_version="cm-14.1")
runner = Runner(runner_name="foobar", runner_id="foobar", runner_sponsor="Me", runner_sponsor_url="You")
build2 = Build(build_id=2, build_status="success", build_device="mako", build_version="cm-14.1", build_type="userdebug", build_date=datetime.datetime.strptime("2018-01-01", "%Y-%m-%d"), build_runner=runner)
build2 = Build(build_id=2, build_status="success", build_device="mako", build_version="cm-14.1", build_type="userdebug", build_date=datetime.datetime.strptime("2018-01-01", "%Y-%m-%d"), build_runner=runner, build_duration=2)
db.session.add(build1)
db.session.add(runner)
db.session.add(build2)
......
......@@ -47,6 +47,7 @@ def parse_args():
args['build_date'] = datetime.datetime.strptime(request.args.get('date'), '%Y-%m-%d').date()
return args
@cache.memoize()
def stats():
runner_build_times = models.Build.query.join(models.Build.build_runner).with_entities(
......@@ -66,6 +67,14 @@ def stats():
func.sum(models.Build.build_duration)
).group_by(models.Build.build_version).all()
last_build_times = models.Build.query.join(models.Build.build_runner).with_entities(
models.Runner.runner_name,
models.Build.build_version,
models.Build.build_duration
).filter(
models.Build.build_status == "success"
).group_by(models.Runner.runner_name, models.Build.build_version).all()
runner_build_status = models.Build.query.join(models.Build.build_runner).with_entities(
models.Runner.runner_name,
models.Build.build_status,
......@@ -98,6 +107,9 @@ def stats():
'sum': build_time[5] if build_time[5] else 0,
}
for build_time in last_build_times:
stats['times'].setdefault(build_time[0], {})[build_time[1]]["last"] = build_time[2]
for build_status in runner_build_status:
stats['builds']['all'].setdefault(build_status[1], 0)
stats['builds']['all'][build_status[1]] += build_status[2]
......
......@@ -3,7 +3,11 @@ import os
SQLALCHEMY_DATABASE_URI = os.environ.get("SQLALCHEMY_DATABASE_URI", 'sqlite:////tmp/ui.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = 'FLASK_DEBUG' in os.environ
CACHE_TYPE = 'simple'
TESTING = 'FLASK_TESTING' in os.environ
CACHE_TYPE = os.environ.get('CACHE_TYPE', 'simple')
CACHE_DEFAULT_TIMEOUT = int(os.environ.get('CACHE_DEFAULT_TIMEOUT', 60))
GITLAB_WEBHOOK_TOKEN = os.environ.get("GITLAB_WEBHOOK_TOKEN", "secret")
......
......@@ -32,6 +32,7 @@
<table class="table table-striped">
<tr>
<th>Runner</th>
<th>Last</th>
<th>Average</th>
<th>Minimum</th>
<th>Maximum</th>
......@@ -41,6 +42,7 @@
{% if runner in stats['times'] and version in stats['times'][runner] %}
<tr>
<td>{% if runner != 'all' %}<a href="/runners/{{runner}}">{{runner}}</a>{% else %}{{runner}}{% endif %}</td>
<td>{% if 'last' in stats['times'][runner][version] %}{{(stats['times'][runner][version]['last'] / 60) | round(2)}} minutes{% endif %}</td>
<td>{{(stats['times'][runner][version]['avg'] / 60) | round(2)}} minutes</td>
<td>{{(stats['times'][runner][version]['min'] / 60) | round(2)}} minutes</td>
<td>{{(stats['times'][runner][version]['max'] / 60) | round(2)}} minutes</td>
......