Skip to content

Commit

Permalink
完善后台统计功能
Browse files Browse the repository at this point in the history
  • Loading branch information
smallevil committed Nov 27, 2020
1 parent 253da78 commit f70429b
Show file tree
Hide file tree
Showing 10 changed files with 350 additions and 13 deletions.
8 changes: 7 additions & 1 deletion code/apps/models/AdminModel.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# @Author: smallevil
# @Date: 2020-11-24 10:48:40
# @Last Modified by: smallevil
# @Last Modified time: 2020-11-27 02:26:56
# @Last Modified time: 2020-11-27 19:00:27

import hashlib
from .TBDB import TBDB
Expand Down Expand Up @@ -30,6 +30,9 @@ def adminLogin(self, nick, passwd):
def getUserInfoByID(self, userID):
return self._db.getUserInfoByID(userID)

def getLinkInfoByID(self, linkID):
return self._db.getLinkInfoByID(linkID)

#添加短链接
def addLinkInfo(self, userID, url, domain, tag):
urlmd5 = self.md5(url)
Expand Down Expand Up @@ -104,4 +107,7 @@ def statBrowser(self, linkID, date):
def statAddr(self, linkID, date):
return self._db.statAddr(linkID, date)

def statViewHistory(self, linkID, date, start, limit):
return self._db.statViewHistory(linkID, date, start, limit)


35 changes: 34 additions & 1 deletion code/apps/models/TBDB.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# @Author: smallevil
# @Date: 2020-11-24 10:48:40
# @Last Modified by: smallevil
# @Last Modified time: 2020-11-27 17:28:53
# @Last Modified time: 2020-11-27 18:50:50

import records
from hashids import Hashids
Expand Down Expand Up @@ -66,6 +66,20 @@ def getLinkInfoByKey(self, key):
else:
return None

#根据key得到短链信息
def getLinkInfoByID(self, linkID):
if not linkID:
return None

params = {'id':linkID}
sql = "select * from link_info where link_id=:id"
rows = self._conn.query(sql, **params)
row = rows.first(as_dict=True)
if row:
return row
else:
return None

#根据urlmd5判断是否已添加
def getLinkInfoByMD5(self, userID, urlmd5):
if not urlmd5 or not userID:
Expand Down Expand Up @@ -267,6 +281,25 @@ def statAddr(self, linkID, date):
rows = self._conn.query(sql, **params)
return rows.all(as_dict=True)

def statViewHistory(self, linkID, date, start, limit):
limitDate = str(arrow.get(date, 'YYYYMMDD').format('YYYY-MM-DD'))
params = {'link_id':linkID, 'date':limitDate, 'start':start, 'limit':limit}

if self._dbType:
sql = "select * from link_record where link_id=:link_id and record_date>=:date order by record_id desc limit :start, :limit"
else:
sql = "select * from link_record where link_id=:link_id and record_date>=:date order by record_id desc limit :limit offset :start"

info = {}
rows = self._conn.query(sql, **params)
info['list'] = rows.all(as_dict=True)

sql = "select count(*) as total from link_record where link_id=:link_id and record_date>=:date"
rows = self._conn.query(sql, **params)
row = rows.first(as_dict=True)
info['total'] = row['total']

return info



Expand Down
2 changes: 1 addition & 1 deletion code/apps/templates/admin/add.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<form class="ui large form" method="post">
<div class="field">
<label>标签</label>
<input type="text" name="tag" placeholder="标签(10字以内),可以为空">
<input type="text" name="tag" placeholder="标签(10字以内),必填">

<label>输入完整url</label>
<input type="text" name="url" placeholder="完整url">
Expand Down
20 changes: 20 additions & 0 deletions code/apps/templates/admin/stat_addr.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@
<tr>
<td>
<div class="ui menu">
<div class="ui dropdown item">{{ tplData.link_info.link_tag }}<i class="dropdown icon"></i>
<div class="menu">
{% for info in tplData.urls %}
<a class="item" data-value="{{ url_for('admin.adminStatAddr', linkID=info.link_id, date=tplData.date) }}">{{ info.link_tag }}</a>
{% endfor %}
</div>
</div>
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date1) }}" class="item">PV统计</a>
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date1) }}" class="item">平台统计</a>
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date1) }}" class="item">环境统计</a>
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date1) }}" class="item active red">地区统计</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date1, page=1) }}" class="item">浏览记录</a>
<div class="right menu">
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date1) }}" class="item {% if tplData.date==tplData.date1 %}active red{% endif %}">今日</a>
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date7) }}" class="item {% if tplData.date==tplData.date7 %}active red{% endif %}">近7天</a>
Expand Down Expand Up @@ -59,5 +67,17 @@
<div>

</body>
<script>
$(document).ready(function() {
$('.ui.dropdown').dropdown({
action: function(text, value) {
// nothing built in occurs
//console.log(text);
//console.log(value);
location.href=value;
}
});
});

</script>
</html>
20 changes: 20 additions & 0 deletions code/apps/templates/admin/stat_browser.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@
<tr>
<td>
<div class="ui menu">
<div class="ui dropdown item">{{ tplData.link_info.link_tag }}<i class="dropdown icon"></i>
<div class="menu">
{% for info in tplData.urls %}
<a class="item" data-value="{{ url_for('admin.adminStatBrowser', linkID=info.link_id, date=tplData.date) }}">{{ info.link_tag }}</a>
{% endfor %}
</div>
</div>
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date1) }}" class="item">PV统计</a>
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date1) }}" class="item">平台统计</a>
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date1) }}" class="item active red">环境统计</a>
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date1) }}" class="item">地区统计</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date1, page=1) }}" class="item">浏览记录</a>
<div class="right menu">
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date1) }}" class="item {% if tplData.date==tplData.date1 %}active red{% endif %}">今日</a>
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date7) }}" class="item {% if tplData.date==tplData.date7 %}active red{% endif %}">近7天</a>
Expand Down Expand Up @@ -59,5 +67,17 @@
<div>

</body>
<script>
$(document).ready(function() {
$('.ui.dropdown').dropdown({
action: function(text, value) {
// nothing built in occurs
//console.log(text);
//console.log(value);
location.href=value;
}
});
});

</script>
</html>
20 changes: 20 additions & 0 deletions code/apps/templates/admin/stat_platform.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@
<tr>
<td>
<div class="ui menu">
<div class="ui dropdown item">{{ tplData.link_info.link_tag }}<i class="dropdown icon"></i>
<div class="menu">
{% for info in tplData.urls %}
<a class="item" data-value="{{ url_for('admin.adminStatPlatform', linkID=info.link_id, date=tplData.date) }}">{{ info.link_tag }}</a>
{% endfor %}
</div>
</div>
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date1) }}" class="item">PV统计</a>
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date1) }}" class="item active red">平台统计</a>
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date1) }}" class="item">环境统计</a>
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date1) }}" class="item">地区统计</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date1, page=1) }}" class="item">浏览记录</a>
<div class="right menu">
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date1) }}" class="item {% if tplData.date==tplData.date1 %}active red{% endif %}">今日</a>
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date7) }}" class="item {% if tplData.date==tplData.date7 %}active red{% endif %}">近7天</a>
Expand Down Expand Up @@ -59,5 +67,17 @@
<div>

</body>
<script>
$(document).ready(function() {
$('.ui.dropdown').dropdown({
action: function(text, value) {
// nothing built in occurs
//console.log(text);
//console.log(value);
location.href=value;
}
});
});

</script>
</html>
21 changes: 21 additions & 0 deletions code/apps/templates/admin/stat_pv.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@
<tr>
<td>
<div class="ui menu">
<div class="ui dropdown item">{{ tplData.link_info.link_tag }}<i class="dropdown icon"></i>
<div class="menu">
{% for info in tplData.urls %}
<a class="item" data-value="{{ url_for('admin.adminStatPV', linkID=info.link_id, date=tplData.date) }}">{{ info.link_tag }}</a>
{% endfor %}
</div>
</div>
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date1) }}" class="item active red">PV统计</a>
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date1) }}" class="item">平台统计</a>
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date1) }}" class="item">环境统计</a>
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date1) }}" class="item">地区统计</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date1, page=1) }}" class="item">浏览记录</a>
<div class="right menu">
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date1) }}" class="item {% if tplData.date==tplData.date1 %}active red{% endif %}">今日</a>
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date7) }}" class="item {% if tplData.date==tplData.date7 %}active red{% endif %}">近7天</a>
Expand Down Expand Up @@ -64,4 +72,17 @@

</body>

<script>
$(document).ready(function() {
$('.ui.dropdown').dropdown({
action: function(text, value) {
// nothing built in occurs
//console.log(text);
//console.log(value);
location.href=value;
}
});
});

</script>
</html>
137 changes: 137 additions & 0 deletions code/apps/templates/admin/stat_view_history.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
<!DOCTYPE html>
<html>
<head>
<!-- Standard Meta -->
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">

<title>浏览记录</title>

<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.css" />
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.js"></script>

</head>

<body>
{% include '/admin/top_banner.html' %}

<div class="ui grid equal width aligned padded">
{% include '/admin/left_menu.html' %}
<div class="thirteen wide column">
<table class="ui celled table">
<tr>
<td>
<div class="ui menu">
<div class="ui dropdown item">{{ tplData.link_info.link_tag }}<i class="dropdown icon"></i>
<div class="menu">
{% for info in tplData.urls %}
<a class="item" data-value="{{ url_for('admin.adminStatViewHistory', linkID=info.link_id, date=tplData.date, page=1) }}">{{ info.link_tag }}</a>
{% endfor %}
</div>
</div>
<a href="{{ url_for('admin.adminStatPV', linkID=tplData.link_id, date=tplData.date1) }}" class="item">PV统计</a>
<a href="{{ url_for('admin.adminStatPlatform', linkID=tplData.link_id, date=tplData.date1) }}" class="item">平台统计</a>
<a href="{{ url_for('admin.adminStatBrowser', linkID=tplData.link_id, date=tplData.date1) }}" class="item">环境统计</a>
<a href="{{ url_for('admin.adminStatAddr', linkID=tplData.link_id, date=tplData.date1) }}" class="item">地区统计</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date1, page=1) }}" class="item active red">浏览记录</a>
<div class="right menu">
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date1, page=1) }}" class="item {% if tplData.date==tplData.date1 %}active red{% endif %}">今日</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date7, page=1) }}" class="item {% if tplData.date==tplData.date7 %}active red{% endif %}">近7天</a>
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date30, page=1) }}" class="item {% if tplData.date==tplData.date30 %}active red{% endif %}">近30日</a>
</div>
</div>
</td>
</tr>
</table>

<table class="ui celled table">
<thead>
<tr>
<th>时间</th>
<th>IP</th>
<th>地址</th>
<th>类型</th>
<th>平台</th>
<th>环境</th>
<th>设备</th>
</tr>
</thead>

<tbody>
{% for info in tplData.list.list %}
<tr class="label" data-title="" data-html="User-Agent:<br />{{ info.record_ua }}<br /><br />Referer:{{ info.record_referer }}">
<td>{{ info.record_ctime }}</td>
<td>
{{ info.record_ip }}
</td>
<td>
{{ info.record_country }}/{{ info.record_province }}/{{ info.record_city }}
</td>
<td>
{% if info.record_ua_type == 1 %}
机器人
{% elif info.record_ua_type == 2 %}
PC
{% elif info.record_ua_type == 3 %}
平板
{% elif info.record_ua_type == 4 %}
手机
{% else %}
未知
{% endif %}
</td>
<td>{{ info.record_platform }}</td>
<td>{{ info.record_browser }}</td>
<td>{{ info.record_device }}</td>
</tr>
{% endfor %}
</tbody>

<tfoot>
<tr><th colspan="7">
<div class="ui right floated pagination menu">
{% if tplData.pre_page %}
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date, page=tplData.page-1) }}" class="icon item"><i class="left chevron icon"></i></a>
{% else %}
<a class="icon item disabled"><i class="left chevron icon"></i></a>
{% endif %}

{% for page in range(tplData.min_page, tplData.max_page + 1) %}
{% if tplData.page == page %}
<a class="disabled item">{{ page }} / {{ tplData.total_page }}</a>
{% else %}
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date, page=page) }}" class="item">{{ page }}</a>
{% endif %}
{% endfor %}

{% if tplData.next_page %}
<a href="{{ url_for('admin.adminStatViewHistory', linkID=tplData.link_id, date=tplData.date, page=tplData.page+1) }}" class="icon item"><i class="right chevron icon"></i></a>
{% else %}
<a class="icon item disabled"><i class="right chevron icon"></i></a>
{% endif %}
</div>
</th></tr>
</tfoot>
</table>
</div>
<div>

</body>
<script>
$(document).ready(function() {
$('.ui.dropdown').dropdown({
action: function(text, value) {
// nothing built in occurs
//console.log(text);
//console.log(value);
location.href=value;
}
});

$('.label').popup({}); //划过时自动提示
});

</script>
</html>
Loading

0 comments on commit f70429b

Please sign in to comment.