Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 9c8e3cc2858e863ae3c349ec70b09f75cb1a4e31
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Thu Nov 14 16:58:55 2013 +0100
[frontend]: add copr monitor
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
---------------------------------------------------------------
coprs_frontend/coprs/models.py | 11 ++++++++
coprs_frontend/coprs/static/copr.css | 4 +++
coprs_frontend/coprs/templates/coprs/detail.html | 3 ++
.../coprs/templates/coprs/detail/monitor.html | 28 ++++++++++++++++++++
.../coprs/views/coprs_ns/coprs_general.py | 17 ++++++++++++
5 files changed, 63 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 48cf8a0..e494c75 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -297,6 +297,17 @@ class BuildChroot(db.Model, Serializer):
build = db.relationship('Build',
backref=db.backref('build_chroots'))
status = db.Column(db.Integer, default=helpers.StatusEnum('pending'))
+ @property
+ def name(self):
+ """ Textual representation of name of this chroot
"""
+ return self.mock_chroot.chroot_name
+
+ @property
+ def state(self):
+ """ Return text representation of status of this build chroot
"""
+ return helpers.StatusEnum(self.status)
+
+
class LegalFlag(db.Model, Serializer):
id = db.Column(db.Integer, primary_key=True)
diff --git a/coprs_frontend/coprs/static/copr.css b/coprs_frontend/coprs/static/copr.css
index 97e3510..451af8b 100644
--- a/coprs_frontend/coprs/static/copr.css
+++ b/coprs_frontend/coprs/static/copr.css
@@ -318,6 +318,10 @@ table.releases tr.release-end {
border-bottom: 3px solid #f2f2f2;
}
+table.monitor td {
+ padding: 0 20px;
+}
+
form.legal-flag, form.legal-flag input {
color: #888888;
margin-top: 5px;
diff --git a/coprs_frontend/coprs/templates/coprs/detail.html
b/coprs_frontend/coprs/templates/coprs/detail.html
index 749ffb6..cc4535c 100644
--- a/coprs_frontend/coprs/templates/coprs/detail.html
+++ b/coprs_frontend/coprs/templates/coprs/detail.html
@@ -17,6 +17,9 @@
<li class="{% block builds_selected %}unselected{% endblock %}">
<a href="{{ url_for('coprs_ns.copr_builds', username =
copr.owner.name, coprname = copr.name) }}">Builds</a>
</li>
+ <li class="{% block monitor_selected %}unselected{% endblock %}">
+ <a href="{{ url_for('coprs_ns.copr_build_monitor', username =
copr.owner.name, coprname = copr.name) }}">Monitor</a>
+ </li>
{% if g.user and g.user.can_build_in(copr) %}
<li class="{% block new_build_selected %}unselected{% endblock
%}">
<a href="{{ url_for('coprs_ns.copr_add_build', username =
copr.owner.name, coprname = copr.name) }}">New Build</a>
diff --git a/coprs_frontend/coprs/templates/coprs/detail/monitor.html
b/coprs_frontend/coprs/templates/coprs/detail/monitor.html
new file mode 100644
index 0000000..e936724
--- /dev/null
+++ b/coprs_frontend/coprs/templates/coprs/detail/monitor.html
@@ -0,0 +1,28 @@
+{% extends "coprs/detail.html" %}
+{% block title %}Monitor {{ copr.owner.name }}/{{ copr.name }}{% endblock %}
+{% block monitor_selected %}selected{% endblock %}
+
+{% block detail_body %}
+ {% if build %}
+ <p>
+ Latest build status:
+ <strong>{{ build.state }}</strong>
+ </p>
+ {% if not build.canceled %}
+ <table class="monitor">
+ <tr>
+ <th>Chroot</th>
+ <th>State</th>
+ </tr>
+ {% for chroot in build.build_chroots %}
+ <tr class="build-{{ chroot.state }}">
+ <td>{{ chroot.name }}</td>
+ <td>{{ chroot.state }}</td>
+ </tr>
+ {% endfor %}
+ </table>
+ {% endif %}
+ {% else %}
+ <h2>No builds so far.</h2>
+ {% endif %}
+{% endblock %}
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 5874543..1d3750f 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -344,3 +344,20 @@ def generate_repo_file(username, coprname, chroot):
response.mimetype='text/plain'
response.headers['Content-Disposition'] = 'filename=%s.repo' %
reponame
return response
+
+(a)coprs_ns.route('/<username>/<coprname>/monitor/')
+def copr_build_monitor(username, coprname):
+ query = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname,
with_mock_chroots=True)
+ form = forms.CoprLegalFlagForm()
+ try:
+ copr = query.one()
+ except sqlalchemy.orm.exc.NoResultFound:
+ return page_not_found('Copr with name {0} does not
exist.'.format(coprname))
+
+ builds_query = builds_logic.BuildsLogic.get_multiple(flask.g.user, copr=copr)
+ build = builds_query.first()
+
+ return flask.render_template('coprs/detail/monitor.html',
+ copr=copr,
+ build=build,
+ form=form)