Пример #1
0
    def run(self):
        self.quit_event = quit_event
        cond = self.cond
        lock = self.lock
        raw = self.raw
        images = self.images
        data = self.data
        cfg = self.cfg

        bytes = 128 * 2 * self.nsamps
        raw_bytes = []

        count = 1

        try:
            Dada.logMsg(2, DL, "monitorThread: starting")

            while (not quit_event.isSet()):

                # open a socket to each instance of mopsr_dbstats
                for i in range(int(cfg["NSEND"])):

                    host = cfg["SEND_" + str(i)]
                    port = 54321

                    Dada.logMsg(
                        3, DL, "monitorThread: openSocket(" + host + ", " +
                        str(port) + ")")
                    sock = Dada.openSocket(DL, host, port)

                    Dada.logMsg(3, DL,
                                "monitorThread: " + host + " <- 'nsamp'")
                    result, response = Dada.sendTelnetCommand(sock, 'nsamp')
                    Dada.logMsg(
                        3, DL, "monitorThread: " + host + " -> " + result +
                        " " + response)
                    self.nsamps = int(response)

                    for j in range(2):

                        ant = 2 * i + j

                        bytes = 128 * 2 * self.nsamps

                        Dada.logMsg(
                            3, DL, "monitorThread: " + host + " <- 'dump " +
                            str(ant) + "'")
                        sock.send("dump " + str(ant) + "\r\n")

                        lock.acquire()
                        Dada.logMsg(3, DL, "monitorThread: [lock acquired]")

                        raw_bytes = ''
                        recvd = 0
                        while (len(raw_bytes) < bytes):
                            chunk = sock.recv(bytes - recvd)
                            if (chunk == ''):
                                raise RuntimeError("socket connection broken")
                            raw_bytes = raw_bytes + chunk

                        Dada.logMsg(
                            3, DL, "monitorThread: len(raw_bytes)=" +
                            str(len(raw_bytes)))

                        #raw[ant] = numpy.zeros ((128, self.nsamps), dtype=numpy.complex64)
                        raw[ant] = Mopsr.unpack(NCHAN, self.nsamps, 2,
                                                raw_bytes)

                        # delete all buffered images pertaining to this antenna
                        images[ant].clear()
                        data[ant].clear()

                        Dada.logMsg(
                            3, DL, "monitorThread: " + host + " -> binary [" +
                            str(bytes) + "]")
                        lock.release()
                        Dada.logMsg(3, DL, "monitorThread: [lock released]")

                    Dada.logMsg(3, DL, "monitorThread: sock.close()")
                    sock.close()

                Dada.logMsg(3, DL, "monitorThread: sleep(2)")
                time.sleep(5)

        except:
            Dada.logMsg(
                -2, DL,
                "monitorThread: exception caught: " + str(sys.exc_info()[0]))
            print '-' * 60
            traceback.print_exc(file=sys.stdout)
            print '-' * 60
            quit_event.set()
            lock.release()

        if (not sock == []):
            Dada.logMsg(2, DL, "monitorThread: closing server socket")
            sock.close()

        Dada.logMsg(2, DL, "monitorThread: exiting")
    # wait for all roaches to be active, then start bramdumping till exit
    roaches_all_active = False
    command_sock = 0

    # connect to our own command thread
    Dada.logMsg(3, DL, "main: openSocket(" + hostname + ", " + str(port) + ")")
    command_sock = Dada.openSocket(DL, hostname, port)
    Dada.logMsg(3, DL, "main: command_sock=" + repr(command_sock))

    response = command_sock.recv(4096)

    Dada.logMsg(
        1, DL, 'Configuring ' + roach_cfg["NUM_ROACH"] +
        ' ROACH boards with HISPEC gateware')
    Dada.logMsg(3, DL, "main: <- 'config'")
    result, response = Dada.sendTelnetCommand(command_sock, 'config')
    Dada.logMsg(3, DL, "main: -> " + result + " " + response)

    time.sleep(0.1)

    Dada.logMsg(1, DL, 'Setting levels to nominal values')
    Dada.logMsg(3, DL, "main: <- 'levels'")
    result, response = Dada.sendTelnetCommand(command_sock, 'levels')
    Dada.logMsg(3, DL, "main: -> " + result + " " + response)

    while (not quit_event.isSet()):

        Dada.logMsg(3, DL, "main: while loop")

        if (command_sock == 0):
            Dada.logMsg(
    while (not quit_event.isSet()):

        Dada.logMsg(2, DL, "main: while loop")

        if (command_sock == 0):
            Dada.logMsg(
                2, DL, "main: openSocket(" + hostname + ", " + str(port) + ")")
            command_sock = Dada.openSocket(DL, hostname, port)
            Dada.logMsg(2, DL, "main: command_sock=" + repr(command_sock))

        # see if roaches are all active
        if ((not roaches_all_active) and (command_sock != 0)):

            Dada.logMsg(2, DL, "main: <- 'state'")
            result, response = Dada.sendTelnetCommand(command_sock, 'state')
            Dada.logMsg(2, DL, "main: -> " + result + " " + response)

            if (result == "ok"):
                roaches_all_active = True

        # if roaches are all active, bramplot 'em
        if (roaches_all_active):
            Dada.logMsg(2, DL, "main: <- 'bramplot'")
            result, response = Dada.sendTelnetCommand(command_sock, 'bramplot')
            Dada.logMsg(2, DL, "main: -> " + result + " " + response)

        counter = 5
        while ((not quit_event.isSet()) and (counter > 0)):
            counter -= 1
            Dada.logMsg(2, DL, "main: sleeping")