The Gaudi Framework  v30r3 (a5ef0a68)
ProcStats Class Reference

#include <src/ProcStats.h>

Collaboration diagram for ProcStats:

Classes

struct  cleanup
 
class  unique_fd
 

Public Member Functions

bool fetch (procInfo &fill_me)
 
double pageSize () const
 

Static Public Member Functions

static ProcStatsinstance ()
 

Private Member Functions

 ProcStats ()
 

Private Attributes

unique_fd fd
 
double pg_size
 
procInfo curr
 
std::string fname
 
char buf [500]
 
bool valid
 

Static Private Attributes

static ProcStatsinst = 0
 

Friends

struct cleanup
 

Detailed Description

Definition at line 42 of file ProcStats.h.

Constructor & Destructor Documentation

ProcStats::ProcStats ( )
private

Definition at line 249 of file ProcStats.cpp.

249  : valid( false )
250 {
251 #if defined( __linux__ ) or defined( __APPLE__ )
252  pg_size = sysconf( _SC_PAGESIZE ); // getpagesize();
253 
254  fname = "/proc/" + std::to_string( getpid() ) + "/stat";
255 
256  fd.open( fname.c_str(), O_RDONLY );
257  if ( !fd ) {
258  cerr << "Failed to open " << fname << endl;
259  return;
260  }
261 #endif // __linux__ or __APPLE__
262  valid = true;
263 }
T to_string(T...args)
T endl(T...args)
unique_fd & open(Args &&...args)
Definition: ProcStats.h:80
double pg_size
Definition: ProcStats.h:103
std::string fname
Definition: ProcStats.h:105
unique_fd fd
Definition: ProcStats.h:102
bool valid
Definition: ProcStats.h:107
T c_str(T...args)

Member Function Documentation

bool ProcStats::fetch ( procInfo fill_me)

Definition at line 265 of file ProcStats.cpp.

266 {
267  if ( valid == false ) return false;
268 
269 #if defined( __linux__ ) or defined( __APPLE__ )
270  double pr_size, pr_rssize;
271  linux_proc pinfo;
272  int cnt;
273 
274  fd.lseek( 0, SEEK_SET );
275 
276  if ( ( cnt = fd.read( buf, sizeof( buf ) ) ) < 0 ) {
277  cout << "LINUX Read of Proc file failed:" << endl;
278  return false;
279  }
280 
281  if ( cnt > 0 ) {
282  buf[std::min( static_cast<std::size_t>( cnt ), sizeof( buf ) - 1 )] = '\0';
283 
284  sscanf( buf,
285  // 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 20 1 2 3 4 5 6 7 8 9
286  // 30 1 2 3 4 5
287  "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %llu %lu %ld %lu %lu %lu %lu "
288  "%lu %lu %lu %lu %lu %lu %lu",
289  &pinfo.pid, pinfo.comm, &pinfo.state, &pinfo.ppid, &pinfo.pgrp, &pinfo.session, &pinfo.tty, &pinfo.tpgid,
290  &pinfo.flags, &pinfo.minflt, &pinfo.cminflt, &pinfo.majflt, &pinfo.cmajflt, &pinfo.utime, &pinfo.stime,
291  &pinfo.cutime, &pinfo.cstime, &pinfo.priority, &pinfo.nice, &pinfo.num_threads, &pinfo.itrealvalue,
292  &pinfo.starttime, &pinfo.vsize, &pinfo.rss, &pinfo.rlim, &pinfo.startcode, &pinfo.endcode,
293  &pinfo.startstack, &pinfo.kstkesp, &pinfo.kstkeip, &pinfo.signal, &pinfo.blocked, &pinfo.sigignore,
294  &pinfo.sigcatch, &pinfo.wchan );
295 
296  // resident set size in pages
297  pr_size = (double)pinfo.vsize;
298  pr_rssize = (double)pinfo.rss;
299 
300  f.vsize = pr_size / ( 1024 * 1024 );
301  f.rss = pr_rssize * pg_size / ( 1024 * 1024 );
302  }
303 
304 #else
305  f.vsize = 0;
306  f.rss = 0;
307 #endif // __linux__ or __APPLE__
308 
309  bool rc = ( curr == f ) ? false : true;
310 
311  curr.rss = f.rss;
312  curr.vsize = f.vsize;
313 
314  return rc;
315 }
unsigned long minflt
unsigned long kstkesp
unsigned long signal
unsigned long wchan
unsigned long sigcatch
T sscanf(T...args)
unsigned long flags
T endl(T...args)
double pg_size
Definition: ProcStats.h:103
procInfo curr
Definition: ProcStats.h:104
T min(T...args)
double rss
Definition: ProcStats.h:39
unique_fd fd
Definition: ProcStats.h:102
unsigned long vsize
unsigned long startstack
unsigned long cminflt
unsigned long majflt
unsigned long long starttime
unsigned long cmajflt
unsigned long kstkeip
unsigned long startcode
bool valid
Definition: ProcStats.h:107
unsigned long utime
char buf[500]
Definition: ProcStats.h:106
unsigned long blocked
double vsize
Definition: ProcStats.h:38
unsigned long endcode
unsigned long stime
unsigned long sigignore
unsigned long rlim
ProcStats * ProcStats::instance ( )
static

Definition at line 240 of file ProcStats.cpp.

241 {
242  static cleanup c;
243  if ( !inst ) inst = new ProcStats;
244  return inst;
245 }
static ProcStats * inst
Definition: ProcStats.h:109
friend struct cleanup
Definition: ProcStats.h:58
double ProcStats::pageSize ( ) const
inline

Definition at line 48 of file ProcStats.h.

48 { return pg_size; }
double pg_size
Definition: ProcStats.h:103

Friends And Related Function Documentation

friend struct cleanup
friend

Definition at line 58 of file ProcStats.h.

Member Data Documentation

char ProcStats::buf[500]
private

Definition at line 106 of file ProcStats.h.

procInfo ProcStats::curr
private

Definition at line 104 of file ProcStats.h.

unique_fd ProcStats::fd
private

Definition at line 102 of file ProcStats.h.

std::string ProcStats::fname
private

Definition at line 105 of file ProcStats.h.

ProcStats * ProcStats::inst = 0
staticprivate

Definition at line 109 of file ProcStats.h.

double ProcStats::pg_size
private

Definition at line 103 of file ProcStats.h.

bool ProcStats::valid
private

Definition at line 107 of file ProcStats.h.


The documentation for this class was generated from the following files: