The Gaudi Framework  v31r0 (aeb156f0)
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 41 of file ProcStats.h.

Constructor & Destructor Documentation

ProcStats::ProcStats ( )
private

Definition at line 247 of file ProcStats.cpp.

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

Member Function Documentation

bool ProcStats::fetch ( procInfo fill_me)

Definition at line 262 of file ProcStats.cpp.

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

Definition at line 239 of file ProcStats.cpp.

239  {
240  static cleanup c;
241  if ( !inst ) inst = new ProcStats;
242  return inst;
243 }
static ProcStats * inst
Definition: ProcStats.h:101
friend struct cleanup
Definition: ProcStats.h:56
double ProcStats::pageSize ( ) const
inline

Definition at line 46 of file ProcStats.h.

46 { return pg_size; }
double pg_size
Definition: ProcStats.h:95

Friends And Related Function Documentation

friend struct cleanup
friend

Definition at line 56 of file ProcStats.h.

Member Data Documentation

char ProcStats::buf[500]
private

Definition at line 98 of file ProcStats.h.

procInfo ProcStats::curr
private

Definition at line 96 of file ProcStats.h.

unique_fd ProcStats::fd
private

Definition at line 94 of file ProcStats.h.

std::string ProcStats::fname
private

Definition at line 97 of file ProcStats.h.

ProcStats * ProcStats::inst = 0
staticprivate

Definition at line 101 of file ProcStats.h.

double ProcStats::pg_size
private

Definition at line 95 of file ProcStats.h.

bool ProcStats::valid
private

Definition at line 99 of file ProcStats.h.


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