网站统计 xx9

pull/139/head
midoks 3 years ago
parent b6b2164cbf
commit a7d680eb70
  1. 16
      class/core/db.py
  2. 4
      class/core/mw.py
  3. 37
      plugins/webstats/index.py
  4. 90
      plugins/webstats/js/stats.js

@ -49,10 +49,21 @@ class Sql():
self.__OPT_PARAM = param
return self
def andWhere(self, where, param):
# WHERE条件
if where:
self.__OPT_WHERE = self.__OPT_WHERE + " and " + where
# print(param)
# print(self.__OPT_PARAM)
self.__OPT_PARAM = self.__OPT_PARAM + param
return self
def order(self, order):
# ORDER条件
if len(order):
self.__OPT_ORDER = " ORDER BY " + order
else:
self.__OPT_ORDER = ""
return self
def limit(self, limit):
@ -108,7 +119,6 @@ class Sql():
try:
sql = "SELECT " + self.__OPT_FIELD + " FROM " + self.__DB_TABLE + \
self.__OPT_WHERE + self.__OPT_ORDER + self.__OPT_LIMIT
# print(sql)
result = self.__DB_CONN.execute(sql, self.__OPT_PARAM)
data = result.fetchall()
# 构造字曲系列
@ -229,8 +239,8 @@ class Sql():
opt = opt[0:len(opt) - 1]
sql = "UPDATE " + self.__DB_TABLE + " SET " + opt + self.__OPT_WHERE
import mw
mw.writeFile('/tmp/test.pl', sql)
# import mw
# mw.writeFile('/tmp/test.pl', sql)
# 处理拼接WHERE与UPDATE参数
tmp = list(param)

@ -165,9 +165,9 @@ def restartMw():
def checkWebConfig():
op_dir = getServerDir() + '/openresty'
op_dir = getServerDir() + '/openresty/nginx'
cmd = "ulimit -n 10240 && " + op_dir + \
"/nginx/sbin/nginx -t -c " + op_dir + "/nginx/conf/nginx.conf"
"/sbin/nginx -t -c " + op_dir + "/conf/nginx.conf"
result = execShell(cmd)
searchStr = 'successful'
if result[1].find(searchStr) == -1:

@ -311,7 +311,7 @@ def setDefaultSite(name):
def getLogsList():
args = getArgs()
check = checkArgs(args, ['page', 'page_size',
'site', 'method', 'status_code', 'spider_type'])
'site', 'method', 'status_code', 'spider_type', 'query_date', 'search_uri'])
if not check[0]:
return check[1]
@ -322,7 +322,8 @@ def getLogsList():
method = args['method']
status_code = args['status_code']
spider_type = args['spider_type']
query_date = args['query_date']
search_uri = args['search_uri']
setDefaultSite(domain)
limit = str(page_size) + ' offset ' + str(page_size * (page - 1))
@ -331,26 +332,44 @@ def getLogsList():
field = 'time,ip,domain,server_name,method,status_code,request_time,uri,body_length'
condition = ''
conn = conn.field(field)
conn = conn.where("1=1", ())
if method != "all":
conn = conn.where("method=?", (method,))
conn = conn.andWhere("method=?", (method,))
if status_code != "all":
conn = conn.where("status_code=?", (status_code,))
conn = conn.andWhere("status_code=?", (status_code,))
if spider_type == "normal":
pass
elif spider_type == "only_spider":
conn = conn.where("is_spider>?", (0,))
conn = conn.andWhere("is_spider>?", (0,))
elif spider_type == "no_spider":
conn = conn.where("is_spider=?", (0,))
conn = conn.andWhere("is_spider=?", (0,))
elif int(spider_type) > 0:
conn = conn.where("is_spider=?", (spider_type,))
conn = conn.andWhere("is_spider=?", (spider_type,))
todayTime = time.strftime('%Y-%m-%d 00:00:00', time.localtime())
todayUt = int(time.mktime(time.strptime(todayTime, "%Y-%m-%d %H:%M:%S")))
if query_date == 'today':
conn = conn.andWhere("time>=?", (todayUt,))
elif query_date == "yesterday":
conn = conn.andWhere("time>=? and time<=?", (todayUt - 86400, todayUt))
elif query_date == "l7":
conn = conn.andWhere("time>=?", (todayUt - 7 * 86400,))
elif query_date == "l30":
conn = conn.andWhere("time>=?", (todayUt - 30 * 86400,))
else:
exlist = query_date.split("-")
conn = conn.andWhere("time>=? and time<=?", (exlist[0], exlist[1]))
clist = conn.limit(limit).order('time desc').inquiry()
if search_uri != "":
conn = conn.andWhere("uri like '%" + search_uri + "%'", ())
clist = conn.limit(limit).order('time desc').inquiry()
count_key = "count(*) as num"
count = conn.field(count_key).limit('').inquiry()
count = conn.field(count_key).limit('').order('').inquiry()
# print(count)
count = count[0][count_key]
data = {}

@ -173,7 +173,7 @@ function wsSitesErrorLog(){
args['tojs'] = 'wsSitesErrorLog';
wsPost('get_logs_list', '' ,args, function(rdata){
var rdata = $.parseJSON(rdata.data);
console.log(rdata);
// console.log(rdata);
var list = '';
var data = rdata.data.data;
for(i in data){
@ -267,7 +267,6 @@ function wsSitesErrorLog(){
function wsTableLogRequest(page){
// console.log("wsTableRequest:",$('select[name="site"]').val());
var args = {};
args['page'] = page;
args['page_size'] = 10;
@ -276,23 +275,43 @@ function wsTableLogRequest(page){
args['method'] = $('select[name="method"]').val();
args['status_code'] = $('select[name="status_code"]').val();
args['spider_type'] = $('select[name="spider_type"]').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';
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){
list += '<tr>';
list += '<td>' + getLocalTime(data[i]['time'])+'</td>';
list += '<td>' + data[i]['domain'] +'</td>';
list += '<td>' + data[i]['ip'] +'</td>';
list += '<td>' + toSize(data[i]['body_length']) +'</td>';
list += '<td>' + data[i]['request_time'] +'ms</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>';
if (data.length > 0){
for(i in data){
list += '<tr>';
list += '<td>' + getLocalTime(data[i]['time'])+'</td>';
list += '<td>' + data[i]['domain'] +'</td>';
list += '<td>' + data[i]['ip'] +'</td>';
list += '<td>' + toSize(data[i]['body_length']) +'</td>';
list += '<td>' + data[i]['request_time'] +'ms</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>';
}
} 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>\
@ -326,13 +345,13 @@ var html = '<div>\
</select>\
<span style="margin-left:10px">时间: </span>\
<div class="input-group" style="margin-left:10px;width:550px;display: inline-table;vertical-align: top;">\
<div class="input-group-btn btn-group-sm">\
<button type="button" class="btn btn-default">今日</button>\
<button type="button" class="btn btn-default">昨日</button>\
<button type="button" class="btn btn-default">近7天</button>\
<button type="button" class="btn btn-default">近30天</button>\
<div id="search_time" class="input-group-btn btn-group-sm">\
<button data-name="today" type="button" class="btn btn-default">今日</button>\
<button data-name="yesterday" type="button" class="btn btn-default">昨日</button>\
<button data-name="l7" type="button" class="btn btn-default">近7天</button>\
<button data-name="l30" type="button" class="btn btn-default">近30天</button>\
</div>\
<span class="last-span"><input 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;"></span>\
<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;"></span>\
</div>\
</div>\
<div style="padding-bottom:10px;">\
@ -374,9 +393,9 @@ var html = '<div>\
</select>\
<span style="margin-left:10px;">URL过滤: </span>\
<div class="input-group" style="width:210px;display:inline-flex;">\
<input type="text" class="form-control btn-group-sm" autocomplete="off" placeholder="URI搜索" style="font-size: 12px;padding: 0 10px;height:30px;">\
<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 type="button" class="btn btn-default">搜索</button>\
<button id="logs_search" type="button" class="btn btn-default">搜索</button>\
</div>\
</div>\
</div>\
@ -391,19 +410,40 @@ laydate.render({
range:true,
done:function(value, startDate, endDate){
if(!value){
$('#time_choose').remove("cur");
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")
console.log(query_txt)
$('#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);
});
@ -416,6 +456,10 @@ $('select[name="spider_type"]').change(function(){
wsTableLogRequest(1);
});
$('#logs_search').click(function(){
wsTableLogRequest(1);
});
wsPost('get_default_site','',{},function(rdata){
$('select[name="site"]').html('');

Loading…
Cancel
Save