Add sysadmin dashboard

For seeing overview of system status, for deleting and loading
courses, for seeing log of git imports of courseware.  Includes command
for importing course XML from git repositories.

Added a lot of tests for additional coverage with some minor fixes
those tests discovered
This commit is contained in:
Carson Gee
2013-12-12 19:27:53 -05:00
committed by a
parent bd04ab5a08
commit ccc87337d6
17 changed files with 1944 additions and 3 deletions

View File

@@ -0,0 +1,125 @@
<%inherit file="/main.html" />
<%! from django.core.urlresolvers import reverse %>
<%! from django.utils.translation import ugettext as _ %>
<%namespace name='static' file='/static_content.html'/>
<%block name="headextra">
<%static:css group='style-course'/>
<script type="text/javascript" src="${static.url('js/vendor/flot/jquery.flot.js')}"></script>
<script type="text/javascript" src="${static.url('js/vendor/flot/jquery.flot.axislabels.js')}"></script>
</%block>
<style type="text/css">
a.active-section {
color: #551A8B;
}
.sysadmin-dashboard-content h2 a {
margin-right: 1.2em;
}
table.stat_table {
font-family: verdana,arial,sans-serif;
font-size:11px;
color:#333333;
border-width: 1px;
border-color: #666666;
border-collapse: collapse;
}
table.stat_table th {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #666666;
background-color: #dedede;
}
table.stat_table td {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #666666;
background-color: #ffffff;
}
a.selectedmode { background-color: yellow; }
textarea {
height: 200px;
}
</style>
<section class="container">
<div class="sysadmin-dashboard-wrapper">
<section class="sysadmin-dashboard-content" style="margin-left:10pt;margin-top:10pt;margin-right:10pt;margin-bottom:20pt">
<h1>${_('Sysadmin Dashboard')}</h1>
<hr />
<h2 class="instructor-nav">
<a href="${reverse('sysadmin')}">${_('Users')}</a>
<a href="${reverse('sysadmin_courses')}">${_('Courses')}</a>
<a href="${reverse('sysadmin_staffing')}">${_('Staffing and Enrollment')}</a>
<a href="${reverse('gitlogs')}" class="active-section">${_('Git Logs')}</a>
</h2>
<hr />
<form name="dashform" method="POST" action="${reverse('sysadmin')}">
<input type="hidden" name="csrfmiddlewaretoken" value="${ csrf_token }">
<input type="hidden" name="dash_mode" value="">
<h3>${_('Git Logs')}</h3>
%if course_id is None:
<table class="stat_table">
<thead>
<tr>
<th>${_('Date')}</th>
<th>${_('Course ID')}</th>
<th>${_('Git Action')}</th>
</tr>
</thead>
<tbody>
%for cil in cilset[:10]:
<tr>
<td>${cil.created}</td>
<td><a href="${reverse('gitlogs')}/${cil.course_id}">${cil.course_id}</a></td>
<td>${cil.git_log}</td>
</tr>
%endfor
</tbody>
</table>
%else:
<h2>${_('Recent git load activity for')} ${course_id}</h2>
%if error_msg:
<h3>${_('Error')}:</h3>
<p>${error_msg}</p>
%endif
<table class="stat_table">
<thead>
<tr>
<th>${_('Date')}</th>
<th>${_('Course ID')}</th>
<th>${_('git action')}</th>
</tr>
</thead>
<tbody>
% for cil in cilset[:2]:
<tr>
<td>${cil.created}</td>
<td><a href="${reverse('gitlogs')}/${cil.course_id}">${cil.course_id}</a></td>
<td>${cil.git_log}</td>
</tr>
<tr>
<td colspan="3">
<pre>${cil.import_log | h}</pre>
</td>
</tr>
% endfor
</tbody>
</table>
% endif
</section>
</div>
</section>