application: godashboard
-version: 3
+version: 4
runtime: python
api_version: 1
handlers:
+- url: /static
+ static_dir: static
+
- url: /package.*
script: package.py
def get(self):
self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
+ try:
+ page = int(self.request.get('p', 1))
+ if not page > 0:
+ raise
+ except:
+ page = 1
+
+ try:
+ num = int(self.request.get('n', N))
+ if num <= 0 or num > 200:
+ raise
+ except:
+ num = N
+
+ offset = (page-1) * num
+
q = Commit.all()
q.order('-__key__')
- results = q.fetch(N)
+ results = q.fetch(num, offset)
revs = [toRev(r) for r in results]
builders = {}
builders.sort()
values = {"revs": revs, "builders": [v for k,v in builders]}
+ values['num'] = num
+ values['prev'] = page - 1
+ if len(results) == num:
+ values['next'] = page + 1
+
path = os.path.join(os.path.dirname(__file__), 'main.html')
self.response.out.write(template.render(path, values))
<!DOCTYPE HTML>
<html>
<head>
- <title>Go dashboard</title>
-
- <style>
- h1 {
- font-size: 1em;
- font-weight: bold;
- }
- h2 {
- font-size: 1em;
- font-weight: bold;
- }
- table.alternate {
- white-space: nowrap;
- }
- table.alternate tr td {
- padding-right: 10px;
- }
- table.alternate tr td:last-child {
- padding-right: 0;
- }
- table.alternate tr:nth-child(2n) {
- background-color: #f8f8f8;
- }
- td.revision {
- }
- span.hash {
- font-family: monospace;
- font-size: small;
- color: #aaa;
- }
- span.nodeseq {
- }
- td.user {
- font-size: small;
- }
- td.date {
- color: #aaa;
- font-size: small;
- }
- td.result {
- text-align: center;
- }
- span.ok {
- }
- td.desc {
- font-size: small;
- font-family: sans-serif;
- }
- th.builder {
- font-weight: bold;
- padding-right: 0.5em;
- }
- </style>
+ <title>Build Status - Go Dashboard</title>
+ <link rel="stylesheet" type="text/css" href="static/style.css">
</head>
<body>
- <h1>Go dashboard</h1>
+ <a id="top"></a>
+
+ <ul class="menu">
+ <li>Build Status</li>
+ <li><a href="/package">Packages</a></li>
+ <li><a href="/benchmarks">Benchmarks</a></li>
+ <li><a href="http://golang.org/">golang.org</a></li>
+ </ul>
- <a href="benchmarks">benchmarks</a>
+ <h1>Go Dashboard</h1>
- <h2>Build status</h2>
+ <h2>Build Status</h2>
<table class="alternate" cellpadding="0" cellspacing="0">
<tr>
<th></th>
<span class="ok">ok</span>
{% else %}
{% if b.log %}
- <a href="/log/{{b.log}}">fail</a>
+ <a class="fail" href="/log/{{b.log}}">fail</a>
{% else %}
- <span/>
+
{% endif %}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
+ <div class="paginate">
+ <a{% if prev %} href="?n={{num}}&p={{prev}}"{% else %} class="inactive"{% endif %}>prev</a>
+ <a{% if next %} href="?n={{num}}&p={{next}}"{% else %} class="inactive"{% endif %}>next</a>
+ <a href="#top">top</a>
+ </div>
</body>
</html>
<!DOCTYPE HTML>
<html>
<head>
- <title>Go packages</title>
-
- <style>
- h1 {
- font-size: 1em;
- font-weight: bold;
- }
- h2 {
- font-size: 1em;
- font-weight: bold;
- }
- table.alternate {
- white-space: nowrap;
- }
- table.alternate tr td {
- padding-right: 10px;
- }
- table.alternate tr td:last-child {
- padding-right: 0;
- }
- table.alternate tr:nth-child(2n) {
- background-color: #f8f8f8;
- }
- td.revision {
- }
- span.hash {
- font-family: monospace;
- font-size: small;
- color: #aaa;
- }
- span.nodeseq {
- }
- td.user {
- font-size: small;
- }
- td.date {
- color: #aaa;
- font-size: small;
- }
- td.result {
- text-align: center;
- }
- span.ok {
- }
- td.desc {
- font-size: small;
- font-family: sans-serif;
- }
- th.builder {
- font-weight: bold;
- padding-right: 0.5em;
- }
- </style>
+ <title>Packages - Go Dashboard</title>
+ <link rel="stylesheet" type="text/css" href="static/style.css">
</head>
<body>
- <h1>Go packages</h1>
+ <ul class="menu">
+ <li><a href="/">Build Status</a></li>
+ <li>Packages</li>
+ <li><a href="/benchmarks">Benchmarks</a></li>
+ <li><a href="http://golang.org/">golang.org</a></li>
+ </ul>
+
+ <h1>Go Dashboard</h1>
- <a href="/">build status</a>
- <br><br>
- (Packages listed on this page are written by third parties and
- may or may not build or be safe to use.)
+ <p>
+ Packages listed on this page are written by third parties and
+ may or may not build or be safe to use.
+ </p>
<h2>Recently Installed Packages</h2>
<table class="alternate" cellpadding="0" cellspacing="0">
<tr><th>last install</th><th>count</th><th>path</th></tr>
{% for r in by_time %}
<tr>
- <td class="time">{{r.last_install}}</td>
+ <td class="time">{{r.last_install|date:"Y-M-d H:i"}}</td>
<td class="count">{{r.count}}</td>
<td class="path"><a href="{{r.web_url}}">{{r.path}}</a></td>
</tr>
<tr><th>last install</th><th>count</th><th>path</th></tr>
{% for r in by_count %}
<tr>
- <td class="time">{{r.last_install}}</td>
+ <td class="time">{{r.last_install|date:"Y-M-d H:i"}}</td>
<td class="count">{{r.count}}</td>
<td class="path"><a href="{{r.web_url}}">{{r.path}}</a></td>
</tr>
--- /dev/null
+body {
+ font-family: sans-serif;
+ margin: 0;
+ padding: 0;
+}
+h1, h2, ul, table, p {
+ padding: 0 0.2em;
+}
+h1, h2 {
+ margin: 0;
+ background: #eee;
+}
+h1 {
+ border-bottom: 1px solid #ccc;
+ font-size: 1em;
+ padding: 0.5em;
+ margin-bottom: 0.5em;
+ text-align: right;
+}
+h2 {
+ border-top: 1px solid #ccc;
+}
+table.alternate {
+ white-space: nowrap;
+ margin: 0.5em 0;
+}
+table.alternate td,
+table.alternate th {
+ padding: 0.1em 0.25em;
+ font-size: small;
+}
+table.alternate tr td:last-child {
+ padding-right: 0;
+}
+table.alternate tr:nth-child(2n) {
+ background-color: #f8f8f8;
+}
+span.hash {
+ font-family: monospace;
+ font-size: small;
+ color: #aaa;
+}
+td.date {
+ color: #aaa;
+}
+td.result {
+ text-align: center;
+}
+th.builder {
+ font-weight: bold;
+}
+a.fail {
+ color: #F00;
+}
+a.fail:visited {
+ color: #900;
+}
+ul.menu {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+ul.menu li {
+ float: left;
+ display: block;
+ font-size: 1em;
+ padding: 0.5em;
+ background: #EEF;
+ margin-left: 0.5em;
+ border-left: 1px solid #999;
+ border-right: 1px solid #999;
+}
+div.paginate {
+ padding: 0.5em;
+}
+div.paginate a {
+ padding: 0.5em;
+ margin-right: 0.5em;
+ background: #eee;
+ color: blue;
+}
+div.paginate a.inactive {
+ color: #999;
+}
+td.time {
+ font-family: monospace;
+}