基于Django开发的服务器监控系统

项目要求

可以同时查看多个终端的运行状况信息(如处理器,内存,硬盘等)

项目展示

请添加图片描述

基于Django开发的服务器监控系统

核心代码

客户端

调用psutil库,使用request每隔1s向服务器发送当前状态

import time
from datetime import datetime

import psutil
import requests

while True:
    cpu_num = psutil.cpu_count()
    cpu_percent = psutil.cpu_percent()

    memory_total = psutil.virtual_memory().total
    memory_ava = psutil.virtual_memory().available
    memory_per = psutil.virtual_memory().percent

    disk_total = psutil.disk_usage('/').total
    disk_free = psutil.disk_usage('/').free

    net_sent = psutil.net_io_counters().bytes_sent
    net_rec = psutil.net_io_counters().bytes_recv

    now = datetime.now()

    data = {'cpu_num': cpu_num, 'cpu_percent': cpu_percent, 'memory_total': memory_total, 'memory_ava': memory_ava,
            'memory_per': memory_per, 'disk_total': disk_total, 'disk_free': disk_free, 'net_sent': net_sent,
            'net_rec': net_rec, 'time': now}

    headers = {'Content-Type': 'application/json'}
    try:
        requests.post('http://192.168.12.1:8000/api', data, headers)
    except:
        print("error")
    time.sleep(1)

服务器端

创立一个api用于接收发送的信息,并存储到Django自带的数据库中
创立一个网页用于访问展示

from django.http import HttpResponse
from django.db import models
from django.shortcuts import render
import datetime
from .models import pc


# Create your views here.

def getMessage(request):
    if request.method == "POST":
        ip = ""
        if request.META.get('HTTP_X_FORWARDED_FOR'):
            ip = request.META.get("HTTP_X_FORWARDED_FOR")
        else:
            ip = request.META.get("REMOTE_ADDR")
        cpu_num = request.POST.get("cpu_num")
        cpu_percent = request.POST.get("cpu_percent")
        memory_total = request.POST.get("memory_total")
        memory_ava = request.POST.get("memory_ava")
        memory_per = request.POST.get("memory_per")
        disk_total = request.POST.get("disk_total")
        disk_free = request.POST.get("disk_free")
        net_sent = request.POST.get("net_sent")
        net_rec = request.POST.get("net_rec")
        time = request.POST.get("time")

        try:
            pc.objects.get(ip=ip)
        except:
            pc.objects.create(ip=ip, time=time, cpu_num=cpu_num, cpu_percent=cpu_percent, memory_total=memory_total,
                              memory_ava=memory_ava, memory_per=memory_per, disk_total=disk_total,
                              disk_free=disk_free,
                              net_sent=net_sent, net_rec=net_rec)
        else:
            pc.objects.filter(ip=ip).update(cpu_num=cpu_num, time=time, cpu_percent=cpu_percent,
                                            memory_total=memory_total,
                                            memory_ava=memory_ava, memory_per=memory_per, disk_total=disk_total,
                                            disk_free=disk_free,
                                            net_sent=net_sent, net_rec=net_rec)

        return HttpResponse("ok")


def home(request):
    pcs = pc.objects.all()

    text = ""
    num = 1

    for p in pcs:
        p.time = p.time + datetime.timedelta(hours=8)

        text += str(
            num) + " " + p.time.strftime(
            "%m-%d %H:%M:%S") + ' - ' + p.ip + ' - ' + p.cpu_num + ' - ' + p.cpu_percent + ' - ' + p.memory_total + ' - ' + p.memory_ava \
                + ' - ' + p.memory_per + ' - ' + p.disk_total + ' - ' + p.disk_free + ' - ' + p.net_sent + ' - ' + p.net_rec + " <br> "
        num += 1
    return render(request, "home.html", {"text": text})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>服务器浏览</title>
</head>
<body>
<h2>服务器</h2>
<h3>编号 - 时间 - ip - 处理器个数 - 处理器使用率 - 总内存 - 剩余内存 - 内存使用率 - 硬盘总空间 - 硬盘剩余空间 - 网络发送量 - 网络接收量</h3>
{% autoescape off %}
<h3>{{ text }}</h3>
{% endautoescape %}
<form method="post">
    {% csrf_token %}
    <input type="submit" value="刷新" name="save_button" style="width: 80px;height: 60px">
</form>
<a>作者:zhj12399</a>
</body>
</html>

项目源码

GitHub地址

展示视频

bilibili地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhj12399

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值