diff --git a/DG_PY_FOFBTool/DG_PY_FOFBTool.py b/DG_PY_FOFBTool/DG_PY_FOFBTool.py index 7bba6d54b12047509301909a8dcd3b4fce480890..f7917be9cc8a646eb206531c18f8f022ed516c76 100644 --- a/DG_PY_FOFBTool/DG_PY_FOFBTool.py +++ b/DG_PY_FOFBTool/DG_PY_FOFBTool.py @@ -75,6 +75,8 @@ class DG_PY_FOFBTool(Device): - Type:'DevVarLongArray' k2_y - Type:'DevVarLongArray' + loglevel + - Type:'DevString' """ # PROTECTED REGION ID(DG_PY_FOFBTool.class_variable) ENABLED START # @@ -168,6 +170,11 @@ class DG_PY_FOFBTool(Device): mandatory=True ) + loglevel = device_property( + dtype='DevString', + mandatory=True + ) + # ---------- # Attributes # ---------- @@ -181,6 +188,11 @@ class DG_PY_FOFBTool(Device): dtype='DevString', ) + logs = attribute( + dtype=('DevString',), + max_dim_x=1024, + ) + # --------------- # General methods # --------------- @@ -199,13 +211,18 @@ class DG_PY_FOFBTool(Device): logger.warning("Not logging to file, could not open location {}".format(self.logfilepath)) else: fh.setLevel(logging.DEBUG) - fh.setFormatter(logging.Formatter("{levelname:8}: {message}", style='{')) + fh.setFormatter(logging.Formatter("{asctime} {levelname:8}: {message}", style='{')) logger.addHandler(fh) - logger.setLevel(logging.DEBUG) + + self.filehandler = fh + + logger.setLevel(getattr(logging, self.loglevel.upper())) if not hasattr(self, "_include_lbp"): self._include_lbp= False + self.set_state(tango.DevState.ON) + #----- PROTECTED REGION END -----# // DG_PY_FOFBTool.init_device @@ -223,7 +240,10 @@ class DG_PY_FOFBTool(Device): destructor and by the device Init command. """ #----- PROTECTED REGION ID(DG_PY_FOFBTool.delete_device) ENABLED START -----# - + + logger = logging.getLogger("FofbTool") + logger.removeHandler(self.filehandler) + #----- PROTECTED REGION END -----# // DG_PY_FOFBTool.delete_device # ------------------ # Attributes methods @@ -247,6 +267,14 @@ class DG_PY_FOFBTool(Device): return FofbTool.__version__ # PROTECTED REGION END # // DG_PY_FOFBTool.FofbToolVersion_read + def read_logs(self): + # PROTECTED REGION ID(DG_PY_FOFBTool.logs_read) ENABLED START # + """Return the logs attribute.""" + with open(self.logfilepath, 'r') as fp: + lines = fp.readlines() + return [l.replace('\n','') for l in lines[:-100:-1]] + # PROTECTED REGION END # // DG_PY_FOFBTool.logs_read + # -------- # Commands # -------- @@ -320,6 +348,7 @@ class DG_PY_FOFBTool(Device): """ self.info_stream("Stopping all") + self.d_status["nodes"]="FofbNode: stopping" self.debug_stream("Stopping combpm and comlbp") for cn in self.tangopath_cellnode: @@ -331,6 +360,7 @@ class DG_PY_FOFBTool(Device): FofbTool.Operation.stop_ccn(cn) FofbTool.Operation.reset_ccn(cn) + self.d_status["nodes"]="FofbNode: stopped" # PROTECTED REGION END # // DG_PY_FOFBTool.stop @@ -344,6 +374,7 @@ class DG_PY_FOFBTool(Device): :return:None """ self.info_stream("Starting all") + self.d_status["nodes"]="FofbNode: starting" if self._include_lbp: self.debug_stream("Starting comlbp") @@ -361,6 +392,8 @@ class DG_PY_FOFBTool(Device): FofbTool.Operation.start_ccn(cn) FofbTool.Operation.start_ccn(self.tangopath_centralnode) + self.d_status["nodes"]="FofbNode: started" + # PROTECTED REGION END # // DG_PY_FOFBTool.start @command( @@ -373,16 +406,16 @@ class DG_PY_FOFBTool(Device): :return:None """ db = tango.Database() + self.d_status["synchronize"]="Synchronize: starting" self.debug_stream("Building list form FREE PROPERTIES") bpmidlist = [(int(n.split(':')[0]), n.split(':')[2]) for n in db.get_property("FOFB", "bpmlist")['bpmlist'] if 'LIBERA' in n] tlocal = [n.split(':')[2] for n in db.get_property("FOFB", 'TimingBoardList')['TimingBoardList'] if "LOCAL" in n] lbpevrx = db.get_property("FOFB", 'LBPEVRX')['LBPEVRX'] - P = multiprocessing.Process(target=FofbTool.Operation.sync_bpm, - args=(bpmidlist, lbpevrx, tlocal, self.tangopath_centraltiming)) + FofbTool.Operation.sync_bpm(bpmidlist, lbpevrx, tlocal, self.tangopath_centraltiming) + self.d_status["synchronize"]="Synchronize: done" - P.start() # PROTECTED REGION END # // DG_PY_FOFBTool.sync @command( diff --git a/DG_PY_FOFBTool/DG_PY_FOFBTool.xmi b/DG_PY_FOFBTool/DG_PY_FOFBTool.xmi index b252b0998b336cbfba4375666674bdc682694907..20dda8117dbcc16fe19dff5d7997885040c36b28 100644 --- a/DG_PY_FOFBTool/DG_PY_FOFBTool.xmi +++ b/DG_PY_FOFBTool/DG_PY_FOFBTool.xmi @@ -61,6 +61,10 @@ <type xsi:type="pogoDsl:IntVectorType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </deviceProperties> + <deviceProperties name="loglevel" mandatory="true" description=""> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> <commands name="State" description="This command gets the device state (stored in its device_state data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0"> <argin description="none"> <type xsi:type="pogoDsl:VoidType"/> @@ -140,6 +144,14 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> </attributes> + <attributes name="logs" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="1024" maxY="" allocReadMember="true" isDynamic="false"> + <dataType xsi:type="pogoDsl:StringType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <dataReadyEvent fire="false" libCheckCriteria="true"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + </attributes> <preferences docHome="../doc/doc_html" makefileHome="$(TANGO_HOME)"/> </classes> </pogoDsl:PogoSystem>