Skip to content

Commit

Permalink
monitoring support for geoip2
Browse files Browse the repository at this point in the history
  • Loading branch information
cezio committed May 8, 2018
1 parent 98b7529 commit 799f049
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
28 changes: 21 additions & 7 deletions geonode/contrib/monitoring/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
from django.contrib.gis.geoip import GeoIP

import user_agents
from ipware import get_client_ip
from multi_email_field.forms import MultiEmailField

from geonode.utils import parse_datetime
Expand Down Expand Up @@ -434,23 +435,31 @@ def from_geonode(cls, service, request, response):
ua = request.META.get('HTTP_USER_AGENT') or ''
ua_family = cls._get_ua_family(ua)

ip = request.get_host()
ip, is_routable = get_client_ip(request)
lat = lon = None
country = region = city = None
if ip:
if ip and is_routable:
ip = ip.split(':')[0]
if settings.TEST and ip == 'testserver':
ip = '127.0.0.1'
ip = gethostbyname(ip)
try:
ip = gethostbyname(ip)
except Exception, err:
pass

geoip = get_geoip()
client_loc = geoip.city(ip)
try:
client_loc = geoip.city(ip)
except Exception, err:
log.warning("Cannot resolve %s: %s", ip,err)
client_loc = None

if client_loc:
lat, lon = client_loc['latitude'], client_loc['longitude'],
country = client_loc['country_code3']
country = client_loc['country_code']
region = client_loc['region']
city = client_loc['city']

data = {'received': received,
'created': created,
'host': request.get_host(),
Expand Down Expand Up @@ -500,10 +509,15 @@ def from_geoserver(cls, service, request_data, received=None):
country = region = city = None
if ip:
geoip = get_geoip()
client_loc = geoip.city(ip)
try:
client_loc = geoip.city(ip)
except Exception, err:
log.warning("Cannot resolve %s: %s", ip,err)
client_loc = None

if client_loc:
lat, lon = client_loc['latitude'], client_loc['longitude'],
country = client_loc['country_code3']
country = client_loc['country_code']
region = client_loc['region']
city = client_loc['city']

Expand Down
8 changes: 4 additions & 4 deletions geonode/contrib/monitoring/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,9 @@ def setUp(self):
"(KHTML, like Gecko) Chrome/59.0.3071.47 Safari/537.36")
populate()

self.host = Host.objects.create(name='localhost', ip='127.0.0.1')
self.host, _ = Host.objects.get_or_create(name='localhost', ip='127.0.0.1')
self.service_type = ServiceType.objects.get(name=ServiceType.TYPE_GEONODE)
self.service = Service.objects.create(name=settings.MONITORING_SERVICE_NAME,
self.service, _ = Service.objects.get_or_create(name=settings.MONITORING_SERVICE_NAME,
host=self.host,
service_type=self.service_type)

Expand Down Expand Up @@ -218,9 +218,9 @@ def setUp(self):
super(MonitoringChecksTestCase, self).setUp()

populate()
self.host = Host.objects.create(name='localhost', ip='127.0.0.1')
self.host, _ = Host.objects.get_or_create(name='localhost', ip='127.0.0.1')
self.service_type = ServiceType.objects.get(name=ServiceType.TYPE_GEONODE)
self.service = Service.objects.create(name=settings.MONITORING_SERVICE_NAME,
self.service, _ = Service.objects.get_or_create(name=settings.MONITORING_SERVICE_NAME,
host=self.host,
service_type=self.service_type)
self.metric = Metric.objects.get(name='request.count')
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -192,3 +192,4 @@ pytest-splinter==1.8.5
pytest-django==3.1.2
setuptools==39.0.1
geoip2==2.8.0
django-ipware<2.2

0 comments on commit 799f049

Please sign in to comment.