![]() |
![]() |
00001 // $Id: ResourceMonitorCollection.h,v 1.28 2011/03/07 15:31:32 mommsen Exp $ 00003 00004 #ifndef EventFilter_StorageManager_ResourceMonitorCollection_h 00005 #define EventFilter_StorageManager_ResourceMonitorCollection_h 00006 00007 #include <set> 00008 #include <vector> 00009 #include <string> 00010 #include <errno.h> 00011 #ifdef __APPLE__ 00012 typedef int error_t; 00013 #endif 00014 00015 #include <boost/thread/mutex.hpp> 00016 #include <boost/shared_ptr.hpp> 00017 00018 #include "xdata/Integer32.h" 00019 #include "xdata/String.h" 00020 #include "xdata/UnsignedInteger32.h" 00021 #include "xdata/Vector.h" 00022 00023 #include "EventFilter/StorageManager/interface/AlarmHandler.h" 00024 #include "EventFilter/StorageManager/interface/Configuration.h" 00025 #include "EventFilter/StorageManager/interface/MonitorCollection.h" 00026 00027 00028 namespace stor { 00029 00030 class testResourceMonitorCollection; 00031 00040 class ResourceMonitorCollection : public MonitorCollection 00041 { 00042 public: 00043 00044 // Allow unit test to access the private methods 00045 friend class testResourceMonitorCollection; 00046 00047 struct DiskUsageStats 00048 { 00049 double absDiskUsage; // absolute disk usage in GB 00050 double relDiskUsage; // percentage of disk space occupied 00051 double diskSize; // absolute size of disk in GB 00052 std::string pathName; // path of the disk 00053 AlarmHandler::ALARM_LEVEL alarmState; // alarm level of the disk usage 00054 }; 00055 typedef boost::shared_ptr<DiskUsageStats> DiskUsageStatsPtr; 00056 typedef std::vector<DiskUsageStatsPtr> DiskUsageStatsPtrList; 00057 00058 struct Stats 00059 { 00060 DiskUsageStatsPtrList diskUsageStatsList; 00061 00062 int numberOfCopyWorkers; 00063 int numberOfInjectWorkers; 00064 int sataBeastStatus; // status code of SATA beast 00065 }; 00066 00067 00071 ResourceMonitorCollection 00072 ( 00073 const utils::Duration_t& updateInterval, 00074 AlarmHandlerPtr 00075 ); 00076 00080 void configureDisks(DiskWritingParams const&); 00081 00085 void configureResources(ResourceMonitorParams const&); 00086 00090 void configureAlarms(AlarmParams const&); 00091 00095 void getStats(Stats&) const; 00096 00097 00098 private: 00099 00100 struct DiskUsage 00101 { 00102 double absDiskUsage; 00103 double relDiskUsage; 00104 double diskSize; 00105 std::string pathName; 00106 AlarmHandler::ALARM_LEVEL alarmState; 00107 std::string toString(); 00108 }; 00109 typedef boost::shared_ptr<DiskUsage> DiskUsagePtr; 00110 typedef std::vector<DiskUsagePtr> DiskUsagePtrList; 00111 DiskUsagePtrList diskUsageList_; 00112 mutable boost::mutex diskUsageListMutex_; 00113 00114 const utils::Duration_t updateInterval_; 00115 AlarmHandlerPtr alarmHandler_; 00116 00117 //Prevent copying of the ResourceMonitorCollection 00118 ResourceMonitorCollection(ResourceMonitorCollection const&); 00119 ResourceMonitorCollection& operator=(ResourceMonitorCollection const&); 00120 00121 virtual void do_calculateStatistics(); 00122 virtual void do_reset(); 00123 virtual void do_appendInfoSpaceItems(InfoSpaceItems&); 00124 virtual void do_updateInfoSpaceItems(); 00125 00126 void addDisk(const std::string&); 00127 void addOtherDisks(); 00128 void failIfImportantDisk(DiskUsagePtr); 00129 void emitDiskAlarm(DiskUsagePtr, error_t); 00130 void emitDiskSpaceAlarm(DiskUsagePtr); 00131 void revokeDiskAlarm(DiskUsagePtr); 00132 00133 void getDiskStats(Stats&) const; 00134 void calcDiskUsage(); 00135 void retrieveDiskSize(DiskUsagePtr); 00136 00137 void calcNumberOfCopyWorkers(); 00138 void calcNumberOfInjectWorkers(); 00139 void checkNumberOfCopyWorkers(); 00140 void checkNumberOfInjectWorkers(); 00141 int getProcessCount(const std::string& processName, const int& uid=-1); 00142 00143 typedef std::set<std::string> SATABeasts; 00144 void checkSataBeasts(); 00145 bool getSataBeasts(SATABeasts& sataBeasts); 00146 void checkSataBeast(const std::string& sataBeast); 00147 bool checkSataDisks(const std::string& sataBeast, const std::string& hostSuffix); 00148 void updateSataBeastStatus(const std::string& sataBeast, const std::string& content); 00149 00150 DiskWritingParams dwParams_; 00151 ResourceMonitorParams rmParams_; 00152 AlarmParams alarmParams_; 00153 00154 int numberOfCopyWorkers_; 00155 int numberOfInjectWorkers_; 00156 unsigned int nLogicalDisks_; 00157 int latchedSataBeastStatus_; 00158 00159 xdata::UnsignedInteger32 copyWorkers_; // number of running copyWorkers 00160 xdata::UnsignedInteger32 injectWorkers_; // number of running injectWorkers 00161 xdata::Integer32 sataBeastStatus_; // status code of SATA beast 00162 xdata::UnsignedInteger32 numberOfDisks_; // number of disks used for writing 00163 xdata::Vector<xdata::String> diskPaths_; // list of disk paths 00164 xdata::Vector<xdata::UnsignedInteger32> totalDiskSpace_; // total disk space 00165 xdata::Vector<xdata::UnsignedInteger32> usedDiskSpace_; // used disk space 00166 00167 }; 00168 00169 } // namespace stor 00170 00171 #endif // EventFilter_StorageManager_ResourceMonitorCollection_h 00172 00173