Skip to content

Commit 3714efe

Browse files
Jaspal SinghJaspal Singh
authored andcommitted
added kernel version parsing code
1 parent 9055965 commit 3714efe

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

nodescraper/plugins/inband/kernel/kernel_collector.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# SOFTWARE.
2424
#
2525
###############################################################################
26+
import re
2627
from typing import Optional
2728

2829
from nodescraper.base import InBandDataCollector
@@ -39,6 +40,27 @@ class KernelCollector(InBandDataCollector[KernelDataModel, None]):
3940
CMD_WINDOWS = "wmic os get Version /Value"
4041
CMD = "sh -c 'uname -a'"
4142

43+
def _parse_kernel_version(self, uname_a: str) -> Optional[str]:
44+
"""ExtractS the kernel release (`uname -r`) from `uname -a` output.
45+
46+
47+
The kernel_release is normally the 2nd index. If that
48+
fails, fall back to a regex looking for a dotted release string.
49+
"""
50+
if not uname_a:
51+
return None
52+
53+
result = uname_a.strip().split()
54+
if len(result) >= 3:
55+
return result[2]
56+
57+
# if some change in output look for a version-like string (e.g. 4.18.0-553.el8_10.x86_64)
58+
match = re.search(r"\d+\.\d+\.\d+[\w\-\.]*", uname_a)
59+
if match:
60+
return match.group(0)
61+
62+
return None
63+
4264
def collect_data(
4365
self,
4466
args=None,
@@ -61,6 +83,7 @@ def collect_data(
6183
res = self._run_sut_cmd(self.CMD)
6284
if res.exit_code == 0:
6385
kernel = res.stdout
86+
kernel_version = self._parse_kernel_version(kernel)
6487

6588
if res.exit_code != 0:
6689
self._log_event(
@@ -72,7 +95,7 @@ def collect_data(
7295
)
7396

7497
if kernel:
75-
kernel_data = KernelDataModel(kernel_version=kernel)
98+
kernel_data = KernelDataModel(kernel_info=kernel, kernel_version=kernel_version)
7699
self._log_event(
77100
category="KERNEL_READ",
78101
description="Kernel version read",

nodescraper/plugins/inband/kernel/kerneldata.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@
2323
# SOFTWARE.
2424
#
2525
###############################################################################
26+
from typing import Optional
27+
2628
from nodescraper.models import DataModel
2729

2830

2931
class KernelDataModel(DataModel):
30-
kernel_version: str
32+
kernel_info: str
33+
kernel_version: Optional[str] = None

0 commit comments

Comments
 (0)