Select Git revision
CEP_Processes.ctl
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'
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");
}
}
}
}
}