网站统计 xx5

pull/139/head
midoks 3 years ago
parent 53122ec215
commit dbce731d0b
  1. 10
      plugins/webstats/index.html
  2. 53
      plugins/webstats/index.py
  3. 122
      plugins/webstats/js/setting.js
  4. 7
      plugins/webstats/js/stats.js

@ -4,6 +4,14 @@
margin: 15px 0;
}
.overflow_hide {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
vertical-align: middle;
}
.cur {
background-color: #20a53a;
color: #fff;
@ -96,7 +104,7 @@
</div>
</div>
<script type="text/javascript">
resetPluginWinWidth(830);
resetPluginWinWidth(900);
$.getScript( "/static/js/echarts.min.js", function(){
console.log("echarts load done");
});

@ -222,13 +222,60 @@ def reload():
return 'ok'
def getGloalConf():
def getGlobalConf():
conf = getConf()
content = mw.readFile(conf)
content = json.loads(content)
return mw.returnJson(True, 'ok', content)
def setGlobalConf():
args = getArgs()
conf = getConf()
content = mw.readFile(conf)
content = json.loads(content)
for v in ['record_post_args', 'record_get_403_args']:
data = checkArgs(args, [v])
if data[0]:
rval = False
if args[v] == "true":
rval = True
content['global'][v] = rval
for v in ['ip_top_num', 'uri_top_num', 'save_day']:
data = checkArgs(args, [v])
if data[0]:
content['global'][v] = int(args[v])
for v in ['cdn_headers', 'exclude_extension', 'exclude_status', 'exclude_ip']:
data = checkArgs(args, [v])
if data[0]:
content['global'][v] = args[v].split("\\n")
data = checkArgs(args, ['exclude_url'])
if data[0]:
exclude_url = args['exclude_url'].strip(";")
exclude_url_list = exclude_url.split(";")
exclude_url_val = []
for i in exclude_url_list:
t = i.split("|")
val = {}
val['mode'] = t[0]
val['url'] = t[1]
exclude_url_val.append(val)
content['global']['exclude_url'] = exclude_url_val
mw.writeFile(conf, json.dumps(content))
dst_conf_lua = getServerDir() + "/lua/config.lua"
content_lua = LuaMaker.makeLuaTable(content)
cfg_str = "return " + content_lua
mw.writeFile(dst_conf_lua, cfg_str)
mw.restartWeb()
return mw.returnJson(True, '设置成功')
def getLogsList():
args = getArgs()
check = checkArgs(args, ['page', 'page_size', 'site'])
@ -276,7 +323,9 @@ if __name__ == "__main__":
elif func == 'run_info':
print(runInfo())
elif func == 'get_global_conf':
print(getGloalConf())
print(getGlobalConf())
elif func == 'set_global_conf':
print(setGlobalConf())
elif func == 'get_logs_list':
print(getLogsList())
else:

@ -10,14 +10,14 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
<div class="ws_content">\
<div class="item-line">\
<div class="choose_title">IP统计</div>\
<input type="number" class="bt-input-text" name="ip_total" value="'+rdata['global']['ip_top_num']+'" style="width:55px;">\
<button type="button" class="btn btn-default btn-sm" bt-event-click="totalNumSubmit" style="margin-left: 62px;"><span>保存</span></button>\
<input type="number" class="bt-input-text" name="ip_top_num" value="'+rdata['global']['ip_top_num']+'" style="width:55px;">\
<button type="button" id="ip_top_num" class="btn btn-default btn-sm" style="margin-left: 62px;"><span>保存</span></button>\
<span class="tips" data-toggle="tooltip" data-placement="top" title="设置IP统计页面的TOP数量">?</span>\
</div>\
<div class="item-line">\
<div class="choose_title">URI统计</div>\
<input type="number" class="bt-input-text" name="ip_total" value="'+rdata['global']['uri_top_num']+'" style="width:55px;">\
<button type="button" class="btn btn-default btn-sm" bt-event-click="totalNumSubmit" style="margin-left: 62px;"><span>保存</span></button>\
<input type="number" class="bt-input-text" name="uri_top_num" value="'+rdata['global']['uri_top_num']+'" style="width:55px;">\
<button type="button" id="uri_top_num" class="btn btn-default btn-sm" style="margin-left: 62px;"><span>保存</span></button>\
<span class="tips" data-toggle="tooltip" data-placement="top" title="设置URI统计页面的TOP数量">?</span>\
</div>\
</div>\
@ -28,8 +28,8 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
<div class="ws_content">\
<div class="item-line">\
<div class="choose_title">日志保存天数</div>\
<input type="number" class="bt-input-text" name="ip_total" value="'+rdata['global']['save_day']+'" style="width:55px;">/ \
<button type="button" class="btn btn-default btn-sm" bt-event-click="totalNumSubmit" style="margin-left: 48px;"><span>保存</span></button>\
<input type="number" class="bt-input-text" name="save_day" value="'+rdata['global']['save_day']+'" style="width:55px;">/ \
<button type="button" id="save_day" class="btn btn-default btn-sm" style="margin-left: 48px;"><span>保存</span></button>\
<span class="tips" data-toggle="tooltip" data-placement="top" title="缩短日志保存天数原有记录的日志将被删除,请谨慎操作">?</span>\
</div>\
</div>\
@ -51,8 +51,8 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
<textarea name="setting-cdn" cols="52" rows="8"></textarea>\
</div>\
<p style="margin-top:10px">\
<button type="button" class="btn btn-success btn-sm" bt-event-click="submitSetting" name="set">保存</button>\
<button type="button" class="btn btn-default btn-sm" bt-event-click="submitSetting" name="setAll" style="margin-left: 10px;">同步所有站点</button>\
<button type="button" class="btn btn-success btn-sm" id="submitSetting">保存</button>\
<button type="button" class="btn btn-default btn-sm" id="setAll" style="margin-left: 10px;">同步所有站点</button>\
<span class="tips" style="margin-left:10px;" data-toggle="tooltip" data-placement="top" title="【保存】【同步所有站点】只会保存/同步当前所选中的监控配置内容">?</span>\
</p>\
</div>\
@ -100,12 +100,22 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
<div style="margin-left: -10px">考虑到HTTP请求原文会<span style="color:red;">占用额外存储空间</span>500</div>'
var content = $(common_tpl_tips).html(txt).prop('outerHTML');
var record_post_args = '';
if (rdata['global']['record_post_args']){
record_post_args = 'checked';
}
var record_get_403_args = '';
if (rdata['global']['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="id" style="margin: 1px 10 0;">记录POST请求原文\
<input type="checkbox" name="record_post_args" style="margin: 1px 10 0;" '+record_post_args+'>记录POST请求原文\
</label>\
<label style="cursor: pointer;">\
<input type="checkbox" name="id" style="margin: 1px 10 0;"><span>记录403错误请求原文</span>\
<input type="checkbox" name="record_get_403_args" style="margin: 1px 10 0;" '+record_get_403_args+'><span>记录403错误请求原文</span>\
</label>\
</div>';
content+=check;
@ -124,12 +134,12 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
_text += '<tr>\
<td>\
<select>\
<option value="normal" '+(_tmp[i].mode == 'normal'?'selected':'')+'>完整匹配</option>\
<select name="url_type_'+i+'">\
<option value="normal" '+(_tmp[i].mode == 'normal'?'selected':'')+'>完整匹配</option>\
<option value="regular" '+(_tmp[i].mode == 'regular'?'selected':'')+'>模糊匹配</option>\
</select>\
</td>\
<td><input style="width:290px" placeholder="'+(_tmp[i].mode == 'normal'?'例:需排除a.com/test.html请求,请填写 test.html':'包含此内容的URL请求将不会被统计,请谨慎填写')+'" type="text" value="'+_tmp[i].url+'"></td>\
<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+'"></td>\
</tr>';
}
@ -147,6 +157,92 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
}
});
$('#ip_top_num').click(function(){
var num = $('input[name="ip_top_num"]').val();
wsPost('set_global_conf','',{ip_top_num:num}, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
});
$('#uri_top_num').click(function(){
var num = $('input[name="uri_top_num"]').val();
wsPost('set_global_conf','',{uri_top_num:num}, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
});
$('#save_day').click(function(){
var num = $('input[name="save_day"]').val();
wsPost('set_global_conf','',{save_day:num}, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
});
$('#submitSetting').click(function(){
var select = $('#webstats .tab-nav span');
var select_pos = 0;
$('#webstats .tab-nav span').each(function(i){
if ($(this).hasClass('on')){select_pos = i;}
});
if ( [0,1,2,4].indexOf(select_pos)>-1 ){
var setting_cdn = $('textarea[name="setting-cdn"]').val();
var list = setting_cdn.split('\n')
var args = {}
if ( select_pos == 0 ){
args['cdn_headers'] = list;
} else if ( select_pos == 1 ){
args['exclude_extension'] = list;
} else if ( select_pos == 2 ){
args['exclude_status'] = list;
} else if ( select_pos == 4 ){
args['exclude_ip'] = setting_cdn;
}
wsPost('set_global_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 +';';
}
}
wsPost('set_global_conf','', {"exclude_url":list}, 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');
wsPost('set_global_conf','', {"record_post_args":record_post_args,'record_get_403_args':record_get_403_args}, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
wsGlobalSetting();
});
});
///////////////////////////////////////////////
}

@ -272,7 +272,6 @@ function wsSitesLog(){
args['tojs'] = 'wsSitesLog';
wsPost('get_logs_list', '' ,args, function(rdata){
var rdata = $.parseJSON(rdata.data);
console.log(rdata);
var list = '';
var data = rdata.data.data;
for(i in data){
@ -282,7 +281,7 @@ function wsSitesLog(){
list += '<td>' + data[i]['ip'] +'</td>';
list += '<td>' + toSize(data[i]['body_length']) +'</td>';
list += '<td>' + data[i]['request_time'] +'ms</td>';
list += '<td>' + data[i]['uri'] +'</td>';
list += '<td><span class="overflow_hide" style="width:180px;">' + data[i]['uri'] +'</span></td>';
list += '<td>' + data[i]['status_code']+'/' + data[i]['method'] +'</td>';
list += '<td><a href="javascript:;" class="btlink" onclick="openPhpmyadmin()" title="详情">详情</a></td>';
list += '</tr>';
@ -291,12 +290,12 @@ function wsSitesLog(){
<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>时间</th>\
<th width="137">时间</th>\
<th>域名</th>\
<th>IP</th>\
<th>响应</th>\
<th>耗时</th>\
<th>URL</th>\
<th >URL</th>\
<th>状态/类型</th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>\

Loading…
Cancel
Save