CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/EventFilter/StorageManager/interface/ResourceMonitorCollection.h

Go to the documentation of this file.
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