Skip to content

Commit

Permalink
增加ua解析记录
Browse files Browse the repository at this point in the history
  • Loading branch information
liangliangyy committed Jul 20, 2021
1 parent 0d259dc commit e876bf1
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 26 deletions.
44 changes: 40 additions & 4 deletions blog/documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -80,11 +102,25 @@ def delete_index():
@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={
Expand All @@ -96,7 +132,7 @@ def create(url, time_taken, log_datetime, useragent, ip):
url=url,
time_taken=time_taken,
log_datetime=log_datetime,
useragent=useragent, ip=ip)
useragent=ua, ip=ip)
doc.save(pipeline="geoip")


Expand Down
38 changes: 20 additions & 18 deletions blog/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)
Expand All @@ -32,22 +33,23 @@ def __call__(self, request):
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
3 changes: 2 additions & 1 deletion blog/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion docs/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit e876bf1

Please sign in to comment.