diff --git a/glances/attribute.py b/glances/attribute.py index 0f96bb0f..7cfb65a4 100644 --- a/glances/attribute.py +++ b/glances/attribute.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2015 Nicolargo +# Copyright (C) 2016 Nicolargo # # 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 @@ -19,24 +19,24 @@ """Attribute class.""" -from time import time +from datetime import datetime class GlancesAttribute(object): - def __init__(self, name, description='', history_max_size=None, is_rate=False): + def __init__(self, name, description='', history_max_size=None): """Init the attribute name: Attribute name (string) description: Attribute human reading description (string) history_max_size: Maximum size of the history list (default is no limit) - is_rate: If True then the value is manage like a rate (store timestamp in the history) + + History is stored as a list for tuple: [(date, value), ...] """ self._name = name self._description = description self._value = None self._history_max_size = history_max_size self._history = [] - self.is_rate = is_rate def __repr__(self): return self.value @@ -71,25 +71,18 @@ class GlancesAttribute(object): """ @property def value(self): - if self.is_rate: - if self.history_len() > 0: - return (self._value[1] - self.history_value()[1]) / (self._value[0] - self.history_value()[0]) - else: - return None + if self.history_len() > 0: + return (self._value[1] - self.history_value()[1]) / (self._value[0] - self.history_value()[0]) else: - return self._value + return None @value.setter def value(self, new_value): """Set a value. - If self.is_rate is True, store a tuple with (, value) - else, store directly the value (wathever type is it) + Value is a tuple: (, ) """ - if self.is_rate: - new_value = (time(), new_value) - if self._value is not None: - self.history_add(self._value) - self._value = new_value + self._value = (datetime.now(), new_value) + self.history_add(self._value) """ Properties for the attribute history @@ -136,8 +129,5 @@ class GlancesAttribute(object): def history_mean(self, nb=5): """Return the mean on the values in the history. """ - if self.is_rate: - h_sum = map(sum, zip(*self._history[-nb:])) - return h_sum[1] / float(self._history[-1][0] - self._history[-nb][0]) - else: - return sum(self._history[-nb:]) / float(nb) + h_sum = map(sum, zip(*self._history[-nb:])) + return h_sum[1] / float(self._history[-1][0] - self._history[-nb][0]) diff --git a/glances/exports/graph.py b/glances/exports/graph.py index 39c5f324..4d6f7a61 100644 --- a/glances/exports/graph.py +++ b/glances/exports/graph.py @@ -121,7 +121,9 @@ class GlancesGraph(object): plt.ylabel(self.get_graph_yunit(i, pre_label='')) # Curves plt.grid(True) - plt.plot_date(h['date'], h[i['name']], + # Points are stored as tuple (date, value) + x, y = zip(*h[i['name']]) + plt.plot_date(x, y, fmt='', drawstyle='default', linestyle='-', color=self.get_graph_color(i), xdate=True, ydate=False) @@ -145,9 +147,13 @@ class GlancesGraph(object): index_item += 1 plt.subplot( len(stats_history_filtered), 1, index_item) + # Legend plt.ylabel(self.get_graph_yunit(i, pre_label=k)) + # Curves plt.grid(True) - plt.plot_date(h['date'], h[k], + # Points are stored as tuple (date, value) + x, y = zip(*h[k]) + plt.plot_date(x, y, fmt='', drawstyle='default', linestyle='-', color=self.get_graph_color(i), xdate=True, ydate=False) diff --git a/glances/history.py b/glances/history.py index 027ce755..6e75d6cb 100644 --- a/glances/history.py +++ b/glances/history.py @@ -26,7 +26,7 @@ class GlancesHistory(object): """This class manage a dict of GlancesAttribute - key: stats name - - GlancesAttribute: history value""" + - value: GlancesAttribute""" def __init__(self): """ @@ -36,14 +36,12 @@ class GlancesHistory(object): def add(self, key, value, description='', - history_max_size=None, - is_rate=False): + history_max_size=None): """Add an new item (key, value) to the current history.""" if key not in self.stats_history: self.stats_history[key] = GlancesAttribute(key, description=description, - history_max_size=history_max_size, - is_rate=is_rate) + history_max_size=history_max_size) self.stats_history[key].value = value def reset(self): diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index 6483ed9c..8b7df5f4 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -106,7 +106,7 @@ class GlancesPlugin(object): if (self.stats and self.args is not None and self.args.export_graph and self.get_items_history_list() is not None): - self.stats_history.add('date', datetime.now()) + # self.stats_history.add('date', datetime.now()) for i in self.get_items_history_list(): if isinstance(self.stats, list): # Stats is a list of data