00001 #ifndef __CMS_METER__H
00002 #define __CMS_METER__H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "XrdCms/XrdCmsPerfMon.hh"
00034 #include "XrdSys/XrdSysError.hh"
00035 #include "XrdSys/XrdSysPthread.hh"
00036 #include "XrdOuc/XrdOucStream.hh"
00037
00038 class XrdCmsMeter : public XrdCmsPerfMon
00039 {
00040 public:
00041
00042 int calcLoad(uint32_t pcpu, uint32_t pio, uint32_t pload,
00043 uint32_t pmem, uint32_t ppag);
00044
00045 int calcLoad(int xload, uint32_t pdsk);
00046
00047 int FreeSpace(int &tutil);
00048
00049 void Init();
00050
00051 int isOn() {return Running;}
00052
00053 int Monitor(char *pgm, int itv);
00054 int Monitor(int itv);
00055
00056 void PutInfo(XrdCmsPerfMon::PerfInfo &perfInfo, bool alert=false);
00057
00058 void Record(int pcpu, int pnet, int pxeq,
00059 int pmem, int ppag, int pdsk);
00060
00061 int Report(int &pcpu, int &pnet, int &pxeq,
00062 int &pmem, int &ppag, int &pdsk);
00063
00064 void *Run();
00065
00066 void *RunFS();
00067
00068 void *RunPM();
00069
00070 int numFS() {return fs_nums;}
00071
00072 unsigned int TotalSpace(unsigned int &minfree);
00073
00074 enum vType {manFS = 1, peerFS = 2};
00075
00076 void setVirtual(vType vVal) {Virtual = vVal;}
00077
00078 void setVirtUpdt() {cfsMutex.Lock(); VirtUpdt = 1; cfsMutex.UnLock();}
00079
00080 bool Update(char *line, bool alert=false);
00081
00082 XrdCmsMeter();
00083 ~XrdCmsMeter();
00084
00085 private:
00086 void calcSpace();
00087 char Scale(long long inval, long &outval);
00088 void SpaceMsg(int why);
00089 void UpdtSpace();
00090
00091 XrdOucStream myMeter;
00092 XrdSysMutex cfsMutex;
00093 XrdSysMutex repMutex;
00094 long long MinFree;
00095 long long HWMFree;
00096 long long dsk_lpn;
00097 long long dsk_tot;
00098 long long dsk_free;
00099 long long dsk_maxf;
00100 int dsk_util;
00101 int dsk_calc;
00102 int fs_nums;
00103 int lastFree;
00104 int lastUtil;
00105 int noSpace;
00106 int Running;
00107 long MinShow;
00108 long HWMShow;
00109 char MinStype;
00110 char HWMStype;
00111 char Virtual;
00112 char VirtUpdt;
00113
00114 time_t rep_tod;
00115 char *monpgm;
00116 XrdCmsPerfMon *monPerf;
00117 int monint;
00118 pthread_t montid;
00119
00120 uint32_t xeq_load;
00121 uint32_t cpu_load;
00122 uint32_t mem_load;
00123 uint32_t pag_load;
00124 uint32_t net_load;
00125 int myLoad;
00126 int prevLoad;
00127 };
00128
00129 namespace XrdCms
00130 {
00131 extern XrdCmsMeter Meter;
00132 }
00133 #endif