#include "ISubsystemMonitor.h"
#include "Statistic.h"
#include "Monitor.h"
Go to the source code of this file.
Namespaces | |
namespace | SubsystemMonitor |
Defines | |
#define | CommonStatisticProxyIDstring "1e14da1d-9a03-480f-9754-4940dd552646" |
CommonStatisticProxyIDstring is the UUID for the Common Statistic Library (CSL). More... |
|
CommonStatisticProxyIDstring is the UUID for the Common Statistic Library (CSL). IRMRegistration class contains methods for subsystems to call to register their class factories A subsystem library is dynamically loaded by the daemon when its entry is read from the rmtab file. Each line in the rmtab file contains the universally-unique identifier (UUID) for the subsystem and the location in the file system of its shared library. When the subsystem library is linked, a global class constructor in the library is required to call the daemon's registration methods in the IRMRegistration class. The RMuid parameter must match universally-unique identifier found in the rmtab file. See the code below for an example of the subsystem registration process.
extern "C" { SubsystemMonitor::ISubsystemMonitor * ISubsystemFactory(RMuid a_guid) { if( a_guid == g_registrationData.guid ) { SubsystemMonitor::ISubsystemMonitor * mp = 0; try { mp = new CSubsystemInfo(a_guid); } catch ( bad_alloc ) { errno = ENOMEM; } return mp; } return 0; } SubsystemMonitor::Statistic * StatisticFactory(RMuid a_guid, rmID a_resourceid, rmID a_statid) { if( a_guid == g_registrationData.guid ) { class CProcess * cp = g_processControl.createCProcess(a_resourceid); if( cp == 0 ) return 0; for( size_t i=0 ; i<RM_PROCESS_STATISTICS ; i++ ) if( g_registrationData.statistics[i].id == a_statid ) { SubsystemMonitor::Statistic * sp = 0; try { sp = new CProcessStatistic(cp, a_statid); } catch ( bad_alloc ) { errno = ENOMEM; } return sp; } g_processControl.deleteCProcess(cp); } return 0; } #ifdef InlineProcessMonitor SubsystemMonitor::Monitor *MonitorFactory(rmID a_mon, rmMonitorConfiguration a_config, RMuid a_monUID) { if( g_registrationData.guid == a_config.statisticKey.SubsystemId && a_mon == 0) { return new CProcessMonitor(a_config.statisticKey.SubsystemId, a_config.statisticKey.ResourceId, a_config.statisticKey.StatisticId, a_mon); } return 0; } #endif // InlineProcessMonitor } //extern "C" } // ProcessMonitor #include <IRMRegistration.h> class CProcessMonitorProxy { public: // this global constructor is required for successful registration with the resource monitor daemon CProcessMonitorProxy() { SubsystemMonitor::IRMRegistration::registerSubsystem(ProcessMonitor::g_registrationData.guid, &ProcessMonitor::ISubsystemFactory); SubsystemMonitor::IRMRegistration::registerStatistic(ProcessMonitor::g_registrationData.guid, &ProcessMonitor::StatisticFactory); #ifdef InlineProcessMonitor SubsystemMonitor::IRMRegistration::registerMonitor(ProcessMonitor::g_registrationData.guid, &ProcessMonitor::MonitorFactory); #endif // InlineProcessMonitor } }; // our one instance of the proxy CProcessMonitorProxy g_registerProcessMonitor; |