Skip to content

Commit c9ac4f8

Browse files
authored
get the virtualmachine number (#124)
conditional value lint Signed-off-by: Tullio Sebastiani <[email protected]>
1 parent a7d1cc7 commit c9ac4f8

File tree

4 files changed

+1949
-0
lines changed

4 files changed

+1949
-0
lines changed

src/krkn_lib/elastic/krkn_elastic.py

+1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ def upload_metrics_to_elasticsearch(
123123
and isinstance(metric["value"], float)
124124
and isinstance(metric["name"], str)
125125
):
126+
126127
result = self.push_metric(
127128
ElasticMetric(
128129
run_uuid=run_uuid,

src/krkn_lib/telemetry/ocp/krkn_telemetry_openshift.py

+38
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import datetime
2+
import json
3+
import logging
24
import os
35
import threading
46
from queue import Queue
@@ -63,6 +65,11 @@ def collect_cluster_metadata(self, chaos_telemetry: ChaosRunTelemetry):
6365
chaos_telemetry.network_plugins = (
6466
self.ocpcli.get_cluster_network_plugins()
6567
)
68+
vm_number = self.get_vm_number()
69+
if vm_number > 0:
70+
chaos_telemetry.kubernetes_objects_count[
71+
"VirtualMachineInstance"
72+
] = vm_number
6673

6774
def put_ocp_logs(
6875
self,
@@ -209,3 +216,34 @@ def put_ocp_logs(
209216
worker.start()
210217
queue.join()
211218
self.safe_logger.info("ocp logs successfully uploaded")
219+
220+
def get_vm_number(self) -> int:
221+
api_client = self.ocpcli.api_client
222+
if api_client:
223+
try:
224+
path_params: dict[str, str] = {}
225+
query_params: list[str] = []
226+
header_params: dict[str, str] = {}
227+
auth_settings = ["BearerToken"]
228+
header_params["Accept"] = api_client.select_header_accept(
229+
["application/json"]
230+
)
231+
232+
path = "/apis/kubevirt.io/v1/virtualmachineinstances"
233+
(data) = api_client.call_api(
234+
path,
235+
"GET",
236+
path_params,
237+
query_params,
238+
header_params,
239+
response_type="str",
240+
auth_settings=auth_settings,
241+
)
242+
if data[1] != 200:
243+
return 0
244+
245+
json_obj = json.loads(data[0])
246+
return len(json_obj["items"])
247+
except Exception as e:
248+
logging.error(f"failed to parse virtualmachines API: {e}")
249+
return 0

src/krkn_lib/tests/test_krkn_telemetry_openshift.py

+16
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
import os
33
import uuid
44

5+
from jinja2 import Environment, FileSystemLoader
6+
57
from krkn_lib.ocp import KrknOpenshift
68
from krkn_lib.telemetry.ocp import KrknTelemetryOpenshift
79
from krkn_lib.tests import BaseTest
810
from krkn_lib.utils import SafeLogger
11+
from unittest.mock import MagicMock
912

1013

1114
class KrknTelemetryOpenshiftTests(BaseTest):
@@ -49,3 +52,16 @@ def _test_put_ocp_logs(self):
4952
int(ten_minutes_ago.timestamp()),
5053
int(ten_minutes_fwd.timestamp()),
5154
)
55+
56+
def test_get_vm_infos(self):
57+
environment = Environment(loader=FileSystemLoader("src/testdata/"))
58+
template = environment.get_template("virtualization_api_result.j2")
59+
api_result = template.render()
60+
krkn_ocp_mock = MagicMock()
61+
krkn_ocp_mock.kubeconfig_path = "~/.kube/config"
62+
krkn_ocp_mock.api_client.call_api.return_value = [api_result, 200]
63+
safe_logger = SafeLogger()
64+
krkn_telemetry_ocp = KrknTelemetryOpenshift(safe_logger, krkn_ocp_mock)
65+
self.assertEqual(krkn_telemetry_ocp.get_vm_number(), 3)
66+
krkn_ocp_mock.api_client.call_api.return_value = [None, 404]
67+
self.assertEqual(krkn_telemetry_ocp.get_vm_number(), 0)

0 commit comments

Comments
 (0)