summaryrefslogtreecommitdiffstats
path: root/glances/plugins/folders/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/plugins/folders/__init__.py')
-rw-r--r--glances/plugins/folders/__init__.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/glances/plugins/folders/__init__.py b/glances/plugins/folders/__init__.py
index e69de29b..f4e28db4 100644
--- a/glances/plugins/folders/__init__.py
+++ b/glances/plugins/folders/__init__.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of Glances.
+#
+# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>
+#
+# SPDX-License-Identifier: LGPL-3.0-only
+#
+
+"""Folder plugin."""
+from __future__ import unicode_literals
+
+
+from glances.globals import nativestr
+from glances.folder_list import FolderList as glancesFolderList
+from glances.plugins.plugin.model import GlancesPluginModel
+
+
+class PluginModel(GlancesPluginModel):
+ """Glances folder plugin."""
+
+ def __init__(self, args=None, config=None):
+ """Init the plugin."""
+ super(PluginModel, self).__init__(args=args, config=config, stats_init_value=[])
+ self.args = args
+ self.config = config
+
+ # We want to display the stat in the curse interface
+ self.display_curse = True
+
+ # Init stats
+ self.glances_folders = glancesFolderList(config)
+
+ def get_key(self):
+ """Return the key of the list."""
+ return 'path'
+
+ @GlancesPluginModel._check_decorator
+ @GlancesPluginModel._log_result_decorator
+ def update(self):
+ """Update the folders list."""
+ # Init new stats
+ stats = self.get_init_value()
+
+ if self.input_method == 'local':
+ # Folder list only available in a full Glances environment
+ # Check if the glances_folder instance is init
+ if self.glances_folders is None:
+ return self.stats
+
+ # Update the folders list (result of command)
+ self.glances_folders.update(key=self.get_key())
+
+ # Put it on the stats var
+ stats = self.glances_folders.get()
+ else:
+ pass
+
+ # Update the stats
+ self.stats = stats
+
+ return self.stats
+
+ def get_alert(self, stat, header=""):
+ """Manage limits of the folder list."""
+ if stat['errno'] != 0:
+ ret = 'ERROR'
+ else:
+ ret = 'OK'
+
+ if stat['critical'] is not None and stat['size'] > int(stat['critical']) * 1000000:
+ ret = 'CRITICAL'
+ elif stat['warning'] is not None and stat['size'] > int(stat['warning']) * 1000000:
+ ret = 'WARNING'
+ elif stat['careful'] is not None and stat['size'] > int(stat['careful']) * 1000000:
+ ret = 'CAREFUL'
+
+ # Get stat name
+ stat_name = self.get_stat_name(header=header)
+
+ # Manage threshold
+ self.manage_threshold(stat_name, ret)
+
+ # Manage action
+ self.manage_action(stat_name, ret.lower(), header, stat[self.get_key()])
+
+ return ret
+
+ def msg_curse(self, args=None, max_width=None):
+ """Return the dict to display in the curse interface."""
+ # Init the return message
+ ret = []
+
+ # Only process if stats exist and display plugin enable...
+ if not self.stats or self.is_disabled():
+ return ret
+
+ # Max size for the interface name
+ name_max_width = max_width - 7
+
+ # Header
+ msg = '{:{width}}'.format('FOLDERS', width=name_max_width)
+ ret.append(self.curse_add_line(msg, "TITLE"))
+
+ # Data
+ for i in self.stats:
+ ret.append(self.curse_new_line())
+ if len(i['path']) > name_max_width:
+ # Cut path if it is too long
+ path = '_' + i['path'][-name_max_width + 1 :]
+ else:
+ path = i['path']
+ msg = '{:{width}}'.format(nativestr(path), width=name_max_width)
+ ret.append(self.curse_add_line(msg))
+ if i['errno'] != 0:
+ msg = '?{:>8}'.format(self.auto_unit(i['size']))
+ else:
+ msg = '{:>9}'.format(self.auto_unit(i['size']))
+ ret.append(self.curse_add_line(msg, self.get_alert(i, header='folder_' + i['indice'])))
+
+ return ret