Skip to content
Snippets Groups Projects
Select Git revision
  • ed2dce58cab02a3f8112d95aa2f36846b3ef9134
  • master default protected
  • L2SS-1914-fix_job_dispatch
  • TMSS-3170
  • TMSS-3167
  • TMSS-3161
  • TMSS-3158-Front-End-Only-Allow-Changing-Again
  • TMSS-3133
  • TMSS-3319-Fix-Templates
  • test-fix-deploy
  • TMSS-3134
  • TMSS-2872
  • defer-state
  • add-custom-monitoring-points
  • TMSS-3101-Front-End-Only
  • TMSS-984-choices
  • SDC-1400-Front-End-Only
  • TMSS-3079-PII
  • TMSS-2936
  • check-for-max-244-subbands
  • TMSS-2927---Front-End-Only-PXII
  • Before-Remove-TMSS
  • LOFAR-Release-4_4_318 protected
  • LOFAR-Release-4_4_317 protected
  • LOFAR-Release-4_4_316 protected
  • LOFAR-Release-4_4_315 protected
  • LOFAR-Release-4_4_314 protected
  • LOFAR-Release-4_4_313 protected
  • LOFAR-Release-4_4_312 protected
  • LOFAR-Release-4_4_311 protected
  • LOFAR-Release-4_4_310 protected
  • LOFAR-Release-4_4_309 protected
  • LOFAR-Release-4_4_308 protected
  • LOFAR-Release-4_4_307 protected
  • LOFAR-Release-4_4_306 protected
  • LOFAR-Release-4_4_304 protected
  • LOFAR-Release-4_4_303 protected
  • LOFAR-Release-4_4_302 protected
  • LOFAR-Release-4_4_301 protected
  • LOFAR-Release-4_4_300 protected
  • LOFAR-Release-4_4_299 protected
41 results

CEP_Processes.ctl

Blame
  • user avatar
    Alexander van Amesfoort authored
    Jan David agreed it makes sense, although some software covered is not
    currently maintained by the RO software team.
    All replacements happen in comments, so this is safe. (viewed svn diff | grep ... by hand)
    Command used:
    LOFAR$ grep -r -l seg@astron.nl * | xargs sed -i -e 's/seg@astron.nl/softwaresupport@astron.nl/g'
    9d739dbc
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    CEP_Processes.ctl 11.92 KiB
    // CEP_Processes.ctl
    //
    //  Copyright (C) 2002-2004
    //  ASTRON (Netherlands Foundation for Research in Astronomy)
    //  P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, softwaresupport@astron.nl
    //
    //  This program is free software; you can redistribute it and/or modify
    //  it under the terms of the GNU General Public License as published by
    //  the Free Software Foundation; either version 2 of the License, or
    //  (at your option) any later version.
    //
    //  This program is distributed in the hope that it will be useful,
    //  but WITHOUT ANY WARRANTY; without even the implied warranty of
    //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    //  GNU General Public License for more details.
    //
    //  You should have received a copy of the GNU General Public License
    //  along with this program; if not, write to the Free Software
    //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    //
    //  $Id$
    //
    ///////////////////////////////////////////////////////////////////
    // global functions for the CEP_Processes panel
    ///////////////////////////////////////////////////////////////////
    //
    // Functions and procedures
    //
    // CEP_Processes_initList                        : prepares the processeslist
    // CEP_Processes_UpdateCEPControllers        : updates all CEPdb controllers depending on observations
    // CEP_Processes_UpdateProcessesList             : prepares an updated treelist for the selectionboxes
    
    #uses "GCFLogging.ctl"
    #uses "GCFCommon.ctl"
    #uses "MainCU_Processes.ctl"
    
    global dyn_string CEP_result;
    global dyn_string CEP_procList;
    global string CEP_selectedObservation    = "";
    global string CEP_selectedStation        = "";
    global string CEP_obsBaseDP              = "";
    
    
    
    // ****************************************
    // Name : CEP_Processes_initList
    // ****************************************
    // Description:  
    //   prepares the processes list
    //  
    // ***************************************
    bool CEP_Processes_initList() {
      dynClear(CEP_result);
      dynClear(CEP_procList);
      
      
      int z;
      dyn_dyn_anytype tab;
      //PermSW + PermSW_Daemons
      dpQuery("SELECT '_original.._value' FROM 'LOFAR_PermSW_*.status.state' REMOTE '"+CEPDBName+"'", tab);
      LOG_TRACE("CEP_Processes.ctl:initList|Found: "+ tab);
      
      dyn_string aDS=navFunct_getDynString(tab, 2,1);
      dynSortAsc(aDS);
      
      for(z=1;z<=dynlen(aDS);z++){
        
        // strip .status.state from CEP_result
        string aS = dpSubStr(aDS[z],DPSUB_SYS_DP);
    
        // keep Path to work with
        string path=aS;
        
    
        // strip all including PermsSW out of the string
        strreplace(aS,syst+dpSubStr(baseDP,DPSUB_DP)+"_PermSW_","");
    
        
        // Remainder should be PermsSW Programs + Daemons  split on _
        // leave out IOnodes 
        dyn_string spl=strsplit(aS,"_");
        if (dynlen(spl) > 1) { // Daemon
          dynAppend(CEP_result,navFunct_dpStripLastElement(path)+","+spl[2]+","+path);
          dynAppend(CEP_procList,path);
        } else {   // Program
          dynAppend(CEP_result,","+spl[1]+","+path);
          if (spl[1] != "Daemons") {
            dynAppend(CEP_procList,path);
          }
        }
      }
      
      LOG_DEBUG("CEP_Processes.ctl:initList|found procList: "+ CEP_procList);
      LOG_DEBUG("CEP_Processes.ctl:initList|found results: "+ CEP_result);
        
      if (!dpExists(MainDBName+"LOFAR_PermSW_MACScheduler.activeObservations")) {
        setValue("activeObs","backCol","Lofar_dpdoesnotexist");
      } else {
        if (dpConnect("CEP_Processes_ActiveObsCallback",true,"LOFAR_PermSW_MACScheduler.activeObservations") == -1) {
          LOG_ERROR("CEP_Processes.ctl:initList|couldn't connect to activeObservations.");
        } else {
          if (!navFunct_dpReachable("LOFAR_PermSW_MACScheduler.activeObservations")) { 
            setValue("activeObs","backCol","Lofar_dpOffline");
          }
        }        
      }
     
      dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".processesList",CEP_result);
    }
    
    // ****************************************
    // Name : CEP_Processes_UpdateCEPControllers()
    // ****************************************
    // Description:  
    //   sets CEP_selectedStation and looks if the CEPControllers need
    //   to be updated.
    //  
    // ***************************************
    bool CEP_Processes_UpdateCEPControllers() {
      LOG_TRACE("CEP_Processes.ctl:updateCEPControllers|entered, CEP_obsBaseDP: "+CEP_obsBaseDP);
    
      string newSelectedObservation=activeObs.getText(activeObs.selectedItem(),0);
      LOG_TRACE("CEP_Processes.ctl:updateMainControllers|selected observation: "+ CEP_selectedObservation +" New: "+ newSelectedObservation);
      // check if selection is made, and the selection is indeed a new one
      if (newSelectedObservation != 0) {
        selectedStation="";
        CEP_selectedObservation = newSelectedObservation;
        observationName.text(CEP_selectedObservation);
        // get the real name from the selected Observation
        CEP_obsBaseDP=claimManager_nameToRealName("LOFAR_ObsSW_"+CEP_selectedObservation);   
        
    //    dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","OnlineControl_BGPApplPanel",
    //        DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(CEP_obsBaseDP));
        dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","PythonControlPanel",
            DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(CEP_obsBaseDP));
      
      }
      
      // update StationTree
      LOG_DEBUG("CEP_Processes.ctl:UpdateCEPControllers|Starting updateStationTree");  
      CEP_Processes_UpdateStationTree();
      
      LOG_TRACE("CEP_Processes.ctl:UpdateCEPControllers|call UpdateProcessesList");
      if (!CEP_Processes_UpdateProcessesList()) {
        LOG_ERROR("CEP_Processes.ctl:UpdateCEPControllers|UpdateProcessesList returned false");
        return false;
      }
      return true;
    }
    
    // ****************************************
    // Name : CEP_Processes_UpdateProcessesList()
    // ****************************************
    // Description:  
    //   takes the general CEP_results and adds the (changed) 
    //   observation CEP ctrl'ers
    //  
    // ***************************************
    bool CEP_Processes_UpdateProcessesList() {
      LOG_TRACE("CEP_Processes.ctl:updateProcessesList|entered selected observation: "+ CEP_selectedObservation);
      dyn_string list;
      
      // copy old CEP_results from rest of the panel to the new list
      list=CEP_result;
      g_processesList=CEP_procList;
      
      int z;
      dyn_dyn_anytype tab;
      // if an observation is chosen
      if(CEP_selectedObservation != "") {
        // get the real name from the selected Observation
        string CEPObsDP=claimManager_nameToRealName("LOFAR_ObsSW_"+CEP_selectedObservation);
        
        if (strtok(CEP_selectedStation,":") < 0) { 
          CEP_selectedStation+=":";
        }
        if (strpos(CEPObsDP,CEPDBName) < 0) {     
          CEPObsDP=CEPDBName+dpSubStr(CEPObsDP,DPSUB_DP);
        }    
        CEP_obsBaseDP = CEPObsDP;
        // add Observation 
        dynAppend(list,","+CEP_selectedObservation+","+CEPObsDP);
    
        //select all Ctrl under CEP:LOFAR_ObsSW_'CEP_selectedObservation'
        string query="SELECT '_original.._value' FROM '"+CEPObsDP+"_*.status.state' REMOTE '"+CEPDBName+"'";
        LOG_DEBUG("CEP_Processes.ctl:updateProcessesList|Query: "+ query);
        dpQuery(query, tab);
        LOG_TRACE("CEP_Processes.ctl:updateProcessesList|CEP Controllers Found: "+ tab);
          
        dyn_string aDS=navFunct_getDynString(tab, 2,1);
        dynSortAsc(aDS);
        for(z=1;z<=dynlen(aDS);z++){
        
          // strip .status.state from CEP_result
          string aS = dpSubStr(aDS[z],DPSUB_SYS_DP);
    
          // keep Path to work with
          string path=aS;
        
          
          // strip all including Observation out of the string
          strreplace(aS,CEPObsDP+"_","");
    
          
          // Remainder should be Ctrl Programs, split on _ 
          dyn_string spl=strsplit(aS,"_");
          if (dynlen(spl) > 1) { // low level Ctrl
            if (dynlen(spl) < 3) {
              dynAppend(list,navFunct_dpStripLastElement(path)+","+spl[2]+","+path);
              dynAppend(g_processesList,path);
            }
          } else {   // Ctrl
            dynAppend(list,CEPObsDP+","+spl[1]+","+path);
            if (spl[1] != "OnlineControl") {
              dynAppend(g_processesList,path);
            }
          }
        }
        
        dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".processesList",list);
        
        // set panel to ready
        g_objectReady=true;
      
        // trigger that the panel values are calculated and ready
        navPanel_setEvent("CEP_Processes.ctl:updateProcessesList","Update");
      }
      return true;
    } 
    
    
    
    CEP_Processes_ActiveObsCallback(string dp1, dyn_string activeObservations) {
      LOG_TRACE("CEP_Processes.ctl:activeObsCallback|Found: "+ activeObservations);
    
      // wait a few milisecs to give the g_observationlist time to refill
      delay(0,500);  // empty the table
      activeObs.clear();
      
      // if the active observations list changes the list here should be changed also.
      // iterate over the found entries and fill the table
      // if no previous Observation selected, set selection to the first on the list, also
      // set it here when previous selection disappeared from the list.
      // otherwise nothing will be changed in the selection
    
      int idx=-1;
      string newSelection="";
      string oldSelection=activeObs.selectedItem();
      CEP_selectedObservation=oldSelection;
      LOG_DEBUG("CEP_Processes.ctl:activeObsCallback|oldSelection: "+oldSelection);
      dynSortAsc(activeObservations);      
      activeObservations = dynUnique(activeObservations);
      for (int i=1; i<= dynlen(activeObservations);i++) {
        string realName=claimManager_nameToRealName("LOFAR_ObsSW_"+activeObservations[i]);
        activeObs.appendItem("",realName,activeObservations[i]);
        activeObs.ensureItemVisible(realName);
        activeObs.setIcon(realName,0,"16_empty.gif");
        if (i==1) {
          newSelection=realName;
        }
      }
      
      if (strpos(newSelection,CEPDBName) < 0) {     
          CEP_obsBaseDP=CEPDBName+dpSubStr(newSelection,DPSUB_DP);
      } else {   
          CEP_obsBaseDP = newSelection;
        }
      
      if ((oldSelection == newSelection) ||
          (oldSelection != "" && activeObs.itemExists(oldSelection))) {
        activeObs.setSelectedItem(oldSelection,true);
        CEP_selectedObservation=activeObs.getText(activeObs.selectedItem(),0); 
        observationName.text(CEP_selectedObservation);
        LOG_DEBUG("CEP_Processes.ctl:activeObsCallback|Selection: "+CEP_selectedObservation);
        // nothing further needed
        return;
      } else {
        activeObs.setSelectedItem(newSelection,true);    
        CEP_selectedObservation=activeObs.getText(activeObs.selectedItem(),0); 
      }
      
      observationName.text(CEP_selectedObservation);
      LOG_DEBUG("CEP_Processes.ctl:activeObsCallback|Selection: "+CEP_selectedObservation);
      
      // something has changed, so update Main Controllers
      LOG_DEBUG("CEP_Processes.ctl:activeObsCallback|Starting updateCEPControllers");
      CEP_Processes_UpdateCEPControllers(); 
    }
    
    CEP_Processes_UpdateStationTree() {
    
      // empty the table
      stationTree.clear();
      
      
      LOG_DEBUG("CEPProcesses.ctl:CEP_Processes_UpdateStationTree|Found CEP_selectedObservation: "+CEP_selectedObservation);
      if (CEP_selectedObservation == "") {
        return;
      }
      
      LOG_DEBUG("CEP_Processes.ctl:CEP_Processes_UpdateStationTree|Found CEP_obsBaseDP: "+CEP_obsBaseDP);
      if (dpExists(CEP_obsBaseDP)) {
        // look if that name is available in the Observation List
        int j = dynContains(g_observations["DP"],CEP_obsBaseDP);
        if ( j > 0) {
          // get the Stationlist from that observation
          string sts=g_observations["STATIONLIST"][j];
          LOG_DEBUG("CEP_Processes.ctl:CEP_Processes_UpdateStationTree|Found Stationlist for this Observation: "+ sts);
          // add stations if not allready there
          dyn_string stations = navFunct_listToDynString(sts);
          for (int k=1; k<= dynlen(stations);k++) {
            if (!stationTree.itemExists(stations[k])) {
              stationTree.appendItem("",stations[k],stations[k]);
              stationTree.ensureItemVisible(stations[k]);
              stationTree.setIcon(stations[k],0,"16_empty.gif");
    
            }
          }
        }
      }
    }