Ejemplo n.º 1
0
    def post(request):
        result = Result()
        service_id = request.POST.get('service_id')
        if not service_id:
            result.code = CODE_SYS_TIPS
            result.message = "service_id can't be empty"
            return JsonResponse(result.serializer())

        service_name = request.POST.get('service_name')
        if service_name and not re.match("^[A-Za-z]+(_[0-9]+)?$", service_name):
            result.code = CODE_SYS_TIPS
            result.message = "service_name format error"
            return JsonResponse(result.serializer())

        if service_name:
            service_name = service_name.lower()
        domain = request.POST.get('domain')
        port = request.POST.get('port')
        service_uri = request.POST.get('service_uri')
        meta = request.POST.get('meta')
        status = request.POST.get('status')

        service = Service()
        service.__dict__ = cache.get(create_key(CACHE_SERVICE, service_id))
        # 修改标记
        update_flag = 0
        if service_name and service.service_name != service_name:
            update_flag += 1
            service.service_name = service_name
        elif domain and service.domain != domain:
            update_flag += 1
            service.domain = domain
        elif port and service.port != int(port):
            update_flag += 1
            service.port = port
        elif service_uri and service.service_uri != service_uri:
            update_flag += 1
            service.service_uri = service_uri
        elif meta and service.meta != meta:
            update_flag += 1
            service.meta = meta
        elif status and service.status != int(status):
            update_flag += 1
            service.status = status

        if update_flag == 0:
            result.code = CODE_SYS_TIPS
            result.message = "nothing to be updated"
            return JsonResponse(result.serializer())

        language = request.POST.get('language')
        language = language if not language else 'EN'

        result = Result()
        try:
            with transaction.atomic():
                count = Service.objects.filter(id=service_id).update(service_name=service.service_name,
                                                                     domain=service.domain,
                                                                     port=service.port, service_uri=service.service_uri,
                                                                     meta=service.meta, status=service.status)

                service_dict = ServiceSerializer(service).data
                cache.set(create_key(CACHE_SERVICE, service.id), service_dict, timeout=None)
                cache.set(create_key(CACHE_SERVICE_NAME, service_name), service_dict, timeout=None)
                result.data = count
        except Exception as e:
            log.error(e)
            result.code = CODE_SYS_DB_ERROR
            result.message = get_error_message(result.code, language)

        return JsonResponse(result.serializer())