metrics.py 2.58 KB
Newer Older
1 2 3 4 5
#!/usr/bin/python

import psutil as ps
import collections

6 7

#############################################################################
8 9
Metrics = collections.namedtuple("Metrics", ["name", "value"])

10

11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
class Collection(object):
	class Group(object):
		class Metric(object):
			name = "unknown"
			collector_function = 0
			collector_function_arguments = {}
			collector_function_result_attr = ""

			@classmethod
			def harvest(cls):
				query = cls.collector_function.im_func(
					**cls.collector_function_arguments)
				if ((isinstance(query, list)) or (isinstance(query, dict))):
					return Metrics(cls.name,
					               query[cls.collector_function_result_attr])
				elif (isinstance(query, tuple)):
					return Metrics(cls.name,
					               query.__getattribute__(
						               cls.collector_function_result_attr))
				else:
					return Metrics(cls.name, query)
32 33

##############################################################################
34 35


36 37 38 39 40 41
class std(Collection):
	class cpu(Collection.Group):
		class usage(Collection.Group.Metric):
			name = "cpu.usage"
			collector_function = ps.cpu_percent
			collector_function_arguments = {
42
			'interval': 0.0,
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
			}

	class memory(Collection.Group):
		class usage(Collection.Group.Metric):
			name = "memory.usage"
			collector_function = ps.virtmem_usage
			collector_function_result_attr = "percent"

	class swap(Collection.Group):
		class usage(Collection.Group.Metric):
			name = "swap.usage"
			collector_function = ps.swap_memory
			collector_function_result_attr = "percent"

	class user(Collection.Group):
		class count(Collection.Group.Metric):
			name = "user.count"

			@classmethod
			def harvest(cls):
				return Metrics(cls.name, len(ps.get_users()))

	class network(Collection.Group):
		class packages_sent(Collection.Group.Metric):
			name = "network.packages_sent"
			collector_function = ps.network_io_counters
			collector_function_result_attr = "packets_sent"

		class packages_received(Collection.Group.Metric):
			name = "network.packages_received"
			collector_function = ps.network_io_counters
			collector_function_result_attr = "packets_recv"

		class bytes_sent(Collection.Group.Metric):
			name = "network.bytes_sent"
			collector_function = ps.network_io_counters
			collector_function_result_attr = "bytes_sent"

		class bytes_received(Collection.Group.Metric):
			name = "network.bytes_received"
			collector_function = ps.network_io_counters
			collector_function_result_attr = "bytes_recv"

	class system(Collection.Group):
		class boot_time(Collection.Group.Metric):
			name = "system.boot_time"
			collector_function = ps.get_boot_time