Ejemplo n.º 1
0
    def saveSnapshot(self, params):
        key = ['servicename', 'configname', 'comment']
        service, config, comment = self._parseParams(params[1], key)
        if not service:
            service = self.__servicename
        
        result = NTMultiChannel(params[0])
        dataLen = result.getNumberChannel() 
        if dataLen == 0:
            raise RuntimeError("No available snapshot data.")
        
        # values format: the value is raw data from IOC
        # [(pv name), (value), (dbr type),
        #  (isConnected), (secondsPastEpoch), (nanoSeconds), (timeStampTag),
        #  (alarmSeverity), (alarmStatus), (alarmMessage)]
        pvnames = result.getChannelName()
        values = result.getValue()
        dbrtype = result.getDbrType()
        isconnected = result.getIsConnected()
        severity = result.getSeverity()
        status = result.getStatus()
        message = result.getMessage()
        sec = result.getSecondsPastEpoch()
        nanosec = result.getNanoseconds()
        usertag = result.getUserTag()

        # data format: the data is prepared to save into rdb
        # rawdata format
        # [('channel name', 'string value', 'double value', 'long value', 'dbr type', 'is connected', 
        #  'seconds past epoch', 'nano seconds', 'time stamp tag', 'alarm severity', 'alarm status', 'alarm message',
        #  'is_array', 'array_value'),
        #  ...
        # ]
        datas = []

        for i in range(dataLen):
            tmp = []
            if isinstance(values[i], (list, tuple)):
                tmp = [pvnames[i], "", None, None, dbrtype[i], isconnected[i],
                       sec[i], nanosec[i], usertag[i], severity[i], status[i], message[i],
                       1, values[i]]
            else:
                if dbrtype[i] in self.epicsString:
                     tmp = [pvnames[i], values[i], None, None, dbrtype[i], isconnected[i],
                            sec[i], nanosec[i], usertag[i], severity[i], status[i], message[i],
                            0, None]
                else:
                     tmp = [pvnames[i], str(values[i]), values[i], values[i], dbrtype[i], isconnected[i],
                            sec[i], nanosec[i], usertag[i], severity[i], status[i], message[i],
                            0, None]
            datas.append(tmp)

        # save into database
        try:
            conn = pymasar.utils.connect()
            eid, result = pymasar.masardata.saveSnapshot(conn, datas, servicename=service, configname=config, comment=comment)
            pymasar.utils.save(conn)
            pymasar.utils.close(conn)
            result.insert(0, eid)
            return result
        except:
            # keep the same format with a normal operation
            return [-1]
Ejemplo n.º 2
0
    def saveSnapshot(self, params):
        key = ['servicename', 'configname', 'comment']
        service, config, comment = self._parseParams(params[1], key)
        if not service:
            service = self.__servicename

        result = NTMultiChannel(params[0])
        dataLen = result.getNumberChannel()
        if dataLen == 0:
            raise RuntimeError("No available snapshot data.")

        # values format: the value is raw data from IOC
        # [(pv name), (value), (dbr type),
        #  (isConnected), (secondsPastEpoch), (nanoSeconds), (timeStampTag),
        #  (alarmSeverity), (alarmStatus), (alarmMessage)]
        pvnames = result.getChannelName()
        values = result.getValue()
        dbrtype = result.getDbrType()
        isconnected = result.getIsConnected()
        severity = result.getSeverity()
        status = result.getStatus()
        message = result.getMessage()
        sec = result.getSecondsPastEpoch()
        nanosec = result.getNanoseconds()
        usertag = result.getUserTag()

        # data format: the data is prepared to save into rdb
        # rawdata format
        # [('channel name', 'string value', 'double value', 'long value', 'dbr type', 'is connected',
        #  'seconds past epoch', 'nano seconds', 'time stamp tag', 'alarm severity', 'alarm status', 'alarm message',
        #  'is_array', 'array_value'),
        #  ...
        # ]
        datas = []

        for i in range(dataLen):
            tmp = []
            if isinstance(values[i], (list, tuple)):
                tmp = [
                    pvnames[i], "", None, None, dbrtype[i], isconnected[i],
                    sec[i], nanosec[i], usertag[i], severity[i], status[i],
                    message[i], 1, values[i]
                ]
            else:
                if dbrtype[i] in self.epicsString:
                    tmp = [
                        pvnames[i], values[i], None, None, dbrtype[i],
                        isconnected[i], sec[i], nanosec[i], usertag[i],
                        severity[i], status[i], message[i], 0, None
                    ]
                else:
                    tmp = [
                        pvnames[i],
                        str(values[i]), values[i], values[i], dbrtype[i],
                        isconnected[i], sec[i], nanosec[i], usertag[i],
                        severity[i], status[i], message[i], 0, None
                    ]
            datas.append(tmp)

        # save into database
        try:
            conn = pymasar.utils.connect()
            eid, result = pymasar.masardata.saveSnapshot(conn,
                                                         datas,
                                                         servicename=service,
                                                         configname=config,
                                                         comment=comment)
            pymasar.utils.save(conn)
            pymasar.utils.close(conn)
            result.insert(0, eid)
            return result
        except:
            # keep the same format with a normal operation
            return [-1]