ticketea Usando el admin sin modelos… # __init__.py from . import admin_models if 'django.contrib.admin.models' in sys.modules: del sys.modules['django.contrib.admin.models'] sys.modules['django.contrib.admin.models'] = admin_models from django.contrib.admin.sites import AdminSite AdminSite.check_dependencies = nothing from django.core.management.base import BaseCommand BaseCommand.validate = lambda x, *args, **kwargs: None
ticketea ¿Qué es forseti? FORSETI BOTO BOTO-CORE EC2AutoScaleConfig ELBalancer CloudWatchMetricAlarm EC2AutoScaleGroup EC2AutoScalePolicy GoldenEC2Image EC2Instance
ticketea Resultado ✤ La planificación fue un desastre: 2x tiempo. ✤ Mejor logging y reporting de errores. ✤ Tiempo de respuesta reducido a la mitad. ✤ Cobertura de tests > 85%
ticketea Inyectando el api-client en el request class TicketeaApiMiddleware(object): def process_request(self, request): if not hasattr(request, 'user'): raise ImproperlyConfigured('error') if isinstance(request.user, AnonymousUser): self._login_as_guest(request) request.api = create_api_client(...) def process_response(self, request, response): # Check if the token was refreshed return response
ticketea Mixins class ApiDispatchMixin(object): def dispatch(self, *args, **kwargs): if hasattr(self, 'get_api_data'): result = self.get_api_data() if isinstance(result, HttpResponse): return result return super(ApiDispatchMixin, self).dispatch( *args, **kwargs )
ticketea Objetivos ✤ Pasar a sistemas distribuídos ✤ Permitir el funcionamiento degradado del sistema ✤ Poder desarrollar cada proyecto a una velocidad distinta ✤ Poder ajustar la infraestructura usada de cada proyecto ✤ Reducir puntos únicos de fallo