django oracle 性能,4.利用Django在前端展示Oracle 状态趋势

利用Django在前端展示Oracle 状态趋势

2017-12-15 Python 宅必备

开发环境

操作系统:CentOS 7.4

Python版本 :3.6

Django版本: 1.10.5

操作系统用户:oms

数据处理:pandas

前端展示:highcharts

通过上面我们已介绍了如何定时获取系统Oracle状态语句以及如何利用pandas处理成highcharts识别的格式

这节讲如何让其在前端显示

建立页面的步骤

我们还是通过这张图的步骤来说明如何建立页面

af8f8097c30aa7734d1b3bc0c01c50ae.png

1. urls.py页面

from django.conf.urls import url, include

from monitor import views

urlpatterns = [

url(r'^$', views.index, name='index'),

url(r'^oracle_command/$',views.oracle_command, name='oracle_command'),

url(r'^commandresult/$',views.commandresult, name='commandresult'),

url(r'^oracle_status$',views.oracle_status, name='oracle_status'),

url(r'^oracle_performance$',views.oracle_performance, name='oracle_performance'),

url(r'^performance$',views.performance, name='performance'),

url(r'^oracle_topevent$',views.oracle_topevent, name='oracle_topevent'),

url(r'^check_topsql$',views.check_topsql, name='check_topsql'),

url(r'^addbaseline$',views.addbaseline, name='addbaseline'),

url(r'^check_hitratio$',views.check_hitratio, name='check_hitratio'),

url(r'^linux_list$',views.linux_list, name='linux_list'),

]

oracle_performance分别为系统状态趋势的页面(以天为单位)

performance分别为系统状态趋势的页面(以小时为单位)

2. views.py

这里以oracle_performance函数做例子讲解

def oracle_performance(request):

baseline=[]

ip=[]

ip1=oraclelist.objects.all().order_by('ipaddress')

for i in ip1:

ip.append(i.ipaddress+':'+i.tnsname)

if request.method == 'POST': # If the form has been submitted...

#return HttpResponse('ss')

form = charts_oracle_performance(request.POST) # A form bound to the POST data

if form.is_valid(): # All validation rules pass

starttime1 = request.POST['starttime']

endtime1 = request.POST['endtime']

performance_type= form.cleaned_data['performance_type']

ipaddress_tnsname_list=form.cleaned_data['ipaddress']

interval=request.POST['interval']

if starttime1 =='' or endtime1 =='':

return HttpResponse('Please give the Start and End time')

else:

starttime=int(str(time.mktime(time.strptime(starttime1,'%Y%m%d'))).split('.')[0])

endtime=int(str(time.mktime(time.strptime(endtime1,'%Y%m%d'))).split('.')[0])

if starttime>endtime:

return HttpResponse('The Start time must larger than the End time')

#starttime=int(str(time.mktime(time.strptime(starttime1,'%Y%m%d %H:%M:%S'))))

#endtime=int(str(time.mktime(time.strptime(endtime1,'%Y%m%d %H:%M:%S'))))

else:

title='Oracle Performance '+'-'+performance_type

subtitle=performance_type

title_y=' Blocks/Seconds'

if performance_type in ['PhysicalReads','LogicalReads']:

unit='blocks/s'

elif performance_type in ['RedoSize']:

unit='bytes/s'

elif performance_type in ['DBTime','CPUTime']:

unit='Minites'

else:

unit='times/s'

final_series=[]

#final_series=oracle_performance_day(performance_type,ipaddress_tnsname_list,starttime,endtime,interval)

#return HttpResponse(final_series)

if interval=='day':

final_series=oracle_performance_day(performance_type,ipaddress_tnsname_list,starttime,endtime,interval)

x_categories=final_series[0]['x']

elif interval=='week':

final_series=oracle_performance_week(performance_type,ipaddress_tnsname_list,starttime,endtime,interval)

x_categories=final_series[0]['x']

#return HttpResponse(final_series)

dic={'categories':x_categories,'series':final_series,'title':title,'subtitle':subtitle,'unit':unit,'title_y':title_y}

#return render_to_response('highcharts_histogram.html',dic) # Redirect after POST

#return HttpResponse (final_series)

return render_to_response('highcharts.html',dic) # Redirect after POST

else:

return render(request, 'oracle_performance.html', {'form': form})

else:

form = charts_oracle_performance() # An unbound form

d1=datetime.datetime.now()

etime= d1.strftime("%Y%m%d")

stime=(d1-datetime.timedelta(hours=720)).strftime("%Y%m%d")

#etime= d1.strftime("%Y%m%d %H")

#stime=(d1-datetime.timedelta(hours=24)).strftime("%Y%m%d %H")

dic={'form':form,'etime':etime,'stime':stime}

#dic={'form':form,'ip':ip,'ipaddress_checked':ipaddress_checked,'etime':etime,'stime':stime}

return render(request, 'oracle_performance.html', dic)

上面的url设定调用views.py里面的oracle_performance函数,该函数讲解如下:

首先判断请求的方法是不是post(提交表单前),如果不是则打开oracle_performance.html页面,charts_oracle_performance为定义的表单,可在forms.py中定义

如果请求方法为post(提交表单后),首先验证输入是否正确,如果正确则获取相应的ipaddress,tnsname,performance_type等信息,

接下来根据performance_type的类型(物理读,逻辑读等)调用monitor/command/views_oracleperformance.py文件里面的方法来得到我们想要的数据,这个方法的讲解在昨天的公众号,大家可自行查看

最后我们将TOP SQL相关的内容封装成字典重定向到相应的template文件中

3. template文件

这里我们使用highcharts.html文件来显示趋势图

$(function () {

$('#container').highcharts({

title: {

text: '{{title|safe}}',

x: -20 //center

},

xAxis: {

categories: {{categories|safe}}

},

yAxis: {

title: {

text: '{{unit}}'

},

plotLines: [{

value: 0,

width: 1,

color: '#808080'

}]

},

legend: {

layout: 'vertical',

align: 'right',

verticalAlign: 'middle',

borderWidth: 0

},

plotOptions: {

series: {

cursor: 'pointer',

point: {

events: {

click: function(e) {

$("#test3").val(this.y+'s'+this.x);

//上面是当前页跳转,如果是要跳出新页面,那就用

//window.open(e.point.url);

//这里的url要后面的data里给出

}

}

},

}

},

series:[

{% for i in series %}

{

name: '{{i.name}}',

data: {{i.data}}

},

{% endfor %}

]

});

});

这里通过highcharts来展现数据库性能趋势状态

Django允许在html文件内部使用程for循环的形式来迭代列表

关于oracle_peforance页面就说到这了,performance页面可自行参考源码

4. 效果展示

1.数据库系统状态趋势(天为单位)

首先是表单提交之前的界面

8839f7aa46ed226486e44ffe88e5f32d.png

这里选择需要查询的数据库,支持多个数据库同时查询

然后是起止时间以及性能类型

最后可以选择天和周为单位

点击提交后会展示各个数据库该时间段的趋势图

8882d28d18e41faa48eb4188461f64ba.png

5128d7e1e272b39fee49b05067063542.png

2.数据库系统状态趋势(小时为单位)

首先是表单提交之前的界面

c03b32fe259f228b5a74c924ae99ea9f.png

这里选择需要查询的数据库

然后是起止时间以及性能类型

最后是是否比较基线,这个后续会有单独介绍

点击提交后会展示出每天各个时间段的趋势图

28963e3d37212c99e9d5fb39e21afffb.png

5. 源代码位置

欢迎访问我的github主页查看源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分段二次插值例题_分段三次插值

摘要用函数来表示变量间的数量关系广泛应用于各学科领域,但是在实际问题中,往往是通过实验、观测以及计算等方法,得到的是函数在一些点上的函数值。如何通过这些离散数据找到函数的一个满足精度要求且便于使用的近似表达式,是经常…

linux文件在哪个分区,linux下肿么查看目录所在的分区

1、用df 命令查看查看目录所在分区,例如查看/var目录所在分区:[rootlocalhost var]# df -h /varFilesystem Size Used Avail Use% Mounted on/dev/mapper/vg1-lvroot 51G 2.6G 46G 6% /mounted on 列下面就是所在的分区2、如果还想看磁盘分区情况&#x…

linux 格式化 目录,Linux 磁盘分区、格式化、目录挂载

实验环境: Citrix虚拟化, RHEL6.4系统环境本文目的: 熟悉Linux的基本磁盘分区、格式化、目录挂载。1.显示当前主机目录2.磁盘分区3.磁盘格式化4.挂载目录1. 显示当前主机目录命令df -h[rootlocalhost ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/map…

通州区机器人比赛活动总结_机器人大赛赛后总结

机器人大赛赛后总结机器人大赛结束了,每个科协人都缓和了一下自己忙碌的节奏。在比赛这段时间里,大家都辛苦地准备了很久,尽管在比赛中有着不尽如人意的地方,比赛也落下了完美的帷幕。赛后我们认真总结了此次活动中出现的问题。首…

linux用分词系统,Linux(CentOS 6.4)Solr4.8.1中文分词配置(IK分词)

1、环境准备CentOS6.4、Tomcat6.0、Jdk1.7、Solr4.8.1、IK Analyzer 2012FF_hf12、配置步骤(1)下载IK Analyzer分词包,解压缩(2)将IKAnalyzer2012FF_u1.jar拷贝到solr服务的目录solr/WEB-INF/lib下cp /usr/download/IK Analyzer 2012FF_hf1/IKAnalyzer2012FF_u1.jar…

python我的世界服务器_Python取Minecraft服务器信息

最近猛玩Minecraft,无聊之下写了这个东西,可以取到版本,在线人数,最大人数。import socketimport codecsclass mcstatus:def __init__(self,hostname,port,timeout 0.6):self.hostname hostnameself.timeout timeoutself.port …

华为内部存储转sd卡_怎样把华为手机内存的东西传、转到SD卡中呢

2016-08-24华为mate8手机里没有SD卡有关系吗华为Mate8支持SD卡锁功能,下面小编就来讲讲SD卡锁如何使用。一、当前手机没有设置SD卡密码功能, 手机一旦丢失,SD卡中的内容也将泄露;Mate 8支持SD卡加密功能,通过对SD加密&…

linux隔一级目录找文件,linux查看文件和子目录

Q4:linux查找当前目录下所有子目录特定文件类型需要查找的文件内容1、find [选项] [目录] [条件] [动作]如果不指定任何目录,find将会查找当前目录。如果 不指定条件,则条件相当于“true”,这样会把全部文件都找出来。选项、条件和…

linux c程序加args,C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用

在阅读代码的时候,在一个宏定义语句中,发现了个之前未曾见过的编译器预定义宏:“__VA_ARGS__”。当时,从代码语句中推测它代表宏参数:“…”(本文称之为省略号),依稀记得printf函数声明中有使用这个省略号&…

python梦幻西游鼠标偏移_【按键盒子】梦幻西游解决鼠标漂移问题

Gosub GetFbl//Gosub 点击任务红名/////获取窗口分辨率///Sub GetFbl//左上角找图FindPic 0, 0, 1024, 768, "Attachment:\zsj.bmp", 0.9, intX1, intY1If intX1 < 0MessageBox "未找到窗口左上角"Else//定位窗口右下角Delay 10FindPic 0, 0, 1024, 768…

linux看java堆大小,linux 改java堆内存大小

linux 改java堆内存大小[2021-02-08 23:06:29] 简介:linux查内存大小的方法&#xff1a;首先打开应用程序&#xff1b;然后选择系统工具选项&#xff0c;并单击系统终端选项&#xff1b;接着在系统终端命令行输入【free -h】命令&#xff1b;最后在结果中找到total即可查看到系…

脉冲宽度调制pdm_PWM (脉冲宽度调制)原理与实现

原理与实现1、PWM原理2、调制器设计思想3、具体实现设计一、PWM(脉冲宽度调制Pulse Width Modulation)原理&#xff1a;脉冲宽度调制波通常由一列占空比不同的矩形脉冲构成&#xff0c;其占空比与信号的瞬时采样值成比例。图1所示为脉冲宽度调制系统的原理框图和波形图。该系统…

arch linux简体中文,User-mode Linux (简体中文)

本文或本节需要翻译。要贡献翻译&#xff0c;请访问简体中文翻译团队。什么是 user-mode-linux?User-mode-linux (UML) 是让一个linux作为一个独立进程运行在另一个linux上。 请在[1] 查找 uml 的详细安装使用指南。这篇 wiki 文章是 这帖[失效链接 2020-08-06 ⓘ] 概要。 如果…

cad常用字体包_CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏

现在有很多的小伙伴们都加入到了CAD这个大家庭中&#xff0c;一开始都是都是一脸懵的状态&#xff0c;更不知要从何入手&#xff01;小编才开始也是&#xff0c;但是只要掌握好CAD的技巧和脊髓&#xff0c;一切都不是事。CAD大神总结5点诀窍&#xff0c;悄悄告诉你&#xff0c;…

栈windows linux,Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息...

一、前言程序在执行过程中 crash 是非常严重的问题&#xff0c;一般都应该在测试阶段排除掉这些问题&#xff0c;但是总会有漏网之鱼被带到 release 阶段。因此&#xff0c;程序的日志系统需要侦测这种情况&#xff0c;在代码崩溃的时候获取函数调用栈信息&#xff0c;为 debug…

python vbs库_Python语言之requests库

发送请求、传递URL参数、定制headers、接受数据&#xff0c;处理数据等在Java中用httpclient jar包&#xff0c;在Python中用requests库&#xff0c;即使没有事先下载&#xff0c;在Pycharm开发工具中&#xff0c;出现提示时刻&#xff0c;同意安装即可1) 发送请求urlhttp://ba…

Linux中fdisk对应的c函数,linux下fdisk命令实战案例之详解

一、fdisk命令中参数介绍&#xff1a;1.查看硬盘使用情形#fdisk -l 观察硬盘之实体使用情形2.fdisk /dev/sda&#xff0c;进入硬盘分割模式1. 输入 m 显示所有命令列示。2. 输入 p 显示硬盘分割情形。3. 输入 a 设定硬盘启动区。4. 输入 n 设定新的硬盘分割区。4.1. 输入 e 硬盘…

cvs有机添加剂检测_美国ECI CVS 电镀添加剂分析仪QL-10EX

美国ECI CVS 电镀添加剂分析仪型 号&#xff1a;QL-10EX价 格&#xff1a;美国ECI CVS 电镀添加剂分析仪QL-10EXQL-5EX, QL-10EX,旧型号&#xff1a;QL-5E,QL-5, QL-10E,QL-10,QP-4000,QLC-5000产品介绍别名&#xff1a;电镀分析仪 循环剥离伏安测试仪 CVS测试仪 电镀成份分…

linux多台主机对比文件大小,Linux主机df和du出来的文件和磁盘大小不相同

df 查看磁盘大小和使用空间的命令 常用的是df -hdu 查看文件或者文件夹大小的命名 常用的是du -sh *一、问题现象的陈述1、先列出df的结果# df -hFilesystem Size Used Avail Use% Mounted on/dev/xvda1 20G 17G 2.3G 88% /tmpfs 1.9G 0 1.9G …

oracle rollup分组没有数据时为0_数据库周刊19│GBASE适配鲲鹏;MySQL窗口函数;OGG双向数据同步……...

摘要&#xff1a;墨天轮数据库周刊第19期发布啦&#xff0c;每周1次推送本周数据库相关热门资讯、精选文章、干货文档。本周分享GBASE适配鲲鹏&#xff1b; 疫情激活COBOL语言&#xff1b;TiDB数据库的未来&#xff1b;Oracle与double write&#xff1b;MySQL8.0 窗口函数&…