def test_update_metrics(self): self.patch(metrics, "GLOBAL_LABELS", {"service_type": "rack"}) tempdir = self.useFixture(TempDirectory()) meminfo = Path(tempdir.path) / "meminfo" meminfo.write_text( dedent( """\ MemTotal: 123 Kb SwapCached: 456 Kb VmallocUsed: 789 Kb HugePages_Total: 321 """ ) ) prometheus_metrics = create_metrics( node_metrics_definitions(), registry=prometheus_client.CollectorRegistry(), ) update_memory_metrics(prometheus_metrics, path=meminfo) output = prometheus_metrics.generate_latest().decode("ascii") self.assertIn( 'maas_node_mem_MemTotal{service_type="rack"} 123.0', output ) self.assertIn( 'maas_node_mem_SwapCached{service_type="rack"} 456.0', output ) self.assertIn( 'maas_node_mem_VmallocUsed{service_type="rack"} 789.0', output ) self.assertIn( 'maas_node_mem_HugePages_Total{service_type="rack"} 321.0', output )
def test_update_metrics(self): self.patch(metrics, "GLOBAL_LABELS", {"service_type": "rack"}) tempdir = self.useFixture(TempDirectory()) stat = Path(tempdir.path) / "stat" stat.write_text( dedent("""\ cpu 111 222 333 444 555 666 7 888 9 11 cpu0 222 333 444 555 666 777 8 999 1 22 cpu1 222 333 444 555 666 777 8 999 1 22 other line other line """)) prometheus_metrics = create_metrics( node_metrics_definitions(), registry=prometheus_client.CollectorRegistry(), ) update_cpu_metrics(prometheus_metrics, path=stat) output = prometheus_metrics.generate_latest().decode("ascii") self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="user"} 1.11', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="nice"} 2.22', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="system"} 3.33', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="idle"} 4.44', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="iowait"} 5.55', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="irq"} 6.66', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="softirq"} 0.07', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="steal"} 8.88', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="guest"} 0.09', output, ) self.assertIn( 'maas_node_cpu_time_total{service_type="rack",state="guest_nice"} 0.11', output, )
def test_definitions(self): definitions = node_metrics_definitions() # only one metric for memory metrics_count = len(MEMINFO_FIELDS) + 1 self.assertEqual(len(definitions), metrics_count) for definition in definitions: if definition.name.startswith("maas_node_mem"): self.assertEqual("Gauge", definition.type) else: self.assertEqual("Counter", definition.type)
'HTTP response size', ['method', 'path', 'status', 'op'], buckets=[5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000]), MetricDefinition('Histogram', 'maas_http_request_query_count', 'HTTP request query count', ['method', 'path', 'status', 'op'], buckets=[10, 25, 50, 100, 200, 500]), MetricDefinition('Histogram', 'maas_http_request_query_latency', 'HTTP request query latency', ['method', 'path', 'status', 'op']), MetricDefinition('Histogram', 'maas_region_rack_rpc_call_latency', 'Latency of Region-Rack RPC call', ['call']), MetricDefinition('Histogram', 'maas_websocket_call_latency', 'Latency of a Websocket handler call', ['call']), # Common metrics *node_metrics_definitions() ] # Global for tracking global values for metrics label. These are set # differently from rackd and regiond code, but this is defined here so the # logic using it can be generic. GLOBAL_LABELS = { # The MAAS installation UUID, the same for all regions/racks within a # deployment 'maas_uuid': None, # The type of service (region/rack) exporting the metrics. 'service_type': None } def set_global_labels(**labels):