def main(): import sys rc = 0 if len(sys.argv) < 2: print """ Usage: ctpproxy.py actrestart [nomasks] default:domasks restart -don't download ctp files from ACT rc: 1: internal error (syntax in this script) 4: can't stop ctpproxy (global run active?), leaving it on 5: can't download from ACT, ctpproxy left off 6: not executed on alitri (main trigger server), nothing done 7: can't start ctpproxy, after ctpproxy stop and ACT download 8: actrestart expected, nothing done 9: CTP switch not loaded, ctpproxy left off 10: can't update CTPRCFG/CS service 11: can't update CTPRCFG/INT1,2 services 12: can't update aliases.txt in pydimserver """ rc = 8 else: # if os.environ.get('VMESITE')==None: iop = iopipe("hostname -s") hostname = iop.outlines[0] print "HOSTNAME:", os.environ.get("HOSTNAME"), "-%s-" % hostname # if os.environ.get('VMESITE')=="SERVER" or os.environ.get('VMESITE')==None: os.environ["VMECFDIR"] = "/local/trigger/v/vme" if (hostname == "adls") or (hostname == "avmes"): vmectp = "altri1" # vmeswitch="trigger@altri2" # os.environ["ACT_DB"]= "daq:daq@pcald30/ACT" elif hostname == "alidcscom835": # alidcscom188 # os.environ["VMECFDIR"]="/data/dl/root/usr/local/trigger/stable/v/vme" vmectp = "alidcsvme001" # vmeswitch="trigger@alidcsvme004" # os.environ["ACT_DB"]= "daq:daq@aldaqdb/ACT" elif hostname == "pcalicebhm10": # alidcscom188 # os.environ["VMECFDIR"]="/data/dl/root/usr/local/trigger/stable/v/vme" vmectp = "altri2" else: rc = 6 print "host:", hostname, "rc:", rc return rc # os.environ["LD_LIBRARY_PATH"]= os.environ["LD_LIBRARY_PATH"]+" dbctp = os.path.join(os.environ.get("VMECFDIR"), "CFG/ctp/DB") os.environ["dbctp"] = os.path.join(os.environ.get("VMECFDIR"), "CFG/ctp/DB") print "dbctp:", dbctp print "VMESITE:", os.environ.get("VMESITE") print "VMECFDIR:", os.environ.get("VMECFDIR") sys.stdout.flush() cmd = sys.argv[1] maskoption = "domasks" if len(sys.argv) > 2: maskoption = sys.argv[2] # nomasks or default:domasks if (cmd == "actrestart") or (cmd == "restart"): iop = iopipe("ssh -2 -q %s ctpproxy.sh stop" % vmectp, "") time.sleep(2) iop = iopipe("ssh -2 -q %s ctpproxy.sh status" % vmectp) print iop.outlines if iop.check("TRIGGER::CTP not running") >= 0: # iop= iopipe("...ctp_proxy/linux/act.exe") # iop= iopipe("startClients.bash ctpproxy actstart","nout") if cmd == "actrestart": actdownload = os.path.join(os.environ.get("VMECFDIR"), "ctp_proxy/linux_s/act.exe") iop = iopipe(actdownload) # print iop.outlines if iop.check("CTP config files downloaded from ACT.") >= 0: ##os.chdir(os.path.join(os.environ.get('VMECFDIR'), "switchgui")) # iop= iopipe("./switched.py load") # print iop.outlines ##sys.path.append(os.environ.get('VMECFDIR')+'/switchgui/') ##import switched rc = 0 ##rc= switched.main("actload") else: rc = 5 else: print "restart: act download skipped." rc = 0 if rc == 0: ##iop= iopipe("ssh -2 -q %s '$VMECFDIR/../bin/loadswitch ctp'"%vmeswitch) ixl = 0 ##ixl= iop.check("CTP.SWITCH: connected") if ixl >= 0: print iop.outlines[ixl] iop = iopipe("cd $VMECFDIR/pydim ; linux_s/client CTPRCFG/RCFG intupdate") if iop.check("Callback: OK") >= 0: iop = iopipe("cd $VMECFDIR/pydim ; linux_s/client CTPRCFG/RCFG aliasesupdate") if iop.check("Callback: OK") >= 0: iop = iopipe("ssh -2 -q %s ctpproxy.sh start configrunset" % vmectp, "") # iop= iopipe("ssh -2 -q %s ctpproxy.sh start"%vmectp,"") # iop= iopipe("ssh -2 -q %s ctpproxy.sh startnr"%vmectp,"") time.sleep(30) iop = iopipe("ssh -2 -q %s ctpproxy.sh status" % vmectp) if iop.check("TRIGGER::CTP running.") >= 0: if maskoption == "domasks": f = open(os.path.join(dbctp, "FillingScheme"), "r") lin1 = f.readline() f.close() if lin1[:7] == "bcmasks": iop = iopipe("colschedule.bash update") if iop.check("Callback: OK") >= 0: rc = 0 else: print iop.outlines rc = 10 # can't update CTPRCFG/CS service else: # print "FillingScheme != BCMASK. -> CTPRCFG/CS not updated" print "FillingScheme == auto, reading DIP service..." sys.path.append(os.path.join(os.environ["VMECFDIR"], "filling")) import getfsdip rc = getfsdip.main("act") if rc == 0: print "New masks prepared and CTPRCFG/CS DIM service updated" else: print "CTP masks not updated, filling scheme not ready through DIP" # if DIP not available, nothing should happen, that's why we force rc to 0 rc = 0 else: print "maskoption: %s -masks update skipped" % maskoption rc = 0 # masks not update (nomasks option) else: print iop.outlines rc = 7 # can't start ctpproxy else: print iop.outlines rc = 12 # can't update aliases.txt in pydimserver else: print iop.outlines rc = 11 # can't update CTPRCFG/INT1,2 services else: rc = 9 # can't load CTP switch (thrown out in run2) else: rc = 5 # can't download from ACT else: rc = 4 # can't stop ctpproxy # elif cmd=='stop': # iop= iopipe("startClients.bash ctpproxy stop") # print iop.outlines # elif cmd=='status': # iop= iopipe("startClients.bash ctpproxy status") # print iop.outlines elif cmd == "stop": # ok iop= iopipe("ssh -2 -f %s ctpproxy.sh stop </dev/null 2>&1"%vmectp) iop = iopipe("ssh -2 %s ctpproxy.sh stop" % vmectp) # pass # iop.getout() # print iop.outlines elif cmd == "start": iop = iopipe("ssh -2 -q %s ctpproxy.sh stop" % vmectp) time.sleep(2) # iop= iopipe("nohup ssh -2 -f -q %s ctpproxy.sh start &"%vmectp,"") iop = iopipe("ssh -2 -f -q %s ctpproxy.sh start" % vmectp, "") iop.close() # os.system("nohup ssh -2 -f -q %s ctpproxy.sh start &"%vmectp) ; time.sleep(2) # # rc= spawn("/usr/bin/ssh", "-2", "-f", "-q", vmectp, "ctpproxy.sh", "start") ; time.sleep(2) # print "spawn rc:",rc # not start, rc: None iop = iopipe("ssh -2 -q %s ctpproxy.sh status" % vmectp) else: print "actrestart expected..." rc = 8 print "rc:", rc return rc
def callback_bm(ecsbm): #print "callback_bm: '%s' (%s)" % (p2, type(p2)) #WEB.miclock= rmzero(now) ; WEB.save() bmname= rmzero(ecsbm) #print "callback_bm: '%s' (%s)" % (bmname, type(bmname)) bm= bm2clocknames[bmname] if bm2clock.has_key(bm): i01= bm2clock[bm][0] if i01==0: expclock= "LOCAL" else: expclock= "BEAM1" bmname= bm2clock[bm][1] else: expclock= "?" ; bmname="???" if bmname == WEB.lastbmname: #mylog.logm("No change in BM, no action") return prev_bmname= WEB.lastbmname WEB.lastbmname= bmname arg= ("%d %s"%(bm, bmname),) res= pydim.dic_cmnd_service("CTPRCFG/SETBM", arg, "C") mylog.logm("callback_bm:" + arg[0] + " " + str(res)) ## #mylog.logm("callback_bm: "+bmname) #if (prev_bmname=="RAMP") or (bmname=="FLAT TOP"): if (bmname=="PREPARE RAMP") or (bmname=="RAMP"): sys.path.append(os.path.join(os.environ['VMECFDIR'],"filling")) import getfsdip reload(getfsdip) mylog.logm("getfsdip.py act...") getfsdip.main("act") cshift= getShift() if WEB.miclock==expclock: if bmname=="SQUEEZE": if cshift!='old': checkandsave(cshift, bmname) # fine shift # it should certainly be less then 100ps after adjustment: t= threading.Timer(10.0, checkShift) t.start() else: arg=("none",) res= pydim.dic_cmnd_service("TTCMI/DLL_RESYNC", arg, "C") #mylog.logm("DLL_RESYNC after clock shift NOT started...") # CJI mylog.logm("BEAM MODE:%s, clock: %s OK, shift:%s"%(bmname, expclock, cshift)) if bmname=="RAMP_NOSCOPE": # never do this (no scope) if os.environ['VMESITE']=='ALICE': import sctel reload(sctel) mininf= "INF" tn= sctel.TN() tn.setPersitence(mininf) tn.close() mylog.logm("alidcsaux008 scope persitence: "+mininf) else: #if (bm==13) or (bm==4): # BEAM DUMP/INJECTION SETUP BEAM adjust clock #if expclock != "LOCAL": # checkandsave(cshift) # not called from 29.6. #mylog.logm( "BEAM MODE:%s, clock %s not correct. miclock mode:%s shift:%s"%\ # (bmname, WEB.miclock,WEB.clockchangemode, cshift) ) #print "%s bad clock:%s for beam mode:%s(%d) clock_change_mode:%s"%\ # (ltim, WEB.miclock, bmname,bm, WEB.clockchangemode) if (bm>=5) or (bm<=12): if WEB.clockchangemode=="AUTO": wf='f' else: wf='w' mylog.infolog( "BEAM MODE:%s, clock %s not correct. miclock mode:%s"%\ (bmname, WEB.miclock,WEB.clockchangemode), level=wf ) if WEB.clockchangemode=='AUTO_NEVERCHANGE': # it is on lhcint now to change th clock # change clock mylog.logm("changing clock to %s. Wait 3 half-minutes please..."%(expclock)) WEB.newclock= expclock; WEB.save() res= pydim.dic_cmnd_service("TTCMI/MICLOCK_SET", (expclock,), "C") mylog.logm("cmnd sent: TTCMI/MICLOCK_SET") mininf="" if expclock=="LOCAL": mininf= "MIN" else: if bmname=="RAMP": mininf= "INF" #if mininf!="": if mininf=="NOSCOPE": # never do tis (no scope) if os.environ['VMESITE']=='ALICE': import sctel reload(sctel) tn= sctel.TN() mylog.logm("setting scope persitence: "+mininf) tn.setPersitence(mininf) tn.close() #mylog.logm("alidcsaux008 scope persitence: "+mininf) ##mylog.logm("NOT CHANGED ##") mylog.flush()
def callback_bm(ecsbm): #print "callback_bm: '%s' (%s)" % (p2, type(p2)) #WEB.miclock= rmzero(now) ; WEB.save() bmname= rmzero(ecsbm) #print "callback_bm: '%s' (%s)" % (bmname, type(bmname)) bm= bm2clocknames[bmname] if bm2clock.has_key(bm): i01= bm2clock[bm][0] if i01==0: expclock= "LOCAL" else: expclock= "BEAM1" bmname= bm2clock[bm][1] else: expclock= "?" ; bmname="???" if bmname == WEB.lastbmname: #mylog.logm("No change in BM, no action") return prev_bmname= WEB.lastbmname WEB.lastbmname= bmname arg= ("%d %s"%(bm, bmname),) res= pydim.dic_cmnd_service("CTPRCFG/SETBM", arg, "C") mylog.logm("callback_bm:" + arg[0] + " " + str(res)) ## #mylog.logm("callback_bm: "+bmname) #if (prev_bmname=="RAMP") or (bmname=="FLAT TOP"): if (bmname=="PREPARE RAMP") or (bmname=="RAMP"): sys.path.append(os.path.join(os.environ['VMECFDIR'],"filling")) if os.environ['VMESITE'] != "ALICE": mylog.logm("lab env, 'getfsdip.py act' call skipped") else: import getfsdip reload(getfsdip) mylog.logm("getfsdip.py act...") getfsdip.main("act") if WEB.miclock==expclock: if bmname=="FLAT TOP": mylog.infolog("FLAT TOP: waiting 50secs before reading current clock shift...",level='w') time.sleep(50) # give BPM 50 secs at least to measure the shift cshift= getShift() #if bmname=="SQUEEZE": # used before 26.05.2017 #if bmname=="ADJUST": # from 7.11.-17.11. 2016 15:45 we used ADJUST if cshift!='old': if False: mylog.infolog("FLAT TOP: clock shift correction disabled",level='w') else: mylog.infolog("FLAT TOP: clock shift %s, applying correction ..."%cshift,level='w') checkandsave(cshift, bmname) # fine shift #cst= threading.Timer(60.0, checkandsave,(cshift, bmname)) # from 29.5.2017 #cst.start() # it should certainly be less then 100ps after adjustment: #t= threading.Timer(90.0, checkShift, (30,)) # 90= 60+30 t= threading.Timer(30.0, checkShift, (30,)) t.start() else: # normally done in checkandsave mylog.infolog("FLAT TOP: clock shift %s, applying DLL_RESYNC instead of clock adjustment ..."%cshift,level='w') arg=("none",) res= pydim.dic_cmnd_service("TTCMI/DLL_RESYNC", arg, "C") #mylog.logm("DLL_RESYNC not started...") # CJI if bmname=="RAMP_NOSCOPE": # never do this (no scope) if os.environ['VMESITE']=='ALICE': import sctel reload(sctel) mininf= "INF" tn= sctel.TN() tn.setPersitence(mininf) tn.close() mylog.logm("alidcsaux008 scope persitence: "+mininf) else: #if (bm==13) or (bm==4): # BEAM DUMP/INJECTION SETUP BEAM adjust clock #if expclock != "LOCAL": # checkandsave(cshift) # not called from 29.6. #mylog.logm( "BEAM MODE:%s, clock %s not correct. miclock mode:%s shift:%s"%\ # (bmname, WEB.miclock,WEB.clockchangemode, cshift) ) #print "%s bad clock:%s for beam mode:%s(%d) clock_change_mode:%s"%\ # (ltim, WEB.miclock, bmname,bm, WEB.clockchangemode) if (bm>=5) or (bm<=12): if WEB.clockchangemode=="AUTO": wf='f' else: wf='w' mylog.infolog( "BEAM MODE:%s, clock %s not correct. ALICE/LHC/TTCMI/CLOCK_MODE:%s"%\ (bmname, WEB.miclock,WEB.clockchangemode), level='w') if WEB.clockchangemode=='AUTO_NEVERCHANGE': # it is on lhcint now to change th clock # change clock mylog.logm("changing clock to %s. Wait 3 half-minutes please..."%(expclock)) WEB.newclock= expclock; WEB.save() res= pydim.dic_cmnd_service("TTCMI/MICLOCK_SET", (expclock,), "C") mylog.logm("cmnd sent: TTCMI/MICLOCK_SET") mininf="" if expclock=="LOCAL": mininf= "MIN" else: if bmname=="RAMP": mininf= "INF" #if mininf!="": if mininf=="NOSCOPE": # never do tis (no scope) if os.environ['VMESITE']=='ALICE': import sctel reload(sctel) tn= sctel.TN() mylog.logm("setting scope persitence: "+mininf) tn.setPersitence(mininf) tn.close() #mylog.logm("alidcsaux008 scope persitence: "+mininf) ##mylog.logm("NOT CHANGED ##") mylog.flush()