8000 Add standard exports. · techscientist/client_python@32e46b1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 32e46b1

Browse files
committed
Add standard exports.
Order labels in text format so tests are consistent.
1 parent 13739f1 commit 32e46b1

File tree

11 files changed

+138
-2
lines changed

11 files changed

+138
-2
lines changed

prometheus_client/__init__.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import copy
66
import re
7+
import resource
78
import os
89
import time
910
import threading
@@ -419,7 +420,7 @@ def generate_latest(registry=REGISTRY):
419420
labelstr = '{{{0}}}'.format(','.join(
420421
['{0}="{1}"'.format(
421422
k, v.replace('\\', r'\\').replace('\n', r'\n').replace('"', r'\"'))
422-
for k, v in labels.items()]))
423+
for k, v in sorted(labels.items())]))
423424
else:
424425
labelstr = ''
425426
output.append('{0}{1} {2}\n'.format(name, labelstr, _floatToGoString(value)))
@@ -446,6 +447,82 @@ def write_to_textfile(path, registry):
446447
os.rename(tmppath, path)
447448

448449

450+
451+
class ProcessCollector(object):
452+
"""Collector for Standard Exports such as cpu and memory."""
453+
def __init__(self, namespace='', pid='self', proc='/proc', registry=REGISTRY):
454+
self._namespace = namespace
455+
self._pid = os.path.join(proc, str(pid))
456+
self._proc = proc
457+
self._pagesize = resource.getpagesize()
458+
if namespace:
459+
self._prefix = namespace + '_process_'
460+
else:
461+
self._prefix = 'process_'
462+
self._ticks = 100.0
463+
try:
464+
self._ticks = os.sysconf('SC_CLK_TCK')
465+
except (ValueError, TypeError):
466+
pass
467+
468+
self._can_read_proc = os.access(os.path.join(self._proc, 'stat'), os.R_OK)
469+
if self._can_read_proc:
470+
self._btime = self._boot_time()
471+
if registry:
472+
registry.register(self)
473+
474+
def _boot_time(self):
475+
with open(os.path.join(self._proc, 'stat')) as stat:
476+
for line in stat:
477+
if line.startswith('btime '):
478+
return float(line.split()[1])
479+
480+
def collect(self):
481+
if not self._can_read_proc:
482+
return []
483+
484+
result = []
485+
try:
486+
with open(os.path.join(self._pid, 'stat')) as stat:
487+
parts = (stat.read().split(')')[-1].split())
488+
vmem = Metric(self._prefix + 'virtual_memory_bytes', 'Virtual memory size in bytes', 'gauge')
489+
vmem.add_sample(self._prefix + 'virtual_memory_bytes', {}, float(parts[20]))
490+
rss = Metric(self._prefix + 'resident_memory_bytes', 'Resident memory size in bytes', 'gauge')
491+
rss.add_sample(self._prefix + 'resident_memory_bytes', {}, float(parts[21]) * self._pagesize)
492+
start_time = Metric(self._prefix + 'start_time_seconds',
493+
'Start time of the process since unix epoch in seconds.', 'gauge')
494+
start_time_secs = float(parts[18]) / self._ticks
495+
start_time.add_sample(self._prefix + 'start_time_seconds',{} , start_time_secs + self._btime)
496+
utime = float(parts[11]) / self._ticks
497+
stime = float(parts[12]) / self._ticks
498+
cpu = Metric(self._prefix + 'cpu_seconds_total',
499+
'Total user and system CPU time spent in seconds.', 'counter')
500+
cpu.add_sample(self._prefix + 'cpu_seconds_total', {}, utime + stime)
501+
result.extend([vmem, rss, start_time, cpu])
502+
except (IOError):
503+
pass
504+
505+
try:
506+
max_fds = Metric(self._prefix + 'max_fds', 'Maximum number of open file descriptors.', 'gauge')
507+
with open(os.path.join(self._pid, 'limits')) as limits:
508+
for line in limits:
509+
if line.startswith('Max open file'):
510+
max_fds.add_sample(self._prefix + 'max_fds', {}, float(line.split()[3]))
511+
break
512+
open_fds = Metric(self._prefix + 'open_fds', 'Number of open file descriptors.', 'gauge')
513+
open_fds.add_sample(self._prefix + 'open_fds', {}, os.listdir(os.path.join(self._pid, 'fd')))
514+
result.extend([open_fds, max_fds])
515+
except IOError:
516+
pass
517+
518+
return result
519+
520+
521+
PROCESS_COLLECTOR = ProcessCollector(proc='.')
522+
"""Default ProcessCollector in default Registry REGISTRY."""
523+
524+
525+
449526
if __name__ == '__main__':
450527
c = Counter('cc', 'A counter')
451528
c.inc()

tests/proc/26231/fd/0

Whitespace-only changes.

tests/proc/26231/fd/1

Whitespace-only changes.

tests/proc/26231/fd/2

Whitespace-only changes.

tests/proc/26231/fd/3

Whitespace-only changes.

tests/proc/26231/fd/4

Whitespace-only changes.

tests/proc/26231/limits

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Limit Soft Limit Hard Limit Units
2+
Max cpu time unlimited unlimited seconds
3+
Max file size unlimited unlimited bytes
4+
Max data size unlimited unlimited bytes
5+
Max stack size 8388608 unlimited bytes
6+
Max core file size 0 unlimited bytes
7+
Max resident set unlimited unlimited bytes
8+
Max processes 62898 62898 processes
9+
Max open files 2048 4096 files
10+
Max locked memory 65536 65536 bytes
11+
Max address space unlimited unlimited bytes
12+
Max file locks unlimited unlimited locks
13+
Max pending signals 62898 62898 signals
14+
Max msgqueue size 819200 819200 bytes
15+
Max nice priority 0 0
16+
Max rMax rMax rMax rMax rMax rMax rMax rMax rMax rMax rMax rMax rMax rMax rMax mited unlimited us

tests/proc/26231/stat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
26231 (vim) R 5392 7446 5392 34835 7446 4218880 32533 309516 26 82 1677 44 158 99 20 0 1 0 82375 56274944 1981 18446744073709551615 4194304 6294284 140736914091744 140736914087944 139965136429984 0 0 12288 1870679807 0 0 0 17 0 0 0 31 0 0 8391624 8481048 16420864 140736914093252 140736914093279 140736914093279 140736914096107 0

tests/proc/584/stat

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
1020 ((a b ) ( c d) ) R 28378 1020 28378 34842 1020 4218880 286 0 0 0 0 0 0 0 20 0 1 0 10839175 10395648 155 18446744073709551615 4194304 4238788 140736466511168 140736466511168 140609271124624 0 0 0 0 0 0 0 17 5 0 0 0 0 0 6336016 6337300 25579520 140736466515030 140736466515061 140736466515061 140736466518002 0
2+
#!/bin/cat /proc/self/stat

tests/proc/stat

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
cpu 301854 612 111922 8979004 3552 2 3944 0 0 0
2+
cpu0 44490 19 21045 1087069 220 1 3410 0 0 0
3+
cpu1 47869 23 16474 1110787 591 0 46 0 0 0
4+
cpu2 46504 36 15916 1112321 441 0 326 0 0 0
5+
cpu3 47054 102 15683 1113230 533 0 60 0 0 0
6+
cpu4 28413 25 10776 1140321 217 0 8 0 0 0
7+
cpu5 29271 101 11586 1136270 672 0 30 0 0 0
8+
cpu6 29152 36 10276 1139721 319 0 29 0 0 0
9+
cpu7 29098 268 10164 1139282 555 0 31 0 0 0
10+
intr 8885917 17 0 0 0 0 0 0 0 1 79281 0 0 0 0 0 0 0 231237 0 0 0 0 250586 103 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223424 190745 13 906 1283803 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0intr 8885917 17 0 0 0 0 0 0 0 1 79281 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11+
ctxt 38014093
12+
btime 1418183276
13+
processes 26442
14+
procs_running 2
15+
procs_blocked 0
16+
softirq 5057579 250191 1481983 1647 211099 186066 0 1783454 622196 12499 508444

0 commit comments

Comments
 (0)
0