Example #1
0
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
Example #2
0
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()
Example #3
0
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()