@@ -452,9 +452,9 @@ def write_to_textfile(path, registry):
452452
453453class ProcessCollector (object ):
454454 """Collector for Standard Exports such as cpu and memory."""
455- def __init__ (self , namespace = '' , pid = 'self' , proc = '/proc' , registry = REGISTRY ):
455+ def __init__ (self , namespace = '' , pid = lambda : 'self' , proc = '/proc' , registry = REGISTRY ):
456456 self ._namespace = namespace
457- self ._pid = os . path . join ( proc , str ( pid ))
457+ self ._pid = pid
458458 self ._proc = proc
459459 self ._pagesize = resource .getpagesize ()
460460 if namespace :
@@ -486,9 +486,16 @@ def collect(self):
486486 if not self ._btime :
487487 return []
488488
489+ try :
490+ pid = os .path .join (self ._proc , str (self ._pid ()).strip ())
491+ except :
492+ # File likely didn't exist, fail silently.
493+ raise
494+ return []
495+
489496 result = []
490497 try :
491- with open (os .path .join (self . _pid , 'stat' )) as stat :
498+ with open (os .path .join (pid , 'stat' )) as stat :
492499 parts = (stat .read ().split (')' )[- 1 ].split ())
493500 vmem = Metric (self ._prefix + 'virtual_memory_bytes' , 'Virtual memory size in bytes' , 'gauge' )
494501 vmem .add_sample (self ._prefix + 'virtual_memory_bytes' , {}, float (parts [20 ]))
@@ -509,13 +516,13 @@ def collect(self):
509516
510517 try :
511518 max_fds = Metric (self ._prefix + 'max_fds' , 'Maximum number of open file descriptors.' , 'gauge' )
512- with open (os .path .join (self . _pid , 'limits' )) as limits :
519+ with open (os .path .join (pid , 'limits' )) as limits :
513520 for line in limits :
514521 if line .startswith ('Max open file' ):
515522 max_fds .add_sample (self ._prefix + 'max_fds' , {}, float (line .split ()[3 ]))
516523 break
517524 open_fds = Metric (self ._prefix + 'open_fds' , 'Number of open file descriptors.' , 'gauge' )
518- open_fds .add_sample (self ._prefix + 'open_fds' , {}, len (os .listdir (os .path .join (self . _pid , 'fd' ))))
525+ open_fds .add_sample (self ._prefix + 'open_fds' , {}, len (os .listdir (os .path .join (pid , 'fd' ))))
519526 result .extend ([open_fds , max_fds ])
520527 except IOError :
521528 pass
0 commit comments