From d2102bc915aeda2cd98789cd2aca6bbc1c94f130 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Jaillet Date: Thu, 29 Sep 2016 19:00:40 +0200 Subject: [PATCH] endpoints: add check for base_adresse endpoint (#9416) --- passerelle/apps/base_adresse/models.py | 29 +++++++++++++++++++++- .../base/migrations/0003_endpointcheckping.py | 23 +++++++++++++++++ passerelle/base/models.py | 6 +++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 passerelle/base/migrations/0003_endpointcheckping.py diff --git a/passerelle/apps/base_adresse/models.py b/passerelle/apps/base_adresse/models.py index b555354..fb77e5c 100644 --- a/passerelle/apps/base_adresse/models.py +++ b/passerelle/apps/base_adresse/models.py @@ -1,15 +1,21 @@ import urlparse import unicodedata +import json from django.db import models from django.utils.http import urlencode from django.utils.translation import ugettext_lazy as _ from django.utils import timezone -from passerelle.base.models import BaseResource +from passerelle.base.models import BaseResource, EndpointCheckPing from passerelle.utils.api import endpoint +class BaseAdrException(Exception): + http_status = 200 + log_error = False + + class BaseAdresse(BaseResource): service_url = models.CharField( max_length=128, blank=False, @@ -95,6 +101,27 @@ class BaseAdresse(BaseResource): return result @endpoint(serializer_type='json-api') + def ping(self, request, **kwargs): + q = kwargs.get('q') if kwargs.get('q') else '?q=169 rue du chateau, paris' + q += '&limit=1' + res = self.requests.request('GET', self.service_url + 'search/' + q) + checker = EndpointCheckPing.objects.get_or_create(connector=self.slug)[0] + + if res.status_code != 200: + checker.break_begin = timezone.now() + checker.save() + raise BaseAdrException('Service not available.') + + result = {'ping': 'pong'} + result['content'] = json.loads(res.content) + + if checker.break_begin: + checker.break_end = timezone.now() + checker.save() + + return result + + @endpoint(serializer_type='json-api') def streets(self, request, zipcode=None, q=None): result = [] streets = StreetModel.objects.all() diff --git a/passerelle/base/migrations/0003_endpointcheckping.py b/passerelle/base/migrations/0003_endpointcheckping.py new file mode 100644 index 0000000..abdc569 --- /dev/null +++ b/passerelle/base/migrations/0003_endpointcheckping.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0002_auto_20151009_0326'), + ] + + operations = [ + migrations.CreateModel( + name='EndpointCheckPing', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('connector', models.CharField(max_length=50, verbose_name=b"Connector's slug")), + ('break_begin', models.DateTimeField(null=True, verbose_name=b'Begining of break')), + ('break_end', models.DateTimeField(null=True, verbose_name=b'End of break')), + ], + ), + ] diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 60fff11..b42a9ec 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -169,3 +169,9 @@ class AccessRight(models.Model): def __unicode__(self): return '%s (on %s <%s>) (for %s)' % (self.codename, self.resource_type, self.resource_pk, self.apiuser) + + +class EndpointCheckPing(models.Model): + connector = models.CharField(max_length=50, verbose_name='Connector\'s slug') + break_begin = models.DateTimeField(verbose_name='Begining of break', null=True) + break_end = models.DateTimeField(verbose_name='End of break', null=True) -- 2.8.1