summaryrefslogtreecommitdiff
path: root/kvmd/plugins/msd/otg/fs.py
diff options
context:
space:
mode:
authorDevaev Maxim <[email protected]>2019-11-08 03:53:00 +0300
committerDevaev Maxim <[email protected]>2019-11-08 03:53:00 +0300
commitfa40676136483dd287caf5df324ca429e5adbace (patch)
treeaafa78f9d2f26c86bcb9ea484bc51ab4a158541f /kvmd/plugins/msd/otg/fs.py
parent13dcbc0c62461da626f7aea9712da593c45102df (diff)
otg msd: notify about free space while uploading
Diffstat (limited to 'kvmd/plugins/msd/otg/fs.py')
-rw-r--r--kvmd/plugins/msd/otg/fs.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/kvmd/plugins/msd/otg/fs.py b/kvmd/plugins/msd/otg/fs.py
new file mode 100644
index 00000000..ac91f89f
--- /dev/null
+++ b/kvmd/plugins/msd/otg/fs.py
@@ -0,0 +1,58 @@
+# ========================================================================== #
+# #
+# KVMD - The main Pi-KVM daemon. #
+# #
+# Copyright (C) 2018 Maxim Devaev <[email protected]> #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# 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 <https://www.gnu.org/licenses/>. #
+# #
+# ========================================================================== #
+
+
+import os
+import dataclasses
+
+from typing import Optional
+
+from ....logging import get_logger
+
+
+# =====
[email protected](frozen=True)
+class FsSpace:
+ size: int
+ free: int
+
+
+# =====
+def get_file_size(path: str) -> int:
+ try:
+ return os.path.getsize(path)
+ except Exception as err:
+ get_logger().warning("Can't get size of file %s: %s", path, err)
+ return -1
+
+
+def get_fs_space(path: str, fatal: bool) -> Optional[FsSpace]:
+ try:
+ st = os.statvfs(path)
+ except Exception as err:
+ if fatal:
+ raise
+ get_logger().warning("Can't get free space of filesystem %s: %s", path, err)
+ return None
+ return FsSpace(
+ size=(st.f_blocks * st.f_frsize),
+ free=(st.f_bavail * st.f_frsize),
+ )