function str2Obj ( str ) {
var data = { } ;
kv = str . split ( '&' ) ;
for ( i in kv ) {
v = kv [ i ] . split ( '=' ) ;
data [ v [ 0 ] ] = v [ 1 ] ;
}
return data ;
}
function wsOriginPost ( method , version , args , callback ) {
var req _data = { } ;
req _data [ 'name' ] = 'webstats' ;
req _data [ 'func' ] = method ;
req _data [ 'version' ] = version ;
if ( typeof ( args ) == 'string' ) {
req _data [ 'args' ] = JSON . stringify ( str2Obj ( args ) ) ;
} else {
req _data [ 'args' ] = JSON . stringify ( args ) ;
}
$ . post ( '/plugins/run' , req _data , function ( data ) {
if ( ! data . status ) {
//错误展示10S
layer . msg ( data . msg , { icon : 0 , time : 2000 , shade : [ 10 , '#000' ] } ) ;
return ;
}
if ( typeof ( callback ) == 'function' ) {
callback ( data ) ;
}
} , 'json' ) ;
}
function wsPost ( method , version , args , callback ) {
var loadT = layer . msg ( '正在获取...' , { icon : 16 , time : 0 , shade : 0.3 } ) ;
wsOriginPost ( method , version , args , function ( data ) {
layer . close ( loadT ) ;
callback ( data ) ;
} ) ;
}
function wsPostCallbak ( method , version , args , callback ) {
var loadT = layer . msg ( '正在获取...' , { icon : 16 , time : 0 , shade : 0.3 } ) ;
var req _data = { } ;
req _data [ 'name' ] = 'webstats' ;
req _data [ 'func' ] = method ;
args [ 'version' ] = version ;
if ( typeof ( args ) == 'string' ) {
req _data [ 'args' ] = JSON . stringify ( str2Obj ( args ) ) ;
} else {
req _data [ 'args' ] = JSON . stringify ( args ) ;
}
$ . post ( '/plugins/callback' , req _data , function ( data ) {
layer . close ( loadT ) ;
if ( ! data . status ) {
layer . msg ( data . msg , { icon : 0 , time : 2000 , shade : [ 0.3 , '#000' ] } ) ;
return ;
}
if ( typeof ( callback ) == 'function' ) {
callback ( data ) ;
}
} , 'json' ) ;
}
function toSecond ( val ) {
if ( val >= 1000 ) {
val = ( val / 1000 ) . toFixed ( ) + "s" ;
return val ;
}
return val + "ms" ;
}
function makeHoursData ( data , type = "ip" ) {
var list = [ ] ;
var rlist = [ ] ;
for ( var i = 0 ; i < 24 ; i ++ ) {
if ( i < 10 ) {
list . push ( "0" + i )
} else {
list . push ( i + "" )
}
rlist . push ( i + "" )
}
var rdata = { } ;
rdata [ 'key' ] = rlist ;
var tmpdata = { } ;
for ( var i = 0 ; i < data . length ; i ++ ) {
var tk = data [ i ] [ 'time' ] ;
var v = data [ i ] ;
if ( type == 'length' ) {
v [ 'length' ] = ( v [ 'length' ] / 1024 ) . toFixed ( ) ;
}
tmpdata [ tk ] = v ;
}
var val = [ ] ;
for ( var i = 0 ; i < list . length ; i ++ ) {
var tk = list [ i ] ;
if ( tmpdata [ tk ] ) {
val . push ( tmpdata [ tk ] [ type ] ) ;
} else {
val . push ( 0 ) ;
}
}
rdata [ 'value' ] = val ;
// console.log(rdata);
return rdata
}
function makeDayData ( data , type = "ip" ) {
var rdata = { } ;
var rdata _key = [ ] ;
var rdata _val = [ ] ;
for ( var i = 0 ; i < data . length ; i ++ ) {
var tk = data [ i ] [ 'time' ] ;
rdata _key . push ( tk ) ;
var v = data [ i ] [ type ] ;
if ( type == 'length' ) {
v = ( v / 1024 ) . toFixed ( ) ;
}
rdata _val . push ( v )
}
rdata [ 'key' ] = rdata _key ;
rdata [ 'value' ] = rdata _val ;
return rdata
}
function getTime ( ) {
var now = new Date ( ) ;
var hour = now . getHours ( ) ;
var minute = now . getMinutes ( ) ;
var second = now . getSeconds ( ) ;
if ( minute < 10 ) {
minute = "0" + minute ;
}
if ( second < 10 ) {
second = "0" + second ;
}
var nowdate = hour + ":" + minute + ":" + second ;
return nowdate ;
}
var ovTimer = null ;
function wsOverviewRequest ( page ) {
clearInterval ( ovTimer ) ;
var args = { } ;
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
var query _date = 'today' ;
if ( $ ( '#time_choose' ) . attr ( "data-name" ) != '' ) {
query _date = $ ( '#time_choose' ) . attr ( "data-name" ) ;
} else {
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
}
args [ 'query_date' ] = query _date ;
args [ 'order' ] = $ ( '#time_order button.cur' ) . attr ( 'data-name' ) ;
var select _option = $ ( '.indicators-container input:checked' ) . parent ( ) . attr ( 'data-name' ) ;
console . log ( $ ( '.indicators-container input:checked' ) . parent ( ) . find ( 'span' ) . text ( ) ) ;
// console.log(select_option);
wsPost ( 'get_overview_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data . data ;
var statData = rdata . data . stat _list ;
console . log ( statData , data ) ;
var stat _pv = statData [ 'pv' ] == null ? 0 : statData [ 'pv' ] ;
var stat _uv = statData [ 'uv' ] == null ? 0 : statData [ 'uv' ] ;
var stat _ip = statData [ 'ip' ] == null ? 0 : statData [ 'ip' ] ;
var stat _length = statData [ 'length' ] == null ? 0 : statData [ 'length' ] ;
var stat _req = statData [ 'req' ] == null ? 0 : statData [ 'req' ] ;
$ ( '.overview_list .overview_box:eq(0) .ov_num' ) . text ( stat _pv ) ;
$ ( '.overview_list .overview_box:eq(1) .ov_num' ) . text ( stat _uv ) ;
$ ( '.overview_list .overview_box:eq(2) .ov_num' ) . text ( stat _ip ) ;
$ ( '.overview_list .overview_box:eq(3) .ov_num' ) . text ( toSize ( stat _length ) ) ;
$ ( '.overview_list .overview_box:eq(4) .ov_num' ) . text ( stat _req ) ;
var list = [ ] ;
for ( var i = 0 ; i < data . length ; i ++ ) {
list . push ( data [ i ] [ select _option ] ) ;
}
// console.log("list",list);
var chat = { } ;
var is _compare = false ;
var tmpChatData = {
"key" : [ ] ,
"value" : [ ]
}
if ( select _option == 'realtime_traffic' || select _option == 'realtime_request' ) {
} else {
if ( args [ 'order' ] == 'hour' ) {
tmpChatData = makeHoursData ( data , select _option ) ;
} else {
tmpChatData = makeDayData ( data , select _option ) ;
}
}
chat [ 'yAxis' ] = [ {
type : 'value' ,
splitNumber : 5 ,
axisLabel : {
textStyle : {
color : '#a8aab0' ,
fontStyle : 'normal' ,
fontFamily : '微软雅黑' ,
fontSize : 12 ,
} ,
} ,
axisLine : {
show : false
} ,
axisTick : {
show : false
} ,
splitLine : {
show : true ,
lineStyle : {
color : '#E5E9ED'
}
}
} ] ;
chat [ 'tooltip' ] = {
show : true ,
trigger : 'axis' ,
backgroundColor : 'rgba(255,255,255,0.8)' ,
axisPointer : { // 坐标轴指示器,坐标轴触发有效
type : 'line' , // 默认为直线,可选为:'line' | 'shadow'
lineStyle : {
color : 'rgba(150,150,150,0.2)'
}
} ,
textStyle : {
color : '#666' ,
fontSize : '14px' ,
} ,
extraCssText : 'width:220px;height:' + ( is _compare ? '30%' : '22%' ) + ';padding:0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);"' ,
formatter : function ( params ) {
var htmlStr = "" ;
for ( var i = 0 ; i < params . length ; i ++ ) {
var tem = params [ i ] . name ;
var val = params [ i ] . value ;
if ( args [ 'order' ] == 'hour' ) {
if ( tem . indexOf ( '/' ) < 0 ) {
tem > 9 ? tem = tem + ":00 - " + tem + ":59" : tem = "0" + tem + ":00 - " +
"0" + tem + ":59" ;
}
val > 0 ? val = val : val = '--'
}
htmlStr +=
'<div style="height:26px;line-height:26px;overflow:hidden;padding:6px 8px;">' +
'<span style="float:left;max-width:160px;overflow:hidden;text-overflow: ellipsis;white-space: nowrap;">' +
'<span style="margin-right:5px;display:inline-block;width:10px;height:10px;border-radius:5px;background-color:' +
params [ i ] . color + ';"></span>' + params [ i ] . seriesName + '</span>' +
'<span style="float:right">' + val + '</span>' + '</div>'
}
var res = '<div><div style="height:40px;line-height:40px;padding:0 8px;background:rgba(237,233,233,0.4)">' +
tem + '<span style="float:right;">' + ( is _compare ? trend _name : '' ) +
'</span>' + htmlStr + '</div></div>'
return res ;
}
}
var legendName = $ ( '.indicators-container input:checked' ) . parent ( ) . find ( 'span' ) . text ( )
chat [ 'legendData' ] = [ legendName ] ;
var statEc = echarts . init ( document . getElementById ( 'total_num_echart' ) ) ;
var option = {
tooltip : chat [ 'tooltip' ] ,
backgroundColor : '#fff' ,
legend : {
data : chat [ 'legendData' ] ,
left : 'center' ,
top : '94%' ,
} ,
grid : {
bottom : '9%' ,
containLabel : true ,
x : 20 ,
y : 20 ,
x2 : 20 ,
y2 : 20
} ,
xAxis : {
type : 'category' ,
boundaryGap : false ,
boundaryGap : false ,
axisTick : {
alignWithLabel : true
} ,
data : tmpChatData [ "key" ] ,
} ,
yAxis : chat [ 'yAxis' ] ,
graphic : [ {
type : 'group' ,
right : 330 ,
top : 0 ,
z : 100 ,
children : [ {
type : 'text' ,
left : 'center' ,
top : 'center' ,
z : 100 ,
style : {
fill : '#ccc' ,
text : args [ 'site' ] ,
font : '16px Arial'
}
} ]
} ] ,
series : [
{
name : legendName ,
data : tmpChatData [ "value" ] ,
type : 'line' ,
smooth : true ,
itemStyle : {
normal : {
color : '#3A84FF' ,
lineStyle : {
color : "#3A84FF" ,
width : 1 ,
} ,
areaStyle : {
color : new echarts . graphic . LinearGradient ( 0 , 1 , 0 , 0 , [ {
offset : 0 ,
color : 'rgba(58,132,255,0)'
} , {
offset : 1 ,
color : 'rgba(58,132,255,0.35)'
} ] ) ,
}
}
} ,
areaStyle : { }
}
]
} ;
statEc . setOption ( option ) ;
if ( select _option == 'realtime_traffic' || select _option == 'realtime_request' ) {
var xData = [ ] ;
var yData = [ ] ;
ovTimer = setInterval ( function ( ) {
var select _option = $ ( '.indicators-container input:checked' ) . parent ( ) . attr ( 'data-name' ) ;
if ( select _option != "realtime_traffic" && select _option != 'realtime_request' ) {
clearInterval ( ovTimer ) ;
console . log ( "get_logs_realtime_info over:" + select _option ) ;
return ;
}
wsOriginPost ( "get_logs_realtime_info" , '' , { "site" : args [ "site" ] , "type" : select _option } , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var realtime _traffic = rdata . data [ 'realtime_traffic' ] ;
var realtime _request = rdata . data [ 'realtime_request' ] ;
realtime _traffic _calc = toSize ( realtime _traffic ) ;
$ ( '.overview_list .overview_box:eq(5) .ov_num' ) . text ( realtime _traffic _calc ) ;
$ ( '.overview_list .overview_box:eq(6) .ov_num' ) . text ( realtime _request ) ;
var realtime _name = select _option == 'realtime_traffic' ? '实时流量' : '每秒请求' ;
var val = realtime _request ;
if ( select _option == 'realtime_traffic' ) {
val = realtime _traffic _calc . split ( ' ' ) [ 0 ] ;
realtime _name = realtime _traffic _calc ;
}
xData . push ( getTime ( ) ) ;
yData . push ( val ) ;
if ( xData . length > 20 ) {
xData . shift ( ) ;
yData . shift ( ) ;
}
statEc . setOption ( {
xAxis : {
data : xData
} ,
series : [ {
name : realtime _name ,
data : yData
} ]
} ) ;
} ) ;
} , 2000 ) ;
}
} ) ;
}
function wsOverview ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:300px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< span class = "last-span" > < input data - name = "" type = "text" id = "time_choose" lay - key = "1000001_'+randstr+'" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "自定义时间" style = "display: inline-block;font-size: 12px;padding: 0 10px;height:30px;width: 155px;" > < / s p a n > \
< / d i v > \
< span style = "margin-left:10px" > 时段 : < / s p a n > \
< div class = "input-group" style = "width:100px;margin-left:10px;display: inline-table;vertical-align: top;" > \
< div id = "time_order" class = "input-group-btn btn-group-sm" > \
< button data - name = "hour" type = "button" class = "btn btn-default" > 按时 < / b u t t o n > \
< button data - name = "day" type = "button" class = "btn btn-default" > 按天 < / b u t t o n > \
< / d i v > \
< / d i v > \
< div class = "input-group" style = "width:30px;margin-left:10px;display: inline-table;vertical-align: top;" > \
< div class = "input-group-btn btn-group-sm" > \
< button id = "ov_refresh" data - name = "refresh" type = "button" class = "btn btn-default" > 刷新 < / b u t t o n > \
< / d i v > \
< / d i v > \
< / d i v > \
<!-- stat -- - > \
< div class = "overview_list" style = "padding-top:10px;" > \
< div class = "overview_box" > \
< p class = "ov_title" > 浏览量 ( PV ) < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "用户每次打开网站页面被记录1次。用户多次打开同一页面,访问量值累计多次。此指标衡量网站访问量情况。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box" > \
< p class = "ov_title" > 访客量 ( UV ) < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "访问您网站的上网电脑数量(以cookie为依据),此指标衡量独立访客数量情况。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box" > \
< p class = "ov_title" > IP数 < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "当前时间段内您网站的独立访问ip数。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box" > \
< p class = "ov_title" > 流量 < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "当前时间段内您网站的总响应流量大小。包括已排除的请求。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box" > \
< p class = "ov_title" > 请求 < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "当前时间段内您网站的总请求数量。包括已排除的请求。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box" > \
< p class = "ov_title" > 实时流量 < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "当前10秒内您网站的实时流量大小。包括已排除的请求。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box" > \
< p class = "ov_title" > 每秒请求 < i class = "tips" data - toggle = "tooltip" data - placement = "top" title = "当前10秒内您网站的实时请求数量。包括已排除的请求。" > ? < / i > < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< / d i v > \
< div class = "indicators" > \
< div class = "indicators-container" > \
< span > 趋势指标 : < / s p a n > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "pv" > \
< input type = "radio" id = "check_pv" name = "check_pv" checked = "" > \
< span class = "check_pv" style = "font-weight:normal" > 浏览量 ( PV ) < / s p a n > \
< / d i v > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "uv" > \
< input type = "radio" id = "check_uv" name = "check_uv" > \
< span class = "check_uv" style = "font-weight:normal" > 访客量 ( UV ) < / s p a n > \
< / d i v > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "ip" > \
< input type = "radio" id = "check_ip" name = "check_ip" > \
< span class = "check_ip" style = "font-weight:normal" > IP数 < / s p a n > \
< / d i v > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "length" > \
< input type = "radio" id = "check_length" name = "check_length" > \
< span class = "check_length" style = "font-weight:normal" > 流量 ( KB ) < / s p a n > \
< / d i v > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "req" > \
< input type = "radio" id = "check_req" name = "check_req" > \
< span class = "check_req" style = "font-weight:normal" > 请求 < / s p a n > \
< / d i v > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "realtime_traffic" > \
< input type = "radio" id = "check_realtime_traffic" name = "check_realtime_traffic" > \
< span class = "check_realtime_traffic" style = "font-weight:normal" > 实时流量 < / s p a n > \
< / d i v > \
< div class = "indicators-label" bt - event - click = "indicatorsType" data - name = "realtime_request" > \
< input type = "radio" id = "check_realtime_request" name = "check_realtime_request" > \
< span class = "check_realtime_request" style = "font-weight:normal" > 每秒请求 < / s p a n > \
< / d i v > \
< / d i v > \
< / d i v > \
< div class = "total_num_echart" id = "total_num_echart" style = "height:330px;" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
$ ( '[data-toggle="tooltip"]' ) . tooltip ( ) ;
//日期范围
laydate . render ( {
elem : '#time_choose' ,
value : '' ,
range : true ,
done : function ( value , startDate , endDate ) {
if ( ! value ) {
return false ;
}
$ ( '#search_time button' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'cur' ) ;
} ) ;
var timeA = value . split ( '-' )
var start = $ . trim ( timeA [ 0 ] + '-' + timeA [ 1 ] + '-' + timeA [ 2 ] )
var end = $ . trim ( timeA [ 3 ] + '-' + timeA [ 4 ] + '-' + timeA [ 5 ] )
query _txt = toUnixTime ( start + " 00:00:00" ) + "-" + toUnixTime ( end + " 00:00:00" )
$ ( '#time_choose' ) . attr ( "data-name" , query _txt ) ;
$ ( '#time_choose' ) . addClass ( "cur" ) ;
wsOverviewRequest ( 1 ) ;
} ,
} ) ;
$ ( '#ov_refresh' ) . click ( function ( ) {
wsOverviewRequest ( 1 ) ;
} ) ;
$ ( '#time_order button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#time_order button' ) . click ( function ( ) {
$ ( '#time_order button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsOverviewRequest ( 1 ) ;
} ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsOverviewRequest ( 1 ) ;
} ) ;
$ ( '.indicators-container input' ) . click ( function ( ) {
$ ( '.indicators-container input' ) . each ( function ( ) {
$ ( this ) . removeAttr ( 'checked' ) ;
} ) ;
$ ( this ) . prop ( { 'checked' : true } ) ;
wsOverviewRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsOverviewRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsOverviewRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsSitesListRequest ( page ) {
var args = { } ;
var query _date = 'today' ;
if ( $ ( '#time_choose' ) . attr ( "data-name" ) != '' ) {
query _date = $ ( '#time_choose' ) . attr ( "data-name" ) ;
} else {
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
}
args [ 'query_date' ] = query _date ;
wsPost ( 'get_site_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var data = rdata . data ;
var stat _pv = 0 ;
var stat _uv = 0 ;
var stat _ip = 0 ;
var stat _length = 0 ;
var stat _req = 0 ;
console . log ( rdata , data ) ;
var list = '' ;
if ( data . length > 0 ) {
for ( i in data ) {
var tmp _pv = 0 ;
var tmp _uv = 0 ;
var tmp _ip = 0 ;
var tmp _length = 0 ;
var tmp _req = 0 ;
if ( data [ i ] [ 'pv' ] != null ) {
tmp _pv = data [ i ] [ 'pv' ] ;
stat _pv += data [ i ] [ 'pv' ] ;
}
if ( data [ i ] [ 'uv' ] != null ) {
tmp _uv = data [ i ] [ 'uv' ] ;
stat _uv += data [ i ] [ 'uv' ] ;
}
if ( data [ i ] [ 'ip' ] != null ) {
tmp _ip = data [ i ] [ 'ip' ] ;
stat _ip += data [ i ] [ 'ip' ] ;
}
if ( data [ i ] [ 'length' ] != null ) {
tmp _length = data [ i ] [ 'length' ] ;
stat _length += data [ i ] [ 'length' ] ;
}
if ( data [ i ] [ 'req' ] != null ) {
tmp _req = data [ i ] [ 'req' ] ;
stat _req += data [ i ] [ 'req' ] ;
}
list += '<tr>' ;
list += '<td>' + data [ i ] [ 'site' ] + '</td>' ;
list += '<td>' + tmp _pv + '</td>' ;
list += '<td>' + tmp _uv + '</td>' ;
list += '<td>' + tmp _ip + '</td>' ;
list += '<td>' + tmp _req + '</td>' ;
list += '<td>' + toSize ( tmp _length ) + '</td>' ;
list += '<td><a data-id="' + i + '" href="javascript:;" class="btlink web_set" title="设置">设置</a></td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="14" style="text-align:center;">网站列表为空</td></tr>' ;
}
$ ( '.overview_list .overview_box:eq(0) .ov_num' ) . text ( stat _pv ) ;
$ ( '.overview_list .overview_box:eq(1) .ov_num' ) . text ( stat _uv ) ;
$ ( '.overview_list .overview_box:eq(2) .ov_num' ) . text ( stat _ip ) ;
$ ( '.overview_list .overview_box:eq(3) .ov_num' ) . text ( toSize ( stat _length ) ) ;
$ ( '.overview_list .overview_box:eq(4) .ov_num' ) . text ( stat _req ) ;
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 网站 < / t h > \
< th > 流览量 < / t h > \
< th > 访客数 < / t h > \
< th > IP数 < / t h > \
< th > 请求数 < / t h > \
< th > 总流量 < / t h > \
< th > 操作 < / t h > \ < / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
$ ( ".tablescroll .web_set" ) . click ( function ( ) {
var index = $ ( this ) . attr ( 'data-id' ) ;
var domain = data [ index ] [ "site" ] ;
wsPost ( 'get_site_conf' , '' , { "site" : domain } , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
console . log ( rdata ) ;
layer . open ( {
type : 1 ,
title : "【" + domain + "】监控配置" ,
btn : [ '保存' , '取消' ] ,
area : [ '600px' , "380px" ] ,
closeBtn : 1 ,
shadeClose : false ,
content : ' < div id = "site_conf" class = "pd15 lib-box ws_setting" > \
< div class = "ws_content" style = "width:570px;" > \
< div class = "tab-nav" > \
< span data - type = "cdn_headers" class = "on" > CDN headers < / s p a n > \
< span data - type = "exclude_extension" > 排除扩展 < / s p a n > \
< span data - type = "exclude_status" > 排除响应状态 < / s p a n > \
< span data - type = "exclude_url" > 排除路径 < / s p a n > \
< span data - type = "exclude_ip" > 排除IP < / s p a n > \
< span data - type = "record_post_args" > 记录请求原文 < / s p a n > \
< / d i v > \
< div class = "tab-con" > \
< span class = "ws_tips" > * 准确识别CDN网络IP地址 , 请注意大小写 , 如需多个请换行填写 < / s p a n > \
< textarea name = "setting-cdn" cols = "52" rows = "8" > < / t e x t a r e a > \
< / d i v > \
< / d i v > \
< / d i v > ' ,
success : function ( ) {
var common _tpl _tips = '<span class="ws_tips">* 准确识别CDN网络IP地址,请注意大小写,如需多个请换行填写</span>' ;
var common _tpl _area = '<textarea name="setting-cdn" cols="52" rows="8"></textarea>' ;
$ ( '#site_conf .tab-con textarea' ) . text ( rdata [ 'cdn_headers' ] . join ( '\n' ) ) ;
$ ( '#site_conf .tab-nav span' ) . click ( function ( e ) {
$ ( '#site_conf .tab-nav span' ) . removeClass ( 'on' ) ;
$ ( this ) . addClass ( 'on' ) ;
$ ( '#site_conf .tab-con' ) . html ( '' ) ;
var typename = $ ( this ) . attr ( 'data-type' ) ;
if ( typename == 'cdn_headers' ) {
var content = $ ( common _tpl _tips ) . html ( '* 准确识别CDN网络IP地址,请注意大小写,如需多个请换行填写' ) . prop ( 'outerHTML' ) ;
var area = $ ( common _tpl _area ) . html ( rdata [ 'cdn_headers' ] . join ( '\n' ) ) . prop ( 'outerHTML' ) ;
content += area ;
$ ( '#site_conf .tab-con' ) . html ( content ) ;
} else if ( typename == 'exclude_extension' ) {
var content = $ ( common _tpl _tips ) . html ( '* 排除的请求不写入网站日志,不统计PV、UV、IP,只累计总请求、总流量数,如需多个请换行填写' ) . prop ( 'outerHTML' ) ;
var area = $ ( common _tpl _area ) . html ( rdata [ 'exclude_extension' ] . join ( '\n' ) ) . prop ( 'outerHTML' ) ;
content += area ;
$ ( '#site_conf .tab-con' ) . html ( content ) ;
} else if ( typename == 'exclude_status' ) {
var content = $ ( common _tpl _tips ) . html ( '* 排除的请求不写入网站日志,不统计PV、UV、IP,只累计总请求、总流量数,如需多个请换行填写' ) . prop ( 'outerHTML' ) ;
var area = $ ( common _tpl _area ) . html ( rdata [ 'exclude_status' ] . join ( '\n' ) ) . prop ( 'outerHTML' ) ;
content += area ;
$ ( '#site_conf .tab-con' ) . html ( content ) ;
} else if ( typename == 'exclude_ip' ) {
var txt = ' < div > * 排除的IP不写入网站日志 , 不统计PV 、 UV 、 IP , 只累计总请求 、 总流量数 , 如需多个请换行填写 < / d i v > \
< div style = "margin-left: -10px" > * 支持 192.168 . 1.1 - 192.168 . 1.10 格式排除区间IP < / d i v > '
var content = $ ( common _tpl _tips ) . html ( txt ) . prop ( 'outerHTML' ) ;
var area = $ ( common _tpl _area ) . html ( rdata [ 'exclude_ip' ] . join ( '\n' ) ) . prop ( 'outerHTML' ) ;
content += area ;
$ ( '#site_conf .tab-con' ) . html ( content ) ;
} else if ( typename == 'record_post_args' ) {
var txt = ' < div > 记录请求原文说明 : HTTP请求原文包括客户端请求详细参数 , 有助于分析或排查异常请求 ; < / d i v > \
< div style = "margin-left: -10px" > 考虑到HTTP请求原文会 < span style = "color:red;" > 占用额外存储空间 < / s p a n > , 默 认 仅 记 录 5 0 0 错 误 请 求 原 文 。 < / d i v > '
var content = $ ( common _tpl _tips ) . html ( txt ) . prop ( 'outerHTML' ) ;
var record _post _args = '' ;
if ( rdata [ 'record_post_args' ] ) {
record _post _args = 'checked' ;
}
var record _get _403 _args = '' ;
if ( rdata [ 'record_get_403_args' ] ) {
record _get _403 _args = 'checked' ;
}
var check = ' < div class = "checkbox" style = "margin: 20px 0 0 -10px;" > \
< label style = "cursor: pointer;margin-right:15px;" > \
< input type = "checkbox" name = "record_post_args" style = "margin: 1px 10 0;" '+record_post_args+' > 记录POST请求原文 \
< / l a b e l > \
< label style = "cursor: pointer;" > \
< input type = "checkbox" name = "record_get_403_args" style = "margin: 1px 10 0;" '+record_get_403_args+' > < span > 记录403错误请求原文 < / s p a n > \
< / l a b e l > \
< / d i v > ' ;
content += check ;
$ ( '#site_conf .tab-con' ) . html ( content ) ;
} else if ( typename == 'exclude_url' ) {
var txt = '* 排除的请求不写入网站日志,不统计PV、UV、IP,只累计总请求、总流量数'
var content = $ ( common _tpl _tips ) . html ( txt ) . prop ( 'outerHTML' ) ;
var _text = '' ;
var _tmp = rdata [ 'exclude_url' ] ;
for ( var i = 0 ; i < 10 ; i ++ ) {
if ( typeof _tmp [ i ] == 'undefined' ) {
_tmp [ i ] = { mode : 'regular' , url : '' }
}
_text += ' < tr > \
< td > \
< select name = "url_type_'+i+'" > \
< option value = "normal" '+(_tmp[i].mode == ' normal '?' selected ':' ')+' > 完整匹配 < / o p t i o n > \
< option value = "regular" '+(_tmp[i].mode == ' regular '?' selected ':' ')+' > 模糊匹配 < / o p t i o n > \
< / s e l e c t > \
< / t d > \
< td > < input name = "url_val_'+i+'" style = "width:290px" placeholder = "'+(_tmp[i].mode == 'normal'?'例:需排除a.com/test.html请求,请填写 test.html':'包含此内容的URL请求将不会被统计,请谨慎填写')+'" type = "text" value = "'+_tmp[i].url+'" > < / t d > \
< / t r > ' ;
}
var list = ' < div class = "divtable mt10 setting-exclude-url" style = "margin-left: -10px;height: 100px;width:100%;" > \
< table class = "table table-hover" > \
< thead > \
< tr > < th width = "96" > 排除方式 < / t h > < t h > 排 除 路 径 < / t h > < / t r > \
< / t h e a d > \
< tbody > '+_text+' < / t b o d y > \
< / t a b l e > \
< / d i v > ' ;
content += list ;
$ ( '#site_conf .tab-con' ) . html ( content ) ;
}
} ) ;
} ,
yes : function ( ) {
var select _pos = 0 ;
$ ( '#site_conf .tab-nav span' ) . each ( function ( i ) {
if ( $ ( this ) . hasClass ( 'on' ) ) { select _pos = i ; }
} ) ;
var args = { "site" : domain } ;
if ( [ 0 , 1 , 2 , 4 ] . indexOf ( select _pos ) > - 1 ) {
var setting _cdn = $ ( 'textarea[name="setting-cdn"]' ) . val ( ) ;
// var list = setting_cdn.split('\n')
if ( select _pos == 0 ) {
args [ 'cdn_headers' ] = setting _cdn ;
} else if ( select _pos == 1 ) {
args [ 'exclude_extension' ] = setting _cdn ;
} else if ( select _pos == 2 ) {
args [ 'exclude_status' ] = setting _cdn ;
} else if ( select _pos == 4 ) {
args [ 'exclude_ip' ] = setting _cdn ;
}
wsPost ( 'set_site_conf' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
} ) ;
}
if ( select _pos == 3 ) {
var list = "" ;
for ( var i = 0 ; i < 10 ; i ++ ) {
var tmp = "" ;
var url _type = $ ( 'select[name="url_type_' + i + '"]' ) . val ( ) ;
var url _val = $ ( 'input[name="url_val_' + i + '"]' ) . val ( ) ;
if ( url _val != "" ) {
list += url _type + '|' + url _val + ';' ;
}
}
args [ 'exclude_url' ] = list ;
wsPost ( 'set_site_conf' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
} ) ;
}
if ( select _pos == 5 ) {
var record _post _args = $ ( 'input[name="record_post_args"]' ) . prop ( 'checked' ) ;
var record _get _403 _args = $ ( 'input[name="record_get_403_args"]' ) . prop ( 'checked' ) ;
args [ "record_post_args" ] = record _post _args ;
args [ 'record_get_403_args' ] = record _get _403 _args ;
wsPost ( 'set_site_conf' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
} ) ;
}
} ,
} ) ;
} ) ;
} ) ;
} ) ;
}
function wsSitesList ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< div class = "input-group" style = "width:300px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< span class = "last-span" > < input data - name = "" type = "text" id = "time_choose" lay - key = "1000001_'+randstr+'" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "自定义时间" style = "display: inline-block;font-size: 12px;padding: 0 10px;height:30px;width: 155px;" > < / s p a n > \
< / d i v > \
< / d i v > \
<!-- stat -- - > \
< div class = "overview_list" style = "padding-top:10px;" > \
< div class = "overview_box w_p20" > \
< p class = "ov_title" > 总浏览量 ( PV ) < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box w_p20" > \
< p class = "ov_title" > 总访客量 ( UV ) < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box w_p20" > \
< p class = "ov_title" > 总IP数 < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box w_p20" > \
< p class = "ov_title" > 总流量 < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< div class = "overview_box w_p20" > \
< p class = "ov_title" > 总请求 < / p > \
< p class = "ov_num" > 0 < / p > \
< / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
$ ( '[data-toggle="tooltip"]' ) . tooltip ( ) ;
//日期范围
laydate . render ( {
elem : '#time_choose' ,
value : '' ,
range : true ,
done : function ( value , startDate , endDate ) {
if ( ! value ) {
return false ;
}
$ ( '#search_time button' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'cur' ) ;
} ) ;
var timeA = value . split ( '-' )
var start = $ . trim ( timeA [ 0 ] + '-' + timeA [ 1 ] + '-' + timeA [ 2 ] )
var end = $ . trim ( timeA [ 3 ] + '-' + timeA [ 4 ] + '-' + timeA [ 5 ] )
query _txt = toUnixTime ( start + " 00:00:00" ) + "-" + toUnixTime ( end + " 00:00:00" )
$ ( '#time_choose' ) . attr ( "data-name" , query _txt ) ;
$ ( '#time_choose' ) . addClass ( "cur" ) ;
wsSitesListRequest ( 1 ) ;
} ,
} ) ;
$ ( '#time_order button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#time_order button' ) . click ( function ( ) {
$ ( '#time_order button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsSitesListRequest ( 1 ) ;
} ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsSitesListRequest ( 1 ) ;
} ) ;
wsSitesListRequest ( 1 ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsSpiderStatLogRequest ( page ) {
var args = { } ;
args [ 'page' ] = page ;
args [ 'page_size' ] = 10 ;
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
args [ 'status_code' ] = $ ( 'select[name="status_code"]' ) . val ( ) ;
var query _date = 'today' ;
if ( $ ( '#time_choose' ) . attr ( "data-name" ) != '' ) {
query _date = $ ( '#time_choose' ) . attr ( "data-name" ) ;
} else {
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
}
args [ 'query_date' ] = query _date ;
args [ 'tojs' ] = 'wsSpiderStatLogRequest' ;
wsPost ( 'get_spider_stat_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data . data ;
if ( data . length > 0 ) {
for ( i in data ) {
list += '<tr>' ;
list += '<td>' + data [ i ] [ 'time' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'baidu' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'bing' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'qh360' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'google' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'bytes' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'sogou' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'soso' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'youdao' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'youdao' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'dnspod' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'yandex' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'other' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'other' ] + '</td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="14" style="text-align:center;">蜘蛛列表为空</td></tr>' ;
}
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 日期 < / t h > \
< th > 百度 < / t h > \
< th > 必应 < / t h > \
< th > 奇虎360 < / t h > \
< th > Google < / t h > \
< th > 头条 < / t h > \
< th > 搜狗 < / t h > \
< th > 搜搜 < / t h > \
< th > 神马 < / t h > \
< th > 有道 < / t h > \
< th > DNSPOD < / t h > \
< th > Yandex < / t h > \
< th > 其他 < span class = "tips" data - toggle = "tooltip" data - placement = "bottom" title = "包括Yahoo,DuckDuckGo" > ? < / s p a n > < / t h > \
< th > 操作 < / t h > \ < / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
$ ( '#wsPage' ) . html ( rdata . data . page ) ;
$ ( '[data-toggle="tooltip"]' ) . tooltip ( ) ;
var sumData = rdata . data . sum _data ;
var percent = ( ( sumData . spider / sumData . reqest _total ) * 100 ) . toFixed ( ) ;
$ ( '#spider_left_total .request_spider' ) . text ( sumData . spider + "(" + percent + "%)" ) ;
$ ( '#spider_left_total .request_total' ) . text ( sumData . reqest _total ) ;
// 图形化
var initData = rdata . data . stat _list ;
var colorList = [ '#6ec71e' , '#4885FF' ] ;
var source _name = { baidu : '百度' , google : 'Google' , bytes : '头条' , soso : '搜搜' , bing : '必应' , qh360 : '奇虎360' , youdao : '有道' , yandex : 'Yandex' , dnspod : 'DNSPOD' , mpcrawler : 'mpcrawler' , other : '其他' , } ;
var lenend2 _obj = { } ;
var rightEc = echarts . init ( document . getElementById ( 'echart_right_total' ) ) ;
var xAxixName = $ ( '#search_time button.cur' ) . text ( ) ;
var is _compare = false ;
var lenend = [ ] ;
var serData = [ ] ;
for ( var i = 0 ; i < initData . length ; i ++ ) {
for ( var j in initData [ i ] ) {
source _name [ j ] = source _name [ j ] ? source _name [ j ] : j
lenend . push ( source _name [ j ] )
serData . push ( {
name : source _name [ j ] ,
type : 'bar' ,
label : {
normal : {
show : true ,
position : 'top' ,
formatter : function ( params ) {
return params . data ;
}
}
} ,
barMaxWidth : 60 ,
data : [ initData [ i ] [ j ] ? initData [ i ] [ j ] : 0 ]
} )
}
}
for ( var i = 0 ; i < lenend . length ; i ++ ) {
if ( i > ( is _compare ? 2 : 4 ) ) {
lenend2 _obj [ lenend [ i ] ] = false ;
} else {
lenend2 _obj [ lenend [ i ] ] = true ;
}
}
var rightOption = {
backgroundColor : '#fff' ,
tooltip : {
trigger : 'axis' ,
axisPointer : {
type : 'shadow' ,
textStyle : {
color : '#fff' ,
fontSize : '26'
} ,
}
} ,
legend : {
top : '0%' ,
data : lenend ,
selected : lenend2 _obj ,
textStyle : {
fontSize : 12 ,
color : '#808080'
} ,
icon : 'rect'
} ,
grid : {
top : 60 ,
left : 60 ,
right : 0 ,
bottom : 50
} ,
xAxis : [ {
type : 'category' ,
axisLabel : {
color : '#4D4D4D' ,
fontSize : 14 ,
fontWeight : 'bold'
} ,
data : [ xAxixName ] ,
} ] ,
color : [ '#4fa8f9' , '#6ec71e' , '#f56e6a' , '#fc8b40' , '#818af8' , '#31c9d7' , '#f35e7a' , '#ab7aee' ,
'#14d68b' , '#cde5ff' ] ,
yAxis : [ {
type : 'value' ,
axisLine : {
show : false ,
} ,
axisTick : {
show : false
} ,
splitNumber : 4 , //y轴分割线数量
axisLabel : {
color : '#8C8C8C'
} ,
splitLine : {
lineStyle : {
type : 'dashed'
}
}
} ] ,
series : serData
}
rightEc . setOption ( rightOption ) ;
var oop = lenend . slice ( 0 , ( is _compare ? 3 : 5 ) ) ;
rightEc . on ( 'legendselectchanged' , function ( params ) {
var legend _option = this . getOption ( ) , newAxisName = [ ] ;
$ . each ( legend _option [ 'xAxis' ] [ 0 ] [ 'data' ] , function ( index , item ) {
newAxisName . push ( item . replace ( /\([^\)]*\)/g , "" ) )
} )
legend _option [ 'xAxis' ] [ 0 ] [ 'data' ] = newAxisName ;
var num = 0 ;
for ( var e in params . selected ) {
if ( params . selected . hasOwnProperty ( e ) ) {
params . selected [ e ] ? num ++ : '' ;
}
}
if ( num > ( is _compare ? 3 : 5 ) ) {
oop . push ( params . name )
}
if ( num > ( is _compare ? 3 : 5 ) ) {
var hah = oop . slice ( oop . length - ( is _compare ? 4 : 6 ) , oop . length - ( is _compare ? 3 : 4 ) ) [ 0 ] + '' ;
legend _option . legend [ 0 ] . selected [ hah ] = false ;
}
if ( num < 1 ) {
legend _option . legend [ 0 ] . selected [ params . name ] = true ;
}
this . setOption ( legend _option ) ;
} ) ;
} ) ;
}
function wsSpiderStat ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:350px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< span class = "last-span" > < input data - name = "" type = "text" id = "time_choose" lay - key = "1000001_'+randstr+'" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "自定义时间" style = "display: inline-block;font-size: 12px;padding: 0 10px;height:30px;width: 200px;" > < / s p a n > \
< / d i v > \
< / d i v > \
< div class = "echart_container" > \
< div id = "spider_left_total" style = "height: 280px; width: 100px;display: inline-block;position: relative;" > \
< div class = "total_num_box" > < p class = "tn_title" > 总蜘蛛 < / p > < p c l a s s = " t n _ n u m r e q u e s t _ s p i d e r " > 0 < / p > < / d i v > \
< div class = "total_num_box" > < p class = "tn_title" > 总请求 < / p > < p c l a s s = " t n _ n u m r e q u e s t _ t o t a l " > 0 < / p > < / d i v > \
< / d i v > \
< div id = "echart_right_total" style = "height: 280px; width: 650px;display: inline-block;position: relative;" > < / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
//日期范围
laydate . render ( {
elem : '#time_choose' ,
value : '' ,
range : true ,
done : function ( value , startDate , endDate ) {
if ( ! value ) {
return false ;
}
$ ( '#search_time button' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'cur' ) ;
} ) ;
var timeA = value . split ( '-' )
var start = $ . trim ( timeA [ 0 ] + '-' + timeA [ 1 ] + '-' + timeA [ 2 ] )
var end = $ . trim ( timeA [ 3 ] + '-' + timeA [ 4 ] + '-' + timeA [ 5 ] )
query _txt = toUnixTime ( start + " 00:00:00" ) + "-" + toUnixTime ( end + " 00:00:00" )
$ ( '#time_choose' ) . attr ( "data-name" , query _txt ) ;
$ ( '#time_choose' ) . addClass ( "cur" ) ;
wsSpiderStatLogRequest ( 1 ) ;
} ,
} ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsSpiderStatLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="status_code"]' ) . change ( function ( ) {
wsSpiderStatLogRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsSpiderStatLogRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsSpiderStatLogRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsClientStatLogRequest ( page ) {
var args = { } ;
args [ 'page' ] = page ;
args [ 'page_size' ] = 10 ;
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
args [ 'status_code' ] = $ ( 'select[name="status_code"]' ) . val ( ) ;
var query _date = 'today' ;
if ( $ ( '#time_choose' ) . attr ( "data-name" ) != '' ) {
query _date = $ ( '#time_choose' ) . attr ( "data-name" ) ;
} else {
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
}
args [ 'query_date' ] = query _date ;
args [ 'tojs' ] = 'wsClientStatLogRequest' ;
wsPost ( 'get_client_stat_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data . data ;
if ( data . length > 0 ) {
for ( i in data ) {
list += '<tr>' ;
list += '<td>' + data [ i ] [ 'time' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'android' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'iphone' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'windows' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'chrome' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'weixin' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'qh360' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'edeg' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'firefox' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'safari' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'mac' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'msie' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'machine' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'other' ] + '</td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="14" style="text-align:center;">客服端列表为空</td></tr>' ;
}
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 日期 < / t h > \
< th > 安桌 < / t h > \
< th > iOS < / t h > \
< th > Windows < / t h > \
< th > Chrome < / t h > \
< th > 微信 < / t h > \
< th > 360 < / t h > \
< th > Edge < / t h > \
< th > 火狐 < / t h > \
< th > Safari < / t h > \
< th > Mac < / t h > \
< th > IE < / t h > \
< th > 机器 < span class = "tips" data - toggle = "tooltip" data - placement = "bottom" title = "机器或者脚本应用程序访问,包括:Curl、HeadlessChrome、Bot、Wget、Spider、Crawler、Scrapy、zgrab、Python、java, ab 此类关键词" > ? < / s p a n > < / t h > \
< th > 其他 < / t h > \ < / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
$ ( '#wsPage' ) . html ( rdata . data . page ) ;
$ ( '[data-toggle="tooltip"]' ) . tooltip ( ) ;
// 图形化
var initData = rdata . data . stat _list ;
var sumData = rdata . data . sum _data ;
var colorList = [ '#6ec71e' , '#4885FF' ] ;
var source _name = { android : '安卓' , iphone : 'iOS' , windows : 'Windows' , chrome : 'Chrome' , weixin : '微信' , qh360 : '360' , edeg : 'Edge' , firefox : '火狐' , safari : 'Safari' , mac : 'Mac' , linux : 'Linux' , msie : 'IE' , metasr : '搜狗' , theworld : '世界之窗' , tt : '腾讯TT' , maxthon : '遨游' , opera : 'Opera' , qq : 'QQ浏览器' , uc : 'UC' , pc2345 : '2345' , other : '其他' , machine : 'Machine' } ;
var lenend2 _obj = { } ;
var leftEc = echarts . init ( document . getElementById ( 'echart_left_total' ) ) ;
var rightEc = echarts . init ( document . getElementById ( 'echart_right_total' ) ) ;
var datas = [
{ value : sumData . pc , name : 'PC客服端' } ,
{ value : sumData . mobile , name : '移动客服端' } ,
] ;
var leftOption = {
backgroundColor : '#fff' ,
title : {
text : sumData . reqest _total ,
textStyle : {
color : '#484848' ,
fontSize : 17
} ,
subtext : '总请求数' ,
subtextStyle : {
color : '#717171' ,
fontSize : 15
} ,
itemGap : 20 ,
left : 'center' ,
top : '42%'
} ,
tooltip : {
trigger : 'item'
} ,
series : [ {
type : 'pie' ,
radius : [ '45%' , '55%' ] ,
center : [ "50%" , "50%" ] ,
clockwise : true ,
avoidLabelOverlap : false ,
hoverOffset : 15 ,
itemStyle : {
normal : {
label : {
show : true ,
position : 'outside' ,
color : '#666' ,
formatter : function ( params ) {
var percent = 0 ;
var total = 0 ;
for ( var i = 0 ; i < datas . length ; i ++ ) {
total += datas [ i ] . value ;
}
if ( params . name !== '' ) {
return params . name + '\n' + '\n' + params . value + '/次' ;
} else {
return '' ;
}
} ,
} ,
labelLine : {
length : 20 ,
length2 : 10
} ,
color : function ( params ) {
return colorList [ params . dataIndex ]
}
}
} ,
data : datas
} , {
itemStyle : {
normal : {
color : '#F5F6FA' ,
}
} ,
type : 'pie' ,
hoverAnimation : false ,
radius : [ '42%' , '58%' ] ,
center : [ "50%" , "50%" ] ,
label : {
normal : {
show : false ,
}
} ,
data : [ ] ,
z : - 1
} ]
}
leftEc . setOption ( leftOption ) ;
var xAxixName = $ ( '#search_time button.cur' ) . text ( ) ;
var is _compare = false ;
var lenend = [ ] ;
var serData = [ ] ;
for ( var i = 0 ; i < initData . length ; i ++ ) {
for ( var j in initData [ i ] ) {
source _name [ j ] = source _name [ j ] ? source _name [ j ] : j
lenend . push ( source _name [ j ] )
serData . push ( {
name : source _name [ j ] ,
type : 'bar' ,
label : {
normal : {
show : true ,
position : 'top' ,
formatter : function ( params ) {
return params . data ;
}
}
} ,
barMaxWidth : 60 ,
data : [ initData [ i ] [ j ] ? initData [ i ] [ j ] : 0 ]
} )
}
}
for ( var i = 0 ; i < lenend . length ; i ++ ) {
if ( i > ( is _compare ? 2 : 4 ) ) {
lenend2 _obj [ lenend [ i ] ] = false ;
} else {
lenend2 _obj [ lenend [ i ] ] = true ;
}
}
var rightOption = {
backgroundColor : '#fff' ,
tooltip : {
trigger : 'axis' ,
axisPointer : {
type : 'shadow' ,
textStyle : {
color : '#fff' ,
fontSize : '26'
} ,
}
} ,
legend : {
top : '0%' ,
data : lenend ,
selected : lenend2 _obj ,
textStyle : {
fontSize : 12 ,
color : '#808080'
} ,
icon : 'rect'
} ,
grid : {
top : 60 ,
left : 60 ,
right : 0 ,
bottom : 50
} ,
xAxis : [ {
type : 'category' ,
axisLabel : {
color : '#4D4D4D' ,
fontSize : 14 ,
fontWeight : 'bold'
} ,
data : [ xAxixName ] ,
} ] ,
color : [ '#4fa8f9' , '#6ec71e' , '#f56e6a' , '#fc8b40' , '#818af8' , '#31c9d7' , '#f35e7a' , '#ab7aee' ,
'#14d68b' , '#cde5ff' ] ,
yAxis : [ {
type : 'value' ,
axisLine : {
show : false ,
} ,
axisTick : {
show : false
} ,
splitNumber : 4 , //y轴分割线数量
axisLabel : {
color : '#8C8C8C'
} ,
splitLine : {
lineStyle : {
type : 'dashed'
}
}
} ] ,
series : serData
}
rightEc . setOption ( rightOption ) ;
var oop = lenend . slice ( 0 , ( is _compare ? 3 : 5 ) ) ;
rightEc . on ( 'legendselectchanged' , function ( params ) {
var legend _option = this . getOption ( ) , newAxisName = [ ] ;
$ . each ( legend _option [ 'xAxis' ] [ 0 ] [ 'data' ] , function ( index , item ) {
newAxisName . push ( item . replace ( /\([^\)]*\)/g , "" ) )
} )
legend _option [ 'xAxis' ] [ 0 ] [ 'data' ] = newAxisName ;
var num = 0 ;
for ( var e in params . selected ) {
if ( params . selected . hasOwnProperty ( e ) ) {
params . selected [ e ] ? num ++ : '' ;
}
}
if ( num > ( is _compare ? 3 : 5 ) ) {
oop . push ( params . name )
}
if ( num > ( is _compare ? 3 : 5 ) ) {
var hah = oop . slice ( oop . length - ( is _compare ? 4 : 6 ) , oop . length - ( is _compare ? 3 : 4 ) ) [ 0 ] + '' ;
legend _option . legend [ 0 ] . selected [ hah ] = false ;
}
if ( num < 1 ) {
legend _option . legend [ 0 ] . selected [ params . name ] = true ;
}
this . setOption ( legend _option )
} ) ;
} ) ;
}
function wsClientStat ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:350px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< span class = "last-span" > < input data - name = "" type = "text" id = "time_choose" lay - key = "1000001_'+randstr+'" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "自定义时间" style = "display: inline-block;font-size: 12px;padding: 0 10px;height:30px;width: 200px;" > < / s p a n > \
< / d i v > \
< / d i v > \
< div class = "echart_container" > \
< div id = "echart_left_total" style = "height: 280px; width: 300px;display: inline-block;position: relative;" > < / d i v > \
< div id = "echart_right_total" style = "height: 280px; width: 450px;display: inline-block;position: relative;" > < / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
//日期范围
laydate . render ( {
elem : '#time_choose' ,
value : '' ,
range : true ,
done : function ( value , startDate , endDate ) {
if ( ! value ) {
return false ;
}
$ ( '#search_time button' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'cur' ) ;
} ) ;
var timeA = value . split ( '-' )
var start = $ . trim ( timeA [ 0 ] + '-' + timeA [ 1 ] + '-' + timeA [ 2 ] )
var end = $ . trim ( timeA [ 3 ] + '-' + timeA [ 4 ] + '-' + timeA [ 5 ] )
query _txt = toUnixTime ( start + " 00:00:00" ) + "-" + toUnixTime ( end + " 00:00:00" )
$ ( '#time_choose' ) . attr ( "data-name" , query _txt ) ;
$ ( '#time_choose' ) . addClass ( "cur" ) ;
wsClientStatLogRequest ( 1 ) ;
} ,
} ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsClientStatLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="status_code"]' ) . change ( function ( ) {
wsClientStatLogRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsClientStatLogRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsClientStatLogRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsIpStatLogRequest ( page ) {
var args = { }
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
var query _date = 'today' ;
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
args [ 'query_date' ] = query _date ;
args [ 'tojs' ] = 'wsIpStatLogRequest' ;
wsPost ( 'get_ip_stat_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data ;
// console.log(rdata,data);
if ( data . length > 0 ) {
for ( i in data ) {
list += '<tr>' ;
list += '<td>' + ( parseInt ( i ) + 1 ) + '</td>' ;
list += '<td><span class="overflow_hide" style="width:100px;">' + data [ i ] [ 'ip' ] + '</span></td>' ;
list += '<td>' + data [ i ] [ 'area' ] + '</td>' ;
list += '<td>' + data [ i ] [ 'day' ] + '(' + data [ i ] [ 'day_rate' ] + '%)</td>' ;
list += '<td>' + toSize ( data [ i ] [ 'flow' ] ) + '(' + data [ i ] [ 'flow_rate' ] + '%)</td>' ;
list += '<td><span><div class="share_num" style="width:' + data [ i ] [ 'flow_rate' ] + '%"></div></span>' + '</td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="6" style="text-align:center;">IP列表为空</td></tr>' ;
}
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 序号 < / t h > \
< th > IP < / t h > \
< th > 归属地 ( 仅供参考 ) < / t h > \
< th > 请求数 < / t h > \
< th > 流量 < / t h > \
< th > 流量占比图 < / t h > \
< / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
} ) ;
}
function wsIpStat ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:350px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsIpStatLogRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsIpStatLogRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsIpStatLogRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsUriStatLogRequest ( page ) {
var args = { }
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
var query _date = 'today' ;
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
args [ 'query_date' ] = query _date ;
args [ 'tojs' ] = 'wsUriStatLogRequest' ;
wsPost ( 'get_uri_stat_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data ;
// console.log(rdata,data);
if ( data . length > 0 ) {
for ( i in data ) {
list += '<tr>' ;
list += '<td>' + ( parseInt ( i ) + 1 ) + '</td>' ;
list += '<td><span class="overflow_hide" style="width:100px;">' + data [ i ] [ 'uri' ] + '</span></td>' ;
list += '<td>' + data [ i ] [ 'day' ] + '(' + data [ i ] [ 'day_rate' ] + '%)</td>' ;
list += '<td>' + toSize ( data [ i ] [ 'flow' ] ) + '(' + data [ i ] [ 'flow_rate' ] + '%)</td>' ;
list += '<td><span><div class="share_num" style="width:' + data [ i ] [ 'flow_rate' ] + '%"></div></span>' + '</td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="6" style="text-align:center;">URI列表为空</td></tr>' ;
}
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 序号 < / t h > \
< th > URI < / t h > \
< th > 请求数 < / t h > \
< th > 流量 < / t h > \
< th > 流量占比图 < / t h > \
< / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
} ) ;
}
function wsUriStat ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:350px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsUriStatLogRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsUriStatLogRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsUriStatLogRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsTableErrorLogRequest ( page ) {
var args = { } ;
args [ 'page' ] = page ;
args [ 'page_size' ] = 10 ;
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
args [ 'status_code' ] = $ ( 'select[name="status_code"]' ) . val ( ) ;
var query _date = 'today' ;
if ( $ ( '#time_choose' ) . attr ( "data-name" ) != '' ) {
query _date = $ ( '#time_choose' ) . attr ( "data-name" ) ;
} else {
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
}
args [ 'query_date' ] = query _date ;
args [ 'tojs' ] = 'wsTableErrorLogRequest' ;
wsPost ( 'get_logs_error_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data . data ;
if ( data . length > 0 ) {
for ( i in data ) {
list += '<tr>' ;
list += '<td>' + getLocalTime ( data [ i ] [ 'time' ] ) + '</td>' ;
list += '<td><span class="overflow_hide" style="width:100px;">' + data [ i ] [ 'domain' ] + '</span></td>' ;
list += '<td><span class="overflow_hide" style="width:100px;">' + data [ i ] [ 'ip' ] + '</span></td>' ;
list += '<td>' + toSize ( data [ i ] [ 'body_length' ] ) + '</td>' ;
list += '<td>' + toSecond ( data [ i ] [ 'request_time' ] ) + '</td>' ;
list += '<td><span class="overflow_hide" style="width:130px;">' + data [ i ] [ 'uri' ] + '</span></td>' ;
list += '<td><span class="overflow_hide" style="width:60px;">' + data [ i ] [ 'status_code' ] + '/' + data [ i ] [ 'method' ] + '</span></td>' ;
list += '<td><a data-id="' + i + '" href="javascript:;" class="btlink details" title="详情">详情</a></td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="8" style="text-align:center;">错误日志为空</td></tr>' ;
}
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 时间 < / t h > \
< th > 域名 < / t h > \
< th > IP < / t h > \
< th > 响应 < / t h > \
< th > 耗时 < / t h > \
< th > URL < / t h > \
< th > 状态 / 类型 < / t h > \
< th style = "text-align:right;" > 操作 < / t h > < / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
$ ( '#wsPage' ) . html ( rdata . data . page ) ;
$ ( ".tablescroll .details" ) . click ( function ( ) {
var index = $ ( this ) . attr ( 'data-id' ) ;
var res = data [ index ] ;
layer . open ( {
type : 1 ,
title : "【" + res . domain + "】详情信息" ,
area : '600px' ,
closeBtn : 1 ,
shadeClose : false ,
content : ' < div class = "pd15 lib-box" > \
< div style = "height:80px;" > < table class = "table" style = "border:#ddd 1px solid; margin-bottom:10px" > \
< tbody class = "site_details_tbody" > \
< tr > < th > 时间 < / t h > < t d > ' + g e t L o c a l T i m e ( r e s . t i m e ) + ' < / t d > < t h > 真 实 I P < / t h > < t d > < s p a n c l a s s = " o v e r f l o w _ h i d e d e t a i l _ i p " s t y l e = " w i d t h : 1 0 0 p x ; " > ' + r e s . i p + ' < / s p a n > < / t d > < t h > 客 户 端 端 口 < / t h > < t d > ' + ( r e s . c l i e n t _ p o r t > 0 & & r e s . c l i e n t _ p o r t ! = ' ' ? r e s . c l i e n t _ p o r t : ' ' ) + ' < / t d > < / t r > \
< tr > < th > 类型 < / t h > < t d > ' + r e s . m e t h o d + ' < / t d > < t h > 状 态 < / t h > < t d > ' + r e s . s t a t u s _ c o d e + ' < / t d > < t h > 响 应 大 小 < / t h > < t d > ' + t o S i z e ( r e s . b o d y _ l e n g t h ) + ' < / t d > \ < / t r > \
< / t b o d y > < / t a b l e > < / d i v > \
< div > < b style = "margin-left:10px" > 协议 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + res.protocol + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > URL < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . u r i ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 完整IP列表 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" style = "max-height: 66px;" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . i p _ l i s t ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 来路 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . r e f e r e r = = n u l l ? ' N o n e ' : r e s . r e f e r e r ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > User - Agent < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . u s e r _ a g e n t ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 处理耗时 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' +res.request_time + ' ms < / d i v > < / d i v > \
< / d i v > ' ,
} ) ;
} ) ;
} ) ;
}
function wsSitesErrorLog ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px;" > 状态码 : < / s p a n > \
< select class = "bt-input-text" name = "status_code" style = "margin-left:4px" > \
< option value = "all" > 所有 < / o p t i o n > \
< option value = "50x" > 50 x < / o p t i o n > \
< option value = "40x" > 40 x < / o p t i o n > \
< option value = "500" > 500 < / o p t i o n > \
< option value = "501" > 501 < / o p t i o n > \
< option value = "502" > 502 < / o p t i o n > \
< option value = "503" > 503 < / o p t i o n > \
< option value = "403" > 403 < / o p t i o n > \
< option value = "404" > 404 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:350px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< span class = "last-span" > < input data - name = "" type = "text" id = "time_choose" lay - key = "1000001_'+randstr+'" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "自定义时间" style = "display: inline-block;font-size: 12px;padding: 0 10px;height:30px;width: 200px;" > < / s p a n > \
< / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
//日期范围
laydate . render ( {
elem : '#time_choose' ,
value : '' ,
range : true ,
done : function ( value , startDate , endDate ) {
if ( ! value ) {
return false ;
}
$ ( '#search_time button' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'cur' ) ;
} ) ;
var timeA = value . split ( '-' ) ;
var start = $ . trim ( timeA [ 0 ] + '-' + timeA [ 1 ] + '-' + timeA [ 2 ] )
var end = $ . trim ( timeA [ 3 ] + '-' + timeA [ 4 ] + '-' + timeA [ 5 ] )
query _txt = toUnixTime ( start + " 00:00:00" ) + "-" + toUnixTime ( end + " 00:00:00" )
$ ( '#time_choose' ) . attr ( "data-name" , query _txt ) ;
$ ( '#time_choose' ) . addClass ( "cur" ) ;
wsTableErrorLogRequest ( 1 ) ;
} ,
} ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsTableErrorLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="status_code"]' ) . change ( function ( ) {
wsTableErrorLogRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsTableErrorLogRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsTableErrorLogRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
function wsTableLogRequest ( page ) {
var args = { } ;
args [ 'page' ] = page ;
args [ 'page_size' ] = 9 ;
args [ 'site' ] = $ ( 'select[name="site"]' ) . val ( ) ;
args [ 'method' ] = $ ( 'select[name="method"]' ) . val ( ) ;
args [ 'status_code' ] = $ ( 'select[name="status_code"]' ) . val ( ) ;
args [ 'request_time' ] = $ ( 'select[name="request_time"]' ) . val ( ) ;
args [ 'spider_type' ] = $ ( 'select[name="spider_type"]' ) . val ( ) ;
args [ 'referer' ] = $ ( 'select[name="referer"]' ) . val ( ) ;
args [ 'ip' ] = $ ( 'input[name="ip"]' ) . val ( ) ;
var query _date = 'today' ;
if ( $ ( '#time_choose' ) . attr ( "data-name" ) != '' ) {
query _date = $ ( '#time_choose' ) . attr ( "data-name" ) ;
} else {
query _date = $ ( '#search_time button.cur' ) . attr ( "data-name" ) ;
}
args [ 'query_date' ] = query _date ;
// console.log("query_date:",query_date);
var search _uri = $ ( 'input[name="search_uri"]' ) . val ( ) ;
args [ 'search_uri' ] = search _uri ;
args [ 'tojs' ] = 'wsTableLogRequest' ;
var spider _table = {
"1" : "百度" ,
"2" : "必应" ,
"3" : "奇虎360" ,
"4" : "Google" ,
"5" : "头条" ,
"6" : "搜狗" ,
"7" : "有道" ,
"8" : "搜搜" ,
"9" : "Dnspod" ,
"10" : "Yandex" ,
"11" : "一搜" ,
"12" : "其他" ,
}
wsPost ( 'get_logs_list' , '' , args , function ( rdata ) {
var rdata = $ . parseJSON ( rdata . data ) ;
var list = '' ;
var data = rdata . data . data ;
if ( data . length > 0 ) {
for ( i in data ) {
var spider _tip = '' ;
if ( data [ i ] [ 'is_spider' ] > 0 ) {
spider _tip _name = spider _table [ data [ i ] [ 'is_spider' ] ]
spider _tip = '<div data-toggle="tooltip" title="' + spider _tip _name + '爬虫" style="cursor:pointer;margin:3px;float:left;width:8px;height:8px;line-height:40px;border-radius:50%;background-color:#ccc;"></div>' ;
}
list += '<tr>' ;
list += '<td>' + getLocalTime ( data [ i ] [ 'time' ] ) + '</td>' ;
list += '<td><span class="overflow_hide" style="width:100px;">' + data [ i ] [ 'domain' ] + '</span></td>' ;
list += '<td><span class="overflow_hide" style="width:100px;">' + data [ i ] [ 'ip' ] + '</span></td>' ;
list += '<td>' + toSize ( data [ i ] [ 'body_length' ] ) + '</td>' ;
list += '<td>' + toSecond ( data [ i ] [ 'request_time' ] ) + '</td>' ;
list += '<td><span class="overflow_hide" style="width:130px;">' + data [ i ] [ 'uri' ] + '</span></td>' ;
list += '<td>' + spider _tip + '<span class="overflow_hide" style="width:60px;">' + data [ i ] [ 'status_code' ] + '/' + data [ i ] [ 'method' ] + '</span></td>' ;
var http _data = ' ' ;
if ( data [ i ] [ 'request_headers' ] != '' ) {
http _data = '<a data-id="' + i + '" href="javascript:;" class="btlink http_data" title="HTTP">HTTP</a> | ' ;
}
list += '<td><span>' + http _data + '<a data-id="' + i + '" href="javascript:;" class="btlink details" title="详情">详情</a></span></td>' ;
list += '</tr>' ;
}
} else {
list += '<tr><td colspan="8" style="text-align:center;">网站日志为空</td></tr>' ;
}
var table = ' < div class = "tablescroll" > \
< table id = "DataBody" class = "table table-hover" width = "100%" cellspacing = "0" cellpadding = "0" border = "0" style = "border: 0 none;" > \
< thead > < tr > \
< th > 时间 < / t h > \
< th > 域名 < / t h > \
< th > IP < / t h > \
< th > 响应 < / t h > \
< th > 耗时 < / t h > \
< th > URL < / t h > \
< th > 状态 / 类型 < / t h > \
< th style = "text-align:right;" > 操作 < / t h > < / t r > < / t h e a d > \
< tbody > \
'+ list +' \
< / t b o d y > < / t a b l e > \
< / d i v > \
< div id = "wsPage" class = "dataTables_paginate paging_bootstrap page" > < / d i v > ' ;
$ ( '#ws_table' ) . html ( table ) ;
$ ( '#wsPage' ) . html ( rdata . data . page ) ;
$ ( ".tablescroll .details" ) . click ( function ( ) {
var index = $ ( this ) . attr ( 'data-id' ) ;
var res = data [ index ] ;
layer . open ( {
type : 1 ,
title : "【" + res . domain + "】详情信息" ,
area : '600px' ,
closeBtn : 1 ,
shadeClose : false ,
content : ' < div class = "pd15 lib-box" > \
< div style = "height:80px;" > < table class = "table" style = "border:#ddd 1px solid; margin-bottom:10px" > \
< tbody class = "site_details_tbody" > \
< tr > < th > 时间 < / t h > < t d > ' + g e t L o c a l T i m e ( r e s . t i m e ) + ' < / t d > < t h > 真 实 I P < / t h > < t d > < s p a n c l a s s = " o v e r f l o w _ h i d e d e t a i l _ i p " s t y l e = " w i d t h : 1 0 0 p x ; " > ' + r e s . i p + ' < / s p a n > < / t d > < t h > 客 户 端 端 口 < / t h > < t d > ' + ( r e s . c l i e n t _ p o r t > 0 & & r e s . c l i e n t _ p o r t ! = ' ' ? r e s . c l i e n t _ p o r t : ' ' ) + ' < / t d > < / t r > \
< tr > < th > 类型 < / t h > < t d > ' + r e s . m e t h o d + ' < / t d > < t h > 状 态 < / t h > < t d > ' + r e s . s t a t u s _ c o d e + ' < / t d > < t h > 响 应 大 小 < / t h > < t d > ' + t o S i z e ( r e s . b o d y _ l e n g t h ) + ' < / t d > \ < / t r > \
< / t b o d y > < / t a b l e > < / d i v > \
< div > < b style = "margin-left:10px" > 协议 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + res.protocol + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > URL < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . u r i ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 完整IP列表 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" style = "max-height: 66px;" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . i p _ l i s t ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 来路 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . r e f e r e r = = n u l l ? ' N o n e ' : r e s . r e f e r e r ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > User - Agent < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' + $(' < div > < / d i v > ' ) . t e x t ( r e s . u s e r _ a g e n t ) . h t m l ( ) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 处理耗时 < / b > < / d i v > \
< div class = "lib-con mt10" > < div class = "divpre" > ' +res.request_time + ' ms < / d i v > < / d i v > \
< / d i v > ' ,
} ) ;
} ) ;
$ ( ".tablescroll .http_data" ) . click ( function ( ) {
var index = $ ( this ) . attr ( 'data-id' ) ;
var res = data [ index ] ;
var request _headers = res . request _headers ;
var req _data = $ . parseJSON ( request _headers ) ;
var req _data _html = res . method + ' ' + res . uri + '<br/>' ;
for ( var d in req _data ) {
if ( d == 'payload' ) {
req _data _html += '<b style="color:red;">' + d + "</b>:" + req _data [ d ] + "<br/>" ;
} else {
req _data _html += d + ":" + req _data [ d ] + "<br/>" ;
}
}
layer . open ( {
type : 1 ,
title : "【" + res . domain + "】HTTP详情" ,
area : [ '600px' , '375px' ] ,
closeBtn : 1 ,
shadeClose : false ,
content : ' < div class = "pd15 lib-box" > \
< div class = "lib-con mt10" > < div class = "divpre" style = "max-height:250px;white-space: break-spaces;" > ' + req_data_html + ' < / d i v > < / d i v > \
< ul class = "help-info-text c7 mtb15" > \
< li style = "list-style: none;" > payload : POST请求中客户端提交的参数 。 < / l i > \
< / u l > \
< / d i v > ' ,
} ) ;
} ) ;
$ ( '[data-toggle="tooltip"]' ) . tooltip ( ) ;
} ) ;
}
function wsSitesLog ( ) {
////////////////////////////////////////////////////////////////////////////////////////////////////////
var randstr = getRandomString ( 10 ) ;
var html = ' < div > \
< div style = "padding-bottom:10px;" > \
< span > 网站 : < / s p a n > \
< select class = "bt-input-text" name = "site" style = "margin-left:4px;width:100px;" > \
< option value = "unset" > 未设置 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px" > 时间 : < / s p a n > \
< div class = "input-group" style = "margin-left:10px;width:550px;display: inline-table;vertical-align: top;" > \
< div id = "search_time" class = "input-group-btn btn-group-sm" > \
< button data - name = "today" type = "button" class = "btn btn-default" > 今日 < / b u t t o n > \
< button data - name = "yesterday" type = "button" class = "btn btn-default" > 昨日 < / b u t t o n > \
< button data - name = "l7" type = "button" class = "btn btn-default" > 近7天 < / b u t t o n > \
< button data - name = "l30" type = "button" class = "btn btn-default" > 近30天 < / b u t t o n > \
< / d i v > \
< span class = "last-span" > < input data - name = "" type = "text" id = "time_choose" lay - key = "1000001_'+randstr+'" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "自定义时间" style = "display: inline-block;font-size: 12px;padding: 0 10px;height:30px;width: 300px;" > < / s p a n > \
< / d i v > \
< / d i v > \
< div style = "padding-bottom:10px;" > \
< span > 请求类型 : < / s p a n > \
< select class = "bt-input-text" name = "method" style = "margin-left:4px" > \
< option value = "all" > 所有 < / o p t i o n > \
< option value = "GET" > GET < / o p t i o n > \
< option value = "POST" > POST < / o p t i o n > \
< option value = "HEAD" > HEAD < / o p t i o n > \
< option value = "PUT" > PUT < / o p t i o n > \
< option value = "DELETE" > DELETE < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px;" > 状态码 : < / s p a n > \
< select class = "bt-input-text" name = "status_code" style = "margin-left:4px" > \
< option value = "all" > 所有 < / o p t i o n > \
< option value = "500" > 500 < / o p t i o n > \
< option value = "502" > 502 < / o p t i o n > \
< option value = "503" > 503 < / o p t i o n > \
< option value = "404" > 404 < / o p t i o n > \
< option value = "301" > 301 < / o p t i o n > \
< option value = "302" > 302 < / o p t i o n > \
< option value = "200" > 200 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px;" > 来源 : < / s p a n > \
< select class = "bt-input-text" name = "referer" style = "margin-left:4px" > \
< option value = "all" > 所有 < / o p t i o n > \
< option value = "-1" > 无 < / o p t i o n > \
< option value = "1" > 有 < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px;" > 蜘蛛过滤 : < / s p a n > \
< select class = "bt-input-text" name = "spider_type" style = "margin-left:4px" > \
< option value = "normal" > 不过滤 < / o p t i o n > \
< option value = "only_spider" > 仅显示蜘蛛 < / o p t i o n > \
< option value = "no_spider" > 不显示蜘蛛 < / o p t i o n > \
< option value = "1" > 百度 < / o p t i o n > \
< option value = "2" > 必应 < / o p t i o n > \
< option value = "3" > 奇虎360 < / o p t i o n > \
< option value = "4" > Google < / o p t i o n > \
< option value = "5" > 头条 < / o p t i o n > \
< option value = "6" > 搜狗 < / o p t i o n > \
< option value = "7" > 有道 < / o p t i o n > \
< option value = "8" > 搜搜 < / o p t i o n > \
< option value = "9" > Dnspod < / o p t i o n > \
< option value = "10" > Yandex < / o p t i o n > \
< option value = "11" > 一搜 < / o p t i o n > \
< option value = "12" > 其他 < / o p t i o n > \
< / s e l e c t > \
< span > IP : < / s p a n > \
< div class = "input-group" style = "width:163px;display:inline-flex;" > \
< input type = "text" name = "ip" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "IP地址" style = "font-size: 12px;padding: 0 10px;height:30px;" > \
< / d i v > \
< / d i v > \
< div style = "padding-bottom:10px;" > \
< span > 耗时 : < / s p a n > \
< select class = "bt-input-text" name = "request_time" style = "margin-left:5px;" > \
< option value = "all" > 所有 < / o p t i o n > \
< option value = "0-50" > 0 - 50 ( ms ) < / o p t i o n > \
< option value = "50-200" > 50 - 200 ( ms ) < / o p t i o n > \
< option value = "200-500" > 200 - 500 ( ms ) < / o p t i o n > \
< option value = "500-1000" > 500 ms - 1 s < / o p t i o n > \
< option value = "1000" > 大于1s < / o p t i o n > \
< / s e l e c t > \
< span style = "margin-left:10px;" > URL过滤 : < / s p a n > \
< div class = "input-group" style = "width:210px;display:inline-flex;" > \
< input type = "text" name = "search_uri" class = "form-control btn-group-sm" autocomplete = "off" placeholder = "URI搜索" style = "font-size: 12px;padding: 0 10px;height:30px;" > \
< div class = "input-group-btn btn-group-sm" > \
< button id = "logs_search" type = "button" class = "btn btn-default" > 搜索 < / b u t t o n > \
< / d i v > \
< / d i v > \
< / d i v > \
< div class = "divtable mtb10" id = "ws_table" > < / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( html ) ;
//日期范围
laydate . render ( {
elem : '#time_choose' ,
value : '' ,
range : '~' ,
type : 'datetime' ,
done : function ( value , startDate , endDate ) {
console . log ( value , startDate , endDate ) ;
if ( ! value ) {
return false ;
}
$ ( '#search_time button' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'cur' ) ;
} ) ;
var timeArr = value . split ( '~' ) ;
var start = $ . trim ( timeArr [ 0 ] ) ;
var end = $ . trim ( timeArr [ 1 ] ) ;
query _txt = toUnixTime ( start ) + "-" + toUnixTime ( end ) ;
$ ( '#time_choose' ) . attr ( "data-name" , query _txt ) ;
$ ( '#time_choose' ) . addClass ( "cur" ) ;
wsTableLogRequest ( 1 ) ;
} ,
} ) ;
$ ( '#search_time button:eq(0)' ) . addClass ( 'cur' ) ;
$ ( '#search_time button' ) . click ( function ( ) {
$ ( '#search_time button' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'cur' ) ) {
$ ( this ) . removeClass ( 'cur' ) ;
}
} ) ;
$ ( '#time_choose' ) . attr ( "data-name" , '' ) ;
$ ( '#time_choose' ) . removeClass ( "cur" ) ;
$ ( this ) . addClass ( 'cur' ) ;
wsTableLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="method"]' ) . change ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="status_code"]' ) . change ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="spider_type"]' ) . change ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="referer"]' ) . change ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
$ ( 'select[name="request_time"]' ) . change ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
$ ( '#logs_search' ) . click ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
wsPost ( 'get_default_site' , '' , { } , function ( rdata ) {
$ ( 'select[name="site"]' ) . html ( '' ) ;
var rdata = $ . parseJSON ( rdata . data ) ;
var rdata = rdata . data ;
var default _site = rdata [ "default" ] ;
var select = '' ;
for ( var i = 0 ; i < rdata [ "list" ] . length ; i ++ ) {
if ( default _site == rdata [ "list" ] [ i ] ) {
select += '<option value="' + rdata [ "list" ] [ i ] + '" selected>' + rdata [ "list" ] [ i ] + '</option>' ;
} else {
select += '<option value="' + rdata [ "list" ] [ i ] + '">' + rdata [ "list" ] [ i ] + '</option>' ;
}
}
$ ( 'select[name="site"]' ) . html ( select ) ;
wsTableLogRequest ( 1 ) ;
$ ( 'select[name="site"]' ) . change ( function ( ) {
wsTableLogRequest ( 1 ) ;
} ) ;
} ) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////
}