{% extends "base.html" %} {% load static from staticfiles %} {% load cache %} {% load package_extras %} {% block title %}Arch Linux - Developer Dashboard{% endblock %} {% block content %} <div id="dev-dashboard" class="box"> <h2>Developer Dashboard</h2> <h3>My Flagged Packages</h3> <table id="dash-myflagged" class="results"> <thead> <tr> <th>Name</th> <th>Version</th> <th>Testing Version</th> <th>Repo</th> <th>Arch</th> <th>Flagged</th> <th>Last Updated</th> </tr> </thead> <tbody> {% for pkg in flagged %} <tr class="{% cycle 'odd' 'even' %}"> <td>{% pkg_details_link pkg %}</td> <td>{{ pkg.full_version }}</td> <td>{% with pkg.in_testing as tp %}{% if tp %} <a href="{{ tp.get_absolute_url }}" title="Testing package details for {{ tp.pkgname }}">{{ tp.full_version }}</a> {% endif %}{% endwith %}</td> <td>{{ pkg.repo.name }}</td> <td>{{ pkg.arch.name }}</td> <td>{{ pkg.flag_date|date }}</td> <td>{{ pkg.last_update|date }}</td> </tr> {% empty %} <tr class="empty"><td colspan="7"><em>No flagged packages to display</em></td></tr> {% endfor %} </tbody> </table> <h3>My Incomplete Todo List Packages</h3> <table id="dash-mytodolist" class="results"> <thead> <tr> <th>Todo List</th> <th>Name</th> <th>Repo</th> <th>Arch</th> <th>Maintainer(s)</th> </tr> </thead> <tbody> {% for todopkg in todopkgs %} <tr class="{% cycle 'odd' 'even' %}"> <td><a href="{{ todopkg.list.get_absolute_url }}" title="View todo list: {{ todopkg.list.name }}">{{ todopkg.list.name }}</a></td> <td>{% pkg_details_link todopkg.pkg %}</td> <td>{{ todopkg.pkg.repo.name }}</td> <td>{{ todopkg.pkg.arch.name }}</td> <td>{{ todopkg.pkg.maintainers|join:', ' }}</td> </tr> {% empty %} <tr class="empty"><td colspan="5"><em>No incomplete todo list packages to display</em></td></tr> {% endfor %} </tbody> </table> <h3>Package Todo Lists</h3> <table id="dash-todo" class="results"> <thead> <tr> <th>Name</th> <th>Creation Date</th> <th>Creator</th> <th>Description</th> <th>Package Count</th> <th>Incomplete Count</th> </tr> </thead> <tbody> {% for todo in todos %} <tr class="{% cycle 'odd' 'even' %}"> <td><a href="{{ todo.get_absolute_url }}" title="View todo list: {{ todo.name }}">{{ todo.name }}</a></td> <td>{{ todo.date_added|date }}</td> <td>{{ todo.creator.get_full_name }}</td> <td class="wrap">{{ todo.description|urlize }}</td> <td>{{ todo.pkg_count }}</td> <td>{{ todo.incomplete_count }}</td> </tr> {% empty %} <tr class="empty"><td colspan="6"><em>No package todo lists to display</em></td></tr> {% endfor %} </tbody> </table> <h3>Signoff Status</h3> <table id="dash-signoffs" class="results"> <thead> <tr> <th>Name</th> <th>Version</th> <th>Arch</th> <th>Target Repo</th> <th>Last Updated</th> <th>Approved</th> <th>Signoffs</th> </tr> </thead> <tbody> {% for group in signoffs %} <tr class="{% cycle 'odd' 'even' %}"> <td>{% pkg_details_link group.package %}</td> <td>{{ group.version }}</td> <td>{{ group.arch.name }}</td> <td>{{ group.target_repo }}</td> <td>{{ group.last_update|date }}</td> {% if group.specification.known_bad %} <td class="approval signoff-bad">Bad</td> {% else %} {% if not group.specification.enabled %} <td class="approval signoff-disabled">Disabled</td> {% else %} <td class="approval signoff-{{ group.approved|yesno }}">{{ group.approved|yesno|capfirst }}</td> {% endif %} {% endif %} <td><ul class="signoff-list"> {% for signoff in group.signoffs %} <li class="signed-username" title="Signed off by {{ signoff.user }}">{{ signoff.user }}{% if signoff.revoked %} (revoked){% endif %}</li> {% endfor %} </ul></td> </tr> {% empty %} <tr class="empty"><td colspan="7"><em>No packages you maintain or have packaged need signoffs</em></td></tr> {% endfor %} </tbody> </table> <h3>Developer Reports</h3> <ul> <li><a href="reports/old/">Old</a>: Packages last built more than one year ago (<a href="reports/old/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/long-out-of-date/">Long Out-of-date</a>: Packages marked out-of-date more than 90 days ago (<a href="reports/long-out-of-date/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/uncompressed-man/">Uncompressed Manpages</a>: Self-explanatory (<a href="reports/uncompressed-man/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/uncompressed-info/">Uncompressed Info Pages</a>: Self-explanatory (<a href="reports/uncompressed-info/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/mismatched-signature/">Mismatched Signatures</a>: Packages where 1) signing key is unknown, 2) signer != packager, or 3) signature timestamp more than 24 hours after build timestamp (<a href="reports/mismatched-signature/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/big/">Big</a>: All packages with compressed size > 50 MiB (<a href="reports/big/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/badcompression/">Bad Compression</a>: Packages with a compression ratio of less than 10% (<a href="reports/badcompression/{{ user.username }}/">yours only</a>)</li> <li><a href="reports/unneeded-orphans/">Unneeded Orphans</a>: Packages that have no maintainer and are not required by any other package in any repository</li> </ul> </div><!-- #dev-dashboard --> {% cache 60 dev-dash-by-arch %} <div id="dash-by-arch" class="box"> <h2>Stats by Architecture</h2> <table id="stats-by-arch" class="results dash-stats"> <thead> <tr> <th class="key">Arch</th> <th># Packages</th> <th># Flagged</th> </tr> </thead> <tbody> {% for arch in arches %} <tr class="{% cycle 'odd' 'even' %}"> <td>{{ arch.name }}</td> <td><a href="/packages/?arch={{ arch.name }}" title="View all packages for the {{ arch.name }} architecture"> <strong>{{ arch.total_ct }}</strong> packages</a></td> <td><a href="/packages/?arch={{ arch.name }}&flagged=Flagged" title="View all flagged packages for the {{ arch.name }} architecture"> <strong>{{ arch.flagged_ct }}</strong> packages</a></td> </tr> {% endfor %} </tbody> </table> </div>{# #dash-by-arch #} {% endcache %} {% cache 60 dev-dash-by-repo %} <div id="dash-by-repo" class="box"> <h2>Stats by Repository</h2> <table id="stats-by-repo" class="results dash-stats"> <thead> <tr> <th class="key">Repository</th> <th># Packages</th> <th># Flagged</th> </tr> </thead> <tbody> {% for repo in repos %} <tr class="{% cycle 'odd' 'even' %}"> <td>{{ repo.name }}</td> <td><a href="/packages/?repo={{ repo.name }}" title="View all packages in the {{ repo.name }} repository"> <strong>{{ repo.total_ct }}</strong> packages</a></td> <td><a href="/packages/?repo={{ repo.name }}&flagged=Flagged" title="View all flagged packages in the {{ repo.name }} repository"> <strong>{{ repo.flagged_ct }}</strong> packages</a></td> </tr> {% endfor %} </tbody> </table> </div>{# dash-by-arch #} {% endcache %} {% cache 60 dev-dash-by-developer %} <div id="dash-by-developer" class="box"> <h2>Stats by Developer</h2> {% if perms.main.change_package %} <p><a href="/packages/stale_relations/">Look for stale relations</a></p> {% endif %} <table id="stats-by-maintainer" class="results dash-stats"> <thead> <tr> <th class="key">Maintainer</th> <th># Maintained</th> <th># Flagged</th> <th># Last Packager</th> </tr> <tr class="even"> <td><em>Orphan/Unknown</em></td> <td><a href="/packages/?maintainer=orphan" title="View all orphan packages"> <strong>{{ orphan.package_count }}</strong> packages</a> </td> <td><a href="/packages/?maintainer=orphan&flagged=Flagged" title="View all flagged orphan packages"> <strong>{{ orphan.flagged_count }}</strong> packages</a> </td> <td><a href="/packages/?packager=unknown" title="View all packages last updated by unknown"> <strong>{{ orphan.updated_count }}</strong> packages</a> </td> </tr> </thead> <tbody> {% for maint in maintainers %} <tr class="{% cycle 'odd' 'even' %}"> <td>{{ maint.get_full_name }}</td> <td><a href="/packages/?maintainer={{ maint.username }}" title="View all packages maintained by {{ maint.get_full_name }}"> <strong>{{ maint.package_count }}</strong> packages</a> </td> <td><a href="/packages/?maintainer={{ maint.username }}&flagged=Flagged" title="View all flagged packages maintained by {{ maint.get_full_name }}"> <strong>{{ maint.flagged_count }}</strong> packages</a> </td> <td><a href="/packages/?packager={{ maint.username }}" title="View all packages last updated by {{ maint.get_full_name }}"> <strong>{{ maint.updated_count }}</strong> packages</a> </td> </tr> {% endfor %} </tbody> </table> </div>{# #dash-by-developer #} {% endcache %} {% load cdn %}{% jquery %}{% jquery_tablesorter %} <script type="text/javascript" src="{% static "archweb.js" %}"></script> <script type="text/javascript"> $(document).ready(function() { $("#dash-myflagged:not(:has(tbody tr.empty))").tablesorter( {widgets: ['zebra'], sortList: [[0,0]]}); $("#dash-mytodolist:not(:has(tbody tr.empty))").tablesorter( {widgets: ['zebra'], sortList: [[0,0], [1,0]]}); $("#dash-todo:not(:has(tbody tr.empty))").tablesorter( {widgets: ['zebra'], sortList: [[1,1]]}); $("#dash-signoffs:not(:has(tbody tr.empty))").tablesorter({ widgets: ['zebra'], sortList: [[0,0]], headers: { 6: {sorter: false } } }); var settings = { widgets: ['zebra'], sortList: [[0,0]], headers: { 1: { sorter: 'pkgcount' }, 2: { sorter: 'pkgcount' }, 3: { sorter: 'pkgcount' } } }; $(".dash-stats").not($("#stats-by-maintainer")).tablesorter(settings); settings['sortLocaleCompare'] = true; $("#stats-by-maintainer").tablesorter(settings); }); </script> {% endblock %}