网站统计 x15

pull/139/head
midoks 3 years ago
parent 6084bcf9aa
commit b5c56034e2
  1. 3
      plugins/webstats/conf/config.json
  2. 2
      plugins/webstats/index.html
  3. 97
      plugins/webstats/index.py
  4. 8
      plugins/webstats/js/setting.js
  5. 195
      plugins/webstats/js/stats.js
  6. 7
      route/static/app/files.js
  7. 1
      route/static/js/jquery.contextify.min.js.map

@ -47,6 +47,5 @@
"record_get_403_args": false,
"push_report": false,
"data_dir": "/www/server/webstats/logs"
},
"default_site": "unset"
}
}

@ -206,6 +206,6 @@ $.getScript( "/plugins/file?name=webstats&f=js/stats.js", function(){
});
$.getScript( "/plugins/file?name=webstats&f=js/setting.js", function(){
console.log("webstats setting load done");
console.log("webstats setting load done");
});
</script>

@ -299,6 +299,99 @@ def setGlobalConf():
return mw.returnJson(True, '设置成功')
def getSiteConf():
args = getArgs()
check = checkArgs(args, ['site'])
if not check[0]:
return check[1]
domain = args['site']
conf = getConf()
content = mw.readFile(conf)
content = json.loads(content)
site_conf = {}
if domain in content:
site_conf = content[domain]
else:
site_conf["cdn_headers"] = content['global']['cdn_headers']
site_conf["exclude_extension"] = content['global']['exclude_extension']
site_conf["exclude_status"] = content['global']['exclude_status']
site_conf["exclude_ip"] = content['global']['exclude_ip']
site_conf["exclude_url"] = content['global']['exclude_url']
site_conf["record_post_args"] = content['global']['record_post_args']
site_conf["record_get_403_args"] = content[
'global']['record_get_403_args']
return mw.returnJson(True, 'ok', site_conf)
def setSiteConf():
args = getArgs()
check = checkArgs(args, ['site'])
if not check[0]:
return check[1]
domain = args['site']
conf = getConf()
content = mw.readFile(conf)
content = json.loads(content)
site_conf = {}
if domain in content:
site_conf = content[domain]
else:
site_conf["cdn_headers"] = content['global']['cdn_headers']
site_conf["exclude_extension"] = content['global']['exclude_extension']
site_conf["exclude_status"] = content['global']['exclude_status']
site_conf["exclude_ip"] = content['global']['exclude_ip']
site_conf["exclude_url"] = content['global']['exclude_url']
site_conf["record_post_args"] = content['global']['record_post_args']
site_conf["record_get_403_args"] = content[
'global']['record_get_403_args']
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
site_conf[v] = rval
for v in ['ip_top_num', 'uri_top_num', 'save_day']:
data = checkArgs(args, [v])
if data[0]:
site_conf[v] = int(args[v])
for v in ['cdn_headers', 'exclude_extension', 'exclude_status', 'exclude_ip']:
data = checkArgs(args, [v])
if data[0]:
site_conf[v] = args[v].split("\\n")
data = checkArgs(args, ['exclude_url'])
if data[0]:
exclude_url = args['exclude_url'].strip(";")
exclude_url_val = []
if exclude_url != "":
exclude_url_list = exclude_url.split(";")
for i in exclude_url_list:
t = i.split("|")
val = {}
val['mode'] = t[0]
val['url'] = t[1]
exclude_url_val.append(val)
site_conf['exclude_url'] = exclude_url_val
content[domain] = site_conf
mw.writeFile(conf, json.dumps(content))
conf_lua = getServerDir() + "/lua/config.lua"
listToLuaFile(conf_lua, content)
mw.restartWeb()
return mw.returnJson(True, '设置成功')
def getSiteListData():
lua_dir = getServerDir() + "/lua"
path = lua_dir + "/default.json"
@ -892,6 +985,10 @@ if __name__ == "__main__":
print(getGlobalConf())
elif func == 'set_global_conf':
print(setGlobalConf())
elif func == 'get_site_conf':
print(getSiteConf())
elif func == 'set_site_conf':
print(setSiteConf())
elif func == 'get_default_site':
print(getDefaultSite())
elif func == 'get_overview_list':

@ -192,15 +192,15 @@ wsPost('get_global_conf', '' ,{}, function(rdata){
if ( [0,1,2,4].indexOf(select_pos)>-1 ){
var setting_cdn = $('textarea[name="setting-cdn"]').val();
var list = setting_cdn.split('\n')
// var list = setting_cdn.split('\n')
var args = {}
if ( select_pos == 0 ){
args['cdn_headers'] = list;
args['cdn_headers'] = setting_cdn;
} else if ( select_pos == 1 ){
args['exclude_extension'] = list;
args['exclude_extension'] = setting_cdn;
} else if ( select_pos == 2 ){
args['exclude_status'] = list;
args['exclude_status'] = setting_cdn;
} else if ( select_pos == 4 ){
args['exclude_ip'] = setting_cdn;
}

@ -692,7 +692,7 @@ function wsSitesListRequest(page){
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 details" title="设置">设置</a></td>';
list += '<td><a data-id="'+i+'" href="javascript:;" class="btlink web_set" title="设置">设置</a></td>';
list += '</tr>';
}
} else{
@ -721,6 +721,197 @@ function wsSitesListRequest(page){
</div>\
<div id="wsPage" class="dataTables_paginate paging_bootstrap page"></div>';
$('#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</span>\
<span data-type="exclude_extension">排除扩展</span>\
<span data-type="exclude_status">排除响应状态</span>\
<span data-type="exclude_url">排除路径</span>\
<span data-type="exclude_ip">排除IP</span>\
<span data-type="record_post_args">记录请求原文</span>\
</div>\
<div class="tab-con">\
<span class="ws_tips">* 准确识别CDN网络IP地址请注意大小写如需多个请换行填写</span>\
<textarea name="setting-cdn" cols="52" rows="8"></textarea>\
</div>\
</div>\
</div>',
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不写入网站日志不统计PVUVIP只累计总请求总流量数如需多个请换行填写</div>\
<div style="margin-left: -10px">* 支持 192.168.1.1-192.168.1.10格式排除区间IP</div>'
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请求原文包括客户端请求详细参数有助于分析或排查异常请求</div>\
<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['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请求原文\
</label>\
<label style="cursor: pointer;">\
<input type="checkbox" name="record_get_403_args" style="margin: 1px 10 0;" '+record_get_403_args+'><span>记录403错误请求原文</span>\
</label>\
</div>';
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':'')+'>完整匹配</option>\
<option value="regular" '+(_tmp[i].mode == 'regular'?'selected':'')+'>模糊匹配</option>\
</select>\
</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>';
}
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">排除方式</th><th></th></tr>\
</thead>\
<tbody>'+_text+'</tbody>\
</table>\
</div>';
content += list;
$('#site_conf .tab-con').html(content);
}
});
},
yes: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;}
});
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});
});
}
},
});
});
});
});
}
@ -1146,8 +1337,6 @@ wsPost('get_default_site','',{},function(rdata){
}
function wsClientStatLogRequest(page){
var args = {};

@ -968,11 +968,10 @@ function downloadFile(action){
</div>\
</form>'
});
fly("dlok");
$("#mUrl").keyup(function(){
durl = $(this).val()
tmp = durl.split('/')
$("#dfilename").val(tmp[tmp.length-1])
durl = $(this).val();
tmp = durl.split('/');
$("#dfilename").val(tmp[tmp.length-1]);
});
}

@ -0,0 +1 @@
{"version":3,"sources":["jquery.contextify.js"],"names":["factory","define","amd","jQuery","window","$","Plugin","element","options","this","extend","defaults","_defaults","_name","pluginName","init","items","action","menuId","menuClass","headerClass","dividerClass","before","contextifyId","$window","prototype","data","id","attr","on","e","preventDefault","menu","i","l","length","item","el","divider","addClass","header","html","append","a","find","href","onclick","css","text","currentMenu","replaceWith","windowWidth","width","windowHeight","height","menuWidth","outerWidth","menuHeight","outerHeight","x","clientX","y","clientY","show","parents","hide","destroy","removeAttr","off","remove","fn","each","Object","toString","call"],"mappings":"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","file":"jquery.contextify.min.js"}
Loading…
Cancel
Save