基于Django框架的系统信息展示系统---定时任务及cpu折线图优化

一、添加定时任务

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。大白话理解处理异步任务和定时任务的工具。工作原理如下图:异步任务和定时任务先发送给消息中间件,然会由监控系统对消息中间件进行监控,一旦发现有任务产生就会传送给任务执行单元进行任务的执行,将结果存储到数据库中返回给用户

在这里插入图片描述
准备工作:

安装如下工具:
celery
django-celery-beat
django-celery-results
redis

整体部署:

编辑定时任务文件
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()

在项目目录下新建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()

在sysinfo/__init__.py写入:
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']

在sysinfo/settings.py写入:
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_celery_beat',   %新增
    'host',
]
....此处未更改,故省略....
]
STATIC_URL = '/static/'
# celery configure
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' # Broker配置,使用Redis作为消息中间件
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1' # BACKEND配置,这里使用redis
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案

在worker.sh写入:
Celery -A sysinfo worker -l info --pool=solo

在start_celery.sh写入:
celery -A sysinfo beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

完成上述操作后:打开两个终端,分别执行worker.sh和start_celery.sh中的指令,启动worker,同时在图形化界面中添加定时任务,此时任务执行单元开始执行后台定义的定时任务

后台管理界面添加定时任务:
在这里插入图片描述
发现数据库中已经返回有任务单元执行定时任务后返回的信息:
在这里插入图片描述
部署参考链接: https://www.cnblogs.com/huang-yc/p/10110754.html

二、优化CPU折线图展示

1.更改视图函数

from host.models import UserCpuPercent
def cpu(request, chart=None):
    logical_core_num = psutil.cpu_count()  #
    physical_core_num = psutil.cpu_count(logical=False)
    try:
        load_avg = os.getloadavg()
    except Exception as e:
        load_avg = ['', '', '']
    cpu_time_percent = psutil.cpu_times_percent()
    else_percent = 0.0
    for i in range(3, 5):
        else_percent += cpu_time_percent[i]
    try:
        cpu_freq = psutil.cpu_freq()
    except AttributeError:
        cpu_freq = None
    if chart == 'line':
        datas = UserCpuPercent.objects.order_by('-id')[:30]  %更改部分
        print(datas)
        return render(request, 'host/cpu-line.html', locals())
    elif chart == 'pie':
        return render(request, 'host/cpu-pie.html', locals())

2.更改cpu-line.html文件

{% extends 'host/base.html' %}
{% load timefilter %}
{% 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 }})#}

            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 %}

3.效果展示

更改完后折线图反应的是主机相关参数真实变化的信息,该信息从数据库中获取:
在这里插入图片描述

Gitee项目地址:https://gitee.com/lrl-debug/sysinfo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django的新闻可视化分析是一种将新闻数据与可视化技术相结合的方法。Django是一个强大的Python Web框架,可以用于构建高效、灵活的Web应用程序。新闻可视化分析是将大量的新闻数据进行处理和分析,然后通过图表、地图等可视化方式展示分析结果,从而有效地传达信息和发现模式。 在基于Django的新闻可视化分析中,首先需要对新闻数据进行提取和清洗工作。这包括从各个新闻源获取数据,并对其进行结构化处理,以便进行后续的分析。然后,通过使用Django的数据库模型,将处理后的数据存储在数据库中,以便进行快速查询和分析。 接下来,通过使用Django的视图和模板系统,可以构建用户界面,将分析结果以可视化的方式展示给用户。例如,可以使用图表库(如Matplotlib、Plotly)来生成各种类型的图表,如柱状图、折线图等,显示新闻报道的数量、趋势和分布情况。还可以使用地图库(如Leaflet、Google Maps API)在地图上标记新闻报道的地理位置,从而展示不同地区的新闻覆盖程度或相关事件的分布。 同时,基于Django的新闻可视化分析还可以与其他技术相结合,如自然语言处理(NLP)和机器学习(ML)。通过对新闻文本进行情感分析或主题建模,可以进一步挖掘新闻数据中的隐藏信息和模式,并将其可视化展示。 总之,基于Django的新闻可视化分析是一种将新闻数据与可视化技术相结合的方法。通过使用Django的强大功能和其他相关技术,可以构建一个功能完善、交互性强的新闻分析平台,从而更好地理解新闻趋势和事件背后的数据意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值