Skip to content
Snippets Groups Projects
Select Git revision
  • d63688e68a8768c1a640904407f0b654093a18fc
  • master default protected
  • 553-semantic-recommendation-2
  • dev protected
  • 553-semantic-recommendation
  • replication_test
  • release-1.10 protected
  • release-1.9 protected
  • 551-init-broker-service-permissions
  • 549-test-oai-pmh
  • 545-saving-multiple-times-breaks-pid-metadata
  • 499-standalone-compute-service-2
  • 539-load-tests
  • hotfix/helm-chart
  • luca_ba_new_interface
  • 534-bug-when-adding-access-to-user-that-is-not-registered-at-dashboard-service
  • release-1.8 protected
  • 533-integrate-semantic-recommendation
  • feature/openshift
  • 518-spark-doesn-t-map-the-headers-correct
  • 485-fixity-checks
  • v1.10.3 protected
  • v1.10.2 protected
  • v1.10.1 protected
  • v1.10.0-rc13 protected
  • v1.10.0-rc12 protected
  • v1.10.0-rc11 protected
  • v1.10.0-rc10 protected
  • v1.10.0-rc9 protected
  • v1.10.0-rc8 protected
  • v1.10.0-rc7 protected
  • v1.10.0-rc6 protected
  • v1.10.0-rc5 protected
  • v1.10.0-rc4 protected
  • v1.10.0-rc3 protected
  • v1.10.0-rc2 protected
  • v1.10.0rc1 protected
  • v1.10.0rc0 protected
  • v1.10.0 protected
  • v1.9.3 protected
  • v1.9.2 protected
41 results

test_integration_app.py

Blame
  • remote_control.py 2.36 KiB
    """
    The remote_control module facilitates remote commanding of and data exchange with the CCS.
    """
    
    # import os
    import pickle
    import socket
    import struct
    import subprocess
    import sys
    import time
    
    import Pyro4
    
    
    @Pyro4.expose
    class DataReceiver(object):
    
        """The DataReceiver provides remote commanding of and data retrieval from the CCS."""
    
        header_len = 4
    
        def __init__(self, host='', sendport=4242, recvport=4343):
            """
    
            @param host:
            @param sendport:
            @param recvport:
            """
            self.host = host
            self.sendport = sendport
            self.recvport = recvport
    
        def sender(self, msg):
            """
    
            @param msg:
            @return:
            """
            emsg = msg.encode()
            s = socket.socket()
            s.connect((self.host, self.sendport))
            tb = s.send(emsg)
            ack = s.recv(1024)
            s.close()
            return tb, ack
    
        def receiver(self):
            """
    
            @return:
            """
            s = socket.socket()
            s.connect((self.host, self.recvport))
            datalen, = struct.unpack('>I', s.recv(self.header_len))
            data = b''
            lencopy = datalen
            while len(data) < datalen:
                data += s.recv(datalen)
                datalen -= len(data)
            s.close()
            return pickle.loads(data) if len(data) > 0 else data, lencopy
    
        def getdata(self, varname, timeout=5):
            """
    
            @param varname:
            @param timeout:
            @return:
            """
            self.sender('ccs.data_dl({})'.format(varname))
            data, datalen = self.receiver()
            start_time = time.time()
            while (datalen == 0) and (time.time() < (start_time + timeout)):
                data, datalen = self.receiver()
                time.sleep(0.1)
            return data
    
    
    if __name__ == '__main__':
        # adapter_name = "enp0s8"
        # ipv4 = os.popen('ip addr show {}'.format(adapter_name)).read().split("inet ")[1].split("/")[0]
        if len(sys.argv) >= 3:
            hostip = sys.argv[1]
            hostport = int(sys.argv[2])
            nameserv = subprocess.Popen("python -m Pyro4.naming -n {} -p {}".format(hostip, hostport), shell=True)
            daemon = Pyro4.Daemon(host=hostip)
        else:
            nameserv = subprocess.Popen("python -m Pyro4.naming", shell=True)
            daemon = Pyro4.Daemon()
        ns = Pyro4.locateNS()
        uri = daemon.register(DataReceiver)
        ns.register("DataReceiver", uri)
        daemon.requestLoop()