增加ua解析记录

sh_branch
liangliang 5 years ago
parent 0d259dc308
commit e876bf1428

@ -51,13 +51,35 @@ class GeoIp(InnerDoc):
location = GeoPoint()
class UserAgentBrowser(InnerDoc):
Family = Keyword()
Version = Keyword()
class UserAgentOS(UserAgentBrowser):
pass
class UserAgentDevice(InnerDoc):
Family = Keyword()
Brand = Keyword()
Model = Keyword()
class UserAgent(InnerDoc):
browser = Object(UserAgentBrowser, required=False)
os = Object(UserAgentOS, required=False)
device = Object(UserAgentDevice, required=False)
string = Text()
class ElapsedTimeDocument(Document):
url = Keyword()
time_taken = Long()
log_datetime = Date()
useragent = Text(analyzer='ik_max_word', search_analyzer='ik_smart')
ip = Keyword()
geoip = Object(GeoIp, required=False)
useragent = Object(UserAgent, required=False)
class Index:
name = 'performance'
@ -80,11 +102,25 @@ class ElaspedTimeDocumentManager():
@staticmethod
def create(url, time_taken, log_datetime, useragent, ip):
from elasticsearch import Elasticsearch
es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
client = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
res = es.indices.exists(index="performance")
res = client.indices.exists(index="performance")
if not res:
ElapsedTimeDocument.init()
ua = UserAgent()
ua.browser = UserAgentBrowser()
ua.browser.Family = useragent.browser.family
ua.browser.Version = useragent.browser.version_string
ua.browser = UserAgentOS()
ua.browser.Family = useragent.os.family
ua.browser.Version = useragent.os.version_string
ua.device = UserAgentDevice()
ua.device.Family = useragent.device.family
ua.device.Brand = useragent.device.brand
ua.device.Model = useragent.device.model
ua.string = useragent.ua_string
doc = ElapsedTimeDocument(
meta={
@ -96,7 +132,7 @@ class ElaspedTimeDocumentManager():
url=url,
time_taken=time_taken,
log_datetime=log_datetime,
useragent=useragent, ip=ip)
useragent=ua, ip=ip)
doc.save(pipeline="geoip")

@ -16,6 +16,7 @@
import time
import logging
from ipware import get_client_ip
from user_agents import parse
from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager
logger = logging.getLogger(__name__)
@ -32,22 +33,23 @@ class OnlineMiddleware(object):
response = self.get_response(request)
http_user_agent = request.META.get('HTTP_USER_AGENT', '')
ip, _ = get_client_ip(request)
if 'spider'.upper() not in http_user_agent.upper():
try:
cast_time = time.time() - start_time
if ELASTICSEARCH_ENABLED:
time_taken = round((cast_time) * 1000, 2)
url = request.path
from django.utils import timezone
ElaspedTimeDocumentManager.create(
url=url,
time_taken=time_taken,
log_datetime=timezone.now(),
useragent=http_user_agent,
ip=ip)
response.content = response.content.replace(
b'<!!LOAD_TIMES!!>', str.encode(str(cast_time)[:5]))
except Exception as e:
logger.error("Error OnlineMiddleware: %s" % e)
user_agent = parse(http_user_agent)
try:
cast_time = time.time() - start_time
if ELASTICSEARCH_ENABLED:
time_taken = round((cast_time) * 1000, 2)
url = request.path
from django.utils import timezone
ElaspedTimeDocumentManager.create(
url=url,
time_taken=time_taken,
log_datetime=timezone.now(),
useragent=user_agent,
ip=ip)
response.content = response.content.replace(
b'<!!LOAD_TIMES!!>', str.encode(str(cast_time)[:5]))
except Exception as e:
logger.error("Error OnlineMiddleware: %s" % e)
return response

@ -189,7 +189,8 @@ class AuthorDetailView(ArticleListView):
page_type = '作者文章归档'
def get_queryset_cache_key(self):
author_name = self.kwargs['author_name']
from uuslug import slugify
author_name = slugify(self.kwargs['author_name'])
cache_key = 'author_{author_name}_{page}'.format(
author_name=author_name, page=self.page_number)
return cache_key

@ -7,7 +7,8 @@
## docker镜像方式
本项目已经支持了docker部署如果你已经有了`mysql`,那么直接使用基础镜像即可,启动命令如下所示:
```shell
docker run -d -p 8000:8000 -e DJANGO_MYSQL_HOST=mysqlhost -e DJANGO_MYSQL_PASSWORD=mysqlrootpassword -e DJANGO_MYSQL_USER=root -e DJANGO_MYSQL_DATABASE=djangoblog --name djangoblog liangliangyy/djangoblog
docker pull liangliangyy/djangoblog:latest
docker run -d -p 8000:8000 -e DJANGO_MYSQL_HOST=mysqlhost -e DJANGO_MYSQL_PASSWORD=mysqlrootpassword -e DJANGO_MYSQL_USER=root -e DJANGO_MYSQL_DATABASE=djangoblog --name djangoblog liangliangyy/djangoblog:latest
```
启动完成后,访问 http://127.0.0.1:8000
## 使用docker-compose

@ -20,8 +20,9 @@ python-slugify==5.0.2
pytz==2021.1
raven==6.10.0
rcssmin==1.0.6
requests==2.25.1
requests==2.26.0
rjsmin==1.1.0
urllib3==1.26.6
WeRoBot==1.13.1
Whoosh==2.7.4
Whoosh==2.7.4
user-agents==2.2.0

Loading…
Cancel
Save