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
|
||||
"""
|
||||
serializer = UserLoginSerializer(data=request.DATA)
|
||||
serializer = UserLoginSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
user = auth.authenticate(username=data["username"], password=data["password"])
|
||||
@@ -40,7 +40,7 @@ class UserRegisterAPIView(APIView):
|
||||
---
|
||||
request_serializer: UserRegisterSerializer
|
||||
"""
|
||||
serializer = UserRegisterSerializer(data=request.DATA)
|
||||
serializer = UserRegisterSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
try:
|
||||
@@ -68,7 +68,7 @@ class UserChangePasswordAPIView(APIView):
|
||||
---
|
||||
request_serializer: UserChangePasswordSerializer
|
||||
"""
|
||||
serializer = UserChangePasswordSerializer(data=request.DATA)
|
||||
serializer = UserChangePasswordSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
user = auth.authenticate(username=data["username"], password=data["old_password"])
|
||||
@@ -89,7 +89,7 @@ class UsernameCheckAPIView(APIView):
|
||||
---
|
||||
request_serializer: UsernameCheckSerializer
|
||||
"""
|
||||
serializer = UsernameCheckSerializer(data=request.DATA)
|
||||
serializer = UsernameCheckSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
try:
|
||||
User.objects.get(username=serializer.data["username"])
|
||||
@@ -107,7 +107,7 @@ class EmailCheckAPIView(APIView):
|
||||
---
|
||||
request_serializer: EmailCheckSerializer
|
||||
"""
|
||||
serializer = EmailCheckSerializer(data=request.DATA)
|
||||
serializer = EmailCheckSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
try:
|
||||
User.objects.get(email=serializer.data["email"])
|
||||
@@ -148,7 +148,7 @@ class UserAdminAPIView(APIView):
|
||||
request_serializer: EditUserSerializer
|
||||
response_serializer: UserSerializer
|
||||
"""
|
||||
serializer = EditUserSerializer(data=request.DATA)
|
||||
serializer = EditUserSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
try:
|
||||
|
||||
@@ -17,7 +17,7 @@ class AnnouncementAdminAPIView(APIView):
|
||||
---
|
||||
request_serializer: CreateAnnouncementSerializer
|
||||
"""
|
||||
serializer = CreateAnnouncementSerializer(data=request.DATA)
|
||||
serializer = CreateAnnouncementSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
Announcement.objects.create(title=data["title"],
|
||||
@@ -34,7 +34,7 @@ class AnnouncementAdminAPIView(APIView):
|
||||
request_serializer: EditAnnouncementSerializer
|
||||
response_serializer: AnnouncementSerializer
|
||||
"""
|
||||
serializer = EditAnnouncementSerializer(data=request.DATA)
|
||||
serializer = EditAnnouncementSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
try:
|
||||
|
||||
@@ -1,42 +1,47 @@
|
||||
define("admin", ["jquery", "avalon"], function($, avalon){
|
||||
function li_active(selector){
|
||||
$(selector).attr("class", "list-group-item active");
|
||||
}
|
||||
define("admin", ["jquery", "avalon"], function ($, avalon) {
|
||||
|
||||
function li_inactive(selector){
|
||||
$(".list-group-item").attr("class", "list-group-item");
|
||||
}
|
||||
avalon.ready(function () {
|
||||
|
||||
function show_template(url){
|
||||
$("#loading-gif").show();
|
||||
vm.template_url = url;
|
||||
}
|
||||
|
||||
var vm = avalon.define({
|
||||
$id: "admin",
|
||||
template_url: "template/index/index.html",
|
||||
hide_loading: function(){
|
||||
$("#loading-gif").hide();
|
||||
function li_active(selector) {
|
||||
$(selector).attr("class", "list-group-item active");
|
||||
}
|
||||
});
|
||||
|
||||
var hash = window.location.hash.substring(1);
|
||||
function li_inactive(selector) {
|
||||
$(".list-group-item").attr("class", "list-group-item");
|
||||
}
|
||||
|
||||
if(hash){
|
||||
li_active("#li-" + hash.replace("/", "-"));
|
||||
show_template("template/" + hash + ".html");
|
||||
}else {
|
||||
li_active("#li-index-index");
|
||||
}
|
||||
function show_template(url) {
|
||||
$("#loading-gif").show();
|
||||
vm.template_url = url;
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
if (!hash) {
|
||||
hash = "index/index";
|
||||
}
|
||||
};
|
||||
|
||||
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",
|
||||
csrf: "utils/csrf",
|
||||
admin: "app/admin/admin",
|
||||
chart: "lib/chart/Chart",
|
||||
|
||||
//formValidation 不要在代码中单独使用,而是使用和修改utils/validation
|
||||
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