Exemple #1
0
    def respondWithNodes(self, LastSyncTimestamp):
        if not self.connectedNode:
            self.abortConnection(
                Exception('AetherError: Illegal request from remote.'), 'L<-R',
                'respondWithNodes')
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(
                float(LastSyncTimestamp))
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        print(
            'L<-R: Nodes request, Timestamp: ', LastSyncTimestamp
            if LastSyncTimestamp != 'NO-TIMESTAMP' else 'Initial Connection',
            ' N:', self.connectedNode['NodeId'])
        d = Mercury.getNodes(LastSyncTimestamp)
        d.addCallback(Mercury.processNodes)
        currentPacketNumber = 1
        totalPacketNumber = 1

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply) / bucketSize

            if len(dbReply) % bucketSize > 0:
                totalPacketNumber += 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            return dbReply

        d.addCallback(calculatePacketCounts, NODE_PACKET_COUNT)

        def bucketise(dbReply, bucketSize, CPNo):
            # Here I have the entire reply from the db. I need divide that reply into buckets, and fire each
            # bucket to the remote.

            def process(slicedDbReply, currentPacketNumber):
                print('L->R: Nodes reply, Package number: ',
                      currentPacketNumber, ' N:', self.connectedNode['NodeId'])
                global totalPacketNumber
                nodesJson = []
                for n in slicedDbReply:
                    nJson = ujson.dumps(n)
                    nodesJson.append(nJson)
                self.callRemote(networkAPI.ReceiveNodes,
                                Nodes=nodesJson,
                                TotalNumberOfPackets=totalPacketNumber,
                                CurrentPacketNo=currentPacketNumber)
                return {}

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize,
                          CPNo + 1)  # next batch.
                return process(dbReply[0:bucketSize], CPNo)  # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo)  # current batch.

        d.addCallback(bucketise, NODE_PACKET_COUNT, currentPacketNumber)
        d.addErrback(self.abortConnection, 'L<-R',
                     self.respondWithNodes.__name__)
        return d
    def respondWithNodes(self, LastSyncTimestamp):
        if not self.connectedNode:
            self.abortConnection(Exception("AetherError: Illegal request from remote."), "L<-R", "respondWithNodes")
        if LastSyncTimestamp != "null":
            LastSyncTimestamp = datetime.utcfromtimestamp(float(LastSyncTimestamp))
        else:
            LastSyncTimestamp = "NO-TIMESTAMP"
        print(
            "L<-R: Nodes request, Timestamp: ",
            LastSyncTimestamp if LastSyncTimestamp != "NO-TIMESTAMP" else "Initial Connection",
            " N:",
            self.connectedNode["NodeId"],
        )
        d = Mercury.getNodes(LastSyncTimestamp)
        d.addCallback(Mercury.processNodes)
        currentPacketNumber = 1
        totalPacketNumber = 1

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply) / bucketSize

            if len(dbReply) % bucketSize > 0:
                totalPacketNumber += 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            return dbReply

        d.addCallback(calculatePacketCounts, NODE_PACKET_COUNT)

        def bucketise(dbReply, bucketSize, CPNo):
            # Here I have the entire reply from the db. I need divide that reply into buckets, and fire each
            # bucket to the remote.

            def process(slicedDbReply, currentPacketNumber):
                print("L->R: Nodes reply, Package number: ", currentPacketNumber, " N:", self.connectedNode["NodeId"])
                global totalPacketNumber
                nodesJson = []
                for n in slicedDbReply:
                    nJson = ujson.dumps(n)
                    nodesJson.append(nJson)
                self.callRemote(
                    networkAPI.ReceiveNodes,
                    Nodes=nodesJson,
                    TotalNumberOfPackets=totalPacketNumber,
                    CurrentPacketNo=currentPacketNumber,
                )
                return {}

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize, CPNo + 1)  # next batch.
                return process(dbReply[0:bucketSize], CPNo)  # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo)  # current batch.

        d.addCallback(bucketise, NODE_PACKET_COUNT, currentPacketNumber)
        d.addErrback(self.abortConnection, "L<-R", self.respondWithNodes.__name__)
        return d
    def respondWithNodes(self, LastSyncTimestamp):
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(
                float(LastSyncTimestamp))  # + timedelta(minutes = 1)
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        d = Mercury.getNodes(LastSyncTimestamp)
        d.addCallback(Mercury.processNodes)

        cprint('FROM REMOTE: NODES REQUEST: with sync timestamp %s' %
               (LastSyncTimestamp
                if LastSyncTimestamp != 'NO-TIMESTAMP' else LastSyncTimestamp),
               'white',
               'on_yellow',
               attrs=['bold'])
        print('\n')

        currentPacketNumber = 1
        totalPacketNumber = 1

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply) / bucketSize

            if len(dbReply) % bucketSize > 0:
                totalPacketNumber += 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            print('the reply includes %s headers' % len(dbReply))
            print('total packet numbers: %s' % totalPacketNumber)
            return dbReply

        d.addCallback(calculatePacketCounts, globals.nodePacketCount)

        def bucketise(dbReply, bucketSize, CPNo):
            # Here I have the entire reply from the db. I need divide that reply into buckets, and fire each
            # bucket to the remote.

            def process(slicedDbReply, currentPacketNumber):
                global totalPacketNumber
                nodesJson = []
                for n in slicedDbReply:
                    nJson = ujson.dumps(n)
                    nodesJson.append(nJson)
                cprint(
                    'THIS IS NODE ANSWER PACKAGE NUMBERED: %d' %
                    currentPacketNumber, 'white', 'on_red')

                print(
                    'reply: ', {
                        'Nodes': nodesJson,
                        'TotalNumberOfPackets': totalPacketNumber,
                        'CurrentPacketNo': currentPacketNumber
                    })

                # here I need to fire receiveheaders methods onto the remote for each of the packets.
                self.callRemote(networkAPI.ReceiveNodes,
                                Nodes=nodesJson,
                                TotalNumberOfPackets=totalPacketNumber,
                                CurrentPacketNo=currentPacketNumber)
                return {}

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize,
                          CPNo + 1)  # next batch.
                return process(dbReply[0:bucketSize], CPNo)  # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo)  # current batch.

        d.addCallback(bucketise, globals.nodePacketCount, currentPacketNumber)

        d.addErrback(self.closeConnection, 'INBOUND',
                     self.respondWithNodes.__name__)
        return d
    def respondWithNodes(self, LastSyncTimestamp):
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(float(LastSyncTimestamp))# + timedelta(minutes = 1)
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        d = Mercury.getNodes(LastSyncTimestamp)
        d.addCallback(Mercury.processNodes)

        cprint('FROM REMOTE: NODES REQUEST: with sync timestamp %s' %(LastSyncTimestamp
                   if LastSyncTimestamp != 'NO-TIMESTAMP' else LastSyncTimestamp), 'white', 'on_yellow', attrs=['bold'])
        print('\n')

        currentPacketNumber = 1
        totalPacketNumber = 1

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply)/bucketSize

            if len(dbReply)%bucketSize > 0:
                totalPacketNumber+= 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            print('the reply includes %s headers' %len(dbReply))
            print('total packet numbers: %s' %totalPacketNumber)
            return dbReply

        d.addCallback(calculatePacketCounts, globals.nodePacketCount)

        def bucketise(dbReply, bucketSize ,CPNo):
            # Here I have the entire reply from the db. I need divide that reply into buckets, and fire each
            # bucket to the remote.

            def process(slicedDbReply, currentPacketNumber):
                global totalPacketNumber
                nodesJson = []
                for n in slicedDbReply:
                    nJson = ujson.dumps(n)
                    nodesJson.append(nJson)
                cprint('THIS IS NODE ANSWER PACKAGE NUMBERED: %d' %currentPacketNumber, 'white', 'on_red')

                print('reply: ',{'Nodes':nodesJson,
                                 'TotalNumberOfPackets':totalPacketNumber,
                                 'CurrentPacketNo':currentPacketNumber})

                # here I need to fire receiveheaders methods onto the remote for each of the packets.
                self.callRemote(networkAPI.ReceiveNodes,
                                Nodes = nodesJson,
                                TotalNumberOfPackets = totalPacketNumber,
                                CurrentPacketNo = currentPacketNumber
                                )
                return {}


            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize, CPNo + 1) # next batch.
                return process(dbReply[0:bucketSize], CPNo) # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo) # current batch.

        d.addCallback(bucketise, globals.nodePacketCount, currentPacketNumber)

        d.addErrback(self.closeConnection, 'INBOUND', self.respondWithNodes.__name__)
        return d