//------------------------------------------------------ bool CDBProperties::getIntegrationLogs(const std::string& channelName) { //sanity check if (cdbChannelConfigExists(channelName)==false) { return false; } //CDB //complete name of the channel within the CDB std::string cdbChannelName = "MACI/Channels/" + channelName; CDB::DAL_var cdbRef = getCDB(); CDB::DAO_var tempDAO = cdbRef->get_DAO_Servant(cdbChannelName.c_str()); //get the raw string std::string tString = tempDAO->get_string("IntegrationLogs"); //just convert the string to real boolean types if(tString=="false") { return false; } else { return true; } }
//------------------------------------------------------ CDBProperties::EventHandlerTimeoutMap CDBProperties::getEventHandlerTimeoutMap(const std::string& channelName) { EventHandlerTimeoutMap retVal; //sanity check if (cdbChannelConfigExists(channelName)==false) { return retVal; } //CDB //complete name of the channel within the CDB std::string cdbChannelName = "MACI/Channels/" + channelName; CDB::DAL_var cdbRef = getCDB(); CDB::DAO_var tempDAO = cdbRef->get_DAO_Servant(cdbChannelName.c_str()); CDB::stringSeq_var keys; //names of all the events try { keys = tempDAO->get_string_seq("Events"); } catch(...){ return retVal; } //another sanity check if (keys.ptr()==0) { return retVal; } //populate the map for (CORBA::ULong i=0; i<keys->length(); i++) { //get the key's value std::string timeoutLocation = "Events/"; timeoutLocation = timeoutLocation + (const char*)keys[i] + "/MaxProcessTime"; double value = tempDAO->get_double(timeoutLocation.c_str()); //set the map's contents retVal[(const char*)keys[i]] = value; } return retVal; }
//----------------------------------------------------------------------------- char* BaseHelper::getNotificationFactoryNameForChannel(CDB::DAL_ptr cdbRef, const char* channelName, const char* domainName) { //sanity check if(CORBA::is_nil(cdbRef)) { ACS_STATIC_SHORT_LOG((LM_DEBUG, "BaseHelper::getNotificationFactoryNameForChannel", "CDB ref null.")); return 0; } std::string cdbChannelsName = "MACI/Channels"; CDB::DAO_var tempDAO; //try reading the entry from the CDB try { tempDAO = cdbRef->get_DAO_Servant(cdbChannelsName.c_str()); //sanity check, should not happen if (tempDAO.in()==0) return 0; //DAL throws exceptions if the entry being searched for does not //exist } catch(...) { ACS_STATIC_SHORT_LOG((LM_DEBUG, "BaseHelper::getNotificationFactoryNameForChannel", "No CDB entry found for '%s' channel. OK.", cdbChannelsName.c_str())); return 0; } // if channel mapping exists take it, wildchars are also supported try { CDB::stringSeq_var channelNameList = tempDAO->get_string_seq("NotificationServiceMapping/Channels_"); for (CORBA::ULong n = 0; n < channelNameList->length(); n++) if (Wildcard::wildcardfit(channelNameList[n], channelName)) return CORBA::string_dup(tempDAO->get_string((std::string("NotificationServiceMapping/Channels_/") + channelNameList[n].in() + "/NotificationService").c_str())); } catch(...) { ACS_STATIC_SHORT_LOG((LM_DEBUG, "BaseHelper::getNotificationFactoryNameForChannel", "No Channel to NotificationService mapping found for channel'%s' channel.", channelName)); } // if domain mapping, if given if (domainName) try { return CORBA::string_dup(tempDAO->get_string((std::string("NotificationServiceMapping/Domains/") + domainName + "/NotificationService").c_str())); } catch(...) { ACS_STATIC_SHORT_LOG((LM_DEBUG, "BaseHelper::getNotificationFactoryNameForChannel", "No Domain to NotificationService mapping found for domain/channel'%s/%s' channel. OK.", domainName, channelName)); } // if default try { return CORBA::string_dup(tempDAO->get_string("NotificationServiceMapping/DefaultNotificationService")); } catch(...) { ACS_STATIC_SHORT_LOG((LM_DEBUG, "BaseHelper::getNotificationFactoryNameForChannel", "No NotificationServiceMapping/DefaultNotificationService attribute found. OK.", domainName, channelName)); } // not found return 0; }
//------------------------------------------------------ CosNotification::QoSProperties CDBProperties::getCDBQoSProps(const std::string& channelName) { CosNotification::QoSProperties retVal; retVal.length(0); //sanity check if (cdbChannelConfigExists(channelName)==false) { return retVal; } //CDB //complete name of the channel within the CDB std::string cdbChannelName = "MACI/Channels/" + channelName; CDB::DAL_var cdbRef = getCDB(); CDB::DAO_var tempDAO = cdbRef->get_DAO_Servant(cdbChannelName.c_str()); //temporary pointer points to the name of the CosNotification //property const char *name_p; //temporary counter unsigned int i = 0U; //commented out because TAO does not support these props /* //EventReliability/////////////////////////////////////////////// { name_p = CosNotification::EventReliability; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tStringER = tempDAO->get_string(name_p); if(tStringER=="BestEffort") { retVal[i-1].value <<= CosNotification::BestEffort; } else { retVal[i-1].value <<= CosNotification::Persistent; } } //ConnectionReliability/////////////////////////////////////////////// { name_p = CosNotification::ConnectionReliability; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tStringCR = tempDAO->get_string(name_p); if(tStringCR=="BestEffort") { retVal[i-1].value <<= CosNotification::BestEffort; } else { retVal[i-1].value <<= CosNotification::Persistent; } } */ //Priority///////////////////////////////////////////////////// { name_p = CosNotification::Priority; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); retVal[i-1].value <<= static_cast<CORBA::Short>(tempDAO->get_long(name_p)); } //Timeout////////////////////////////////////////////////////// { name_p = CosNotification::Timeout; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); retVal[i-1].value <<= static_cast<TimeBase::TimeT>(tempDAO->get_long(name_p)); } //OrderPolicy/////////////////////////////////////////////// { name_p = CosNotification::OrderPolicy; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tStringOP = tempDAO->get_string(name_p); if(tStringOP=="AnyOrder") { retVal[i-1].value <<= CosNotification::AnyOrder; } else if(tStringOP=="FifoOrder") { retVal[i-1].value <<= CosNotification::FifoOrder; } else if(tStringOP=="PriorityOrder") { retVal[i-1].value <<= CosNotification::PriorityOrder; } else if(tStringOP=="DeadlineOrder") { retVal[i-1].value <<= CosNotification::DeadlineOrder; } else { //DWF-throw exception } } //DiscardPolicy/////////////////////////////////////////////// { name_p = CosNotification::DiscardPolicy; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tStringDP = tempDAO->get_string(name_p); if(tStringDP=="AnyOrder") { retVal[i-1].value <<= CosNotification::AnyOrder; } else if(tStringDP=="FifoOrder") { retVal[i-1].value <<= CosNotification::FifoOrder; } else if(tStringDP=="PriorityOrder") { retVal[i-1].value <<= CosNotification::PriorityOrder; } else if(tStringDP=="DeadlineOrder") { retVal[i-1].value <<= CosNotification::DeadlineOrder; } else if(tStringDP=="LifoOrder") { retVal[i-1].value <<= CosNotification::LifoOrder; } else { //DWF-throw exception } } //commented out because TAO does not support these props /* //Start Time Supported///////////////////////////////////////// { name_p = CosNotification::StartTimeSupported; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tStringStartTS = tempDAO->get_string(name_p); if(tStringStartTS=="false") { retVal[i-1].value <<= false; } else { retVal[i-1].value <<= true; } } //Stop Time Supported///////////////////////////////////////// { name_p = CosNotification::StopTimeSupported; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tStringStopTS = tempDAO->get_string(name_p); if(tStringStopTS=="false") { retVal[i-1].value <<= false; } else { retVal[i-1].value <<= true; } } */ //Max Events per Consumer///////////////////////////////////// { name_p = CosNotification::MaxEventsPerConsumer; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); retVal[i-1].value <<= static_cast<CORBA::Long>(tempDAO->get_long(name_p)); } //for debugging purposes only std::string debugMessage = "Length=" + retVal.length(); STATIC_LOG(Logging::BaseLog::LM_DEBUG, "nc::CDBProperties::getCDBQoSProps", debugMessage); return retVal; }
//------------------------------------------------------ CosNotification::AdminProperties CDBProperties::getCDBAdminProps(const std::string& channelName) { CosNotification::AdminProperties retVal; retVal.length(0); //sanity check if (cdbChannelConfigExists(channelName)==false) { ACS_STATIC_SHORT_LOG((LM_INFO, "CDBProperties::getCDBAdminProps", "Channel does not exist.")); return retVal; } //CDB //complete name of the channel within the CDB std::string cdbChannelName = "MACI/Channels/" + channelName; CDB::DAL_var cdbRef = getCDB(); CDB::DAO_var tempDAO = cdbRef->get_DAO_Servant(cdbChannelName.c_str()); //temporary pointer points to the name of the CosNotification //property const char *name_p; //temporary counter unsigned int i = 0U; //MaxQueueLength - TAO 1.1 had a queque of ~5 events. TAO 1.3 allows an // infinite amount of events to be stored. 20 seems like // a reasonable default. { name_p = CosNotification::MaxQueueLength; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); retVal[i-1].value <<= tempDAO->get_long(name_p); } //Max consumers/////////////////////////////////////////////////// { name_p = CosNotification::MaxConsumers; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); retVal[i-1].value <<= tempDAO->get_long(name_p); } //Max suppliers/////////////////////////////////////////////////// { name_p = CosNotification::MaxSuppliers; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); retVal[i-1].value <<= tempDAO->get_long(name_p); } //Reject new events/////////////////////////////////////////////// { name_p = CosNotification::RejectNewEvents; //allocate one extra element i++; retVal.length(i); retVal[i-1].name = CORBA::string_dup(name_p); std::string tString = tempDAO->get_string(name_p); if(tString=="false") { retVal[i-1].value <<= FALSE; } else { retVal[i-1].value <<= TRUE; } } //for debugging purposes only std::string debugMessage = "Length=" + retVal.length(); STATIC_LOG(Logging::BaseLog::LM_DEBUG, "nc::CDBProperties::getCDBAdminProps", debugMessage); return retVal; }