cdn域名图表展示及监控 django+layui

说明:应朋友要求搭建阿里云cdn域名和师界云cdn域名的集中展示和监控平台
主要用到:
python3.6
Django
3.0.2
layui==2.4.5

一、搭建项目及整体架构

新建一个django的项目
(本人使用的windows上pycharm编写的,以下命令针对windows)

django-admin.exe startproject new_project
django-admin.exe startapp new_app

完成项目和app的创建后,我们需要想这个平台的初始架构 django 是mvt框架 我们先定义好model模型 也就是数据库和表结构

1.数据模型设计

model.py

from django.db import models

# Create your models here.
class Cdn_bpsdata(models.Model):
    id = models.CharField(verbose_name='主键id',max_length=15,unique=True,primary_key=True)
    DomainName = models.CharField(verbose_name='域名',max_length=100)
    Value = models.CharField(verbose_name='值',max_length=100)
    HttpsValue = models.CharField(verbose_name='https值',max_length=100)
    RequestId = models.CharField(verbose_name='请求id',max_length=100)
    start_time = models.DateTimeField(verbose_name='utc开始时间')
    end_time = models.DateTimeField(verbose_name='utc结束时间')
    TimeStamp = models.DateTimeField(verbose_name='utc当前时间')
    uptime =  models.DateTimeField('更新时间',auto_now=True)
    DataInterval = models.CharField(verbose_name='粒度',max_length=100)
    TimeStamp_cst = models.DateTimeField(verbose_name='当前时间',null=True)
    def __unicode__(self):
        return self.id

class Cdn_trafficdata(models.Model):
    id = models.CharField(verbose_name='主键id',max_length=15,unique=True,primary_key=True)
    DomainName = models.CharField(verbose_name='域名',max_length=100)
    Value = models.CharField(verbose_name='值',max_length=100)
    HttpsValue = models.CharField(verbose_name='https值',max_length=100)
    RequestId = models.CharField(verbose_name='请求id',max_length=100)
    start_time = models.DateTimeField(verbose_name='utc开始时间')
    end_time = models.DateTimeField(verbose_name='utc结束时间')
    TimeStamp = models.DateTimeField(verbose_name='utc当前时间')
    uptime =  models.DateTimeField('更新时间',auto_now=True)
    DataInterval = models.CharField(verbose_name='粒度',max_length=100)
    TimeStamp_cst = models.DateTimeField(verbose_name='当前时间',null=True)
    def __unicode__(self):
        return self.id

class DomainName_tab(models.Model):
    name_id = models.CharField(verbose_name='主键id',max_length=15,unique=True,primary_key=True)
    DomainName = models.CharField(verbose_name='域名',max_length=100)
    uptime =  models.DateTimeField('更新时间',auto_now=True)
    def __unicode__(self):
        return self.name_id

class DomainName_tab_shijie(models.Model):
    name_id = models.CharField(verbose_name='主键id', max_length=15, unique=True, primary_key=True)
    DomainName = models.CharField(verbose_name='域名', max_length=100)
    uptime = models.DateTimeField('更新时间', auto_now=True)
    def __unicode__(self):
        return self.name_id

class Cdn_lookcloud(models.Model):
    id = models.CharField(verbose_name='主键id',max_length=15,unique=True,primary_key=True)
    DomainName = models.CharField(verbose_name='域名',max_length=100)
    Value = models.CharField(verbose_name='值',max_length=100)
    start_time = models.DateTimeField(verbose_name='utc开始时间')
    end_time = models.DateTimeField(verbose_name='utc结束时间')
    TimeStamp = models.DateTimeField(verbose_name='utc当前时间')
    uptime =  models.DateTimeField('更新时间',auto_now=True)
    DataInterval = models.CharField(verbose_name='粒度',max_length=100)
    TimeStamp_cst = models.DateTimeField(verbose_name='当前时间',null=True)
    code = models.CharField(verbose_name='code',max_length=100)
    message = models.CharField(verbose_name='信息',max_length=100)
    def __unicode__(self):
        return self.id

class Cdn_lookcloud_flow(models.Model):
    id = models.CharField(verbose_name='主键id',max_length=15,unique=True,primary_key=True)
    DomainName = models.CharField(verbose_name='域名',max_length=100)
    Value = models.CharField(verbose_name='值',max_length=100)
    start_time = models.DateTimeField(verbose_name='utc开始时间')
    end_time = models.DateTimeField(verbose_name='utc结束时间')
    TimeStamp = models.DateTimeField(verbose_name='utc当前时间')
    uptime =  models.DateTimeField('更新时间',auto_now=True)
    DataInterval = models.CharField(verbose_name='粒度',max_length=100)
    TimeStamp_cst = models.DateTimeField(verbose_name='当前时间',null=True)
    code = models.CharField(verbose_name='code',max_length=100)
    message = models.CharField(verbose_name='信息',max_length=100)
    def __unicode__(self):
        return self.id

class Controls(models.Model):
    c_id = models.CharField(verbose_name='主键id', max_length=15, unique=True, primary_key=True)
    DomainName = models.CharField(verbose_name='域名', max_length=100)
    control_value = models.CharField(verbose_name='监控值',max_length=100)
    control_item = models.CharField(verbose_name='监控项', max_length=100)
    control_info = models.CharField(verbose_name='监控信息', max_length=100)
    email = models.CharField(verbose_name='邮箱', max_length=100)
    status = models.CharField(verbose_name='状态', max_length=100)
    isstart = models.CharField(verbose_name='是否启动', max_length=100)
    uptime =  models.DateTimeField('更新时间',auto_now=True)

    def __unicode__(self):
        return self.c_id

class Controls_info(models.Model):
    timec_id = models.CharField(verbose_name='时间戳id', max_length=15, unique=True, primary_key=True)
    DomainName = models.CharField(verbose_name='域名', max_length=100)
    control_value = models.CharField(verbose_name='监控值',max_length=100)
    control_count = models.CharField(verbose_name='连续次数', max_length=100)
    start_time = models.DateTimeField(verbose_name='开始时间')
    uptime = models.DateTimeField('更新时间', auto_now=True)
    def __unicode__(self):
        return self.timec_id

数据库
| 阿里云带宽数据表
| 视界云带宽数据表
| 视界云流量数据表
| 阿里云流量数据表
| 监控表
| 监控记录日志
| 阿里云域名列表
| 视界云域名列表

定义完数据模型后因为前端狗屁不会,所以我们拷贝一个前端源码然后修改就行了
下载链接:http://x.xuebingsi.com/

  • 前端页面

登录页面:login.html
主页面:index.html
阿里云图表展示页面:aliyun.html
视界云图表展示页面:shije.html
视界云监控页面页面:monitor.html
视界云监控添加子页面:member-add.html
视界云监控修改子页面:member-edit.html
视界云监控删除子页面:member-del.html
监控日志页面:check_rizhi.html

  • 视图接口

阿里云域名选择接口:DomainName_info
视界云域名选择接口:DomainName_info_shijie
阿里云图表数据接口:Get_datas
视界云图表数据接口:Get_datas_shijie
视界云监控展示接口:monitor_info
视界云监控添加接口:monitor_add
视界云监控修改接口:monitor_edit
视界云监控删除接口:monitor_delete
监控日志接口:check_info

  • 后台调用接口
    监控实时查询接口:flush_check

2.路由

url.py

from django.conf.urls import  include, url
from django.contrib import admin
from dnsdata import views
from dnsdata import check_views

urlpatterns = [
    #登录页面
    url(r'admin/', admin.site.urls),
    url(r'^$', views.login, name='login'),
    url(r'^login/$', (views.login), name='login'),
    url(r'^checklogin/$', (views.checklogin), name='checklogin'),
    url(r'^index/$', (views.index), name='index'),
    #欢迎页面 目前未作处理
    url(r'^welcome/$', (views.welcome), name='welcome'),
    #cdn域名图表展示页面
    url(r'^aliyun_info/$', (views.aliyun_info), name='aliyun_info'),
    url(r'^shijie_info/$', (views.shijie_info), name='shijie_info'),
    #监控页面
    url(r'^monitor/$', (views.monitor), name='monitor'),
    #监控添加和修改页面
    url(r'^member_add/$', (views.member_add), name='member_add'),
    url(r'^member_edit/$', (views.member_edit), name='member_edit'),
    #域名接口
    url(r'^DomainName_info/$', (views.DomainName_info), name='DomainName_info'),
    url(r'^DomainName_info_shijie/$', (views.DomainName_info_shijie), name='DomainName_info_shijie'),
    #域名展示数据接口
    url(r'^Get_datas/$', (views.Get_datas), name='Get_datas'),
    url(r'^Get_datas_shijie/$', (views.Get_datas_shijie), name='Get_datas_shijie'),
    # 监控列表数据接口
    url(r'^monitor_info/$', (views.monitor_info), name='monitor_info'),
    #监控添加
    url(r'^monitor_add/$', (views.monitor_add), name='monitor_add'),
    #修改
    url(r'^monitor_edit/$', (views.monitor_edit), name='monitor_edit'),
    #删除
    url(r'^monitor_delete/$', (views.monitor_delete), name='monitor_delete'),
    #监控接口及数据检查更新
    url(r'^flush_check/$', (check_views.flush_check), name='flush_check'),
    #日志页面
    url(r'^check_rizhi/$', (views.check_rizhi), name='check_rizhi'),
    #日志获取接口
    url(r'^check_info/$', (views.check_info), name='check_info'),
]

二、图表展示方法

图表展示使用echarts

在这里插入图片描述

前端传id给js通过ajax来调用数据接口返回给前端

前端传id给图表进行展示
在这里插入图片描述

定义图表方法
var myChart = echarts.init(document.getElementById(‘main1’));

在这里插入图片描述
在这里插入图片描述

myChart.setOption({})来获取数据
在这里插入图片描述

使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

三、监控展示及报警方法

监控页面使用的layui的table方法
在这里插入图片描述

传id给js处理

在这里插入图片描述

通过后台接口插入数据展示

添加监控接口调用
在这里插入图片描述

修改及删除监控调用

在这里插入图片描述

添加其实也可以加入table的case只是我太懒开始写好的一套就不想改

最后就是监控报警这块以及页面table的刷新正好配合定时器一起跑

在这里插入图片描述

在这里插入图片描述

这里也是因为前端菜的原因写的是整个table的刷新,没有针对到单个值

前端报警显示逻辑
每天查询日志表dnsdata_controls_info 以大于今天时间来查询没有数据则正常

前端报警逻辑
在数据库查询监控项的数据
统计超过三条连续的则插入监控日志表

这里监控后台接口写的有点乱就不多说了
不过对于统计这块是根据时间戳来排序统计的

页面展示如下

登录
在这里插入图片描述

图表

在这里插入图片描述

监控

在这里插入图片描述

日志

在这里插入图片描述

四、后记

本人太懒加上写的这个项目比较low一点吧,就不做多陈述了 具体源码在
https://github.com/clearlove-luzude/flowtab

后面有写了好的项目cmdb之类的,在好好写一下分享吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值