Пример #1
0
void Testing::evRestartProcess( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR, PRI_DEBUG,"'%s': aborting configtest in order to restart",
                 impl.name());
   ChangeState( impl, impl.pStoppingConfigtestToRestart );
   impl.killConfigTest();
}
Пример #2
0
void Testing::evShutdown( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR, PRI_DEBUG,"'%s': aborting configtest in order to shutdown",
                 impl.name());
   ChangeState( impl, impl.pShuttingDown );
   impl.killConfigTest();
}
Пример #3
0
void SipxProcessFsm::evStopProcess( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR,PRI_INFO,"'%s': Received event evStopProcess while in state '%s'",
         impl.name(), impl.GetCurrentState()->name() );

   ChangeState( impl, impl.pStopping);
}
Пример #4
0
void Testing::DoEntryAction( SipxProcess& impl ) const
{
   impl.checkThreadId();
   impl.clearStatusMessages();

   impl.startConfigTest();
}
Пример #5
0
void SipxProcessFsm::evRestartProcess( SipxProcess& impl ) const
{
   OsSysLog::add(FAC_SUPERVISOR,PRI_INFO,"'%s': Received event evRestartProcess while in state '%s'",
         impl.name(), impl.GetCurrentState()->name() );

   ChangeState( impl, impl.pConfigurationMismatch );
}
Пример #6
0
void SipxProcessFsm::evResyncProcess( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR,PRI_INFO,"'%s': Received event evResyncProcess while in state '%s'",
         impl.name(), impl.GetCurrentState()->name() );

   ChangeState( impl, impl.pConfigurationMismatch );
}
Пример #7
0
void Stopping::DoEntryAction( SipxProcess& impl ) const
{
   impl.checkThreadId();
   impl.notifyShutdown();
   impl.startStopTimer();
   impl.stopProcess();
}
Пример #8
0
void SipxProcessFsm::evProcessStopped( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR,PRI_WARNING,"'%s': Received unexpected event evProcessStopped while in state '%s'",
         impl.name(), impl.GetCurrentState()->name() );

   ChangeState( impl, impl.pFailed);
}
Пример #9
0
void SipxProcessFsm::evShutdown( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR,PRI_DEBUG,"'%s': Received event evShutdown while in state '%s'",
         impl.name(), impl.GetCurrentState()->name() );

   ChangeState( impl, impl.pShutDown);
}
Пример #10
0
void ConfigurationMismatch::evConfigurationVersionUpdated( SipxProcess& impl ) const
{
   impl.clearStatusMessages();
   if ( impl.configurationVersionMatches() )
   {
      ChangeState( impl, impl.pResourceRequired );
   }
}
Пример #11
0
void Disabled::DoEntryAction( SipxProcess& impl ) const
{
   impl.checkThreadId();
   impl.clearStatusMessages();

   if (impl.isEnabled())
   {
      impl.enable();
   }
}
Пример #12
0
void Running::evProcessStopped( SipxProcess& impl ) const
{
   impl.checkThreadId();
   if (impl.isEnabled())
   {
      impl.processFailed();
      ChangeState( impl, impl.pFailed);
   }
   else
   {
      ChangeState( impl, impl.pDisabled);
   }
}
Пример #13
0
void Starting::evProcessStarted( SipxProcess& impl ) const
{
   if (impl.hadProcessFailed())
   {
      Alarm::raiseAlarm("PROCESS_RESTARTED", impl.data());
   }
   else if (impl.hadProcessBlocked())
   {
      Alarm::raiseAlarm("PROCESS_STARTED", impl.data());
      impl.clearProcessBlocked();
   }
   ChangeState( impl, impl.pRunning );
}
Пример #14
0
void ResourceRequired::DoEntryAction( SipxProcess& impl ) const
{
   impl.checkThreadId();
   impl.clearStatusMessages();

   if ( impl.resourcesAreReady() )
   {
      ChangeState( impl, impl.pTesting );
   }
   else
   {
      impl.startDelayReportingTimer();
   }
}
Пример #15
0
void ConfigurationMismatch::DoEntryAction( SipxProcess& impl ) const
{
   impl.checkThreadId();
   impl.clearStatusMessages();

   if ( impl.configurationVersionMatches() )
   {
      ChangeState( impl, impl.pResourceRequired );
   }
   else
   {
      impl.startDelayReportingTimer();
   }
}
Пример #16
0
// Whether or not the SipxProcessResource is ready for use by a SipxProcess.
bool SipxProcessResource::isReadyToStart(UtlString& missingResource)
{
   SipxProcess* myProcess = getProcess();

   bool bReady = (myProcess && myProcess->isRunning());
   if ( !bReady )
   {
      missingResource = "";
      appendDescription(missingResource);
       OsSysLog::add(FAC_SUPERVISOR, PRI_WARNING, 
                     "SipxProcessResource::isReadyToStart returns false; %s is not running ",
                     data());
   }
   return bReady;
}
Пример #17
0
void Disabled::evRestartProcess( SipxProcess& impl ) const
{
   if (impl.isEnabled())
   {
      ChangeState( impl, impl.pConfigurationMismatch );
   }
}
Пример #18
0
// Fill in a map of process names and states (as UtlStrings)
void SipxProcessManager::getProcessStateAll(UtlHashMap& processStates //< key->name, value->state string
                         )
{
   processStates.destroyAll();
   SipxProcess* process;

   // the lock is not required with the Iterator
   UtlHashBagIterator processes(mProcesses);
   while ((process = dynamic_cast<SipxProcess*>(processes())))
   {
      if ( 0 != process->compareTo(SUPERVISOR_PROCESS_NAME) )
      {
         processStates.insertKeyAndValue(new UtlString(process->data()),
                                      new UtlString(process->GetCurrentState()->name())
                                      );
      }
   }
}
Пример #19
0
// We need both the actual process, and the script which stops it, to finish
// before we move on.  These events can come in any order.
void Stopping::evProcessStopped( SipxProcess& impl ) const
{
   impl.checkThreadId();
   if (impl.isCompletelyStopped())
   {
      if (impl.isEnabled())
      {
         ChangeState( impl, impl.pConfigurationMismatch );
      }
      else
      {
         ChangeState( impl, impl.pDisabled );
      }
   }
   else
   {
      OsSysLog::add(FAC_SUPERVISOR, PRI_DEBUG,"'%s': process stopped, now wait for stop script", impl.name());
   }
}
Пример #20
0
void Stopping::evStopCompleted( SipxProcess& impl ) const
{
   impl.checkThreadId();
   if (impl.isCompletelyStopped())
   {
      if (impl.isEnabled())
      {
         ChangeState( impl, impl.pConfigurationMismatch );
      }
      else
      {
         ChangeState( impl, impl.pDisabled );
      }
   }
   else
   {
      Os::Logger::instance().log(FAC_SUPERVISOR, PRI_DEBUG,"'%s': stop completed, now wait for process stopped", impl.name());
   }
}
Пример #21
0
/// Some change has been made to this resource; notify any SipxProcesses that use it.
void SipxResource::modified()
{
   UtlSListIterator processResources(mUsedBy);
   SipxProcessResource* processResource;

   while ((processResource = dynamic_cast<SipxProcessResource*>(processResources())))
   {
      SipxProcess* process;
      if ((process=processResource->getProcess()))
      {
         process->configurationChange(*this);
      }
      else
      {
         /* there is no process for this process resource
          * - can happen when a definition is invalid, and has already been logged.
          */
      }
   }   
}
Пример #22
0
// We need both the actual process, and the script which stops it, to finish
// before we move on.  These events can come in any order.
void ShuttingDown::evProcessStopped( SipxProcess& impl ) const
{
   if (impl.isCompletelyStopped())
   {
      ChangeState( impl, impl.pShutDown );
   }
   else
   {
      OsSysLog::add(FAC_SUPERVISOR, PRI_DEBUG,"'%s': process stopped, now wait for stop script", impl.name());
   }
}
Пример #23
0
void ShuttingDown::evStopCompleted( SipxProcess& impl ) const
{
   if (impl.isCompletelyStopped())
   {
      ChangeState( impl, impl.pShutDown );
   }
   else
   {
      Os::Logger::instance().log(FAC_SUPERVISOR, PRI_DEBUG,"'%s': stop completed, now wait for process stopped", impl.name());
   }
}
Пример #24
0
/// destructor
SipxProcessManager::~SipxProcessManager()
{
   OsLock tableMutex(mProcessTableLock);

   SipxProcess* process;
   // send shutdowns to all processes before waiting for them to delete
   UtlHashBagIterator processes(mProcesses);
   while ((process = dynamic_cast<SipxProcess*>(processes())))
   {
      process->shutdown();
      OsTask::delay(100);
   }

   Os::Logger::instance().log(FAC_SUPERVISOR, PRI_NOTICE, "SipxProcessManager::~ "
                 "delete %zu SipxProcess objects", mProcesses.entries());

   mProcesses.destroyAll();

   while (mProcesses.entries() > 0)
   {
      OsTask::delay(1000);
   }
};
Пример #25
0
void SipxProcessFsm::evTimeout( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR,PRI_WARNING,"'%s': Received unexpected event evTimeout while in state '%s'",
         impl.name(), impl.GetCurrentState()->name() );
}
Пример #26
0
void ShutDown::evStopCompleted( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR, PRI_DEBUG,"'%s': evStopCompleted in state '%s', ignored",
                 impl.name(), impl.GetCurrentState()->name());
}
Пример #27
0
void ShutDown::DoEntryAction( SipxProcess& impl ) const
{
   impl.done();
}
Пример #28
0
void ShuttingDown::DoEntryAction( SipxProcess& impl ) const
{
   impl.stopProcess();
}
Пример #29
0
void Running::evConfigurationChanged( SipxProcess& impl ) const
{
   Os::Logger::instance().log(FAC_SUPERVISOR, PRI_NOTICE,"'%s': configuration changed in state '%s', ignored",
                 impl.name(), impl.GetCurrentState()->name());
}
Пример #30
0
void Running::DoEntryAction( SipxProcess& impl ) const
{
   impl.clearStatusMessages();
   impl.notifyProcessRunning();
}