文章目录
项目地址:
https://gitee.com/sdsnzy/sys-info
帮助文档:
- echarts绘制折线图官方文档:https://echarts.apache.org/examples/zh/editor.html?c=line-stack
- Django与Celery配合实现定时任务:https://www.cnblogs.com/huang-yc/p/10110754.html
接上篇博客:
Django获取服务器信息系统设计----(1)项目基本框架
Django获取服务器信息系统设计----(2)展示首页信息、用户页显示、cpu信息(表格、Echarts饼图、折线图)
一、安装必须内容
1.1 安装redis数据库
Windows安装Redis:https://www.redis.com.cn/redis-installation.html
1.2 安装依赖包
pip install celery
pip install django-celery-beat
pip install django-celery-results
pip install redis
二、配置
Celery定时任务和异步任务:Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。大白话理解处理异步任务和定时任务的工具。
Django+Celery参考文档:https://www.cnblogs.com/huang-yc/p/10110754.html
2.1 celery基本配置
1)sysInfo/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sysInfo.settings')
app = Celery('sysInfo')
# 使用CELERY_ 作为前缀,在settings中写配置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 发现任务文件每个app下的task.py
app.autodiscover_tasks()
2)sysInfo/__init__.py
from __future__ import absolute_import, unicode_literals
# 引入celery实例对象
from .celery import app as celery_app
__all__ = ['celery_app']
3)sysInfo/settings.py
# celery configure
# Broker配置,使用Redis作为消息中间件
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
# BACKEND配置,这里使用redis
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'
# 结果序列化方案
CELERY_RESULT_SERIALIZER = 'json'
3)测试celery配置是否成功:在Django中编写和执行自己的异步任务前,一定要先测试redis和celery是否安装好并配置成功。
【Celery配置易错:https://zhuanlan.zhihu.com/p/139951976】
Windows下启动:
- 写入:work.sh(任选一条,第一条需要装 eventlet )
#此时建议第一条
# Celery -A sysInfo worker -l info -P eventlet
# Celery -A sysInfo worker -l info --pool=solo
2.2 定义任务
1)定义任务host/tasks.py
import psutil
from celery import shared_task
# 数据库
from host.models import UserCpuPercent
# 任务
@shared_task()
def scan_cpu_info():
percent = UserCpuPercent( user_percent=psutil.cpu_times_percent().user)
percent.save()
2)测试:执行 work.sh 中的命令显示下列结果即为成功
2.3 使用定时任务
如果想要在django中使用定时任务功能同样是靠beat完成任务发送功能,当在Django中使用定时任务时,需要安装django-celery-beat插件。
1)安装插件:pip install django-celery-beat
2)添加app到主配置文件:sysInfo/settings.py
INSTALLED_APPS = [
....
'django_celery_beat',
]
3)迁移数据库:
python manage.py migrate
2.4 添加任务
1)此时登陆后台管理:http://localhost:9999/admin/
2.5 开启任务测试
1)启动worker:work.sh(任选一条,第一条需要装 eventlet )
# Celery -A sysInfo worker -l info -P eventlet
# Celery -A sysInfo worker -l info --pool=solo
2)启动beat:start_celery.sh
celery -A sysInfo beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
3)查看数据库表中已经有了数据
三、cpu折线图-前端页面
templates/host/cpu-line.html
<!-- 继承base模板 -->
{% extends 'host/base.html' %}
<!-- 计算过滤器 -->
{% load filter %}
{% block title %} cpu信息 {% endblock %}
{% block content %}
{% include 'host/cpu-header.html' %}
<div>
<div id="main" style="width: 80%;height:400px;"></div>
</div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 首先,声明两个 javascript 的数组
var series_data = []; // 纵轴数据
var xAxis_data = []; // 横轴数据
// 使用循环,依次将数据库需要展示的数据添加到刚才声明的数组中
{
% for data in datas %}
series_data.push({
{
data.user_percent }})
// 注意这里的双引号
xAxis_data.push("{
{ data.create_time}}")
{
% endfor %}
option = {
xAxis: {
type: 'category',
data: xAxis_data
},
yAxis: {
type: 'value'
},
series: [{
data: series_data,
type: 'line',
smooth: true
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
{% endblock %}
四、测试
访问:http://localhost:9999/cpu/line/