Ejemplo n.º 1
0
    def _create_node(self, org, num, nodeType):
        """
        create node

        :param org: organization
        :param num: the number of node
        :param nodeType: the type of node
        :return: null
        """
        for i in range(num):
            nodeName = "peer" + str(
                i) if nodeType == "peer" else "orderer" + str(i)
            self._generate_config(nodeType, org.name, nodeName)
            msp, tls, cfg = self._conversion_msp_tls_cfg(
                nodeType, org.name, nodeName)
            urls = "{}.{}".format(nodeName, org.name)
            node = Node(name=nodeName,
                        org=org,
                        urls=urls,
                        type=nodeType,
                        msp=msp,
                        tls=tls,
                        agent=None,
                        config_file=cfg)
            node.save()
Ejemplo n.º 2
0
    def create(self, request):
        """
        Create Node

        Create node
        """
        serializer = NodeCreateBody(data=request.data)
        if serializer.is_valid(raise_exception=True):
            self._validate_organization(request)
            agent_type = serializer.validated_data.get("agent_type")
            network_type = serializer.validated_data.get("network_type")
            network_version = serializer.validated_data.get("network_version")
            agent = serializer.validated_data.get("agent")
            node_type = serializer.validated_data.get("type")
            if agent is None:
                available_agents = (Agent.objects.annotate(
                    network_num=Count("node__network")).annotate(
                        node_num=Count("node")).filter(
                            schedulable=True,
                            type=agent_type,
                            network_num__lt=F("capacity"),
                            node_num__lt=F("node_capacity"),
                            organization=request.user.organization,
                        ).order_by("node_num"))
                if len(available_agents) > 0:
                    agent = available_agents[0]
                else:
                    raise NoResource
            else:
                if not request.user.is_operator:
                    raise PermissionDenied
                node_count = Node.objects.filter(agent=agent).count()
                if node_count >= agent.node_capacity or not agent.schedulable:
                    raise NoResource
            node = Node(
                network_type=network_type,
                agent=agent,
                network_version=network_version,
                user=request.user,
                organization=request.user.organization,
                type=node_type,
            )
            node.save()
            agent_config_file = (request.build_absolute_uri(
                agent.config_file.url), )
            node_update_api = reverse("node-detail", args=[str(node.id)])
            node_update_api = request.build_absolute_uri(node_update_api)
            if isinstance(agent_config_file, tuple):
                agent_config_file = list(agent_config_file)[0]
            create_node.delay(
                str(node.id),
                agent.image,
                agent_config_file=agent_config_file,
                node_update_api=node_update_api,
            )
            response = NodeIDSerializer(data={"id": str(node.id)})
            if response.is_valid(raise_exception=True):
                return Response(response.validated_data,
                                status=status.HTTP_201_CREATED)
Ejemplo n.º 3
0
Archivo: views.py Proyecto: yeasy/cello
    def create(self, request):
        """
        Create Node

        :param request: create parameter
        :return: node ID
        :rtype: uuid
        """
        try:
            serializer = NodeCreateBody(data=request.data)
            if serializer.is_valid(raise_exception=True):
                node_name = serializer.validated_data.get("name")
                node_type = serializer.validated_data.get("type")
                num = serializer.validated_data.get("num")
                organization = request.user.organization

                agent = organization.agent.get()
                if agent:
                    nodes = Node.objects.filter(name=node_name + "0",
                                                organization=organization,
                                                type=node_type)
                    if nodes:
                        raise ResourceExists
                else:
                    raise NoResource
                for n in range(num):

                    name = node_name + str(n)

                    urls = "http://{}.{}".format(name, organization.name)
                    nodes = {"type": node_type, "Specs": [name]}
                    CryptoConfig(organization.name).update(nodes)
                    CryptoGen(organization.name).extend()
                    self._generate_config(node_type, organization.name, name)
                    msp, tls, cfg = self._conversion_msp_tls_cfg(
                        node_type, organization.name, name)

                    node = Node(name=name,
                                organization=organization,
                                urls=urls,
                                type=node_type,
                                msp=msp,
                                tls=tls,
                                agent=agent,
                                config_file=cfg)
                    node.save()

                    self._set_port(node_type, node, agent)

                response = NodeIDSerializer(data=node.__dict__)
                if response.is_valid(raise_exception=True):
                    return Response(ok(response.validated_data),
                                    status=status.HTTP_201_CREATED)
        except (ResourceExists, NoResource) as e:
            raise e
        except Exception as e:
            return Response(err(e.args), status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 4
0
    def create(self, request):

        serializer = NodeCreateBody(data=request.data)

        if serializer.is_valid(raise_exception=True):
            node_name = serializer.validated_data.get("name")
            node_type = serializer.validated_data.get("type")
            node_urls = serializer.validated_data.get("urls")
            organization = serializer.validated_data.get("organization")
            org_name = organization["name"]
            try:
                Node.objects.get(name=node_name)
            except ObjectDoesNotExist:
                pass

            org = Organization.objects.get(name=org_name)

            nodes = {
                "type": node_type,
                "Specs": [node_name]
            }
            CryptoConfig(org_name).update(nodes)
            CryptoGen(org_name).extend()
            if node_type == "peer":
                dir_msp = "{}/{}/crypto-config/peerOrganizations/{}/peers/{}/msp"\
                    .format(CELLO_HOME, org_name, org_name, node_name+"."+org_name)
            else:
                dir_msp = "{}/{}/crypto-config/ordererOrganizations/{}/orderers/{}/msp"\
                    .format(CELLO_HOME, org_name, org_name.split(".", 1)[1], node_name+"."+org_name)

            zipDir(dir_msp, "/opt/msp.zip")
            f_msp = open("/opt/msp.zip", "rb")
            print(chardet.detect(f_msp.readline()))

            if node_type == "peer":
                dir_tls = "{}/{}/crypto-config/peerOrganizations/{}/peers/{}/tls" \
                    .format(CELLO_HOME, org_name, org_name, node_name + "." + org_name)
            else:
                dir_tls = "{}/{}/crypto-config/ordererOrganizations/{}/orderers/{}/msp"\
                    .format(CELLO_HOME, org_name, org_name.split(".", 1)[1], node_name+"."+org_name)

            zipDir(dir_tls, "/opt/tls.zip")
            f_tls = open("/opt/tls.zip", "rb")

            node = Node(name=node_name, organization=org, urls=node_urls, type=node_type)
            node.msp.save("msp.zip", File(f_msp))
            node.tls.save("tls.zip", File(f_tls))
            node.save()
            f_msp.close()
            f_tls.close()
            response = NodeIDSerializer(data=node.__dict__)
            if response.is_valid(raise_exception=True):
                return Response(
                    response.validated_data, status=status.HTTP_201_CREATED
                )
Ejemplo n.º 5
0
    def create(self, request):
        """
        Create Node

        Create node
        """
        serializer = NodeCreateBody(data=request.data)
        if serializer.is_valid(raise_exception=True):
            self._validate_organization(request)
            agent_type = serializer.validated_data.get("agent_type")
            network_type = serializer.validated_data.get("network_type")
            network_version = serializer.validated_data.get("network_version")
            agent = serializer.validated_data.get("agent")
            node_type = serializer.validated_data.get("type")
            if agent is None:
                available_agents = (
                    Agent.objects.annotate(network_num=Count("node__network"))
                    .annotate(node_num=Count("node"))
                    .filter(
                        schedulable=True,
                        type=agent_type,
                        network_num__lt=F("capacity"),
                        node_num__lt=F("node_capacity"),
                        organization=request.user.organization,
                    )
                    .order_by("node_num")
                )
                if len(available_agents) > 0:
                    agent = available_agents[0]
                else:
                    raise NoResource
            else:
                if not request.user.is_operator:
                    raise PermissionDenied
                node_count = Node.objects.filter(agent=agent).count()
                if node_count >= agent.node_capacity or not agent.schedulable:
                    raise NoResource
            node = Node(
                network_type=network_type,
                agent=agent,
                network_version=network_version,
                user=request.user,
                organization=request.user.organization,
                type=node_type,
            )
            node.save()
            create_node.delay(str(node.id))
            response = NodeIDSerializer(data={"id": str(node.id)})
            if response.is_valid(raise_exception=True):
                return Response(
                    response.validated_data, status=status.HTTP_201_CREATED
                )
Ejemplo n.º 6
0
    def create(self, request):
        """
        Create Node

        :param request: create parameter
        :return: node ID
        :rtype: uuid
        """
        serializer = NodeCreateBody(data=request.data)
        if serializer.is_valid(raise_exception=True):
            #self._validate_organization(request)
            name = serializer.validated_data.get("name")
            type = serializer.validated_data.get("type")
            urls = serializer.validated_data.get("urls")
            organization = serializer.validated_data.get("organization")

            org = Organization.objects.get(id=organization)
            if org:
                pass
            else:
                raise NoResource
            nodes = {
                "type": type,
                "Specs": [name]
            }
            CryptoConfig(org.name).update(nodes)
            CryptoGen(org.name).extend()
            self._generate_config(type, org.name, name, urls.split(":")[2])
            msp, tls, cfg = self._conversion_msp_tls_cfg(type, org.name, name)

            node = Node(
                name=name,
                org=org,
                urls=urls,
                type=type,
                msp=msp,
                tls=tls,
                config_file=cfg
            )
            node.save()

            response = NodeIDSerializer(data=node.__dict__)
            if response.is_valid(raise_exception=True):
                return Response(
                    response.validated_data, status=status.HTTP_201_CREATED
                )
Ejemplo n.º 7
0
    def create(self, request):
        """
        Create Node

        Create node
        """
        serializer = NodeCreateBody(data=request.data)
        if serializer.is_valid(raise_exception=True):
            self._validate_organization(request)
            agent_type = serializer.validated_data.get("agent_type")
            network_type = serializer.validated_data.get("network_type")
            network_version = serializer.validated_data.get("network_version")
            agent = serializer.validated_data.get("agent")
            node_type = serializer.validated_data.get("type")
            ca = serializer.validated_data.get("ca", {})
            if agent is None:
                available_agents = (Agent.objects.annotate(
                    network_num=Count("node__network")).annotate(
                        node_num=Count("node")).filter(
                            schedulable=True,
                            type=agent_type,
                            network_num__lt=F("capacity"),
                            node_num__lt=F("node_capacity"),
                            organization=request.user.organization,
                        ).order_by("node_num"))
                if len(available_agents) > 0:
                    agent = available_agents[0]
                else:
                    raise NoResource
            else:
                if not request.user.is_operator:
                    raise PermissionDenied
                node_count = Node.objects.filter(agent=agent).count()
                if node_count >= agent.node_capacity or not agent.schedulable:
                    raise NoResource

            fabric_ca = None
            if node_type == FabricNodeType.Ca.name.lower():
                ca_body = {}
                admin_name = ca.get("admin_name")
                admin_password = ca.get("admin_password")
                # If found tls type ca server under this organization,
                # will cause resource exists error
                ca_server_type = ca.get("type",
                                        FabricCAServerType.Signature.value)
                if ca_server_type == FabricCAServerType.TLS.value:
                    exist_ca_server = Node.objects.filter(
                        organization=request.user.organization,
                        ca__type=FabricCAServerType.TLS.value,
                    ).count()
                    if exist_ca_server > 0:
                        raise ResourceExists
                hosts = ca.get("hosts", [])
                if admin_name:
                    ca_body.update({"admin_name": admin_name})
                if admin_password:
                    ca_body.update({"admin_password": admin_password})
                fabric_ca = FabricCA(**ca_body,
                                     hosts=hosts,
                                     type=ca_server_type)
                fabric_ca.save()
            node = Node(
                network_type=network_type,
                agent=agent,
                network_version=network_version,
                user=request.user,
                organization=request.user.organization,
                type=node_type,
                ca=fabric_ca,
            )
            node.save()
            agent_config_file = request.build_absolute_uri(
                agent.config_file.url)
            node_detail_url = reverse("node-detail", args=[str(node.id)])
            node_detail_url = request.build_absolute_uri(node_detail_url)
            node_file_upload_api = reverse("node-files", args=[str(node.id)])
            node_file_upload_api = request.build_absolute_uri(
                node_file_upload_api)
            operate_node.delay(
                str(node.id),
                AgentOperation.Create.value,
                agent_config_file=agent_config_file,
                node_detail_url=node_detail_url,
                node_file_upload_api=node_file_upload_api,
            )
            response = NodeIDSerializer({"id": str(node.id)})
            return Response(response.data, status=status.HTTP_201_CREATED)
Ejemplo n.º 8
0
def save_rawpoint(request):

    out = []
    status_code = 200

    if request.method != 'POST':
        pretty_json = json.dumps(
            {
                'error':
                str(request.method) + ' call does not exist on this URI'
            },
            indent=4)
        response = HttpResponse(pretty_json,
                                content_type="application/json",
                                status=400)
        response['Access-Control-Allow-Origin'] = '*'
        return response

    try:
        data = json.loads(request.body)
    except Exception as e:
        out = {
            'satus': 3,
            'status': str(e.args),
            'status_explain': 'unable to parse json from POST payload'
        }
        status_code = 400
        return JsonResponse(out, safe=False, status=status_code)

    i = 0
    for d in data:
        i = i + 1
        try:
            point = Rawpoint()
            point.payload = d['payload']

            try:
                point.gw = Gateway.objects.get(mac=d['gw_mac'])
            except Exception as e:
                pass

            try:
                point.gateway_serial = d['gateway_serial']
            except Exception as e:
                pass

            try:
                node = Node.objects.get(node_id=d['node_id'])
                node.last_rawpoint = timezone.now()
                node.save()
            except Exception as e:
                print("Creating new Node with node_id " + d['node_id'])
                node = Node(node_id=d['node_id'],
                            nodetype=NodeType.objects.get(name='unknown'),
                            owner=User.objects.get(username='******'))
                node.last_rawpoint = timezone.now()
                node.save()

            point.node = node

            try:
                d['rssi']
                point.rssi = d['rssi']
            except Exception as e:
                point.rssi = None

            try:
                point.seq_number = d['seq_number']
            except Exception as e:
                point.seq_number = None

            try:
                d['snr']
                point.snr = d['snr']
            except Exception as e:
                point.snr = None

            try:
                d['rowid']
            except Exception as e:
                d['rowid'] = i

            point.timestamp = datetime.fromtimestamp(d['timestamp'], pytz.utc)
            point.save()
            out.append({
                'rowid': d['rowid'],
                'status': 1,
                'status_human': 'OK'
            })
        except Exception as e:
            out.append({
                'status': 2,
                'status_explain': str(e.args),
                'point_data': d,
                'rowid': i
            })
            status_code = 400
    return JsonResponse(out, safe=False, status=status_code)
Ejemplo n.º 9
0
    def create(self, request):
        """
        Create Node

        Create node
        """
        serializer = NodeCreateBody(data=request.data)
        if serializer.is_valid(raise_exception=True):
            self._validate_organization(request)
            agent_type = serializer.validated_data.get("agent_type")
            network_type = serializer.validated_data.get("network_type")
            network_version = serializer.validated_data.get("network_version")
            agent = serializer.validated_data.get("agent")
            node_type = serializer.validated_data.get("type")
            ca = serializer.validated_data.get("ca")
            peer = serializer.validated_data.get("peer")
            if agent is None:
                available_agents = (Agent.objects.annotate(
                    network_num=Count("node__network")).annotate(
                        node_num=Count("node")).filter(
                            schedulable=True,
                            type=agent_type,
                            network_num__lt=F("capacity"),
                            node_num__lt=F("node_capacity"),
                            organization=request.user.organization,
                        ).order_by("node_num"))
                if len(available_agents) > 0:
                    agent = available_agents[0]
                else:
                    raise NoResource
            else:
                if not request.user.is_operator:
                    raise PermissionDenied
                node_count = Node.objects.filter(agent=agent).count()
                if node_count >= agent.node_capacity or not agent.schedulable:
                    raise NoResource

            fabric_ca = None
            fabric_peer = None
            peer_ca_list = []
            if node_type == FabricNodeType.Ca.name.lower():
                fabric_ca = self._save_fabric_ca(request, ca)
            elif node_type == FabricNodeType.Peer.name.lower():
                fabric_peer, peer_ca_list = self._save_fabric_peer(
                    request, peer)
            node = Node(
                network_type=network_type,
                agent=agent,
                network_version=network_version,
                user=request.user,
                organization=request.user.organization,
                type=node_type,
                ca=fabric_ca,
                peer=fabric_peer,
            )
            node.save()
            agent_config_file = request.build_absolute_uri(
                agent.config_file.url)
            node_detail_url = reverse("node-detail", args=[str(node.id)])
            node_detail_url = request.build_absolute_uri(node_detail_url)
            node_file_upload_api = reverse("node-files", args=[str(node.id)])
            node_file_upload_api = request.build_absolute_uri(
                node_file_upload_api)
            operate_node.delay(
                str(node.id),
                AgentOperation.Create.value,
                agent_config_file=agent_config_file,
                node_detail_url=node_detail_url,
                node_file_upload_api=node_file_upload_api,
                peer_ca_list=json.dumps(peer_ca_list),
            )
            response = NodeIDSerializer({"id": str(node.id)})
            return Response(response.data, status=status.HTTP_201_CREATED)