X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=zte%2Fvmanager%2Fdriver%2Finterfaces%2Fviews.py;h=7376d4d2b63714bb7e8eea41527bb4fc10ef7052;hb=1666778165fcf65c8a7820553c31f60a2433c5fd;hp=4615df94b2411d82b75e5a6ab5e6d26a9570f5ff;hpb=ab585af4945a830db50282594a756898bf4cddcf;p=vfc%2Fnfvo%2Fdriver%2Fvnfm%2Fsvnfm.git diff --git a/zte/vmanager/driver/interfaces/views.py b/zte/vmanager/driver/interfaces/views.py index 4615df94..7376d4d2 100644 --- a/zte/vmanager/driver/interfaces/views.py +++ b/zte/vmanager/driver/interfaces/views.py @@ -23,6 +23,7 @@ from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView +from django.http import StreamingHttpResponse from driver.interfaces.serializers import HealReqSerializer, InstScaleHealRespSerializer, ScaleReqSerializer, \ NotifyReqSerializer, GrantRespSerializer, GrantReqSerializer, JobQueryRespSerializer, TerminateVnfRequestSerializer, \ @@ -31,6 +32,8 @@ from driver.pub.config.config import VNF_FTP from driver.pub.utils import restcall from driver.pub.utils.restcall import req_by_msb +CHUNK_SIZE = 1024 * 8 + logger = logging.getLogger(__name__) @@ -42,6 +45,25 @@ def load_json_file(file_name): return json_data +def read(file_path, start, end): + fp = open(file_path, 'rb') + fp.seek(start) + pos = start + while pos + CHUNK_SIZE < end: + yield fp.read(CHUNK_SIZE) + pos = fp.tell() + yield fp.read(end - pos) + + +def parse_file_range(file_path, file_range): + start, end = 0, os.path.getsize(file_path) + if file_range: + [start, end] = file_range.split('-') + start, end = start.strip(), end.strip() + start, end = int(start), int(end) + return start, end + + def fun_name(): return "=================%s==================" % inspect.stack()[1][3] @@ -618,3 +640,59 @@ class SampleList(APIView): def get(self, request): logger.debug("get") return Response({"status": "active"}) + + +class Subscribe(APIView): + def get(self, request): + logger.debug("====Subscribe get====") + resp_data = { + "subscriptions": [{ + "subscribeid": "cdbddb00-452c-11e9-91e8-acc860114657", + "filter": [{ + "vendor": "ZTE", + "type": "vCPE", + }], + "notificationuri": " https://127.0.0.1:80/v2/vnfm/vnfds/notification", + }] + } + return Response(data=resp_data, status=status.HTTP_200_OK) + + def post(self, request): + logger.debug("====Subscribe post====") + resp_data = {"subscribeid": "cdbddb00-452c-11e9-91e8-acc860114657"} + return Response(data=resp_data, status=status.HTTP_201_CREATED) + + +class SubscribeDetail(APIView): + def delete(self, request, subscribeId): + logger.debug("====SubscribeDetail delete %s====", subscribeId) + return Response(status=status.HTTP_204_NO_CONTENT) + + +class VnfPkgs(APIView): + def get(self, request): + logger.debug("====VnfPkgs get====") + resp_data = { + "data": [{ + "packageid": "924fc980-4530-11e9-ae68-acc860114657", + "vendor": "ZTE", + "type": "vCPE", + "vnfdfile": "MRP6600_FS_SRIOV_4NIC_200W.zip", + "imagefiles": ["MRP6600_FS_SRIOV_MRPISU_IMGV500R008C20SPC030T.tar"], + "swfiles": ["MRP6600_SRV_V500R008C20SPC030T.tar"], + "description": "This is a service for vCPE.", + }] + } + return Response(data=resp_data, status=status.HTTP_200_OK) + + +class VnfPkg(APIView): + def get(self, request, packageId, fileName): + logger.debug("====VnfPkg get====%s, %s", packageId, fileName) + file_range = request.META.get('RANGE') + logger.debug('file_range: %s' % file_range) + # TODO: get filepath + local_file_path = fileName + start, end = parse_file_range(local_file_path, file_range) + file_iterator = read(local_file_path, start, end) + return StreamingHttpResponse(file_iterator, status=status.HTTP_200_OK)