Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/firecracker
Path: blob/main/tests/integration_tests/functional/test_metrics.py
1958 views
1
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
# SPDX-License-Identifier: Apache-2.0
3
"""Tests the metrics system."""
4
5
import datetime
6
import os
7
import math
8
import platform
9
import host_tools.logging as log_tools
10
11
12
def test_flush_metrics(test_microvm_with_api):
13
"""Check the `FlushMetrics` vmm action."""
14
microvm = test_microvm_with_api
15
microvm.spawn()
16
microvm.basic_config()
17
18
# Configure metrics system.
19
metrics_fifo_path = os.path.join(microvm.path, 'metrics_fifo')
20
metrics_fifo = log_tools.Fifo(metrics_fifo_path)
21
22
response = microvm.metrics.put(
23
metrics_path=microvm.create_jailed_resource(metrics_fifo.path)
24
)
25
assert microvm.api_session.is_status_no_content(response.status_code)
26
27
microvm.start()
28
29
metrics = microvm.flush_metrics(metrics_fifo)
30
31
exp_keys = [
32
'utc_timestamp_ms',
33
'api_server',
34
'balloon',
35
'block',
36
'get_api_requests',
37
'i8042',
38
'latencies_us',
39
'logger',
40
'mmds',
41
'net',
42
'patch_api_requests',
43
'put_api_requests',
44
'seccomp',
45
'vcpu',
46
'vmm',
47
'uart',
48
'signals',
49
'vsock'
50
]
51
52
if platform.machine() == "aarch64":
53
exp_keys.append("rtc")
54
55
assert set(metrics.keys()) == set(exp_keys)
56
57
utc_time = datetime.datetime.now(datetime.timezone.utc)
58
utc_timestamp_ms = math.floor(utc_time.timestamp() * 1000)
59
60
# Assert that the absolute difference is less than 1 second, to check that
61
# the reported utc_timestamp_ms is actually a UTC timestamp from the Unix
62
# Epoch.Regression test for:
63
# https://github.com/firecracker-microvm/firecracker/issues/2639
64
assert abs(utc_timestamp_ms - metrics['utc_timestamp_ms']) < 1000
65
66