Merge branch 'feature/issue132' into develop

This commit is contained in:
Nicolargo 2015-01-02 23:25:06 +01:00
commit 283af00e7c
56 changed files with 245 additions and 82 deletions

5
NEWS
View File

@ -2,12 +2,13 @@
Glances Version 2.x Glances Version 2.x
============================================================================== ==============================================================================
Version 2.X Version 2.3
=========== ===========
* Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could containq {Mustache} {{tag}} (Mustache) with stat value.
* Add InfluxDB export module (--export-influxdb) (issue #455) * Add InfluxDB export module (--export-influxdb) (issue #455)
* Add Statsd export module (--export-statsd) (issue #465) * Add Statsd export module (--export-statsd) (issue #465)
* Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client (issue #463) * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463)
* The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart
* Add the RAID plugins (issue #447) * Add the RAID plugins (issue #447)

View File

@ -3,6 +3,7 @@
user_careful=50 user_careful=50
user_warning=70 user_warning=70
user_critical=90 user_critical=90
user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert
iowait_careful=50 iowait_careful=50
iowait_warning=70 iowait_warning=70
iowait_critical=90 iowait_critical=90
@ -71,13 +72,14 @@ hide=sda2,sda5
# Default limits for free filesytem space in % # Default limits for free filesytem space in %
# Default values if not defined: 50/70/90 # Default values if not defined: 50/70/90
careful=50 careful=50
careful_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert
warning=70 warning=70
critical=90 critical=90
[sensors] [sensors]
# Sensors core limits # Sensors core limits
# Default values if not defined: 60/70/80 # Default values if not defined: 60/70/80
temperature_core_careful=60 temperature_core_careful=50
temperature_core_warning=70 temperature_core_warning=70
temperature_core_critical=80 temperature_core_critical=80
# Temperatures in °C for hddtemp # Temperatures in °C for hddtemp

View File

@ -70,6 +70,8 @@ critical=90
[fs] [fs]
# Default limits for free filesytem space in % # Default limits for free filesytem space in %
# Default values if not defined: 50/70/90 # Default values if not defined: 50/70/90
# It is also possible to define per mount point value
# Example: /_careful=40
careful=50 careful=50
warning=70 warning=70
critical=90 critical=90

View File

@ -4,9 +4,9 @@ Glances
This manual describes *Glances* version 2.2. This manual describes *Glances* version 2.2.
Copyright © 2012-2014 Nicolas Hennion <nicolas@nicolargo.com> Copyright © 2011-2015 Nicolas Hennion <nicolas@nicolargo.com>
December 2014 Junuary 2015
.. contents:: Table of Contents .. contents:: Table of Contents
@ -671,6 +671,26 @@ Each alert message displays the following information:
4. {min,avg,max} values or number of running processes for monitored 4. {min,avg,max} values or number of running processes for monitored
processes list alerts processes list alerts
Actions
-------
Glances can trigger actions on events.
By action, we mean all shell command line. For example, if you want to execute the foo.py script if the last 5 minutes load are critical then add the action line to the Glances configuration file:
[load]
critical=5.0
critical_action=python /path/to/foo.py
All the stats are usable in the command line by the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a warning space trigger is reached:
[fs]
warning=70
warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert
Note: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list)
Gateway to others services Gateway to others services
========================== ==========================

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -3,7 +3,7 @@
# #
# Glances - An eye on your system # Glances - An eye on your system
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -0,0 +1,81 @@
# -*- coding: utf-8 -*-
#
# This file is part of Glances.
#
# Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
#
# Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Glances 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Manage on alert actions."""
# Import system lib
from subprocess import Popen
import pystache
# Import Glances lib
from glances.core.glances_logging import logger
class GlancesActions(object):
"""This class manage action if an alert is reached"""
def __init__(self):
"""Init GlancesActions class"""
# Dict with the criticity status
# - key: stat_name
# - value: criticity
# Goal: avoid to execute the same command twice
self.status = {}
def get(self, stat_name):
"""Get the stat_name criticity"""
try:
return self.status[stat_name]
except KeyError:
return None
def set(self, stat_name, criticity):
"""Set the stat_name to criticity"""
self.status[stat_name] = criticity
def run(self, stat_name, criticity, commands, mustache_dict=None):
"""Run the commands (in background)
- stats_name: plugin_name (+ header)
- criticity: criticity of the trigger
- commands: a list of command line with optional {{mustache}}
- mustache_dict: Plugin stats (can be use within {{mustache}})
Return True if the commands have been ran"""
if self.get(stat_name) == criticity:
# Action already executed => Exit
return False
# Ran all actions in background
for cmd in commands:
# Replace {{arg}} by the dict one (Thk to {Mustache})
cmd_full = pystache.render(cmd, mustache_dict)
# Execute the action
logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd_full))
logger.debug("Stats value for the trigger: {0}".format(mustache_dict))
try:
Popen(cmd_full, shell=True)
except OSError as e:
logger.error("Can't execute the action ({0})".format(e))
self.set(stat_name, criticity)
return True

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by
@ -697,6 +697,7 @@ class _GlancesCurses(object):
# Display # Display
x = display_x x = display_x
x_max = x
y = display_y y = display_y
for m in plugin_stats['msgdict']: for m in plugin_stats['msgdict']:
# New line # New line
@ -740,9 +741,11 @@ class _GlancesCurses(object):
# good # good
offset = len(m['msg']) offset = len(m['msg'])
x = x + offset x = x + offset
if x > x_max:
x_max = x
# Compute the next Glances column/line position # Compute the next Glances column/line position
self.next_column = max(self.next_column, x + self.space_between_column) self.next_column = max(self.next_column, x_max + self.space_between_column)
self.next_line = max(self.next_line, y + self.space_between_line) self.next_line = max(self.next_line, y + self.space_between_line)
def erase(self): def erase(self):

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by
@ -209,7 +209,9 @@ class Plugin(GlancesPlugin):
msg = '{0:>7}'.format(self.auto_unit(i['free'])) msg = '{0:>7}'.format(self.auto_unit(i['free']))
else: else:
msg = '{0:>7}'.format(self.auto_unit(i['used'])) msg = '{0:>7}'.format(self.auto_unit(i['used']))
ret.append(self.curse_add_line(msg, self.get_alert(i['used'], max=i['size']))) ret.append(self.curse_add_line(msg, self.get_alert(i['used'],
max=i['size'],
header=i['mnt_point'])))
msg = '{0:>7}'.format(self.auto_unit(i['size'])) msg = '{0:>7}'.format(self.auto_unit(i['size']))
ret.append(self.curse_add_line(msg)) ret.append(self.curse_add_line(msg))

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by
@ -32,6 +32,7 @@ from operator import itemgetter
from glances.core.glances_globals import is_py3 from glances.core.glances_globals import is_py3
from glances.core.glances_logging import logger from glances.core.glances_logging import logger
from glances.core.glances_logs import glances_logs from glances.core.glances_logs import glances_logs
from glances.core.glances_actions import GlancesActions
class GlancesPlugin(object): class GlancesPlugin(object):
@ -64,6 +65,9 @@ class GlancesPlugin(object):
# Init the limits dictionnary # Init the limits dictionnary
self.limits = dict() self.limits = dict()
# Init the actions
self.actions = GlancesActions()
def __repr__(self): def __repr__(self):
"""Return the raw stats.""" """Return the raw stats."""
return self.stats return self.stats
@ -263,6 +267,8 @@ class GlancesPlugin(object):
except ValueError: except ValueError:
self.limits[ self.limits[
self.plugin_name + '_' + s] = config.get_raw_option(self.plugin_name, s).split(",") self.plugin_name + '_' + s] = config.get_raw_option(self.plugin_name, s).split(",")
logger.debug("Load limit: {0} = {1}".format(self.plugin_name + '_' + s,
self.limits[self.plugin_name + '_' + s]))
def set_limits(self, input_limits): def set_limits(self, input_limits):
"""Set the limits to input_limits.""" """Set the limits to input_limits."""
@ -299,31 +305,54 @@ class GlancesPlugin(object):
# Manage limits # Manage limits
ret = 'OK' ret = 'OK'
try: try:
if value > self.__get_limit_critical(header=header): if value > self.__get_limit('critical', header=header):
ret = 'CRITICAL' ret = 'CRITICAL'
elif value > self.__get_limit_warning(header=header): elif value > self.__get_limit('warning', header=header):
ret = 'WARNING' ret = 'WARNING'
elif value > self.__get_limit_careful(header=header): elif value > self.__get_limit('careful', header=header):
ret = 'CAREFUL' ret = 'CAREFUL'
elif current < min: elif current < min:
ret = 'CAREFUL' ret = 'CAREFUL'
except KeyError: except KeyError:
return 'DEFAULT' return 'DEFAULT'
# Manage log (if needed) # Get the stat_name = plugin_name (+ header)
if header == "":
stat_name = self.plugin_name
else:
stat_name = self.plugin_name + '_' + header
# Manage log
log_str = "" log_str = ""
if log: if log:
# Add _LOG to the return string # Add _LOG to the return string
# So stats will be highlited with a specific color # So stats will be highlited with a specific color
log_str = "_LOG" log_str = "_LOG"
# Get the stat_name = plugin_name (+ header)
if header == "":
stat_name = self.plugin_name
else:
stat_name = self.plugin_name + '_' + header
# Add the log to the list # Add the log to the list
glances_logs.add(ret, stat_name.upper(), value, []) glances_logs.add(ret, stat_name.upper(), value, [])
# Manage action
# Here is a command line for the current trigger ?
try:
command = self.__get_limit_action(ret.lower(), header=header)
except KeyError:
# Reset the trigger
self.actions.set(stat_name, ret.lower())
else:
# A command line is available for the current alert, run it
# Build the {{mustache}} dictionnary
if type(self.stats) is list:
# If the stats are stored in a list of dict (fs plugin for exemple)
# Return the dict for the current header
try:
mustache_dict = (item for item in self.stats if item[self.get_key()] == header).next()
except StopIteration:
mustache_dict = {}
else:
# Use the stats dict
mustache_dict = self.stats
self.actions.run(stat_name, ret.lower(), command, mustache_dict=mustache_dict)
# Default is ok # Default is ok
return ret + log_str return ret + log_str
@ -331,23 +360,41 @@ class GlancesPlugin(object):
"""Get the alert log.""" """Get the alert log."""
return self.get_alert(current, min, max, header, log=True) return self.get_alert(current, min, max, header, log=True)
def __get_limit_critical(self, header=""): def __get_limit(self, criticity, header=""):
if header == "": """Return the limit value for the alert"""
return self.limits[self.plugin_name + '_' + 'critical'] prefix = self.plugin_name + '_'
else: if header != "":
return self.limits[self.plugin_name + '_' + header + '_' + 'critical'] prefix += header + '_'
def __get_limit_warning(self, header=""): # Get the limit for stat + header
if header == "": # Exemple: network_wlan0_rx_careful
return self.limits[self.plugin_name + '_' + 'warning'] try:
else: limit = self.limits[prefix + criticity]
return self.limits[self.plugin_name + '_' + header + '_' + 'warning'] except KeyError:
# Try fallback to plugin default limit
# Exemple: network_careful
limit = self.limits[self.plugin_name + '_' + criticity]
def __get_limit_careful(self, header=""): # Return the limit
if header == "": return limit
return self.limits[self.plugin_name + '_' + 'careful']
else: def __get_limit_action(self, criticity, header=""):
return self.limits[self.plugin_name + '_' + header + '_' + 'careful'] """Return the action for the alert"""
prefix = self.plugin_name + '_'
if header != "":
prefix += header + '_'
# Get the limit for stat + header
# Exemple: network_wlan0_rx_careful_action
try:
action = self.limits[prefix + criticity + '_action']
except KeyError:
# Try fallback to plugin default limit
# Exemple: network_careful_action
action = self.limits[self.plugin_name + '_' + criticity + '_action']
# Return the action list
return action
def get_conf_value(self, value, header="", plugin_name=None): def get_conf_value(self, value, header="", plugin_name=None):
"""Return the configuration (header_)value for the current plugin (or the one given by the plugin_name var)""" """Return the configuration (header_)value for the current plugin (or the one given by the plugin_name var)"""

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by
@ -64,6 +64,10 @@ class Plugin(GlancesPlugin):
# Init the stats # Init the stats
self.reset() self.reset()
def get_key(self):
"""Return the key of the list"""
return 'label'
def reset(self): def reset(self):
"""Reset/init the stats.""" """Reset/init the stats."""
self.stats = [] self.stats = []

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -2,7 +2,7 @@
# #
# This file is part of Glances. # This file is part of Glances.
# #
# Copyright (C) 2014 Nicolargo <nicolas@nicolargo.com> # Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
# #
# Glances is free software; you can redistribute it and/or modify # Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by # it under the terms of the GNU Lesser General Public License as published by

View File

@ -67,7 +67,8 @@ setup(
'CHART': ['matplotlib'], 'CHART': ['matplotlib'],
'BROWSER': ['zeroconf>=0.16', 'netifaces'], 'BROWSER': ['zeroconf>=0.16', 'netifaces'],
'RAID': ['pymdstat'], 'RAID': ['pymdstat'],
'EXPORT': ['influxdb', 'statsd'] 'EXPORT': ['influxdb', 'statsd'],
'ACTION': ['pystache']
}, },
packages=['glances'], packages=['glances'],
include_package_data=True, include_package_data=True,