Merge branch 'dev' into sxw-dev
Conflicts: template/admin/announcement/announcement.html
This commit is contained in:
@@ -1,39 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import account.models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='User',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
||||||
('password', models.CharField(max_length=128, verbose_name='password')),
|
|
||||||
('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)),
|
|
||||||
('username', models.CharField(unique=True, max_length=30)),
|
|
||||||
('real_name', models.CharField(max_length=30, null=True, blank=True)),
|
|
||||||
('email', models.EmailField(max_length=254, null=True, blank=True)),
|
|
||||||
('create_time', models.DateTimeField(auto_now_add=True)),
|
|
||||||
('admin_type', models.IntegerField(default=0)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'db_table': 'user',
|
|
||||||
},
|
|
||||||
managers=[
|
|
||||||
('objects', account.models.UserManager()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='AdminGroup',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import account.models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('account', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterModelManagers(
|
|
||||||
name='user',
|
|
||||||
managers=[
|
|
||||||
(b'objects', account.models.UserManager()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='user',
|
|
||||||
name='real_name',
|
|
||||||
field=models.CharField(max_length=30, null=True, blank=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('account', '0002_auto_20150731_2310'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='user',
|
|
||||||
name='email',
|
|
||||||
field=models.EmailField(max_length=254, null=True, blank=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('account', '0003_user_email'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='user',
|
|
||||||
name='admin_group',
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='user',
|
|
||||||
name='admin_type',
|
|
||||||
field=models.IntegerField(default=0),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -19,7 +19,7 @@ class UserLoginAPIView(APIView):
|
|||||||
---
|
---
|
||||||
request_serializer: UserLoginSerializer
|
request_serializer: UserLoginSerializer
|
||||||
"""
|
"""
|
||||||
serializer = UserLoginSerializer(data=request.DATA)
|
serializer = UserLoginSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
user = auth.authenticate(username=data["username"], password=data["password"])
|
user = auth.authenticate(username=data["username"], password=data["password"])
|
||||||
@@ -40,7 +40,7 @@ class UserRegisterAPIView(APIView):
|
|||||||
---
|
---
|
||||||
request_serializer: UserRegisterSerializer
|
request_serializer: UserRegisterSerializer
|
||||||
"""
|
"""
|
||||||
serializer = UserRegisterSerializer(data=request.DATA)
|
serializer = UserRegisterSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
try:
|
try:
|
||||||
@@ -68,7 +68,7 @@ class UserChangePasswordAPIView(APIView):
|
|||||||
---
|
---
|
||||||
request_serializer: UserChangePasswordSerializer
|
request_serializer: UserChangePasswordSerializer
|
||||||
"""
|
"""
|
||||||
serializer = UserChangePasswordSerializer(data=request.DATA)
|
serializer = UserChangePasswordSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
user = auth.authenticate(username=data["username"], password=data["old_password"])
|
user = auth.authenticate(username=data["username"], password=data["old_password"])
|
||||||
@@ -89,7 +89,7 @@ class UsernameCheckAPIView(APIView):
|
|||||||
---
|
---
|
||||||
request_serializer: UsernameCheckSerializer
|
request_serializer: UsernameCheckSerializer
|
||||||
"""
|
"""
|
||||||
serializer = UsernameCheckSerializer(data=request.DATA)
|
serializer = UsernameCheckSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
try:
|
try:
|
||||||
User.objects.get(username=serializer.data["username"])
|
User.objects.get(username=serializer.data["username"])
|
||||||
@@ -107,7 +107,7 @@ class EmailCheckAPIView(APIView):
|
|||||||
---
|
---
|
||||||
request_serializer: EmailCheckSerializer
|
request_serializer: EmailCheckSerializer
|
||||||
"""
|
"""
|
||||||
serializer = EmailCheckSerializer(data=request.DATA)
|
serializer = EmailCheckSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
try:
|
try:
|
||||||
User.objects.get(email=serializer.data["email"])
|
User.objects.get(email=serializer.data["email"])
|
||||||
@@ -148,7 +148,7 @@ class UserAdminAPIView(APIView):
|
|||||||
request_serializer: EditUserSerializer
|
request_serializer: EditUserSerializer
|
||||||
response_serializer: UserSerializer
|
response_serializer: UserSerializer
|
||||||
"""
|
"""
|
||||||
serializer = EditUserSerializer(data=request.DATA)
|
serializer = EditUserSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class AnnouncementAdminAPIView(APIView):
|
|||||||
---
|
---
|
||||||
request_serializer: CreateAnnouncementSerializer
|
request_serializer: CreateAnnouncementSerializer
|
||||||
"""
|
"""
|
||||||
serializer = CreateAnnouncementSerializer(data=request.DATA)
|
serializer = CreateAnnouncementSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
Announcement.objects.create(title=data["title"],
|
Announcement.objects.create(title=data["title"],
|
||||||
@@ -34,7 +34,7 @@ class AnnouncementAdminAPIView(APIView):
|
|||||||
request_serializer: EditAnnouncementSerializer
|
request_serializer: EditAnnouncementSerializer
|
||||||
response_serializer: AnnouncementSerializer
|
response_serializer: AnnouncementSerializer
|
||||||
"""
|
"""
|
||||||
serializer = EditAnnouncementSerializer(data=request.DATA)
|
serializer = EditAnnouncementSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1,42 +1,47 @@
|
|||||||
define("admin", ["jquery", "avalon"], function($, avalon){
|
define("admin", ["jquery", "avalon"], function ($, avalon) {
|
||||||
function li_active(selector){
|
|
||||||
$(selector).attr("class", "list-group-item active");
|
|
||||||
}
|
|
||||||
|
|
||||||
function li_inactive(selector){
|
avalon.ready(function () {
|
||||||
$(".list-group-item").attr("class", "list-group-item");
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_template(url){
|
function li_active(selector) {
|
||||||
$("#loading-gif").show();
|
$(selector).attr("class", "list-group-item active");
|
||||||
vm.template_url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
var vm = avalon.define({
|
|
||||||
$id: "admin",
|
|
||||||
template_url: "template/index/index.html",
|
|
||||||
hide_loading: function(){
|
|
||||||
$("#loading-gif").hide();
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
var hash = window.location.hash.substring(1);
|
function li_inactive(selector) {
|
||||||
|
$(".list-group-item").attr("class", "list-group-item");
|
||||||
|
}
|
||||||
|
|
||||||
if(hash){
|
function show_template(url) {
|
||||||
li_active("#li-" + hash.replace("/", "-"));
|
$("#loading-gif").show();
|
||||||
show_template("template/" + hash + ".html");
|
vm.template_url = url;
|
||||||
}else {
|
}
|
||||||
li_active("#li-index-index");
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onhashchange = function() {
|
|
||||||
var hash = window.location.hash.substring(1);
|
var hash = window.location.hash.substring(1);
|
||||||
if(hash){
|
|
||||||
li_inactive(".list-group-item");
|
if (!hash) {
|
||||||
li_active("#li-" + hash.replace("/", "-"));
|
hash = "index/index";
|
||||||
show_template("template/" + hash + ".html");
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
var vm = avalon.define({
|
||||||
|
$id: "admin",
|
||||||
|
template_url: "template/" + hash + ".html",
|
||||||
|
hide_loading: function () {
|
||||||
|
$("#loading-gif").hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
avalon.scan();
|
||||||
|
|
||||||
|
li_active("#li-" + hash.replace("/", "-"));
|
||||||
|
|
||||||
|
window.onhashchange = function () {
|
||||||
|
var hash = window.location.hash.substring(1);
|
||||||
|
if (hash) {
|
||||||
|
li_inactive(".list-group-item");
|
||||||
|
li_active("#li-" + hash.replace("/", "-"));
|
||||||
|
show_template("template/" + hash + ".html");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
56
static/src/js/app/admin/monitor/monitor.js
Normal file
56
static/src/js/app/admin/monitor/monitor.js
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
require(["jquery", "chart"], function ($, Chart) {
|
||||||
|
var data = {
|
||||||
|
labels: ["January", "February", "March", "April", "May", "June", "July",
|
||||||
|
"January", "February", "March", "April", "January", "February", "March", "April"],
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
label: "11111111",
|
||||||
|
fillColor: "rgba(220,220,220,0.2)",
|
||||||
|
strokeColor: "rgba(220,220,220,1)",
|
||||||
|
pointColor: "rgba(220,220,220,1)",
|
||||||
|
pointStrokeColor: "#fff",
|
||||||
|
pointHighlightFill: "#fff",
|
||||||
|
pointHighlightStroke: "rgba(220,220,220,1)",
|
||||||
|
data: [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "2222222",
|
||||||
|
fillColor: "rgba(151,187,205,0.2)",
|
||||||
|
strokeColor: "rgba(151,187,205,1)",
|
||||||
|
pointColor: "rgba(151,187,205,1)",
|
||||||
|
pointStrokeColor: "#fff",
|
||||||
|
pointHighlightFill: "#fff",
|
||||||
|
pointHighlightStroke: "rgba(151,187,205,1)",
|
||||||
|
data: [3, 7, 8, 9, 1, 4, 10, 10, 9, 8, 7, 10, 10, 10, 10]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
Chart.defaults.global.responsive = true;
|
||||||
|
var myLineChart = new Chart($("#myChart").get(0).getContext("2d")).Line(data);
|
||||||
|
|
||||||
|
var data1 = [
|
||||||
|
{
|
||||||
|
value: 300,
|
||||||
|
color:"#F7464A",
|
||||||
|
highlight: "#FF5A5E",
|
||||||
|
label: "Red"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 50,
|
||||||
|
color: "#46BFBD",
|
||||||
|
highlight: "#5AD3D1",
|
||||||
|
label: "Green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 100,
|
||||||
|
color: "#FDB45C",
|
||||||
|
highlight: "#FFC870",
|
||||||
|
label: "Yellow"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
new Chart($("#c1").get(0).getContext("2d")).Pie(data1);
|
||||||
|
new Chart($("#c2").get(0).getContext("2d")).Pie(data1);
|
||||||
|
|
||||||
|
});
|
||||||
@@ -16,6 +16,7 @@ var require = {
|
|||||||
contest: "app/admin/contest/contest",
|
contest: "app/admin/contest/contest",
|
||||||
csrf: "utils/csrf",
|
csrf: "utils/csrf",
|
||||||
admin: "app/admin/admin",
|
admin: "app/admin/admin",
|
||||||
|
chart: "lib/chart/Chart",
|
||||||
|
|
||||||
//formValidation 不要在代码中单独使用,而是使用和修改utils/validation
|
//formValidation 不要在代码中单独使用,而是使用和修改utils/validation
|
||||||
base: "lib/formValidation/base",
|
base: "lib/formValidation/base",
|
||||||
|
|||||||
21
template/admin/monitor/monitor.html
Normal file
21
template/admin/monitor/monitor.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<div ms-controller="monitor" class="col-lg-9">
|
||||||
|
<h1>服务器监控</h1>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>判题实例数量</h3>
|
||||||
|
<div>
|
||||||
|
<canvas id="myChart" style="min-width:100%;max-height: 300px;"></canvas>
|
||||||
|
<div style="text-align: center;">判题实例数量变化</div>
|
||||||
|
</div>
|
||||||
|
<div style="width: 50%;float: left;">
|
||||||
|
<canvas id="c1" width="250" height="125"></canvas>
|
||||||
|
<div style="text-align: center;">内存</div>
|
||||||
|
</div>
|
||||||
|
<div style="width: 50%;float: left;">
|
||||||
|
<canvas id="c2" width="250" height="125"></canvas>
|
||||||
|
<div style="text-align: center"> cpu</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="/static/js/app/admin/monitor/monitor.js"></script>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user