summaryrefslogtreecommitdiff
path: root/src/op_mode
diff options
context:
space:
mode:
Diffstat (limited to 'src/op_mode')
-rwxr-xr-xsrc/op_mode/kernel_modules.py82
-rwxr-xr-xsrc/op_mode/storage.py66
2 files changed, 107 insertions, 41 deletions
diff --git a/src/op_mode/kernel_modules.py b/src/op_mode/kernel_modules.py
new file mode 100755
index 000000000..e381a1df7
--- /dev/null
+++ b/src/op_mode/kernel_modules.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2024 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Purpose:
+# Provides commands for retrieving information about kernel modules.
+
+import sys
+import typing
+
+import vyos.opmode
+
+
+lsmod_tmpl = """
+{% for m in modules -%}
+Module: {{m.name}}
+
+{% if m.holders -%}
+Holders: {{m.holders | join(", ")}}
+{%- endif %}
+
+{% if m.drivers -%}
+Drivers: {{m.drivers | join(", ")}}
+{%- endif %}
+
+{% for k in m.fields -%}
+{{k}}: {{m["fields"][k]}}
+{% endfor %}
+{% if m.parameters %}
+
+Parameters:
+
+{% for p in m.parameters -%}
+{{p}}: {{m["parameters"][p]}}
+{% endfor -%}
+{% endif -%}
+
+-------------
+
+{% endfor %}
+"""
+
+def _get_raw_data(module=None):
+ from vyos.utils.kernel import get_module_data, lsmod
+
+ if module:
+ return [get_module_data(module)]
+ else:
+ return lsmod()
+
+def show(raw: bool, module: typing.Optional[str]):
+ from jinja2 import Template
+
+ data = _get_raw_data(module=module)
+
+ if raw:
+ return data
+ else:
+ t = Template(lsmod_tmpl)
+ output = t.render({"modules": data})
+ return output
+
+if __name__ == '__main__':
+ try:
+ res = vyos.opmode.run(sys.modules[__name__])
+ if res:
+ print(res)
+ except (ValueError, vyos.opmode.Error) as e:
+ print(e)
+ sys.exit(1)
diff --git a/src/op_mode/storage.py b/src/op_mode/storage.py
index 6bc3d3a2d..8fd2ffea1 100755
--- a/src/op_mode/storage.py
+++ b/src/op_mode/storage.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2022 VyOS maintainers and contributors
+# Copyright (C) 2022-2024 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
@@ -18,54 +18,38 @@
import sys
import vyos.opmode
-from vyos.utils.process import cmd
-# FIY: As of coreutils from Debian Buster and Bullseye,
-# the outpt looks like this:
-#
-# $ df -h -t ext4 --output=source,size,used,avail,pcent
-# Filesystem Size Used Avail Use%
-# /dev/sda1 16G 7.6G 7.3G 51%
-#
-# Those field names are automatically normalized by vyos.opmode.run,
-# so we don't touch them here,
-# and only normalize values.
-
-def _get_system_storage(only_persistent=False):
- if not only_persistent:
- cmd_str = 'df -h -x squashf'
- else:
- cmd_str = 'df -h -t ext4 --output=source,size,used,avail,pcent'
-
- res = cmd(cmd_str)
-
- return res
-
-def _get_raw_data():
- from re import sub as re_sub
- from vyos.utils.convert import human_to_bytes
+from jinja2 import Template
- out = _get_system_storage(only_persistent=True)
- lines = out.splitlines()
- lists = [l.split() for l in lines]
- res = {lists[0][i]: lists[1][i] for i in range(len(lists[0]))}
-
- res["Size"] = human_to_bytes(res["Size"])
- res["Used"] = human_to_bytes(res["Used"])
- res["Avail"] = human_to_bytes(res["Avail"])
- res["Use%"] = re_sub(r'%', '', res["Use%"])
-
- return res
+output_tmpl = """
+Filesystem: {{filesystem}}
+Size: {{size}}
+Used: {{used}} ({{use_percentage}}%)
+Available: {{avail}} ({{avail_percentage}}%)
+"""
def _get_formatted_output():
return _get_system_storage()
def show(raw: bool):
- if raw:
- return _get_raw_data()
-
- return _get_formatted_output()
+ from vyos.utils.disk import get_persistent_storage_stats
+ if raw:
+ res = get_persistent_storage_stats(human_units=False)
+ if res is None:
+ raise vyos.opmode.DataUnavailable("Storage statistics are not available")
+ else:
+ return res
+ else:
+ data = get_persistent_storage_stats(human_units=True)
+ if data is None:
+ return "Storage statistics are not available"
+ else:
+ data["avail_percentage"] = 100 - int(data["use_percentage"])
+ tmpl = Template(output_tmpl)
+ return tmpl.render(data).strip()
+
+ return output
if __name__ == '__main__':
try: