From 2b6a0a33b87df80e8d8ef564cec19b687f300070 Mon Sep 17 00:00:00 2001 From: Mehran Kholdi Date: Fri, 2 Jul 2021 20:30:07 +0430 Subject: [PATCH] Refactor: Extract utility functions out of metrics module --- bd2fs.py | 2 +- fs_util.py | 47 ++++++++++++++++++++++++++++++++++++++++++++ metrics.py | 48 --------------------------------------------- rawfile_servicer.py | 2 +- 4 files changed, 49 insertions(+), 50 deletions(-) create mode 100644 fs_util.py diff --git a/bd2fs.py b/bd2fs.py index 89c3f67..af590d0 100644 --- a/bd2fs.py +++ b/bd2fs.py @@ -18,7 +18,7 @@ from declarative import ( be_formatted, be_fs_expanded, ) -from metrics import path_stats, mountpoint_to_dev +from fs_util import path_stats, mountpoint_to_dev from util import log_grpc_request diff --git a/fs_util.py b/fs_util.py new file mode 100644 index 0000000..0823552 --- /dev/null +++ b/fs_util.py @@ -0,0 +1,47 @@ +import json +import os +import subprocess + + +def path_stats(path): + fs_stat = os.statvfs(path) + return { + "fs_size": fs_stat.f_frsize * fs_stat.f_blocks, + "fs_avail": fs_stat.f_frsize * fs_stat.f_bavail, + "fs_files": fs_stat.f_files, + "fs_files_avail": fs_stat.f_favail, + } + + +def device_stats(dev): + output = subprocess.run( + f"blockdev --getsize64 {dev}", shell=True, check=True, capture_output=True + ).stdout.decode() + dev_size = int(output) + return {"dev_size": dev_size} + + +def dev_to_mountpoint(dev_name): + try: + output = subprocess.run( + f"findmnt --json --first-only {dev_name}", + shell=True, + check=True, + capture_output=True, + ).stdout.decode() + data = json.loads(output) + return data["filesystems"][0]["target"] + except subprocess.CalledProcessError: + return None + + +def mountpoint_to_dev(mountpoint): + res = subprocess.run( + f"findmnt --json --first-only --nofsroot --mountpoint {mountpoint}", + shell=True, + capture_output=True, + ) + if res.returncode != 0: + return None + data = json.loads(res.stdout.decode().strip()) + return data["filesystems"][0]["source"] diff --git a/metrics.py b/metrics.py index 4876e3f..0830b22 100644 --- a/metrics.py +++ b/metrics.py @@ -1,55 +1,7 @@ -import json -import os -import subprocess - from prometheus_client.core import REGISTRY from prometheus_client.exposition import start_http_server -def path_stats(path): - fs_stat = os.statvfs(path) - return { - "fs_size": fs_stat.f_frsize * fs_stat.f_blocks, - "fs_avail": fs_stat.f_frsize * fs_stat.f_bavail, - "fs_files": fs_stat.f_files, - "fs_files_avail": fs_stat.f_favail, - } - - -def device_stats(dev): - output = subprocess.run( - f"blockdev --getsize64 {dev}", shell=True, check=True, capture_output=True - ).stdout.decode() - dev_size = int(output) - return {"dev_size": dev_size} - - -def dev_to_mountpoint(dev_name): - try: - output = subprocess.run( - f"findmnt --json --first-only {dev_name}", - shell=True, - check=True, - capture_output=True, - ).stdout.decode() - data = json.loads(output) - return data["filesystems"][0]["target"] - except subprocess.CalledProcessError: - return None - - -def mountpoint_to_dev(mountpoint): - res = subprocess.run( - f"findmnt --json --first-only --nofsroot --mountpoint {mountpoint}", - shell=True, - capture_output=True, - ) - if res.returncode != 0: - return None - data = json.loads(res.stdout.decode().strip()) - return data["filesystems"][0]["source"] - - class VolumeStatsCollector(object): def collect(self): return [] diff --git a/rawfile_servicer.py b/rawfile_servicer.py index c94ecc3..4fe44a4 100644 --- a/rawfile_servicer.py +++ b/rawfile_servicer.py @@ -7,7 +7,7 @@ import rawfile_util from consts import PROVISIONER_VERSION, PROVISIONER_NAME from csi import csi_pb2, csi_pb2_grpc from declarative import be_symlink, be_absent -from metrics import device_stats, mountpoint_to_dev +from fs_util import device_stats, mountpoint_to_dev from orchestrator.k8s import volume_to_node, run_on_node from rawfile_util import attach_loop, detach_loops from remote import init_rawfile, scrub, expand_rawfile