Skip to content

Commit ca0c643

Browse files
authored
add metrics logic to perf tests (#5224)
1 parent 631beae commit ca0c643

File tree

4 files changed

+64
-4
lines changed

4 files changed

+64
-4
lines changed

perf-tests/suite/test_ap_reload_perf.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
get_file_contents,
3030
get_first_pod_name,
3131
get_ingress_nginx_template_conf,
32+
get_resource_metrics,
3233
replace_ingress_with_ap_annotations,
3334
wait_before_test,
3435
wait_for_event_increment,
@@ -71,7 +72,9 @@ def enable_prometheus_port(
7172

7273

7374
@pytest.fixture(scope="class")
74-
def appprotect_setup(request, kube_apis, ingress_controller_endpoint, test_namespace) -> AppProtectSetup:
75+
def appprotect_setup(
76+
request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, test_namespace
77+
) -> AppProtectSetup:
7578
"""
7679
Deploy simple application and all the AppProtect(dataguard-alarm) resources under test in one namespace.
7780
@@ -106,6 +109,16 @@ def appprotect_setup(request, kube_apis, ingress_controller_endpoint, test_names
106109

107110
def fin():
108111
print("Clean up:")
112+
print("Collect resource usage metrics")
113+
pod_metrics = get_resource_metrics(kube_apis.custom_objects, "pods", ingress_controller_prerequisites.namespace)
114+
with open("ap_pod_metrics.json", "w+") as f:
115+
json.dump(pod_metrics, f, ensure_ascii=False, indent=4)
116+
node_metrics = get_resource_metrics(
117+
kube_apis.custom_objects, "nodes", ingress_controller_prerequisites.namespace
118+
)
119+
with open("ap_node_metrics.json", "w+") as f:
120+
json.dump(node_metrics, f, ensure_ascii=False, indent=4)
121+
109122
delete_ap_policy(kube_apis.custom_objects, pol_name, test_namespace)
110123
delete_ap_logconf(kube_apis.custom_objects, log_name, test_namespace)
111124
delete_common_app(kube_apis, "simple", test_namespace)

perf-tests/suite/test_ingress_perf.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
delete_secret,
1414
ensure_connection,
1515
ensure_connection_to_public_endpoint,
16+
get_resource_metrics,
1617
wait_before_test,
1718
wait_until_all_pods_are_ready,
1819
)
@@ -34,7 +35,7 @@ def __init__(self, req_url):
3435

3536

3637
@pytest.fixture(scope="class")
37-
def setup(request, kube_apis, ingress_controller_endpoint, test_namespace) -> Setup:
38+
def setup(request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, test_namespace) -> Setup:
3839
print("------------------------- Deploy prerequisites -----------------------------------")
3940
secret_name = create_secret_from_yaml(kube_apis.v1, test_namespace, f"{TEST_DATA}/smoke/smoke-secret.yaml")
4041

@@ -49,6 +50,16 @@ def setup(request, kube_apis, ingress_controller_endpoint, test_namespace) -> Se
4950

5051
def fin():
5152
print("Clean up simple app")
53+
print("Collect resource usage metrics")
54+
pod_metrics = get_resource_metrics(kube_apis.custom_objects, "pods", ingress_controller_prerequisites.namespace)
55+
with open("ingress_pod_metrics.json", "w+") as f:
56+
json.dump(pod_metrics, f, ensure_ascii=False, indent=4)
57+
node_metrics = get_resource_metrics(
58+
kube_apis.custom_objects, "nodes", ingress_controller_prerequisites.namespace
59+
)
60+
with open("ingress_node_metrics.json", "w+") as f:
61+
json.dump(node_metrics, f, ensure_ascii=False, indent=4)
62+
5263
delete_common_app(kube_apis, "simple", test_namespace)
5364
delete_secret(kube_apis.v1, secret_name, test_namespace)
5465
with open("reload_ing.json", "w+") as f:

perf-tests/suite/test_vs_perf.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,23 @@
66
import pytest
77
import requests
88
from common import collect_prom_reload_metrics, run_perf
9-
from suite.utils.resources_utils import wait_before_test
9+
from suite.utils.resources_utils import get_resource_metrics, wait_before_test
1010

1111
reload = []
1212

1313

1414
@pytest.fixture(scope="class")
15-
def collect(request, kube_apis, ingress_controller_endpoint, test_namespace) -> None:
15+
def collect(request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, test_namespace) -> None:
1616
def fin():
17+
print("Collect resource usage metrics")
18+
pod_metrics = get_resource_metrics(kube_apis.custom_objects, "pods", ingress_controller_prerequisites.namespace)
19+
with open("vs_pod_metrics.json", "w+") as f:
20+
json.dump(pod_metrics, f, ensure_ascii=False, indent=4)
21+
node_metrics = get_resource_metrics(
22+
kube_apis.custom_objects, "nodes", ingress_controller_prerequisites.namespace
23+
)
24+
with open("vs_node_metrics.json", "w+") as f:
25+
json.dump(node_metrics, f, ensure_ascii=False, indent=4)
1726
with open("reload_vs.json", "w+") as f:
1827
json.dump(reload, f, ensure_ascii=False, indent=4)
1928

tests/suite/utils/resources_utils.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1704,3 +1704,30 @@ def get_last_log_entry(kube_apis, pod_name, namespace) -> str:
17041704
# Our log entries end in '\n' which means the final entry when we split on a new line
17051705
# is an empty string. Return the second to last entry instead.
17061706
return logs.split("\n")[-2]
1707+
1708+
1709+
def get_resource_metrics(kube_apis, plural, namespace="nginx-ingress") -> str:
1710+
"""
1711+
:param kube_apis: kube apis
1712+
:param namespace: the namespace
1713+
:param plural: the plural of the resource
1714+
"""
1715+
if plural == "pods":
1716+
metrics = kube_apis.list_namespaced_custom_object("metrics.k8s.io", "v1beta1", namespace, plural)
1717+
while metrics["items"] == []:
1718+
wait_before_test()
1719+
try:
1720+
metrics = kube_apis.list_namespaced_custom_object("metrics.k8s.io", "v1beta1", namespace, plural)
1721+
except ApiException as e:
1722+
print(f"Error: {e}")
1723+
elif plural == "nodes":
1724+
metrics = kube_apis.list_cluster_custom_object("metrics.k8s.io", "v1beta1", plural)
1725+
while metrics["items"] == []:
1726+
wait_before_test()
1727+
try:
1728+
metrics = kube_apis.list_cluster_custom_object("metrics.k8s.io", "v1beta1", plural)
1729+
except ApiException as e:
1730+
print(f"Error: {e}")
1731+
else:
1732+
return "Invalid plural specified. Please use 'pods' or 'nodes' as the plural"
1733+
return metrics["items"]

0 commit comments

Comments
 (0)