diff --git a/plugins/webstats/index.html b/plugins/webstats/index.html index 0321675c8..b50464cb5 100755 --- a/plugins/webstats/index.html +++ b/plugins/webstats/index.html @@ -32,6 +32,14 @@ overflow: auto; } +.share_num { + background-color: #ff7e0e; + box-sizing: border-box; + height: 25px; + display: inline-block; + vertical-align: bottom; +} + .form-control{ border-radius: 0px; } @@ -187,6 +195,8 @@
网站列表
蜘蛛统计
客服端统计
+IP统计
+URI统计
错误日志
网站日志
全局设置
diff --git a/plugins/webstats/index.py b/plugins/webstats/index.py index 275efadc5..35fec34b1 100755 --- a/plugins/webstats/index.py +++ b/plugins/webstats/index.py @@ -862,6 +862,219 @@ def getClientStatList(): return mw.returnJson(True, 'ok', data) +def getDateRangeList(start, end): + dlist = [] + if start > end: + for x in list(range(start, 32, 1)): + dlist.append(x) + + for x in list(range(1, end, 1)): + dlist.append(x) + else: + for x in list(range(start, end, 1)): + dlist.append(x) + + return dlist + + +def getIpStatList(): + args = getArgs() + check = checkArgs(args, ['site', 'query_date']) + if not check[0]: + return check[1] + + domain = args['site'] + tojs = args['tojs'] + query_date = args['query_date'] + setDefaultSite(domain) + + conn = pSqliteDb('ip_stat', domain) + + origin_field = "ip,day,flow" + + if query_date == "today": + ftime = time.localtime(time.time()) + day = ftime.tm_mday + + field_day = "day" + str(day) + field_flow = "flow" + str(day) + # print(field_day, field_flow) + + field = "ip," + field_day + ' as day,' + field_flow + " as flow" + + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + + elif query_date == "yesterday": + + ftime = time.localtime(time.time() - 86400) + day = ftime.tm_mday + + field_day = "day" + str(day) + field_flow = "flow" + str(day) + + field = "ip," + field_day + ' as day,' + field_flow + " as flow" + + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + elif query_date == "l7": + + field_day = "" + field_flow = "" + + now_time = time.localtime(time.time()) + end_day = now_time.tm_mday + + start_time = time.localtime(time.time() - 7 * 86400) + start_day = start_time.tm_mday + + rlist = getDateRangeList(start_day, end_day) + + for x in rlist: + field_day += "+cast(day" + str(x) + " as TEXT)" + field_flow += "+cast(flow" + str(x) + " as TEXT)" + + field_day = field_day.strip("+") + field_flow = field_flow.strip("+") + + field = "ip,(" + field_day + ') as day,(' + field_flow + ") as flow" + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + + elif query_date == "l30": + + field_day = "" + field_flow = "" + + for x in list(range(1, 32, 1)): + field_day += "+cast(day" + str(x) + " as TEXT)" + field_flow += "+cast(flow" + str(x) + " as TEXT)" + + field_day = field_day.strip("+") + field_flow = field_flow.strip("+") + + # print(field_day) + # print(field_flow) + field = "ip,(" + field_day + ') as day,(' + field_flow + ") as flow" + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + + clist = conn.order("flow desc").limit("50").inquiry(origin_field) + # print(clist) + + total_req = 0 + total_flow = 0 + + for x in clist: + total_req += x['day'] + total_flow += x['flow'] + + for i in range(len(clist)): + clist[i]['day_rate'] = round((clist[i]['day'] / total_req) * 100, 2) + clist[i]['flow_rate'] = round((clist[i]['flow'] / total_flow) * 100, 2) + + return mw.returnJson(True, 'ok', clist) + + +def getUriStatList(): + args = getArgs() + check = checkArgs(args, ['site', 'query_date']) + if not check[0]: + return check[1] + + domain = args['site'] + tojs = args['tojs'] + query_date = args['query_date'] + setDefaultSite(domain) + + conn = pSqliteDb('uri_stat', domain) + + origin_field = "uri,day,flow" + + if query_date == "today": + ftime = time.localtime(time.time()) + day = ftime.tm_mday + + field_day = "day" + str(day) + field_flow = "flow" + str(day) + # print(field_day, field_flow) + + field = "uri," + field_day + ' as day,' + field_flow + " as flow" + + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + + elif query_date == "yesterday": + + ftime = time.localtime(time.time() - 86400) + day = ftime.tm_mday + + field_day = "day" + str(day) + field_flow = "flow" + str(day) + + field = "uri," + field_day + ' as day,' + field_flow + " as flow" + + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + elif query_date == "l7": + + field_day = "" + field_flow = "" + + now_time = time.localtime(time.time()) + end_day = now_time.tm_mday + + start_time = time.localtime(time.time() - 7 * 86400) + start_day = start_time.tm_mday + + rlist = getDateRangeList(start_day, end_day) + + for x in rlist: + field_day += "+cast(day" + str(x) + " as TEXT)" + field_flow += "+cast(flow" + str(x) + " as TEXT)" + + field_day = field_day.strip("+") + field_flow = field_flow.strip("+") + + field = "uri,(" + field_day + ') as day,(' + field_flow + ") as flow" + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + + elif query_date == "l30": + + field_day = "" + field_flow = "" + + for x in list(range(1, 32, 1)): + field_day += "+cast(day" + str(x) + " as TEXT)" + field_flow += "+cast(flow" + str(x) + " as TEXT)" + + field_day = field_day.strip("+") + field_flow = field_flow.strip("+") + + # print(field_day) + # print(field_flow) + field = "uri,(" + field_day + ') as day,(' + field_flow + ") as flow" + conn = conn.field(field) + conn = conn.where("day>? and flow>?", (0, 0,)) + + clist = conn.order("flow desc").limit("50").inquiry(origin_field) + # print(clist) + + total_req = 0 + total_flow = 0 + + for x in clist: + total_req += x['day'] + total_flow += x['flow'] + + for i in range(len(clist)): + clist[i]['day_rate'] = round((clist[i]['day'] / total_req) * 100, 2) + clist[i]['flow_rate'] = round((clist[i]['flow'] / total_flow) * 100, 2) + + return mw.returnJson(True, 'ok', clist) + + def getWebLogCount(domain, query_date): conn = pSqliteDb('web_logs', domain) @@ -1022,6 +1235,10 @@ if __name__ == "__main__": print(getLogsRealtimeInfo()) elif func == 'get_client_stat_list': print(getClientStatList()) + elif func == 'get_ip_stat_list': + print(getIpStatList()) + elif func == 'get_uri_stat_list': + print(getUriStatList()) elif func == 'get_spider_stat_list': print(getSpiderStatList()) else: diff --git a/plugins/webstats/info.json b/plugins/webstats/info.json index 0958d5c3a..f404a37d5 100755 --- a/plugins/webstats/info.json +++ b/plugins/webstats/info.json @@ -4,7 +4,7 @@ "name": "webstats", "title": "网站统计", "shell": "install.sh", - "versions":["0.1.0"], + "versions":["0.2.0"], "tip": "soft", "checks": "server/webstats", "path": "server/webstats", diff --git a/plugins/webstats/js/stats.js b/plugins/webstats/js/stats.js index 3b5b5a98d..88240c96a 100644 --- a/plugins/webstats/js/stats.js +++ b/plugins/webstats/js/stats.js @@ -1731,6 +1731,240 @@ wsPost('get_default_site','',{},function(rdata){ +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 += '| 序号 | \ +IP | \ +归属地(仅供参考) | \ +请求数 | \ +流量 | \ +流量占比图 | \ +
|---|
| 序号 | \ +URI | \ +请求数 | \ +流量 | \ +流量占比图 | \ +
|---|