Django 实现自动化运维后台

Django 实现自动化运维后台,第1张

layui 框架与BootCSS框架相似都属于前端美化框架,区别在于BootCSS更加专业,而LayUI则更多的是面向于后端开发者,所以在组织形式上毅然采用了几年前的以浏览器为宿主的类 AMD 模块管理方式,却又并非受限于 CommonJS 的那些条条框框,它拥有自己的模式,更加轻量和简单。

下面的页面作为基模板,取名为 base.html 后期子模版,全部继承它。




    
    自动化监控平台
    
    
    
    


{% block css %}
    
{% endblock %}



  
      自动化监控平台
    
    
      
        
          
        
      
      仪表盘
      
            安全配置
            
                  邮件管理
                  消息管理
            
      
    

    
    
      
        
           LyShark
        
        
          安全设置
          用户注销
        
      
    
  

  
    
      
      
        
           仪表盘
        
         主机管理
         动态监控
         图形查询
         日志检索
         远程命令
         系统设置
         授权管理
      
    
  

  
  
      {% block content %}
      {% endblock %}
  
     C 2018 -2020 版权所有 LyShark 保留所有权利
  
    
    

创建仪表盘子页面,此处就叫 main.html 这里直接继承base.html

{% extends "base.html" %}
{% block content %}
    

  当前系统状态
        
            等待添加统计图形功能。
        
CPU利用率 等待添加统计图形功能。
内存利用率 等待添加统计图形功能。
{% endblock %}

urls.py

from MyWeb import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",views.main)
]

上面的代码a标签如果被填上待跳转路径就会出现,跳转虽然实现了,但是a标签无法高亮,解决的办法这里我想到了一个比较笨的方法。

var Arry  = ["/host/","/logs/"];
    for(var x=0;x<10;x++)
    {
        var log = window.location.pathname;
        if (Arry[x] == log){
            $(".layui-side-scroll li").removeClass("layui-nav-itemed")[0];
            $(".layui-side-scroll li").removeClass("layui-this")[0];
            $(".layui-side-scroll li").next().eq(x).addClass("layui-this");
            $(".layui-side-scroll li").next().eq(x).addClass("layui-nav-itemed");
        }
    }

最终的效果是这样的。

我们继续完善这个main.html 页面,仪表盘用于统计本机数据。

{% extends "base.html" %}
{% block content %}





    
        
          在线用户
              Local User
          
          
            

1 Users


总活跃用户1

本机进程数 Process ID

248 Process


总活进程数248

管理主机数量 Host Count

256 Hosting


管理主机数量248

当前活跃会话 Local Sesion

1 Session


活跃的会话1


系统CPU负载 等待添加统计图形功能。
内存利用率 等待添加统计图形功能。
网络数据包 等待添加统计图形功能。
{% endblock %}

接着使用WebSocket打通一条隧道,并持续更新图形。

{% extends "base.html" %}
{% block content %}





    
        
          在线用户
              Local User
          
          
            

{{ User_Count }} Users


总活跃用户{{ User_Count }}

本机进程数 Process ID

{{ User_Proc }} Process


总活进程数{{ User_Proc }}

管理主机数量 Host Count

256 Hosting


管理主机数量248

当前活跃会话 Local Sesion

{{ User_Count }} Session


活跃的会话{{ User_Count }}


系统CPU负载
{% endblock %}

view.py

from django.shortcuts import render
from dwebsocket.decorators import accept_websocket
import psutil,time,json

@accept_websocket
def main(request):
    if not request.is_websocket():
        User_Count = len(psutil.users())
        User_Proc = len(psutil.pids())
        return render(request, "main.html", {"User_Count": User_Count, "User_Proc": User_Proc})
    else:
        while True:
            times = time.strftime("%M:%S", time.localtime())
            data = psutil.cpu_percent(interval=None, percpu=True)
            js = {"time":times,"load":data}
            sen = json.dumps(js)
            request.websocket.send(sen)
            time.sleep(1)

添加内存监控图形,老样子,继续加就是了,动态图形。

{% extends "base.html" %}
{% block content %}





    
        
          在线用户
              Local User
          
          
            

{{ User_Count }} Users


总活跃用户{{ User_Count }}

本机进程数 Process ID

{{ User_Proc }} Process


总活进程数{{ User_Proc }}

管理主机数量 Host Count

256 Hosting


管理主机数量248

当前活跃会话 Local Sesion

{{ User_Count }} Session


活跃的会话{{ User_Count }}


系统CPU负载
系统内存统计
{% endblock %}

view.py

from django.shortcuts import render
from dwebsocket.decorators import accept_websocket
import psutil,time,json

@accept_websocket
def main(request):
    if not request.is_websocket():
        User_Count = len(psutil.users())
        User_Proc = len(psutil.pids())
        return render(request, "main.html", {"User_Count": User_Count, "User_Proc": User_Proc})
    else:
        while True:
            times = time.strftime("%M:%S", time.localtime())
            data = psutil.cpu_percent(interval=None, percpu=True)
            mem = psutil.virtual_memory()
            mem_total = int(mem.total / 1024 / 1024)
            mem_used = int(mem.used / 1024 / 1024)
            js = {"time":times,"load":data,"mem_used":mem_used}
            sen = json.dumps(js)
            request.websocket.send(sen)
            time.sleep(1)

源代码案例

base.html




    
    自动化监控平台
    
    
    
    
    


{% block css %}
    
{% endblock %}



  
      自动化监控平台
    
    
      
        
          
        
      

      仪表盘
      
            安全配置
            
                  邮件管理
                  消息管理
            
      
    
    
    
      
        
           LyShark
        
        
          安全设置
          用户注销
        
      
    
  

  
    
      
      
        
           仪表盘
        
         主机管理
         动态监控
      
    
  

  
  
      {% block content %}
      {% endblock %}
  
     C 2018 -2020 版权所有 LyShark 保留所有权利
  
    

    

host.html

{% extends "base.html" %}
{% block content %}


  系统主机组管理
        
            

{% endblock %}

main.html

{% extends "base.html" %}
{% block content %}





    
        
          在线用户
              Local User
          
          
            

{{ User_Count }} Users


总活跃用户{{ User_Count }}

本机进程数 Process ID

{{ User_Proc }} Process


总活进程数{{ User_Proc }}

管理主机数量 Host Count

256 Hosting


管理主机数量248

当前活跃会话 Local Sesion

{{ User_Count }} Session


活跃的会话{{ User_Count }}


系统CPU负载
系统内存统计
{% endblock %}

urls.py

from MyWeb import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",views.main),
    path("get_host/",views.get_host),
    path("host/",views.host),
]

views.py

from django.shortcuts import render,HttpResponse
from dwebsocket.decorators import accept_websocket
import psutil,time,json
from MyWeb import models


@accept_websocket
def main(request):
    if not request.is_websocket():
        User_Count = len(psutil.users())
        User_Proc = len(psutil.pids())
        return render(request, "main.html", {"User_Count": User_Count, "User_Proc": User_Proc})
    else:
        while True:
            times = time.strftime("%M:%S", time.localtime())
            data = psutil.cpu_percent(interval=None, percpu=True)
            mem = psutil.virtual_memory()
            mem_used = int(mem.used / 1024 / 1024)
            print(mem_used)
            js = {"time":times,"load":data,"mem_used":mem_used}
            sen = json.dumps(js)
            request.websocket.send(sen)
            time.sleep(1)


# 主机列表获取接口
def get_host(request):
    ret = []
    obj = models.HostDB.objects.all()
    for item in range(0,len(obj)):
        ret.append(obj.values()[item])
    data = {
        "code":0,
        "msg":"",
        "count":15,
        "total":1,
        "data": ret
    }
    return HttpResponse(json.dumps(data))

# 返回主机页面数据,或执行删除 *** 作等
def host(request):
    return render(request,"host.html")

完整前端代码:




    
    自动化监控平台
    
    

    






  
      自动化监控平台
    
	
    
      
        
          
        
      
	  
	  
	    仪表盘
	  
	  
	  
         
      
    
	
    
    
      
        
           LyShark
        
        
          密码修改
          用户注销
        
      
    
  

  
    
      
	  
      
        
           仪表盘
        
         主机管理
         动态监控
		
		
              
                
                权限管理
              
              
                
                  密码修改
                
                
                  创建用户
                
                
                  注销
                
              
            
      
    
  


  
  
      {% block content %}
      {% endblock %}
  
  
  
  
   C 2018 -2021 自动化运维平台 By:LyShark
  
	
    

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1322880.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存