ajax + shell + perl +CGI 脚本
感谢越来越好
https://blog.csdn.net/weixin_42476601/article/details/84801610
$.ajax({
url:"/getData.do"
})
请求的路径是:http://localhost:8080/getData.do
感谢 Seda Özses 使用 Perl、jQuery、Ajax、JSON 和 MySQL 实现简单的登录
https://www.ibm.com/developerworks/cn/webservices/ws-simplelogin/index.html
感谢jQuery之Ajax调试听语音
abc900223
https://jingyan.baidu.com/article/da1091fb3bfc85027849d61e.html
感谢shell脚本--初识CGI
寻觅beyond
https://www.cnblogs.com/-beyond/p/8564108.html
感谢 cgi+perl+ajax初探
hydah
https://www.cnblogs.com/hydah/archive/2011/10/25/cgi-javascript-ajax.html
shell脚本--初识CGI
CGI按照百度百科的定义,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<IfModule alias_module> ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" < /IfModule > <IfModule cgid_module> #Scriptsock cgisock < /IfModule > <Directory "/usr/local/apache/cgi-bin" > AllowOverride All Options None Require all granted < /Directory > |
进入Apache下面的cgi-bin目录,创建一个文件,文件名为index.cgi,文件扩展名为.cgi,这个和php文件的扩展名是.php是一样的。
index.cgi的内容如下:
1
2
3
4
5
6
7
|
#!/bin/bash #index.cgi echo "Content-Type:text/html;charset=utf-8" echo echo "hello world" |
然后在浏览器中访问localhost/cgi-bin/index.cgi,你就会看到结果如下:
然后将index.cgi的内容改一下:
1
2
3
4
5
6
7
8
9
|
#!/bin/bash #index.cgi echo "Content-Type:text/html;charset=utf-8" echo mysql= "mysql -uroot -proot" sql= "show databases" $mysql -e "$sql" |
浏览器运行如下:
其实,从上面的例子中,你就会得出一点结论,cgi就和php类似,只不过php文件中使用的使用php的语法,cgi中使用的shell命令,但是,都可以通过浏览器来运行脚本,获得结果。
现在看一下CGI的定义:CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。
是不是有点理解了。
################
cgi+perl+ajax初探
本来任务要求的是用perl实现cgi脚本即可。但是普通的方法都会刷新页面。我想要的结果是不刷新页面,在原页面上进行交互。即通过cgi返回的信息可以作为原网页的部分内容。所以这需要用到ajax。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<script type= "text/javascript" > function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp= new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp= new ActiveXObject( "Microsoft.XMLHTTP" ); } var url= "" ; var name=document.getElementsByName( "name" )[0].value; var age=document.getElementsByName( "age" )[0].value; var gender=document.getElementsByName( "gender" )[0].value; var email=document.getElementsByName( "email" )[0].value; url= "?name=" +name+ "&age=" +age+ "&gender=" +gender+ "&email=" +email; alert(url); xmlhttp.open( "GET" , "http://www.cnblogs.com/cgi-bin/infoQuesAdd1.pl" +url, false ); xmlhttp.send( null ); //document.getElementById("displayboard").innerHTML=xmlhttp.responseText; alert(xmlhttp.responseText); } </script> |
1.in oracle user :we running the web program in bash to collect file
sh cash.sh db dbdb11 12.2.101.168 1528 db
2.in web
部署方法:$ cd /var/www/html/doc
-》html 目录部署在 /var/www/html/doc
$ # copy the tar.gz file from github here
$ gzip -d khailey-wash-155931c.tar.gz # name generated for github download
$ tar xvf khailey-wash-155931c.tar
$ mv khailey-wash-155931c/* .
change1:
edit cgi-bin/json_ash.sh
add:
my $MON_HOME="/tmp/MONITOR";
change2:
# 因为AJAX 需要跑的CGI 脚本 ,CGI 在 httpd.conf 配置信息如下:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
-》CGI 部署位置/var/www/cgi-bin/
所以需要迁移文件
move all file in /var/www/html/doc/cgi-bin to /var/www/cgi-bin/
then use test command 确定能否返回数据:
http://10.200.210.187/cgi-bin/json_ash.sh (OK)
http://10.200.210.187/cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=0 (OK)
总结:如果
如果查不到数据:IE 界面 最下面 如下
debug data:
http://10.200.210.187/doc/html/ash.html?q=12.2.101.168:db 12.2.101.168:db z errorstart errorend /cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=0 complete
如果查得到数据,IE 界面 最下面 如下:
/cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=db,M000 102 complete
###sample wash 调试过程
1.in oracle user :we running the web program in bash to collect file
sh cash.sh dbmonopr dbmonoprdb11 12.2.101.168 1528 db
2.in web
部署方法:$ cd /var/www/html/doc
-》html 目录部署在 /var/www/html/doc
$ # copy the tar.gz file from github here
$ gzip -d khailey-wash-155931c.tar.gz # name generated for github download
$ tar xvf khailey-wash-155931c.tar
$ mv khailey-wash-155931c/* .
change1:
edit cgi-bin/json_ash.sh
->add:
my $MON_HOME="/tmp/MONITOR";
->mark:
# $vdb='192.168.1.140:o1123';
->change: AHS 默认展示最近5分钟,修改文件使得其展示最近60分钟的,一小时的
$bucket_size=5;
to
$bucket_size=60;
change2:
# 因为AJAX 需要跑的CGI 脚本 ,CGI 在 httpd.conf 配置信息如下:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
-》CGI 部署位置/var/www/cgi-bin/
所以需要迁移文件
move all file in /var/www/html/doc/cgi-bin to /var/www/cgi-bin/
then use test command 确定能否返回数据:
http://10.200.210.187/cgi-bin/json_ash.sh (OK)
http://10.200.210.187/cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=0 (OK)
总结:如果
如果查不到数据:IE 界面 最下面 如下
debug data:
http://10.200.210.187/doc/html/ash.html?q=12.2.101.168:db 12.2.101.168:db z errorstart errorend /cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=0 complete
如果查得到数据,IE 界面 最下面 如下:
(解释如下 :原始网页'/cgi-bin/json_ash.sh?points='+loadpoints+'&vdb='+vdb+'&type='+sesnames )
AJAX (动态参数)=>传入参数,point=60,vdb=12.2.101.168:db,type=0, 传出参数 point=60,vdb=12.2.101.168:db,type=DBMONOPR,M000)
/cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=DBMONOPR,M000 102 complete
use guide:
http://10.200.210.187/doc/html/ash.html?q=12.2.101.168:db
因为图标展示主要使用到开源工具Highcharts,highchar 时间轴又是获取距1970年1月1日0时0分0秒的毫秒数表示时间,也就是时间戳
根据描述,历史数据只保留7天,所以我们如果想查询7天之内的历史,实现得使用 如下网页 将UTC 时间 转化 获取一个时间戳,
https://tool.lu/timestamp/
比如2020-05-30 00:48:48
转成时间戳
1590770928
那么查询历史数据可以
http://10.200.210.187/doc/html/ash.html?q=12.2.102.48:pas
/cgi-bin/json_ash.sh?&get_details=1&beg_epoch='+beg_epoch+'&end_epoch='+end_epoch+'&vdb='+vdb+'&points='+loadpoints+'&type='+0,
/cgi-bin/json_ash.sh?&get_details=1&end_epoch=
http://10.200.210.187/cgi-bin/json_ash.sh?points=60&vdb=12.2.102.48:pas&type=0&_=1590821764659
http://10.200.210.187/cgi-bin/json_ash.sh?points=60&vdb=12.2.102.48:pas&type=0&_=1590770928000
json_ash.sh
points
vdb
json_ash.sh
PS:
发现一个小问题,/tmp/num 这个文件增长很快,
$ ls -tlr /tmp/num
检查发现json_ash.sh 下面语句相关,应该是调试用语句,如果就觉得太大,可以考虑屏蔽
system("echo name $name value $value >> /tmp/num ");
#########
感谢mateuszkornecki
https://www.highcharts.com/forum/viewtopic.php?f=9&t=43787&p=154811&hilit=epoch#p154811
How to convert epoch time to browser specific time
epotch time 就是javascript 计算时间戳的方式
UTC 就是2020 可识别的格式
2者之间需要转换
所以只能使用UTC 时区 解析该网站,UTC 网站解析的结果https://www.unixtimestamp.com/index.php
网页
比如1590770928
转成时间戳
2020-05-30 00:48:48
感谢www.highcharts的中文论坛
https://www.highcharts.com.cn/docs/basic-axis
时间轴。时间使用和Javascript 日期对象一样,即用一个距1970年1月1日0时0分0秒的毫秒数表示时间,也就是时间戳。
更多Javascript 日期对象请阅读 W3C school 相关内容。
Highcharts有很多时间格式化函数,列举如下:
1)Date.getTime()
获取当前时间戳。实例用法如下:
time = Date.getTime(); //time = 1384442746960 (ms) 当前时间为 2013-11-14 23:25:46
感谢越来越好
https://blog.csdn.net/weixin_42476601/article/details/84801610
$.ajax({
url:"/getData.do"
})
请求的路径是:http://localhost:8080/getData.do
http://10.200.210.187/doc/html/cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=0
http://10.200.210.187/doc/cgi-bin/json_ash.sh?points=60&vdb=12.2.101.168:db&type=0
http://10.200.210.187/doc/cgi-bin/json_ash.pl?points=60&vdb=12.2.101.168:db&type=0
change:
--ash.html
--change:
-- url: '/cgi-bin/json_ash.sh?points='+loadpoints+'&vdb='+vdb+'&type='+sesnames,
-- url: '../cgi-bin/json_ash.sh?points='+loadpoints+'&vdb='+vdb+'&type='+sesnames,
感谢 Seda Özses 使用 Perl、jQuery、Ajax、JSON 和 MySQL 实现简单的登录
https://www.ibm.com/developerworks/cn/webservices/ws-simplelogin/index.html
感谢jQuery之Ajax调试听语音
abc900223
https://jingyan.baidu.com/article/da1091fb3bfc85027849d61e.html
感谢shell脚本--初识CGI
寻觅beyond
https://www.cnblogs.com/-beyond/p/8564108.html
感谢 cgi+perl+ajax初探
hydah
https://www.cnblogs.com/hydah/archive/2011/10/25/cgi-javascript-ajax.html
#####20200530 peng 修改
->query string parameter
(ash.html)
->add 102 LINE
# beg_epoch=partsArray[2];
# end_epoch=partsArray[3];
->change
line 332:
# url: '/cgi-bin/json_ash.sh?points='+loadpoints+'&vdb='+vdb+'&type='+sesnames,
to
# url: '/cgi-bin/json_ash.sh?points='+loadpoints+'&vdb='+vdb+'&type='+sesnames+'&end_epoch='+end_epoch,
to
# url: '/cgi-bin/json_ash.sh?points='+loadpoints+'&vdb='+vdb+'&type='+sesnames+'&beg_epoch='+beg_epoch+'&end_epoch='+end_epoch,
(cgi-bing/json)
line 9:
add:
#$beg_epoch=@ARGV[3];
#$end_epoch=@ARGV[4];
line 31:
#add:
#$get_details=1;
change:
cgi-bing/json 打开debug
$foo="echo \'$ENV{'QUERY_STRING'}\' > /tmp/ash_args.txt";
system($foo);
add :
$kyle=1;
->调试CGI 脚本的方法 :就可以在CGI 脚本里,通过print 函数,在网页chrome 端观察 执行结果
具体方法F12/network, 选择CGI 脚本执行的路径,然后 选择 preview 菜单,可以看到 对应print 函数结果
调试完成后,需要关闭debug ,mark
#$kyle=1;
##碰到问题,采集日志为显示的时间戳为
1590768108
1590769308
应该是5/30 22:30
http://10.200.210.187/doc/html/ash.html?q=12.2.101.168:db=1590768108=1590769308
但是转换成时间戳为
-》5/31 6:30 估计跟时区相关,默认走的是UTC 模式,而不是东八区模式,如果数据来源来自 U
-》东八区转成UTC 网站是正确的,但是原数据不正确,所以不能用转成东八区的 的网站转换, https://c.runoob.com/front-end/852
->https://www.sojson.com/unixtime.html
-》时间戳(Unix timestamp)
1591091280
转成 北京时间:
2020/6/2 19:4:40
转成UTC 时间就是 -8
1591091280996.384 这个时间代表 06/02/2020 @ 11:04am (UTC)
-》经过一下午测试,调试了半天,由于该网站 自动调用了oracle 的 timestamp SQL 如下,没有考虑到东八区,
select
(cast(sysdate as date)-to_date('01-JAN-1970','DD-MON-YYYY'))*(86400) from dual;
=1591091280
( 正确的oracle转换unix timestampe,应该是这些SQL, 但是时区转换成图表,可能又有问题,所以暂时不动
。-- 时间转 10位时间戳
select (sysdate - TO_DATE('19700101', 'yyyymmdd')) * 86400 -
TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone), 1, 3)) * 3600
from dual;
-- 10位时间戳 转 时间
select TO_DATE('19700101', 'yyyymmdd') + 1516862035 / 86400 +
TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone), 1, 3)) / 24
from dual;
)
所以只能使用UTC 时区 解析该网站,UTC 网站解析的结果https://www.unixtimestamp.com/index.php
1591091280996.384 这个时间代表 06/02/2020 @ 11:04am (UTC),相当于6/2 19:04 (东八区)
可以使用如下方法可以调试出UTC timestampe 转成 UTC 时区的结果。
https://www.unixtimestamp.com/index.php
->调试javascripts 方法
F12/sources / 在有问题的行数 line 355设置断点
比如 if ( key == "Other" ) oth=val; // 0
/重新刷新网页/ 就可以在右边的watch 看debug 结果
看结果:鼠标移动到变量,停止3秒,变量变黄,就可以查看变量结果了。
开结果2,有的时候,在调试debug点 之前的变量,都会在每行末尾 加红色 显示
(有时候source 里面看不到JS 代码,这个时候可以 将右边的 breakpoint 的部分拿掉 即可,重新刷新既可以出来新结果)
(下方可以看到断点的详细信息,如监控变量、调用栈、事件等。如下图所示)
##感谢shaoweibd
https://jingyan.baidu.com/article/9113f81b64b9da2b3214c72e.html
##感谢runoob 教程
setTimeout() 是属于 window 的方法,该方法用于在指定的毫秒数后调用函数或计算表达式。
语法格式可以是以下两种:
setTimeout(要执行的代码, 等待的毫秒数)
setTimeout(JavaScript 函数, 等待的毫秒数)
##add ash.html
#########20200603
1.为了测试历史数据,
-》 我们需要新加 一张 html报表 , 通过 历史数据 走的 另一张表, 用另一张表 来显示历史数据
->为了不影响现有数据,我们通过复制ash.html 和 json_ash.sh,
-》cp ash.html to ash_his.html
->cp json_ash.sh to json_ash_his.sh
-> ash_his.html
1)修改line 109
chnage
loadata
to
getDetails
2)remove 110 ~128 line
3)修改line 511
channge
json_ash.sh
to
json_ash_his.sh
修改后如下:
url: '/cgi-bin/json_ash_his.sh?&get_details=1&beg_epoch='+beg_epoch+'&end_epoch='+end_epoch+'&vdb='+vdb+'&points='+loadpoints+'&type='+0,
4.1).由于当前版本的 的beg_epoch 和 end_epotch 都来自event 事件触发产生的脚本,所以我们需要在ash.html URL 页面添加这2个字段
->line 91 and line 92 add
var beg_epoch = "x";
var end_epotch = "x";
->line 100 and line 101 add
#beg_epoch=partsArray[2];
#end_epoch=partsArray[3];
beg_epoch=parseInt(partsArray[2]);
end_epoch=parseInt(partsArray[3]);
$("#debug").append(" ");
$("#debug").append(vdb);
5.)调试过程,大概思路 如下;
5.1 在正常的页面 截取一段事件,http://10.200.210.187/doc/html/ash.html?q=12.2.101.168:db
在最下面的debug 区,会短暂的出现5秒这些信息;我们可以知道timestampe事件
min=1591175911040.5176max=1591176385967.8303 z
/cgi-bin/json_ash.sh?&get_details=1&beg_epoch=1591175911040.5176&end_epoch=1591176385967.8303&vdb=12.2.101.168:db&points=60&type=0 after_top_sql complete
利用UTC 网站完成转换https://www.unixtimestamp.com/index.php
1591175911040.517/1000= 06/03/2020 @ 9:18am (UTC)
1591176385967.8303/1000 =06/03/2020 @ 9:26am (UTC)
-》网站调试
http://10.200.210.187/doc/html/ash_his.html?q=12.2.101.168:db=1591175911040.517=1591176385967.8303
6).charts 现在又出不来时间 VDBS:AAS 这个char 又出不来
events: { load: loadData ,
xAxis: { type: 'datetime', labels: {enabled:true}},
6.1).打开json_ash_his.sh line 30 ,调试,通过F12/network/js_name/preview 查看结果
#$kyle=1;
#打开line 216/217/218
#print "xx sql->{$sql_id,$wait_class}=$sql->{$sql_id,$wait_class}\n" ;
#print "xx sql->{$sql_id,$wait_class}=$sql->{$sql_id,$wait_class}\n" if defined($kyle);
#print "$end_epoch, $wait_class, $bar->{$end_epoch,$wait_class} \n" if defined($kyle);
##line 219 加入
#print "bar->{$cur_epoch,$wait_class}=$bar->{$cur_epoch,$wait_class}\n";
#打开line 250/247
#print "[$tm,";
#print "$val],";
##line 249 加入
# print "$val],";
#并关闭line 252,254
print "[$tm,$val],";
print "[$tm,$val],";
#修改json_ash_his.sh line 237
# if ( $get_details!=1 ) {
#修改为
if ( $get_details=1 ) {
#修改line 294
if ( $get_details!=1 ) {
修改为
if ( $get_details=1 ) {
6.2 在ash_hist.html line 122 行加入
/ two ways to output the arrays from perl cgi
chartvdbaas.series[0].setData(oth, false, true);
chartvdbaas.series[1].setData(que, false, true);
chartvdbaas.series[2].setData(net, false, true);
chartvdbaas.series[3].setData(adm, false, true);
chartvdbaas.series[4].setData(cnf, false, true);
chartvdbaas.series[5].setData(com, false, true);
chartvdbaas.series[6].setData(cnc, false, true);
chartvdbaas.series[7].setData(app, false, true);
chartvdbaas.series[8].setData(sio, false, true);
chartvdbaas.series[9].setData(uio, false, true);
chartvdbaas.series[10].setData(sch, false, true);
chartvdbaas.series[11].setData(cpu, false, true);
##问题如下:JS 调用返回
500 (Internal Server Error)
检查apatch 日志
[Wed Jun 03 16:45:21 2020] [error] [client 10.200.210.164] (8)Exec format error: exec of '/var/www/cgi-bin/json_ash_his.sh' failed, referer: http://10.200.210.187/doc/html/ash_his.html?q=12.2.101.168:db=1591175911040.517=1591176385967.8303
[Wed Jun 03 16:45:21 2020] [error] [client 10.200.210.164] Premature end of script headers: json_ash_his.sh, referer: http://10.200.210.187/doc/html/ash_his.html?q=12.2.101.168:db=1591175911040.517=1591176385967.8303
检查json_ash_his.sh
首行打错了@####
去掉即可
##6.2)对比正常的ash.html 返回的JSON 结果,发现返回值在120个
##比如如下:
##User_I/O
##:
##[[1591196880000, 0], [1591196939999, 0], [1591196940000, 0], [1591196999999, 0], [1591197000000, 0],…]
##[0 … 99]
###[100 … 119]
########20200604
1.感谢 一個頭像用四年 huzongnan/
JSON
JSON 轻量级的数据交换格式
JSON 用来表示对象和数组
// JSON 用来表示对象和数组
// 通过 JS 自带的 JSON.parse 可以把 JSON 格式的字符串,转化为对象
2).json 调试
感谢Nick_Spider
https://blog.csdn.net/weixin_39198406/article/details/84789515
效果就是下面这样子,开始还以为代码很复杂,实际上一句JSON.stringify(data, null, "\t")就解决了。
<body>
<textarea id="search_one_result" cols="50" rows="10" style="margin-top: 30px"></textarea>
</body>
$("#search_one_result").val(JSON.stringify(data, null, "\t"));
$("#search_one_result").val(JSON.stringify(data, null, 4));
2.1)ash_his.html
line 12 加入
<textarea id="search_one_result" cols="50" rows="10" style="margin-top: 30px"></textarea>
line 600 加入
$("#search_one_result").val(JSON.stringify(cpu, null, "\t"));
$("#search_one_result").val(JSON.stringify(cpu, null, 4));
line 650 加入
chartvdbaas.redraw(false);
#3)总算可以出来数据,但是有发现一个问题,返回的时间戳是现在的时间戳
#预期的时间是上午9点
#1591175911040.517
#1591176385967.8303
#返回的时间是下午当前5点的时间
#1591293120000
3)为了查看linux (最近7天)历史时间数据
再次
需要在hist.sh 图做一个转码,使得查看历史数据,可以进入对应的目录查询txt:详情请见如下:
date -d @Unix timestamp
date -d @1591175911
[root@yumserver 4]# date -d @1591175911
Wed Jun 3 17:18:31 CST 2020
计算方法:
实际时间2日 9点19分左右,需要做一个 减法处理 8*3600
expr 1591175911 - 8*3600
######20200605
1).
-》json_ash_his.sh
mark line 39 ~ 44 line
mark line 49
add line 83
$epoc = $beg_epoch/1000 - 8 * 60 * 60;
#print $epoc;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($epoc);
$curr_date=$wday;
#print "curr_date=$curr_date\n";
chomp($curr_date);
$MON_DATA=$MON_HOME . "/" . $curr_date;
print "MON_DATA=$MON_DATA\n";
chdir("$MON_DATA") or die "Can't chdir to $MON_DATA $!";
2)经过测试 ,收集脚本 sh cash.sh 连接数据库进程,属于长连接,也就是说 在数据库服务器端kill session 后,这个收集进程就不会再连接数据库。
对数据库没有影响。
但是在10.200.210.187 端,脚本还是一直会记录日志,一直报ORA- 报错,
所以还是在收集端,kill -9 cash.sh 进程才可以
3).ash_his.html
line 118 ~ 135 如下行,
selection: function(event) {
if (event.xAxis) {
beg_epoch=event.xAxis[0].min;
end_epoch=event.xAxis[0].max;
//getDetails ;
setTimeout(getDetails, 1);
//$debug.html('min='+ beg_epoch);
//$debug.html('max='+ end_epoch);
//$debug.html('min: '+ event.xAxis[0].min +', max: '+ event.xAxis[0].max);
$debug.html(' ');
$("#debug").append('min='+ beg_epoch);
$("#debug").append('max='+ end_epoch);
} else {
beg_epoch=0;
end_epoch=0;
$debug.html ('Selection reset');
setTimeout(getDetails, 1);
}
}
3.3).完成历史数据(7天内,超过7天的就会被覆盖,防止历史文件太大)收集工作,并在前台展示工作,
使用方法如下:
http://10.200.210.187/doc/html/ash_his.html?q=12.2.101.168:db=1591175911040.517=1591176385967.8303
=12.2.101.168:db is DB info
=1591175911040.517 is begin epoch
=1591176385967.8303 is end epoch
具体epoch 对应的时间,因为上面的是微妙。所以要除以1000的值,在使用如下网站解析,所以只能使用UTC 时区 解析该网站,UTC 网站解析的结果https://www.unixtimestamp.com/index.php
4).监控一个小库一天4M左右的数据量,保留7天。
5).
[root@yumserver old]# ls -ltr /var/www/html/doc/cash.sh
-rw-r--r-- 1 root root 22210 Jun 30 2017 /var/www/html/doc/cash.sh
[root@yumserver old]# ls -tlr /tmp/dba/wash/wash-master/cash.sh
-rwxrwxrwx 1 oracle11g oinstall 22210 May 30 10:42 /tmp/dba/wash/wash-master/cash.sh
chmod 777 /var/www/html/doc/cash.sh
6),.修改2处(/tmp/和 /var/wwww 目录)cash.sh line 148 ~149 如下:
#CONNECT="$UN/$PW@(DESCRIPTION= (ADDRESS_LIST= (ADDRESS= (PROTOCOL=TCP) (HOST=$HOST) (PORT=$PORT))) (CONNECT_DATA= (SERVER=DEDICATED) (SID=$SID)))"
CONNECT="$UN/$PW@(DESCRIPTION= (ADDRESS_LIST= (ADDRESS= (PROTOCOL=TCP) (HOST=$HOST) (PORT=$PORT))) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=$SID)))"
oracle 用户后台调用如下脚本开启 收集工作
sh cash.sh dbmgr db1234DBA 10.197.1.203 core 1528
前端收集
http://10.200.210.187/doc/html/ash.html?q=10.197.1.203:core
######
date -d @`expr 1591175911 - 28800`
date -d @`expr 1591175911 - 28800`
date +%w -d @`expr 1591175911 - 28800`
##感谢郭冬_DevOps。cuonglm,阿炯,Andomar
###http://www.freeoa.net/development/perl/perl-convert-unix-timestamp-to-datetime_2575.html
##感谢/www.w3cschool.cn
perl -le 'print scalar localtime 1591175911-28800;'
$epoc = time();
$epoc = $epoc - 24 * 60 * 60; # 一天前的时间秒数
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoc);
print "昨天时间和日期:";
printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec,,$wday);
print "\n";
###感谢sily-boy https://www.cnblogs.com/sily-boy/p/1270927.html
Highcharts 基本曲线图
###感谢 官方文档, 在线实例:https://api.highcharts.com.cn/highcharts
在线实例: 更新数据列数据,更新饼图数据
highchart 知识太多,所以开启出一个新版本的文本,highchart.txt 来看
https://jshare.com.cn/highcharts/hhhhf0
https://jshare.com.cn/highcharts/hOPfGA
###感谢 runoob
https://www.runoob.com/perl/perl-operators.html
## perl 定义二维数组
定义数组:
$bar->{$cur_epoch,$wait_class}++;
print "$end_epoch, $wait_class, $bar->{$end_epoch,$wait_class} \n"
##感谢highcharts.com.cn/#
tooltip
数据提示框指的当鼠标悬停在某点上时,以框的形式提示该点的数据,比如该点的值,数据单位等。数据提示框内提示的信息完全可以通过格式化函数动态指定;通过设置 tooltip.enabled = false 即可不启用提示框。
##感谢
https://www.jb51.net/article/33967.htm
mymymymymy
如果字符串结尾有换行符,chomp 可以去掉它。这基本上就是它能完成的所有功能,如下例:
$text = “a line of text/n”; #也可以由<STDIN>输入
chomp($text); #去掉换行符(/n)。
##感谢me
$a = 20;
$sql_id = 'aaaa';
$total++;
$topsql{$sql_id}++;
$sql->{$sql_id}++;
print "$a\n";
print "$total\n";
print "$sql_id\n";
print "$sql->{$sql_id}\n";
$a 定义变量
$topsql{$sql_id}++ 定义一个整数型变量
$sql->{$sql_id}++; 定义一个整数型变量
####感谢xiehuahere
谁知道perl编程里的s/^\s+//; 这个语句是什么意思?
^ 匹配行首(字抄符串开始位置)
\s 匹配任意的袭空白符,包括空格,制表符(Tab)等
+ 表示重复bai前一个字符至少1次(1次或多次)
s/A/B/ 结构将du正则A匹配到的内容替换为B。
所以,这里的意思大zhi致就是:去dao除行首的所有空白符。
##感谢 陈明超
用Math.max和Math.min方法可以迅速得到结果。apply能让一个方法指定调用对象与传入参数,并且传入参数是以数组形式组织的。恰恰现在有一个方法叫Math.max,调用对象为Math,与多个参数
Array.max = function( array ){
return Math.max.apply( Math, array );
};
Array.min = function( array ){
return Math.min.apply( Math, array );
};
-》