diff options
Diffstat (limited to 'glances/plugins/folders/__init__.py')
-rw-r--r-- | glances/plugins/folders/__init__.py | 121 |
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 |