From eb2ccb78266c26daa48ca11863aef22291045f01 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Wed, 9 Jan 2013 22:13:29 +0100 Subject: [PATCH 1/7] Add IORate and first code for file configuration --- NEWS | 12 + glances/conf/glances.conf | 58 +++ glances/glances.py | 727 +++++++++++++++++++++++++++----------- 3 files changed, 592 insertions(+), 205 deletions(-) create mode 100644 glances/conf/glances.conf diff --git a/NEWS b/NEWS index bd96ff53..cf65ab5c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +Version 1.6 +=========== + + * Configuration file: user can defines limits + * Display limits in the help screen + * Add per process IO (read and write) rate in B per second + IO rate only available on Linux from a root account + * If CPU iowait alert then sort by processes by IO rate + * Process column style auto (underline) or manual (bold) + * Display a sort indicator (is space is available) + * Change the table key in the help screen + Version 1.5.2 ============= diff --git a/glances/conf/glances.conf b/glances/conf/glances.conf new file mode 100644 index 00000000..e8948bf2 --- /dev/null +++ b/glances/conf/glances.conf @@ -0,0 +1,58 @@ +[global] +# Defaults limits for all the stats in % +# Defaults values if not defined: 50/70/90 +careful=50 +warning=70 +critical=90 + +[cpu] +# Limits values for CPU user in % +# Defaults values if not defined: 50/70/90 +user_careful=50 +user_warning=70 +user_critical=90 +# Limits values for CPU system in % +# Defaults values if not defined: 50/70/90 +system_careful=50 +system_warning=70 +system_critical=90 +# Limits values for CPU iowait in % +# Defaults values if not defined: 40/60/80 +iowait_careful=40 +iowait_warning=60 +iowait_critical=80 + +[load] +# Value * Core +# Defaults values if not defined: 0.7/1.0/5.0 per Core +careful=0.7 +warning=1.0 +critical=5.0 + +[memory] +# Defaults limits for free RAM memory in % +# Defaults values if not defined: 50/70/90 +careful=50 +warning=70 +critical=90 + +[swap] +# Defaults limits for free swap memory in % +# Defaults values if not defined: 50/70/90 +careful=50 +warning=70 +critical=90 + +[temperature] +# Temperatures in °C for sensors +# Defaults values if not defined: 60/70/80 +careful=60 +warning=70 +critical=80 + +[filesystem] +# Defaults limits for free filesytem space in % +# Defaults values if not defined: 50/70/90 +careful=50 +warning=70 +critical=90 diff --git a/glances/glances.py b/glances/glances.py index 9430bb37..3ba5630c 100755 --- a/glances/glances.py +++ b/glances/glances.py @@ -19,7 +19,7 @@ # along with this program. If not, see . __appname__ = 'glances' -__version__ = "1.5.2" +__version__ = "1.6b" __author__ = "Nicolas Hennion " __licence__ = "LGPL" @@ -34,6 +34,7 @@ import getopt import signal import time from datetime import datetime, timedelta +import ConfigParser import locale import gettext locale.setlocale(locale.LC_ALL, '') @@ -180,6 +181,8 @@ except ImportError: else: csv_lib_tag = True +# Define the default configuration file +default_conf_file = "/etc/glances.conf" # Classes #======== @@ -206,51 +209,169 @@ class glancesLimits: # The limit list is stored in an hash table: # limits_list[STAT] = [CAREFUL, WARNING, CRITICAL] - # Exemple: - # limits_list['STD'] = [50, 70, 90] - - #_______________________CAREFUL WARNING CRITICAL + # + # STD is for defaults limits (CPU / MEM / SWAP / FS) + # CPU_IOWAIT limits (iowait in %) + # LOAD is for LOAD limits (5 min / 15 min) + # TEMP is for sensors limits (temperature in °C) + # + #_____________________[ CAREFUL, WARNING, CRITICAL ] __limits_list = {'STD': [50, 70, 90], + 'CPU_USER': [50, 70, 90], + 'CPU_SYSTEM': [50, 70, 90], + 'CPU_IOWAIT': [40, 60, 80], 'LOAD': [0.7, 1.0, 5.0], - 'TEMP': [50, 70, 80]} + 'MEM': [50, 70, 90], + 'SWAP': [50, 70, 90], + 'TEMP': [60, 70, 80], + 'FS': [50, 70, 90]} - def __init__(self, careful=50, warning=70, critical=90): - self.__limits_list['STD'] = [careful, warning, critical] + def __init__(self, conf_file = default_conf_file): + # Open the configuration file + config = ConfigParser.RawConfigParser() + if (config.read(conf_file) != []): + # The configuration file exist + if (config.has_section('global')): + # The configuration file has a limits section + # Read STD limits + self.__setLimits(config, 'global', 'STD', 'careful') + self.__setLimits(config, 'global', 'STD', 'warning') + self.__setLimits(config, 'global', 'STD', 'critical') + if (config.has_section('cpu')): + # Read CPU limits + self.__setLimits(config, 'cpu', 'CPU_USER', 'user_careful') + self.__setLimits(config, 'cpu', 'CPU_USER', 'user_warning') + self.__setLimits(config, 'cpu', 'CPU_USER', 'user_critical') + self.__setLimits(config, 'cpu', 'CPU_SYSTEM', 'system_careful') + self.__setLimits(config, 'cpu', 'CPU_SYSTEM', 'system_warning') + self.__setLimits(config, 'cpu', 'CPU_SYSTEM', 'system_critical') + self.__setLimits(config, 'cpu', 'CPU_IOWAIT', 'iowait_careful') + self.__setLimits(config, 'cpu', 'CPU_IOWAIT', 'iowait_warning') + self.__setLimits(config, 'cpu', 'CPU_IOWAIT', 'iowait_critical') + if (config.has_section('load')): + # Read LOAD limits + self.__setLimits(config, 'load', 'LOAD', 'careful') + self.__setLimits(config, 'load', 'LOAD', 'warning') + self.__setLimits(config, 'load', 'LOAD', 'critical') + if (config.has_section('memory')): + # Read MEM limits + self.__setLimits(config, 'memory', 'MEM', 'careful') + self.__setLimits(config, 'memory', 'MEM', 'warning') + self.__setLimits(config, 'memory', 'MEM', 'critical') + if (config.has_section('swap')): + # Read MEM limits + self.__setLimits(config, 'swap', 'SWAP', 'careful') + self.__setLimits(config, 'swap', 'SWAP', 'warning') + self.__setLimits(config, 'swap', 'SWAP', 'critical') + if (config.has_section('temperature')): + # Read TEMP limits + self.__setLimits(config, 'temperature', 'TEMP', 'careful') + self.__setLimits(config, 'temperature', 'TEMP', 'warning') + self.__setLimits(config, 'temperature', 'TEMP', 'critical') + if (config.has_section('filesystem')): + # Read FS limits + self.__setLimits(config, 'filesystem', 'FS', 'careful') + self.__setLimits(config, 'filesystem', 'FS', 'warning') + self.__setLimits(config, 'filesystem', 'FS', 'critical') + + def __setLimits(self, config, section, stat, alert): + """ + config: Pointer to the config file ConfigParser.RawConfigParser() + section: 'limits' + stat: 'CPU', 'LOAD', 'MEM', 'SWAP', 'TEMP'... + alert key (from config file): + """ + try: + value = config.getfloat(section, alert) + except ConfigParser.NoOptionError: + pass + else: + #~ print("%s / %s = %s -> %s" % (section, alert, value, stat)) + if (alert.endswith('careful')): + self.__limits_list[stat][0] = value + elif (alert.endswith('warning')): + self.__limits_list[stat][1] = value + elif (alert.endswith('critical')): + self.__limits_list[stat][2] = value + + def getCareful(self, stat): + return self.__limits_list[stat][0] + + def getWarning(self, stat): + return self.__limits_list[stat][1] + + def getCritical(self, stat): + return self.__limits_list[stat][2] def getSTDCareful(self): - return self.__limits_list['STD'][0] + return self.getCareful('STD') def getSTDWarning(self): - return self.__limits_list['STD'][1] + return self.getWarning('STD') def getSTDCritical(self): - return self.__limits_list['STD'][2] + return self.getCritical('STD') + + def getCPUCareful(self, stat): + return self.getCareful('CPU_' + stat.upper()) + + def getCPUWarning(self, stat): + return self.getWarning('CPU_' + stat.upper()) + + def getCPUCritical(self, stat): + return self.getCritical('CPU_' + stat.upper()) def getLOADCareful(self, core=1): - return self.__limits_list['LOAD'][0] * core + return self.getCareful('LOAD') * core def getLOADWarning(self, core=1): - return self.__limits_list['LOAD'][1] * core + return self.getWarning('LOAD') * core def getLOADCritical(self, core=1): - return self.__limits_list['LOAD'][2] * core + return self.getCritical('LOAD') * core + + def getMEMCareful(self): + return self.getCareful('MEM') + + def getMEMWarning(self): + return self.getWarning('MEM') + + def getMEMCritical(self): + return self.getCritical('MEM') + + def getSWAPCareful(self): + return self.getCareful('SWAP') + + def getSWAPWarning(self): + return self.getWarning('SWAP') + + def getSWAPCritical(self): + return self.getCritical('SWAP') def getTEMPCareful(self): - return self.__limits_list['TEMP'][0] + return self.getCareful('TEMP') def getTEMPWarning(self): - return self.__limits_list['TEMP'][1] + return self.getWarning('TEMP') def getTEMPCritical(self): - return self.__limits_list['TEMP'][2] + return self.getCritical('TEMP') + + def getFSCareful(self): + return self.getCareful('FS') + + def getFSWarning(self): + return self.getWarning('FS') + + def getFSCritical(self): + return self.getCritical('FS') class glancesLogs: """ The main class to manage logs inside the Glances software - Logs is a list of list (stored in the self.logs_list var): - [["begin", "end", "WARNING|CRITICAL", "CPU|LOAD|MEM", - MAX, AVG, MIN, SUM, COUNT],...] + Logs is a list of list (stored in the self.logs_list var) + See item description in the add function """ def __init__(self): @@ -303,10 +424,13 @@ class glancesLogs: # Add Top process sort depending on alert type if item_type.startswith("MEM"): - # MEM + # Sort TOP process by memory_percent sortby = 'memory_percent' + elif item_type.startswith("CPU IO") and is_Linux: + # Sort TOP process by io_counters (only for Linux OS) + sortby = 'io_counters' else: - # CPU* and LOAD + # Default TOP process sort is cpu_percent (for CPU* and LOAD) sortby = 'cpu_percent' topprocess = sorted(proc_list, key=lambda process: process[sortby], reverse=True) @@ -486,6 +610,14 @@ class GlancesGrabProcesses: """ Get processed stats using the PsUtil lib """ + + def __init__(self): + """ + Init the io dict + key = pid + value = [ read_bytes_old, write_bytes_old ] + """ + self.io_old = {} def __get_process_stats__(self, proc): """ @@ -497,8 +629,11 @@ class GlancesGrabProcesses: procstat['name'] = proc.name except psutil.AccessDenied: # Can not get the process name ? - # then exit... + # then no need to retreive others stats + # so exit... return {} + + procstat['pid'] = proc.pid try: procstat['cmdline'] = " ".join(proc.cmdline) @@ -522,13 +657,34 @@ class GlancesGrabProcesses: except psutil.AccessDenied: procstat['cpu_percent'] = {} - try: - if psutil_get_io_counter_tag: - procstat['io_counters'] = proc.get_io_counters() - except: - procstat['io_counters'] = {} + # procstat['io_counters'] is a list: + # [ read_bytes, write_bytes, read_bytes_old, write_bytes_old, io_tag ] + # if io_tag = 0 > Access denied (display "?") + # If io_tag = 1 > No access denied (display the IO rate) + if psutil_get_io_counter_tag: + try: + # Get the process IO counters + proc_io = proc.get_io_counters() + io_new = [ proc_io.read_bytes, proc_io.write_bytes ] + except psutil.AccessDenied: + # Access denied to process IO (no root account) + # Put 0 in all values (for sort) and io_tag = 0 (for display) + procstat['io_counters'] = [ 0, 0 ] + [ 0, 0 ] + io_tag = 0 + else: + # For IO rate computation + # Append saved IO r/w bytes + try: + procstat['io_counters'] = io_new + self.io_old[procstat['pid']] + except KeyError: + procstat['io_counters'] = io_new + [ 0, 0 ] + # then save the IO r/w bytes + self.io_old[procstat['pid']] = io_new + io_tag = 1 + + # Append the IO tag (for display) + procstat['io_counters'] += [ io_tag ] - procstat['pid'] = proc.pid try: procstat['username'] = proc.username except psutil.AccessDenied: @@ -559,7 +715,8 @@ class GlancesGrabProcesses: def update(self): self.processlist = [] self.processcount = {'total': 0, 'running': 0, 'sleeping': 0} - + + # For each existing process... for proc in psutil.process_iter(): procstat = self.__get_process_stats__(proc) # Ignore the 'idle' process on Windows or Bsd @@ -568,8 +725,8 @@ class GlancesGrabProcesses: or (is_Windows and (procstat['name'] == 'System Idle Process'))): continue # Update processlist - self.processlist.append(procstat) - # Update processcount + self.processlist.append(procstat) + # Update processcount (global stattistics) try: self.processcount[str(proc.status)] += 1 except KeyError: @@ -611,6 +768,7 @@ class GlancesStats: # Init the process list self.process_list_refresh = True + self.process_list_sortedby = '' self.glancesgrabprocesses = GlancesGrabProcesses() def _init_host(self): @@ -873,23 +1031,9 @@ class GlancesStats: self.fs = self.glancesgrabfs.get() # PROCESS - # TODO: Add IO rate -1 - #~ self.glancesgrabprocesses.update() - #~ process = self.glancesgrabprocesses.getlist() - #~ processcount = self.glancesgrabprocesses.getcount() - #~ if not hasattr(self, 'process_old'): - #~ self.processcount = {} - #~ self.process = [] - #~ self.process_old = process - #~ else: - #~ self.processcount = processcount - #~ self.process = process - #~ for proc in self.process: - #~ pass - #~ self.process_old = process self.glancesgrabprocesses.update() - process = self.glancesgrabprocesses.getlist() processcount = self.glancesgrabprocesses.getcount() + process = self.glancesgrabprocesses.getlist() if not hasattr(self, 'process'): self.processcount = {} self.process = [] @@ -897,8 +1041,6 @@ class GlancesStats: self.processcount = processcount self.process = process - # Initialiation of the running processes list - # Data are refreshed every two cycle (refresh_time * 2) # Get the current date/time self.now = datetime.now() @@ -909,8 +1051,11 @@ class GlancesStats: # Update the stats self.__update__(input_stats) - #~ def getAll(self): - #~ return self.all_stats + def getSortedBy(self): + return self.process_list_sortedby + + def getAll(self): + return self.all_stats def getHost(self): return self.host @@ -975,22 +1120,41 @@ class GlancesStats: sortedReverse = True if sortedby == 'auto': + # Auto selection + # By default sort by CPU or memory (if CPU not available) if psutil_get_cpu_percent_tag: sortedby = 'cpu_percent' else: sortedby = 'memory_percent' - # Auto selection - # If global MEM > 70% sort by MEM usage - # else sort by CPU usage - if self.mem['total'] != 0: - memtotal = (self.mem['used'] * 100) / self.mem['total'] - if memtotal > limits.getSTDWarning(): - sortedby = 'memory_percent' + # Dynamic choice + if (('iowait' in self.cpu) and + (self.cpu['iowait'] > limits.getCPUWarning(stat = 'iowait'))): + # If CPU IOWait > 70% sort by IORATE usage + sortedby = 'io_counters' + elif ((self.mem['total'] != 0) + and (((self.mem['used'] * 100) / self.mem['total']) > limits.getMEMWarning())): + # If global MEM > 70% sort by MEM usage + sortedby = 'memory_percent' elif sortedby == 'name': sortedReverse = False - return sorted(self.process, key=lambda process: process[sortedby], - reverse=sortedReverse) + if (sortedby == 'io_counters'): + # Sort process by IO rate (sum IO read + IO write) + listsorted = sorted(self.process, + key=lambda process: process[sortedby][0]-process[sortedby][2] + +process[sortedby][1]-process[sortedby][3], + reverse=sortedReverse) + else: + # Others sorts + listsorted = sorted(self.process, + key=lambda process: process[sortedby], + reverse=sortedReverse) + + # Save the latest sort type in a global var + self.process_list_sortedby = sortedby + + # Return the sorted list + return listsorted def getNow(self): return self.now @@ -1018,23 +1182,11 @@ class GlancesStatsServer(GlancesStats): self.all_stats["percpu"] = self.percpu self.all_stats["load"] = self.load self.all_stats["mem"] = self.mem - self.all_stats["memswap"] = self.memswap - if psutil_network_io_tag: - self.all_stats["network"] = self.network - else: - self.all_stats["network"] = [] - if sensors_tag: - self.all_stats["sensors"] = self.sensors - else: - self.all_stats["sensors"] = [] - if psutil_disk_io_tag: - self.all_stats["diskio"] = self.diskio - else: - self.all_stats["diskio"] = [] - if psutil_fs_usage_tag: - self.all_stats["fs"] = self.fs - else: - self.all_stats["fs"] = [] + self.all_stats["memswap"] = self.memswap + self.all_stats["network"] = self.network if psutil_network_io_tag else [] + self.all_stats["sensors"] = self.sensors if sensors_tag else [] + self.all_stats["diskio"] = self.diskio if psutil_disk_io_tag else [] + self.all_stats["fs"] = self.fs if psutil_fs_usage_tag else [] self.all_stats["processcount"] = self.processcount self.all_stats["process"] = self.process self.all_stats["core_number"] = self.core_number @@ -1050,8 +1202,6 @@ class GlancesStatsClient(GlancesStats): def __init__(self): GlancesStats.__init__(self) - # Cached informations (no need to be refreshed) - # Host and OS informations def __update__(self, input_stats): """ @@ -1278,12 +1428,10 @@ class glancesScreen: # If current > WARNING of max then alert = WARNING # If current > CRITICAL of max then alert = CRITICAL try: - (current * 100) / max + variable = (current * 100) / max except ZeroDivisionError: return 'DEFAULT' - variable = (current * 100) / max - if variable > limits.getSTDCritical(): return 'CRITICAL' elif variable > limits.getSTDWarning(): @@ -1305,14 +1453,30 @@ class glancesScreen: """ return self.__colors_list2[self.__getAlert(current, max)] - def __getCpuAlert(self, current=0, max=100): - return self.__getAlert(current, max) + def __getCpuAlert(self, current=0, max=100, stat = ''): + # If current < CAREFUL of max then alert = OK + # If current > CAREFUL of max then alert = CAREFUL + # If current > WARNING of max then alert = WARNING + # If current > CRITICAL of max then alert = CRITICAL + try: + variable = (current * 100) / max + except ZeroDivisionError: + return 'DEFAULT' - def __getCpuColor(self, current=0, max=100): - return self.__getColor(current, max) + if (variable > limits.getCPUCritical(stat = stat)): + return 'CRITICAL' + elif (variable > limits.getCPUWarning(stat = stat)): + return 'WARNING' + elif (variable > limits.getCPUCareful(stat = stat)): + return 'CAREFUL' - def __getExtCpuColor(self, current=0, max=100): - return self.__getColor2(current, max) + return 'OK' + + def __getCpuColor(self, current=0, max=100, stat = ''): + return self.__colors_list[self.__getCpuAlert(current, max, stat)] + + def __getCpuColor2(self, current=0, max=100, stat = ''): + return self.__colors_list2[self.__getCpuAlert(current, max, stat)] def __getLoadAlert(self, current=0, core=1): # If current < CAREFUL*core of max then alert = OK @@ -1333,19 +1497,73 @@ class glancesScreen: return self.__colors_list[self.__getLoadAlert(current, core)] def __getMemAlert(self, current=0, max=100): - return self.__getAlert(current, max) + # If current < CAREFUL of max then alert = OK + # If current > CAREFUL of max then alert = CAREFUL + # If current > WARNING of max then alert = WARNING + # If current > CRITICAL of max then alert = CRITICAL + try: + variable = (current * 100) / max + except ZeroDivisionError: + return 'DEFAULT' + + if variable > limits.getMEMCritical(): + return 'CRITICAL' + elif variable > limits.getMEMWarning(): + return 'WARNING' + elif variable > limits.getMEMCareful(): + return 'CAREFUL' + + return 'OK' + + def __getSWAPAlert(self, current=0, max=100): + # If current < CAREFUL of max then alert = OK + # If current > CAREFUL of max then alert = CAREFUL + # If current > WARNING of max then alert = WARNING + # If current > CRITICAL of max then alert = CRITICAL + try: + variable = (current * 100) / max + except ZeroDivisionError: + return 'DEFAULT' + + if variable > limits.getSWAPCritical(): + return 'CRITICAL' + elif variable > limits.getSWAPWarning(): + return 'WARNING' + elif variable > limits.getSWAPCareful(): + return 'CAREFUL' + + return 'OK' def __getMemColor(self, current=0, max=100): return self.__getColor(current, max) + def __getMemColor2(self, current=0, max=100): + return self.__getColor2(current, max) + def __getNetColor(self, current=0, max=100): return self.__getColor2(current, max) - def __getSensorsColor(self, current=0, max=100): - return self.__getColor2(current, max) + def __getFsAlert(self, current=0, max=100): + # If current < CAREFUL of max then alert = OK + # If current > CAREFUL of max then alert = CAREFUL + # If current > WARNING of max then alert = WARNING + # If current > CRITICAL of max then alert = CRITICAL + try: + variable = (current * 100) / max + except ZeroDivisionError: + return 'DEFAULT' + + if variable > limits.getSWAPCritical(): + return 'CRITICAL' + elif variable > limits.getSWAPWarning(): + return 'WARNING' + elif variable > limits.getSWAPCareful(): + return 'CAREFUL' + + return 'OK' def __getFsColor(self, current=0, max=100): - return self.__getColor2(current, max) + return self.__colors_list2[self.__getFsAlert(current, max)] def __getProcessColor(self, current=0, max=100): return self.__getColor2(current, max) @@ -1401,6 +1619,9 @@ class glancesScreen: elif self.pressedkey == 104: # 'h' > Show/hide help self.help_tag = not self.help_tag + elif self.pressedkey == 105 and psutil_get_io_counter_tag: + # 'i' > Sort processes by IO rate + self.setProcessSortedBy('io_counters') elif self.pressedkey == 108: # 'l' > Show/hide log messages self.log_tag = not self.log_tag @@ -1445,6 +1666,7 @@ class glancesScreen: # Get stats for processes (used in another functions for logs) processcount = stats.getProcessCount() processlist = stats.getProcessList(screen.getProcessSortedBy()) + # Display stats self.displaySystem(stats.getHost(), stats.getSystem()) cpu_offset = self.displayCpu(stats.getCpu(), stats.getPerCpu(), processlist) @@ -1460,10 +1682,10 @@ class glancesScreen: network_count + diskio_count) log_count = self.displayLog(self.network_y + sensors_count + network_count + diskio_count + fs_count) - self.displayProcess(processcount, processlist, log_count) - self.displayCaption(cs_status=cs_status) + self.displayProcess(processcount, processlist, stats.getSortedBy(), log_count) + self.displayCaption(cs_status = cs_status) self.displayNow(stats.getNow()) - self.displayHelp() + self.displayHelp(core = stats.getCore()) def erase(self): # Erase the content of the screen @@ -1556,6 +1778,8 @@ class glancesScreen: cpu['user'], proclist) logs.add(self.__getCpuAlert(cpu['system']), "CPU system", cpu['system'], proclist) + logs.add(self.__getCpuAlert(cpu['iowait']), "CPU IOwait", + cpu['iowait'], proclist) except: pass @@ -1586,8 +1810,6 @@ class glancesScreen: # user alert = self.__getCpuAlert(percpu[i]['user']) - # Do not log PerCpu but on ly CPU (see below) - #~ logs.add(alert, "CPU-%d user" % i, percpu[i]['user'], proclist) self.term_window.addnstr( self.cpu_y + 1, self.cpu_x + 8 + i * 8, format(percpu[i]['user'] / 100, '>6.1%'), 6, @@ -1595,8 +1817,6 @@ class glancesScreen: # system alert = self.__getCpuAlert(percpu[i]['system']) - # Do not log PerCpu but on ly CPU (see below) - #~ logs.add(alert, "CPU-%d system" % i, percpu[i]['system'], proclist) self.term_window.addnstr( self.cpu_y + 2, self.cpu_x + 8 + i * 8, format(percpu[i]['system'] / 100, '>6.1%'), 6, @@ -1625,8 +1845,7 @@ class glancesScreen: y = 1 # user self.term_window.addnstr(self.cpu_y + y, self.cpu_x, _("user:"), 5) - alert = self.__getCpuAlert(cpu['user']) - #~ logs.add(alert, "CPU user", cpu['user'], proclist) + alert = self.__getCpuAlert(cpu['user'], stat = 'user') self.term_window.addnstr(self.cpu_y + y, self.cpu_x + 8, format(cpu['user'] / 100, '>6.1%'), 6, self.__colors_list[alert]) @@ -1636,8 +1855,7 @@ class glancesScreen: if 'system' in cpu: self.term_window.addnstr(self.cpu_y + y, self.cpu_x, _("system:"), 7) - alert = self.__getCpuAlert(cpu['system']) - #~ logs.add(alert, "CPU system", cpu['system'], proclist) + alert = self.__getCpuAlert(cpu['system'], stat = 'system') self.term_window.addnstr(self.cpu_y + y, self.cpu_x + 8, format(cpu['system'] / 100, '>6.1%'), 6, self.__colors_list[alert]) @@ -1669,11 +1887,11 @@ class glancesScreen: self.term_window.addnstr( self.cpu_y + y, self.cpu_x + 24, format(cpu['iowait'] / 100, '>6.1%'), 6, - self.__getExtCpuColor(cpu['iowait'])) + self.__getCpuColor(cpu['iowait'], stat = 'iowait')) y += 1 - # irq (Linux, FreeBSD) if 'irq' in cpu: + # irq (Linux, FreeBSD) self.term_window.addnstr(self.cpu_y + 3, self.cpu_x + 16, _("irq:"), 4) self.term_window.addnstr( @@ -1693,9 +1911,6 @@ class glancesScreen: loadblocksize = 15 - #~ test = max(0, (screen_x - (self.load_x + offset_x + loadblocksize))) - #~ self.term_window.addnstr(1, test, str(test), 3) - if (screen_y > self.load_y + 5 and screen_x > self.load_x + offset_x + loadblocksize): @@ -1746,9 +1961,6 @@ class glancesScreen: memblocksize = 45 extblocksize = 15 - #~ test = max(0, (screen_x - (self.mem_x + offset_x + + memblocksize - extblocksize))) - #~ self.term_window.addnstr(6, test, str(test), 3) - if (screen_y > self.mem_y + 5 and screen_x > self.mem_x + offset_x + memblocksize - extblocksize): @@ -1849,6 +2061,7 @@ class glancesScreen: self.mem_y, self.mem_x + offset_x + 38, format(memswap['percent'] / 100, '>6.1%'), 6) + # total self.term_window.addnstr(self.mem_y + 1, self.mem_x + offset_x + 32, @@ -1858,7 +2071,7 @@ class glancesScreen: format(self.__autoUnit(memswap['total']), '>5'), 8) # used - alert = self.__getMemAlert(memswap['used'], memswap['total']) + alert = self.__getSWAPAlert(memswap['used'], memswap['total']) logs.add(alert, "MEM swap", memswap['used'], proclist) self.term_window.addnstr(self.mem_y + 2, self.mem_x + offset_x + 32, @@ -2120,7 +2333,23 @@ class glancesScreen: return logcount + 3 return 0 - def displayProcess(self, processcount, processlist, log_count=0): + + def getProcessColumnColor(self, column, sortedby): + """ + Return the Process title colr depending of: + self.getProcessSortedBy() -> User sort choice + sortedby -> System last sort + """ + if ((self.getProcessSortedBy() == 'auto') and + (sortedby == column)): + return curses.A_UNDERLINE + elif (self.getProcessSortedBy() == column): + return self.title_color if self.hascolors else curses.A_UNDERLINE + else: + return 0 + + + def displayProcess(self, processcount, processlist, sortedby='', log_count=0): # Process if not processcount: return 0 @@ -2155,6 +2384,17 @@ class glancesScreen: str(other), _("other")), 42) + # Sort info + # self.getProcessSortedBy() -> User sort choice + # sortedby -> System last sort + if self.getProcessSortedBy() == 'auto': + sortmsg = _("sorted automatically") + else: + sortmsg = _("sorted by ") + sortedby + if screen_y > self.process_y + 4 and screen_x > process_x + 49 + len(sortmsg): + self.term_window.addnstr(self.process_y, 76, + sortmsg, len(sortmsg)) + # Processes detail if screen_y > self.process_y + 4 and screen_x > process_x + 49: tag_pid = False @@ -2191,13 +2431,13 @@ class glancesScreen: # CPU% self.term_window.addnstr( self.process_y + 2, process_x + 12, - format(_("CPU%"), '>5'), 5, curses.A_UNDERLINE - if self.getProcessSortedBy() == 'cpu_percent' else 0) + format(_("CPU%"), '>5'), 5, + self.getProcessColumnColor('cpu_percent', sortedby)) # MEM% self.term_window.addnstr( self.process_y + 2, process_x + 18, - format(_("MEM%"), '>5'), 5, curses.A_UNDERLINE - if self.getProcessSortedBy() == 'memory_percent' else 0) + format(_("MEM%"), '>5'), 5, + self.getProcessColumnColor('memory_percent', sortedby)) process_name_x = 24 # If screen space (X) is available then: # PID @@ -2234,17 +2474,19 @@ class glancesScreen: if tag_io: self.term_window.addnstr( self.process_y + 2, process_x + process_name_x, - format(_("IO_R"), '>5'), 5) + format(_("IOr/s"), '>5'), 5, + self.getProcessColumnColor('io_counters', sortedby)) process_name_x += 6 self.term_window.addnstr( self.process_y + 2, process_x + process_name_x, - format(_("IO_W"), '>5'), 5) + format(_("IOw/s"), '>5'), 5, + self.getProcessColumnColor('io_counters', sortedby)) process_name_x += 7 # PROCESS NAME self.term_window.addnstr( self.process_y + 2, process_x + process_name_x, _("NAME"), 12, curses.A_UNDERLINE - if self.getProcessSortedBy() == 'name' else 0) + if sortedby == 'name' else 0) # If there is no data to display... if not processlist: @@ -2326,27 +2568,29 @@ class glancesScreen: format(dtime, '>8'), 8) # IO if tag_io: - try: - if processlist[processes]['io_counters'] == {}: - self.term_window.addnstr( - self.process_y + 3 + processes, process_x + 56, - format("?", '>5'), 5) - self.term_window.addnstr( - self.process_y + 3 + processes, process_x + 62, - format("?", '>5'), 5) - else: - # Processes are only refresh every 2 refresh_time - #~ elapsed_time = max(1, self.__refresh_time) * 2 - io_read = processlist[processes]['io_counters'][2] - self.term_window.addnstr( - self.process_y + 3 + processes, process_x + 56, - format(self.__autoUnit(io_read), '>5'), 5) - io_write = processlist[processes]['io_counters'][3] - self.term_window.addnstr( - self.process_y + 3 + processes, process_x + 62, - format(self.__autoUnit(io_write), '>5'), 5) - except: - pass + if processlist[processes]['io_counters'][4] == 0: + # If io_tag == 0 (['io_counters'][4]) + # then do not diplay IO rate + self.term_window.addnstr( + self.process_y + 3 + processes, process_x + 56, + format("?", '>5'), 5) + self.term_window.addnstr( + self.process_y + 3 + processes, process_x + 62, + format("?", '>5'), 5) + else: + # If io_tag == 1 (['io_counters'][4]) + # then diplay IO rate + io_read = processlist[processes]['io_counters'][0] + io_read_old = processlist[processes]['io_counters'][2] + io_write = processlist[processes]['io_counters'][1] + io_write_old = processlist[processes]['io_counters'][3] + elapsed_time = max(1, self.__refresh_time) + self.term_window.addnstr( + self.process_y + 3 + processes, process_x + 56, + format(self.__autoUnit((io_read-io_read_old)/elapsed_time), '>5'), 5) + self.term_window.addnstr( + self.process_y + 3 + processes, process_x + 62, + format(self.__autoUnit((io_write-io_write_old)/elapsed_time), '>5'), 5) # display process command line max_process_name = screen_x - process_x - process_name_x @@ -2397,7 +2641,7 @@ class glancesScreen: self.term_window.addnstr(max(self.caption_y, screen_y - 1), self.caption_x, msg_help, len(msg_help)) - def displayHelp(self): + def displayHelp(self, core): """ Show the help panel """ @@ -2422,96 +2666,162 @@ class glancesScreen: _("Glances {0}").format(self.__version), 79, self.title_color if self.hascolors else 0) - self.term_window.addnstr(self.help_y + 2, self.help_x, - _("Captions: "), 79) - self.term_window.addnstr(self.help_y + 2, self.help_x + 10, + # Display the limits table + width = 8 + limits_table_x = self.help_x + limits_table_y = self.help_y + 2 + self.term_window.addnstr(limits_table_y, limits_table_x, + _("Limits > "), 8) + self.term_window.addnstr(limits_table_y, limits_table_x + 10, _(" OK "), 8, self.default_color) - self.term_window.addnstr(self.help_y + 2, self.help_x + 18, + self.term_window.addnstr(limits_table_y, limits_table_x + 18, _("CAREFUL "), 8, self.ifCAREFUL_color) - self.term_window.addnstr(self.help_y + 2, self.help_x + 26, + self.term_window.addnstr(limits_table_y, limits_table_x + 26, _("WARNING "), 8, self.ifWARNING_color) - self.term_window.addnstr(self.help_y + 2, self.help_x + 34, + self.term_window.addnstr(limits_table_y, limits_table_x + 34, _("CRITICAL"), 8, self.ifCRITICAL_color) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Default %"), + '0', + limits.getSTDCareful(), + limits.getSTDWarning(), + limits.getSTDCritical(), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("IOwait % "), + '0', + limits.getCPUCareful(stat = 'iowait'), + limits.getCPUWarning(stat = 'iowait'), + limits.getCPUCritical(stat = 'iowait'), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Load "), + '0', + limits.getLOADCareful()*core, + limits.getLOADWarning()*core, + limits.getLOADCritical()*core, + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Temp °C "), + '0', + limits.getTEMPCareful(), + limits.getTEMPWarning(), + limits.getTEMPCritical(), + width=width), 79) + # Key table (first column) width = 5 + key_table_x = self.help_x + key_table_y = limits_table_y + 2 self.term_window.addnstr( - self.help_y + 4, self.help_x, - "{0:^{width}} {1}".format( - _("Key"), _("Function"), width=width), - 79, self.title_underline_color if self.hascolors else 0) - self.term_window.addnstr( - self.help_y + 5, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( _("a"), _("Sort processes automatically"), width=width), - 79, self.ifCRITICAL_color2 if not psutil_get_cpu_percent_tag + 38, self.ifCRITICAL_color2 if not psutil_get_cpu_percent_tag else 0) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 6, self.help_x, - "{0:^{width}} {1}".format( - _("b"), _("Switch between bit/s or Byte/s for network IO"), - width=width), - 79, self.ifCRITICAL_color2 if not psutil_get_cpu_percent_tag - else 0) - self.term_window.addnstr( - self.help_y + 7, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( _("c"), _("Sort processes by CPU%"), width=width), - 79, self.ifCRITICAL_color2 if not psutil_get_cpu_percent_tag + 38, self.ifCRITICAL_color2 if not psutil_get_cpu_percent_tag else 0) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 8, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( - _("m"), _("Sort processes by MEM%"), width=width), 79) + _("m"), _("Sort processes by MEM%"), width=width), 38) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 9, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( - _("p"), _("Sort processes by name"), width=width), 79) + _("p"), _("Sort processes by name"), width=width), 38) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 10, self.help_x, + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("i"), _("Sort processes by IO Rate"), width=width), 38) + key_table_y += 1 + self.term_window.addnstr( + key_table_y, key_table_x, "{0:^{width}} {1}".format( _("d"), _("Show/hide disk I/O stats"), width=width), - 79, self.ifCRITICAL_color2 if not psutil_disk_io_tag else 0) + 38, self.ifCRITICAL_color2 if not psutil_disk_io_tag else 0) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 11, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( _("f"), _("Show/hide file system stats"), width=width), - 79, self.ifCRITICAL_color2 if not psutil_fs_usage_tag else 0) + 38, self.ifCRITICAL_color2 if not psutil_fs_usage_tag else 0) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 12, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( _("n"), _("Show/hide network stats"), width=width), - 79, self.ifCRITICAL_color2 if not psutil_network_io_tag else 0) + 38, self.ifCRITICAL_color2 if not psutil_network_io_tag else 0) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 13, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( - _("s"), _("Show/hide sensors stats (Linux-only)"), width=width), - 79, self.ifCRITICAL_color2 if not psutil_network_io_tag else 0) + _("s"), _("Show/hide sensors stats"), width=width), + 38, self.ifCRITICAL_color2 if not psutil_network_io_tag else 0) + key_table_y += 1 self.term_window.addnstr( - self.help_y + 14, self.help_x, + key_table_y, key_table_x, "{0:^{width}} {1}".format( - _("l"), _("Show/hide log messages"), width=width), 79) - self.term_window.addnstr( - self.help_y + 15, self.help_x, - "{0:^{width}} {1}".format( - _("w"), _("Delete finished warning logs messages"), width=width), 79) - self.term_window.addnstr( - self.help_y + 16, self.help_x, - "{0:^{width}} {1}".format( - _("x"), _("Delete finished warning and critical logs"), width=width), 79) - self.term_window.addnstr( - self.help_y + 17, self.help_x, - "{0:^{width}} {1}".format( - _("1"), _("Switch between global CPU and per core stats"), width=width), 79) - self.term_window.addnstr( - self.help_y + 18, self.help_x, - "{0:^{width}} {1}".format( - _("h"), _("Show/hide this help message"), width=width), 79) - self.term_window.addnstr( - self.help_y + 19, self.help_x, - "{0:^{width}} {1}".format( - _("q"), _("Quit (Esc and Ctrl-C also work)"), width=width), - 79) + _("l"), _("Show/hide log messages"), width=width), 38) + # Key table (second column) + width = 5 + key_table_x = self.help_x + 38 + key_table_y = limits_table_y + 2 + + self.term_window.addnstr( + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("b"), _("Bit/s or Byte/s for network IO"), + width=width), + 38, self.ifCRITICAL_color2 if not psutil_get_cpu_percent_tag + else 0) + key_table_y += 1 + self.term_window.addnstr( + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("w"), _("Delete warning logs"), width=width), 38) + key_table_y += 1 + self.term_window.addnstr( + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("x"), _("Delete warning and critical logs"), width=width), 38) + key_table_y += 1 + self.term_window.addnstr( + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("1"), _("Global CPU or Per Core stats"), width=width), 38) + key_table_y += 1 + self.term_window.addnstr( + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("h"), _("Show/hide this help message"), width=width), 38) + key_table_y += 1 + self.term_window.addnstr( + key_table_y, key_table_x, + "{0:^{width}} {1}".format( + _("q"), _("Quit (Esc and Ctrl-C also work)"), width=width), 38) + + def displayNow(self, now): # Display the current date and time (now...) - Center if not now: @@ -2870,11 +3180,13 @@ def printVersion(): def printSyntax(): printVersion() - print(_("Usage: glances [-f file] [-o output] [-t sec] [-h] [-v]")) + print(_("Usage: glances [-f file] [-o output] [-t sec] [-h] [-v] ...")) print("") print(_("\t-b\t\tDisplay network rate in Byte per second")) print(_("\t-B IP|NAME\tBind server to the given IP or host NAME")) print(_("\t-c @IP|host\tConnect to a Glances server")) + print(_("\t-C file\t\tPath to the configuration file (default: %s)") % + default_conf_file) print(_("\t-d\t\tDisable disk I/O module")) print(_("\t-e\t\tEnable the sensors module (Linux-only)")) print(_("\t-f file\t\tSet the output folder (HTML) or file (CSV)")) @@ -2939,6 +3251,9 @@ def main(): else: server_tag = False + # Default configuration file (if exist) + conf_file = default_conf_file + # Set the default refresh time refresh_time = 3 @@ -2948,11 +3263,11 @@ def main(): # Manage args try: - opts, args = getopt.getopt(sys.argv[1:], "B:bdemnho:f:t:vsc:p:", + opts, args = getopt.getopt(sys.argv[1:], "B:bdemnho:f:t:vsc:p:C:", ["bind", "bytepersec", "diskio", "mount", "sensors", "netrate", "help", "output", "file", "time", "version", "server", - "client", "port"]) + "client", "port", "config"]) except getopt.GetoptError as err: # Print help information and exit: print(str(err)) @@ -3016,6 +3331,8 @@ def main(): psutil_network_io_tag = False elif opt in ("-b", "--bytepersec"): network_bytepersec_tag = True + elif opt in ("-C", "--config"): + conf_file = arg else: printSyntax() sys.exit(0) @@ -3092,7 +3409,7 @@ def main(): sys.exit(2) # Init Limits - limits = glancesLimits() + limits = glancesLimits(conf_file) # Init Logs logs = glancesLogs() @@ -3106,7 +3423,7 @@ def main(): # Init the classical CLI # Init Limits - limits = glancesLimits() + limits = glancesLimits(conf_file) # Init Logs logs = glancesLogs() From 8eacbf4c54f7e6cd873721d4225cde29ac3ac8a2 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Wed, 9 Jan 2013 22:30:10 +0100 Subject: [PATCH 2/7] Add remarks on IOWait limits --- glances/conf/glances.conf | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/glances/conf/glances.conf b/glances/conf/glances.conf index e8948bf2..9a8712b1 100644 --- a/glances/conf/glances.conf +++ b/glances/conf/glances.conf @@ -17,10 +17,14 @@ system_careful=50 system_warning=70 system_critical=90 # Limits values for CPU iowait in % -# Defaults values if not defined: 40/60/80 -iowait_careful=40 -iowait_warning=60 -iowait_critical=80 +# Defaults values if not defined: TO BE DONE +# If your I/O wait percentage is greater than (1/# of CPU cores) +# then your CPUs are waiting a significant amount of time for the +# disk subsystem to catch up. +# Source: http://blog.scoutapp.com/articles/2011/02/10/understanding-disk-i-o-when-should-you-be-worried +iowait_careful=15 +iowait_warning=25 +iowait_critical=35 [load] # Value * Core From bf28f605407a616183002314d0fc206c3d05db13 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Thu, 10 Jan 2013 16:11:21 +0100 Subject: [PATCH 3/7] Add fct to define color/alert --- glances/conf/glances.conf | 12 ++ glances/glances.py | 249 ++++++++++++++++++++++++++------------ 2 files changed, 184 insertions(+), 77 deletions(-) diff --git a/glances/conf/glances.conf b/glances/conf/glances.conf index 9a8712b1..25de9cf1 100644 --- a/glances/conf/glances.conf +++ b/glances/conf/glances.conf @@ -60,3 +60,15 @@ critical=80 careful=50 warning=70 critical=90 + +[process] +# Limits values for CPU per process in % +# Defaults values if not defined: 50/70/90 +cpu_careful=50 +cpu_warning=70 +cpu_critical=90 +# Limits values for MEM per process in % +# Defaults values if not defined: 50/70/90 +mem_careful=50 +mem_warning=70 +mem_critical=90 diff --git a/glances/glances.py b/glances/glances.py index 3ba5630c..bf71aa32 100755 --- a/glances/glances.py +++ b/glances/glances.py @@ -224,7 +224,9 @@ class glancesLimits: 'MEM': [50, 70, 90], 'SWAP': [50, 70, 90], 'TEMP': [60, 70, 80], - 'FS': [50, 70, 90]} + 'FS': [50, 70, 90], + 'PROCESS_CPU': [50, 70, 90], + 'PROCESS_MEM': [50, 70, 90]} def __init__(self, conf_file = default_conf_file): # Open the configuration file @@ -273,6 +275,14 @@ class glancesLimits: self.__setLimits(config, 'filesystem', 'FS', 'careful') self.__setLimits(config, 'filesystem', 'FS', 'warning') self.__setLimits(config, 'filesystem', 'FS', 'critical') + if (config.has_section('process')): + # Process limits + self.__setLimits(config, 'process', 'PROCESS_CPU', 'cpu_careful') + self.__setLimits(config, 'process', 'PROCESS_CPU', 'cpu_warning') + self.__setLimits(config, 'process', 'PROCESS_CPU', 'cpu_critical') + self.__setLimits(config, 'process', 'PROCESS_MEM', 'mem_careful') + self.__setLimits(config, 'process', 'PROCESS_MEM', 'mem_warning') + self.__setLimits(config, 'process', 'PROCESS_MEM', 'mem_critical') def __setLimits(self, config, section, stat, alert): """ @@ -366,6 +376,15 @@ class glancesLimits: def getFSCritical(self): return self.getCritical('FS') + def getProcessCareful(self, stat = ''): + return self.getCareful('PROCESS_' + stat.upper()) + + def getProcessWarning(self, stat = ''): + return self.getWarning('PROCESS_' + stat.upper()) + + def getProcessCritical(self, stat = ''): + return self.getWarning('PROCESS_' + stat.upper()) + class glancesLogs: """ @@ -1422,37 +1441,6 @@ class glancesScreen: return "{0!s}".format(val) - def __getAlert(self, current=0, max=100): - # If current < CAREFUL of max then alert = OK - # If current > CAREFUL of max then alert = CAREFUL - # If current > WARNING of max then alert = WARNING - # If current > CRITICAL of max then alert = CRITICAL - try: - variable = (current * 100) / max - except ZeroDivisionError: - return 'DEFAULT' - - if variable > limits.getSTDCritical(): - return 'CRITICAL' - elif variable > limits.getSTDWarning(): - return 'WARNING' - elif variable > limits.getSTDCareful(): - return 'CAREFUL' - - return 'OK' - - def __getColor(self, current=0, max=100): - """ - Return colors for logged stats - """ - return self.__colors_list[self.__getAlert(current, max)] - - def __getColor2(self, current=0, max=100): - """ - Return colors for non logged stats - """ - return self.__colors_list2[self.__getAlert(current, max)] - def __getCpuAlert(self, current=0, max=100, stat = ''): # If current < CAREFUL of max then alert = OK # If current > CAREFUL of max then alert = CAREFUL @@ -1496,6 +1484,9 @@ class glancesScreen: def __getLoadColor(self, current=0, core=1): return self.__colors_list[self.__getLoadAlert(current, core)] + def __getLoadColor2(self, current=0, core=1): + return self.__colors_list2[self.__getLoadAlert(current, core)] + def __getMemAlert(self, current=0, max=100): # If current < CAREFUL of max then alert = OK # If current > CAREFUL of max then alert = CAREFUL @@ -1515,7 +1506,13 @@ class glancesScreen: return 'OK' - def __getSWAPAlert(self, current=0, max=100): + def __getMemColor(self, current=0, max=100): + return self.__colors_list[self.__getMemAlert(current, max)] + + def __getMemColor2(self, current=0, max=100): + return self.__colors_list2[self.__getMemAlert(current, max)] + + def __getSwapAlert(self, current=0, max=100): # If current < CAREFUL of max then alert = OK # If current > CAREFUL of max then alert = CAREFUL # If current > WARNING of max then alert = WARNING @@ -1534,14 +1531,11 @@ class glancesScreen: return 'OK' - def __getMemColor(self, current=0, max=100): - return self.__getColor(current, max) + def __getSwapColor(self, current=0, max=100): + return self.__colors_list[self.__getSwapAlert(current, max)] - def __getMemColor2(self, current=0, max=100): - return self.__getColor2(current, max) - - def __getNetColor(self, current=0, max=100): - return self.__getColor2(current, max) + def __getSwapColor2(self, current=0, max=100): + return self.__colors_list2[self.__getSwapAlert(current, max)] def __getFsAlert(self, current=0, max=100): # If current < CAREFUL of max then alert = OK @@ -1563,10 +1557,10 @@ class glancesScreen: return 'OK' def __getFsColor(self, current=0, max=100): - return self.__colors_list2[self.__getFsAlert(current, max)] + return self.__colors_list[self.__getFsAlert(current, max)] - def __getProcessColor(self, current=0, max=100): - return self.__getColor2(current, max) + def __getFsColor2(self, current=0, max=100): + return self.__colors_list2[self.__getFsAlert(current, max)] def __getSensorsAlert(self, current=0): # Alert for Sensors (temperature in degre) @@ -1586,10 +1580,47 @@ class glancesScreen: def __getSensorsColor(self, current=0): """ - Return color for Sensors temperature (non logged stats) + Return color for Sensors temperature + """ + return self.__colors_list[self.__getSensorsAlert(current)] + + def __getSensorsColor2(self, current=0): + """ + Return color for Sensors temperature """ return self.__colors_list2[self.__getSensorsAlert(current)] + def __getProcessAlert(self, current=0, max=100, stat = ''): + # If current < CAREFUL of max then alert = OK + # If current > CAREFUL of max then alert = CAREFUL + # If current > WARNING of max then alert = WARNING + # If current > CRITICAL of max then alert = CRITICAL + try: + variable = (current * 100) / max + except ZeroDivisionError: + return 'DEFAULT' + + if (variable > limits.getProcessCritical(stat = stat)): + return 'CRITICAL' + elif (variable > limits.getProcessWarning(stat = stat)): + return 'WARNING' + elif (variable > limits.getProcessCareful(stat = stat)): + return 'CAREFUL' + + return 'OK' + + def __getProcessCpuColor(self, current=0, max=100): + return self.__colors_list[self.__getProcessAlert(current, max, 'CPU')] + + def __getProcessCpuColor2(self, current=0, max=100): + return self.__colors_list2[self.__getProcessAlert(current, max, 'CPU')] + + def __getProcessMemColor(self, current=0, max=100): + return self.__colors_list[self.__getProcessAlert(current, max, 'MEM')] + + def __getProcessMemColor2(self, current=0, max=100): + return self.__colors_list2[self.__getProcessAlert(current, max, 'MEM')] + def __catchKey(self): # Get key self.pressedkey = self.term_window.getch() @@ -1845,20 +1876,18 @@ class glancesScreen: y = 1 # user self.term_window.addnstr(self.cpu_y + y, self.cpu_x, _("user:"), 5) - alert = self.__getCpuAlert(cpu['user'], stat = 'user') self.term_window.addnstr(self.cpu_y + y, self.cpu_x + 8, format(cpu['user'] / 100, '>6.1%'), 6, - self.__colors_list[alert]) + self.__getCpuColor(cpu['user'], stat = 'user')) y += 1 # system if 'system' in cpu: self.term_window.addnstr(self.cpu_y + y, self.cpu_x, _("system:"), 7) - alert = self.__getCpuAlert(cpu['system'], stat = 'system') self.term_window.addnstr(self.cpu_y + y, self.cpu_x + 8, format(cpu['system'] / 100, '>6.1%'), 6, - self.__colors_list[alert]) + self.__getCpuColor(cpu['system'], stat = 'system')) y += 1 # idle @@ -1936,7 +1965,7 @@ class glancesScreen: self.term_window.addnstr(self.load_y + 2, self.load_x + offset_x + 8, format(load['min5'], '>5.2f'), 5, - self.__colors_list[alert]) + self.__getLoadColor(load['min5'], core)) # 15 min self.term_window.addnstr(self.load_y + 3, @@ -1946,7 +1975,7 @@ class glancesScreen: self.term_window.addnstr(self.load_y + 3, self.load_x + offset_x + 8, format(load['min15'], '>5.2f'), 5, - self.__colors_list[alert]) + self.__getLoadColor(load['min15'], core)) # return the x offset to display mem return offset_x @@ -1989,7 +2018,7 @@ class glancesScreen: self.term_window.addnstr( self.mem_y + 2, self.mem_x + offset_x + 7, format(self.__autoUnit(mem['used']), '>5'), 5, - self.__colors_list[alert]) + self.__getMemColor(mem['used'], mem['total'])) # free self.term_window.addnstr(self.mem_y + 3, self.mem_x + offset_x, @@ -2071,7 +2100,7 @@ class glancesScreen: format(self.__autoUnit(memswap['total']), '>5'), 8) # used - alert = self.__getSWAPAlert(memswap['used'], memswap['total']) + alert = self.__getSwapAlert(memswap['used'], memswap['total']) logs.add(alert, "MEM swap", memswap['used'], proclist) self.term_window.addnstr(self.mem_y + 2, self.mem_x + offset_x + 32, @@ -2079,7 +2108,7 @@ class glancesScreen: self.term_window.addnstr( self.mem_y + 2, self.mem_x + offset_x + 39, format(self.__autoUnit(memswap['used']), '>5'), 8, - self.__colors_list[alert]) + self.__getSwapColor(memswap['used'], memswap['total'])) # free self.term_window.addnstr(self.mem_y + 3, @@ -2260,18 +2289,16 @@ class glancesScreen: self.fs_y + 1 + mounted, self.fs_x, fs[mounted]['mnt_point'], 8) - fs_usage = fs[mounted]['used'] - fs_size = fs[mounted]['size'] # used self.term_window.addnstr( self.fs_y + 1 + mounted, self.fs_x + 9, - format(self.__autoUnit(fs_usage), '>6'), 6, - self.__getFsColor(fs_usage, fs_size)) + format(self.__autoUnit(fs[mounted]['used']), '>6'), 6, + self.__getFsColor2(fs[mounted]['used'], fs[mounted]['size'])) # total self.term_window.addnstr( self.fs_y + 1 + mounted, self.fs_x + 17, - format(self.__autoUnit(fs_size), '>6'), 6) + format(self.__autoUnit(fs[mounted]['size']), '>6'), 6) return mounted + 3 return 0 @@ -2514,7 +2541,7 @@ class glancesScreen: self.term_window.addnstr( self.process_y + 3 + processes, process_x + 12, format(cpu_percent, '>5.1f'), 5, - self.__getProcessColor(cpu_percent)) + self.__getProcessCpuColor2(cpu_percent)) else: self.term_window.addnstr( self.process_y + 3 + processes, process_x, "N/A", 8) @@ -2523,7 +2550,7 @@ class glancesScreen: self.term_window.addnstr( self.process_y + 3 + processes, process_x + 18, format(memory_percent, '>5.1f'), 5, - self.__getProcessColor(memory_percent)) + self.__getProcessMemColor2(memory_percent)) # If screen space (X) is available then: # PID if tag_pid: @@ -2670,31 +2697,49 @@ class glancesScreen: width = 8 limits_table_x = self.help_x limits_table_y = self.help_y + 2 - self.term_window.addnstr(limits_table_y, limits_table_x, - _("Limits > "), 8) - self.term_window.addnstr(limits_table_y, limits_table_x + 10, - _(" OK "), 8, self.default_color) self.term_window.addnstr(limits_table_y, limits_table_x + 18, - _("CAREFUL "), 8, self.ifCAREFUL_color) + _(" OK "), 8, self.default_color) self.term_window.addnstr(limits_table_y, limits_table_x + 26, - _("WARNING "), 8, self.ifWARNING_color) + _("CAREFUL "), 8, self.ifCAREFUL_color) self.term_window.addnstr(limits_table_y, limits_table_x + 34, + _("WARNING "), 8, self.ifWARNING_color) + self.term_window.addnstr(limits_table_y, limits_table_x + 42, _("CRITICAL"), 8, self.ifCRITICAL_color) + #~ limits_table_y += 1 + #~ self.term_window.addnstr( + #~ limits_table_y, limits_table_x, + #~ "{0:16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + #~ _("Default %"), + #~ '0', + #~ limits.getSTDCareful(), + #~ limits.getSTDWarning(), + #~ limits.getSTDCritical(), + #~ width=width), 79) limits_table_y += 1 self.term_window.addnstr( limits_table_y, limits_table_x, - "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( - _("Default %"), + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("CPU user % "), '0', - limits.getSTDCareful(), - limits.getSTDWarning(), - limits.getSTDCritical(), + limits.getCPUCareful(stat = 'user'), + limits.getCPUWarning(stat = 'user'), + limits.getCPUCritical(stat = 'user'), width=width), 79) limits_table_y += 1 self.term_window.addnstr( limits_table_y, limits_table_x, - "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( - _("IOwait % "), + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("CPU system % "), + '0', + limits.getCPUCareful(stat = 'system'), + limits.getCPUWarning(stat = 'system'), + limits.getCPUCritical(stat = 'system'), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("CPU IOwait % "), '0', limits.getCPUCareful(stat = 'iowait'), limits.getCPUWarning(stat = 'iowait'), @@ -2703,8 +2748,8 @@ class glancesScreen: limits_table_y += 1 self.term_window.addnstr( limits_table_y, limits_table_x, - "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( - _("Load "), + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Load "), '0', limits.getLOADCareful()*core, limits.getLOADWarning()*core, @@ -2713,13 +2758,63 @@ class glancesScreen: limits_table_y += 1 self.term_window.addnstr( limits_table_y, limits_table_x, - "{0:^{width}} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( - _("Temp °C "), + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("RAM Memory % "), + '0', + limits.getMEMCareful(), + limits.getMEMWarning(), + limits.getMEMCritical(), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Swap memory %"), + '0', + limits.getSWAPCareful(), + limits.getSWAPWarning(), + limits.getSWAPCritical(), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Temp °C "), '0', limits.getTEMPCareful(), limits.getTEMPWarning(), limits.getTEMPCritical(), width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("Filesystem % "), + '0', + limits.getFSCareful(), + limits.getFSWarning(), + limits.getFSCritical(), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("CPU Process %"), + '0', + limits.getProcessCareful(stat = 'CPU'), + limits.getProcessWarning(stat = 'CPU'), + limits.getProcessCritical(stat = 'CPU'), + width=width), 79) + limits_table_y += 1 + self.term_window.addnstr( + limits_table_y, limits_table_x, + "{0:^16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( + _("MEM Process %"), + '0', + limits.getProcessCareful(stat = 'MEM'), + limits.getProcessWarning(stat = 'MEM'), + limits.getProcessCritical(stat = 'MEM'), + width=width), 79) # Key table (first column) width = 5 From 00bd5aad2b5f16f5a70626fc5231707b3bbe33dc Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Thu, 10 Jan 2013 16:15:43 +0100 Subject: [PATCH 4/7] Correct an issue on perCPU display --- glances/glances.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/glances/glances.py b/glances/glances.py index bf71aa32..eade4d6c 100755 --- a/glances/glances.py +++ b/glances/glances.py @@ -1816,7 +1816,7 @@ class glancesScreen: # Display CPU stats if screen_y > self.cpu_y + 5 and tag_percpu: - # display per-CPU stats when space is available + # Display per-CPU self.term_window.addnstr(self.cpu_y, self.cpu_x, _("PerCPU"), 6, self.title_color if self.hascolors else curses.A_UNDERLINE) @@ -1840,25 +1840,24 @@ class glancesScreen: format((100 - percpu[i]['idle']) / 100, '>6.1%'), 6) # user - alert = self.__getCpuAlert(percpu[i]['user']) self.term_window.addnstr( self.cpu_y + 1, self.cpu_x + 8 + i * 8, format(percpu[i]['user'] / 100, '>6.1%'), 6, - self.__colors_list2[alert]) + self.__getCpuColor2(percpu[i]['user'], stat = 'user')) # system - alert = self.__getCpuAlert(percpu[i]['system']) self.term_window.addnstr( self.cpu_y + 2, self.cpu_x + 8 + i * 8, format(percpu[i]['system'] / 100, '>6.1%'), 6, - self.__colors_list2[alert]) + self.__getCpuColor2(percpu[i]['system'], stat = 'system')) # idle self.term_window.addnstr( self.cpu_y + 3, self.cpu_x + 8 + i * 8, format(percpu[i]['idle'] / 100, '>6.1%'), 6) - # display CPU summary information + elif screen_y > self.cpu_y + 5 and screen_x > self.cpu_x + 18: + # display CPU summary information self.term_window.addnstr(self.cpu_y, self.cpu_x, _("CPU"), 3, self.title_color if self.hascolors else curses.A_UNDERLINE) From 68e84d435fa06a73e24381fe2b0e94df20e04a85 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Fri, 11 Jan 2013 09:46:52 +0100 Subject: [PATCH 5/7] Display IOWait on the PerCpu view --- NEWS | 3 ++- glances/conf/glances.conf | 25 +++++++----------- glances/glances.py | 55 ++++++++++++++++++++++++--------------- 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/NEWS b/NEWS index cf65ab5c..78576322 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,8 @@ Version 1.6 * Display limits in the help screen * Add per process IO (read and write) rate in B per second IO rate only available on Linux from a root account - * If CPU iowait alert then sort by processes by IO rate + * If CPU iowait alert then sort by processes by IO rate + * Per CPU display IOwait (if data is available) * Process column style auto (underline) or manual (bold) * Display a sort indicator (is space is available) * Change the table key in the help screen diff --git a/glances/conf/glances.conf b/glances/conf/glances.conf index 25de9cf1..3cbebba4 100644 --- a/glances/conf/glances.conf +++ b/glances/conf/glances.conf @@ -1,10 +1,3 @@ -[global] -# Defaults limits for all the stats in % -# Defaults values if not defined: 50/70/90 -careful=50 -warning=70 -critical=90 - [cpu] # Limits values for CPU user in % # Defaults values if not defined: 50/70/90 @@ -17,18 +10,20 @@ system_careful=50 system_warning=70 system_critical=90 # Limits values for CPU iowait in % -# Defaults values if not defined: TO BE DONE -# If your I/O wait percentage is greater than (1/# of CPU cores) -# then your CPUs are waiting a significant amount of time for the -# disk subsystem to catch up. +# Defaults values if not defined: 40/60/80 +# Not easy to tweek... # Source: http://blog.scoutapp.com/articles/2011/02/10/understanding-disk-i-o-when-should-you-be-worried -iowait_careful=15 -iowait_warning=25 -iowait_critical=35 +# http://blog.logicmonitor.com/2011/04/20/troubleshooting-server-performance-and-application-monitoring-a-real-example/ +# http://blog.developpeur-neurasthenique.fr/auto-hebergement-iowait-ma-tuer-1-2-vmstat-mpstat-atop-pidstat.html (FR) +iowait_careful=40 +iowait_warning=60 +iowait_critical=80 [load] # Value * Core -# Defaults values if not defined: 0.7/1.0/5.0 per Core +# Defaults values if not defined: 0.7/1.0/5.0 per Core +# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages +# http://www.linuxjournal.com/article/9001 careful=0.7 warning=1.0 critical=5.0 diff --git a/glances/glances.py b/glances/glances.py index eade4d6c..3ae9d681 100755 --- a/glances/glances.py +++ b/glances/glances.py @@ -313,6 +313,7 @@ class glancesLimits: def getCritical(self, stat): return self.__limits_list[stat][2] + # TO BE DELETED AFTER THE HTML output refactoring def getSTDCareful(self): return self.getCareful('STD') @@ -321,6 +322,7 @@ class glancesLimits: def getSTDCritical(self): return self.getCritical('STD') + # /TO BE DELETED AFTER THE HTML output refactoring def getCPUCareful(self, stat): return self.getCareful('CPU_' + stat.upper()) @@ -904,6 +906,15 @@ class GlancesStats: if hasattr(self.percputime_new[i], 'nice'): cpu['nice'] = (self.percputime_new[i].nice - self.percputime_old[i].nice) * perpercent[i] + if hasattr(self.percputime_new[i], 'iowait'): + cpu['iowait'] = (self.percputime_new[i].iowait - + self.percputime_old[i].iowait) * perpercent[i] + if hasattr(self.percputime_new[i], 'irq'): + cpu['irq'] = (self.percputime_new[i].irq - + self.percputime_old[i].irq) * perpercent[i] + if hasattr(self.percputime_new[i], 'softirq'): + cpu['softirq'] = (self.percputime_new[i].softirq - + self.percputime_old[i].softirq) * perpercent[i] self.percpu.append(cpu) self.percputime_old = self.percputime_new self.percputime_total_old = self.percputime_total_new @@ -1827,11 +1838,15 @@ class glancesScreen: return 0 self.term_window.addnstr(self.cpu_y + 1, self.cpu_x, - _("user:"), 5) + _("user:"), 7) self.term_window.addnstr(self.cpu_y + 2, self.cpu_x, _("system:"), 7) - self.term_window.addnstr(self.cpu_y + 3, self.cpu_x, - _("idle:"), 5) + if 'iowait' in percpu[0]: + self.term_window.addnstr(self.cpu_y + 3, self.cpu_x, + _("iowait:"), 7) + else: + self.term_window.addnstr(self.cpu_y + 3, self.cpu_x, + _("idle:"), 7) for i in range(len(percpu)): # percentage of usage @@ -1851,10 +1866,18 @@ class glancesScreen: format(percpu[i]['system'] / 100, '>6.1%'), 6, self.__getCpuColor2(percpu[i]['system'], stat = 'system')) - # idle - self.term_window.addnstr( - self.cpu_y + 3, self.cpu_x + 8 + i * 8, - format(percpu[i]['idle'] / 100, '>6.1%'), 6) + if 'iowait' in percpu[i]: + # iowait + self.term_window.addnstr( + self.cpu_y + 3, self.cpu_x + 8 + i * 8, + format(percpu[i]['iowait'] / 100, '>6.1%'), 6, + self.__getCpuColor2(percpu[i]['iowait'], stat = 'iowait')) + + else: + # idle + self.term_window.addnstr( + self.cpu_y + 3, self.cpu_x + 8 + i * 8, + format(percpu[i]['idle'] / 100, '>6.1%'), 6) elif screen_y > self.cpu_y + 5 and screen_x > self.cpu_x + 18: # display CPU summary information @@ -2704,16 +2727,7 @@ class glancesScreen: _("WARNING "), 8, self.ifWARNING_color) self.term_window.addnstr(limits_table_y, limits_table_x + 42, _("CRITICAL"), 8, self.ifCRITICAL_color) - #~ limits_table_y += 1 - #~ self.term_window.addnstr( - #~ limits_table_y, limits_table_x, - #~ "{0:16} {1:^{width}}{2:^{width}}{3:^{width}}{4:^{width}}".format( - #~ _("Default %"), - #~ '0', - #~ limits.getSTDCareful(), - #~ limits.getSTDWarning(), - #~ limits.getSTDCritical(), - #~ width=width), 79) + limits_table_y += 1 self.term_window.addnstr( limits_table_y, limits_table_x, @@ -3274,10 +3288,10 @@ def printVersion(): def printSyntax(): printVersion() - print(_("Usage: glances [-f file] [-o output] [-t sec] [-h] [-v] ...")) - print("") + print(_("Usage: glances [opt]")) + print(_(" with opt:")) print(_("\t-b\t\tDisplay network rate in Byte per second")) - print(_("\t-B IP|NAME\tBind server to the given IP or host NAME")) + print(_("\t-B @IP|host\tBind server to the given IP or host NAME")) print(_("\t-c @IP|host\tConnect to a Glances server")) print(_("\t-C file\t\tPath to the configuration file (default: %s)") % default_conf_file) @@ -3299,7 +3313,6 @@ def printSyntax(): def end(): if server_tag: # Stop the server loop - #~ print(_("Stop Glances server")) server.server_close() else: if client_tag: From 9f3184f48b82c561d6f9752690dfde4c95cb0a80 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Fri, 11 Jan 2013 10:04:59 +0100 Subject: [PATCH 6/7] Add comments --- glances/glances.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glances/glances.py b/glances/glances.py index 3ae9d681..7f5d73ee 100755 --- a/glances/glances.py +++ b/glances/glances.py @@ -1866,6 +1866,8 @@ class glancesScreen: format(percpu[i]['system'] / 100, '>6.1%'), 6, self.__getCpuColor2(percpu[i]['system'], stat = 'system')) + # If the IOWait stat is available then display it + # else display the IDLE stat if 'iowait' in percpu[i]: # iowait self.term_window.addnstr( From 93596379d99b47f19c1cf171b49bdd4e25c04eba Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Fri, 11 Jan 2013 20:00:10 +0100 Subject: [PATCH 7/7] New release for the french file translation --- glances/glances.py | 3 +- i18n/es/LC_MESSAGES/glances.mo | Bin 934 -> 934 bytes i18n/es/LC_MESSAGES/glances.po | 395 +++++++++++++---------- i18n/fr/LC_MESSAGES/glances.mo | Bin 3422 -> 7709 bytes i18n/fr/LC_MESSAGES/glances.po | 517 +++++++++++++++++------------- i18n/glances.pot | 395 +++++++++++++---------- i18n/it/LC_MESSAGES/glances.mo | Bin 853 -> 853 bytes i18n/it/LC_MESSAGES/glances.po | 395 +++++++++++++---------- i18n/pt_BR/LC_MESSAGES/glances.mo | Bin 924 -> 924 bytes i18n/pt_BR/LC_MESSAGES/glances.po | 395 +++++++++++++---------- setup.py | 6 +- 11 files changed, 1189 insertions(+), 917 deletions(-) diff --git a/glances/glances.py b/glances/glances.py index 7f5d73ee..58c1aa91 100755 --- a/glances/glances.py +++ b/glances/glances.py @@ -3269,6 +3269,7 @@ class GlancesClient(): print(_("Error: Connection to server failed")) sys.exit(-1) else: + # !!! TO DO FOR VERSION 1.5.x and 1.6 return __version__[:3] == client_version def client_get(self): @@ -3400,7 +3401,7 @@ def main(): try: arg except NameError: - print(_("Error: -c flag need an argument (server IP address/name")) + print(_("Error: -c flag need an argument (server IP address/name)")) sys.exit(2) server_ip = arg elif opt in ("-p", "--port"): diff --git a/i18n/es/LC_MESSAGES/glances.mo b/i18n/es/LC_MESSAGES/glances.mo index d62b71de4903d15bb5d93eef6cd57608c48aad22..f4c30294493107785e1595f27e7f8a8b5dfd1432 100644 GIT binary patch delta 26 hcmZ3+zKngtUq)VIT?0d1Lqi2aODj{$&0I`#7y)TL2J`>` delta 26 gcmZ3+zKngtUq)UdT|*!;Q7|yHGBw)F#WaTz0BG_C=l}o! diff --git a/i18n/es/LC_MESSAGES/glances.po b/i18n/es/LC_MESSAGES/glances.po index 2e63bee9..5a607d30 100644 --- a/i18n/es/LC_MESSAGES/glances.po +++ b/i18n/es/LC_MESSAGES/glances.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: GLANCES 1.3.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-14 01:52+0100\n" +"POT-Creation-Date: 2013-01-11 19:59+0100\n" "PO-Revision-Date: 2012-01-12 19:07+0100\n" "Last-Translator: Sebastián Moreno \n" "Language-Team: Spanish\n" @@ -17,564 +17,613 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: glances/glances.py:68 +#: glances/glances.py:76 msgid "Curses module not found. Glances cannot start." msgstr "" -#: glances/glances.py:75 +#: glances/glances.py:83 msgid "PsUtil module not found. Glances cannot start." msgstr "" -#: glances/glances.py:80 +#: glances/glances.py:88 #, python-format msgid "PsUtil version %s detected." msgstr "" -#: glances/glances.py:81 +#: glances/glances.py:89 msgid "PsUtil 0.4.1 or higher is needed. Glances cannot start." msgstr "" -#: glances/glances.py:1062 +#: glances/glances.py:1319 msgid "Error: Cannot init the curses library.\n" msgstr "" -#: glances/glances.py:1414 +#: glances/glances.py:1777 msgid "{0} {1} with {2} {3} on {4}" msgstr "" -#: glances/glances.py:1419 +#: glances/glances.py:1782 msgid "{0} {1} {2} on {3}" msgstr "" -#: glances/glances.py:1463 +#: glances/glances.py:1831 msgid "PerCPU" msgstr "" -#: glances/glances.py:1469 glances/glances.py:1515 glances/glances.py:1795 -#: glances/glances.py:1883 glances/glances.py:2143 +#: glances/glances.py:1837 glances/glances.py:1892 glances/glances.py:2166 +#: glances/glances.py:2258 glances/glances.py:2545 msgid "Compute data..." msgstr "" -#: glances/glances.py:1473 glances/glances.py:1525 +#: glances/glances.py:1841 glances/glances.py:1902 msgid "user:" msgstr "" -#: glances/glances.py:1475 glances/glances.py:1536 +#: glances/glances.py:1843 glances/glances.py:1911 msgid "system:" msgstr "" -#: glances/glances.py:1477 glances/glances.py:1545 -msgid "idle:" -msgstr "" - -#: glances/glances.py:1509 -msgid "CPU" -msgstr "" - -#: glances/glances.py:1557 -msgid "nice:" -msgstr "" - -#: glances/glances.py:1566 +#: glances/glances.py:1846 glances/glances.py:1939 msgid "iowait:" msgstr "" -#: glances/glances.py:1576 +#: glances/glances.py:1849 glances/glances.py:1918 +msgid "idle:" +msgstr "" + +#: glances/glances.py:1886 +msgid "CPU" +msgstr "" + +#: glances/glances.py:1930 +msgid "nice:" +msgstr "" + +#: glances/glances.py:1949 msgid "irq:" msgstr "" -#: glances/glances.py:1601 +#: glances/glances.py:1971 msgid "Load" msgstr "Carga" -#: glances/glances.py:1605 +#: glances/glances.py:1975 msgid "-core" msgstr "" -#: glances/glances.py:1609 +#: glances/glances.py:1979 msgid "1 min:" msgstr "1 minuto:" -#: glances/glances.py:1616 +#: glances/glances.py:1986 msgid "5 min:" msgstr "" -#: glances/glances.py:1626 +#: glances/glances.py:1996 msgid "15 min:" msgstr "" -#: glances/glances.py:1655 +#: glances/glances.py:2022 msgid "Mem" msgstr "Mem" -#: glances/glances.py:1665 glances/glances.py:1750 +#: glances/glances.py:2032 glances/glances.py:2121 msgid "total:" msgstr "" -#: glances/glances.py:1674 glances/glances.py:1760 +#: glances/glances.py:2041 glances/glances.py:2131 msgid "used:" msgstr "" -#: glances/glances.py:1682 glances/glances.py:1769 +#: glances/glances.py:2049 glances/glances.py:2140 msgid "free:" msgstr "" -#: glances/glances.py:1696 +#: glances/glances.py:2063 msgid "active:" msgstr "" -#: glances/glances.py:1706 +#: glances/glances.py:2073 msgid "inactive:" msgstr "" -#: glances/glances.py:1716 +#: glances/glances.py:2083 msgid "buffers:" msgstr "" -#: glances/glances.py:1726 +#: glances/glances.py:2093 msgid "cached:" msgstr "" -#: glances/glances.py:1738 +#: glances/glances.py:2108 msgid "Swap" msgstr "Intercambio" -#: glances/glances.py:1785 +#: glances/glances.py:2156 msgid "Network" msgstr "" -#: glances/glances.py:1788 +#: glances/glances.py:2159 msgid "Rx/s" msgstr "" -#: glances/glances.py:1790 +#: glances/glances.py:2161 msgid "Tx/s" msgstr "" -#: glances/glances.py:1844 +#: glances/glances.py:2218 msgid "Sensors" msgstr "" -#: glances/glances.py:1847 +#: glances/glances.py:2221 msgid "°C" msgstr "" -#: glances/glances.py:1872 +#: glances/glances.py:2247 msgid "Disk I/O" msgstr "Lectura/Escritura a disco" -#: glances/glances.py:1876 +#: glances/glances.py:2251 msgid "In/s" msgstr "" -#: glances/glances.py:1878 +#: glances/glances.py:2253 msgid "Out/s" msgstr "" -#: glances/glances.py:1919 +#: glances/glances.py:2294 msgid "Mount" msgstr "Montaje" -#: glances/glances.py:1923 +#: glances/glances.py:2298 msgid "Used" msgstr "Usado" -#: glances/glances.py:1925 +#: glances/glances.py:2300 msgid "Total" msgstr "Total" -#: glances/glances.py:1969 +#: glances/glances.py:2342 msgid "WARNING|CRITICAL logs for CPU|LOAD|MEM" msgstr "" -#: glances/glances.py:1971 +#: glances/glances.py:2344 msgid " (lasts " msgstr "" -#: glances/glances.py:1972 +#: glances/glances.py:2345 msgid " entries)" msgstr "" -#: glances/glances.py:1974 +#: glances/glances.py:2347 msgid " (one entry)" msgstr "" -#: glances/glances.py:2032 +#: glances/glances.py:2421 msgid "Processes" msgstr "" -#: glances/glances.py:2043 +#: glances/glances.py:2432 msgid "running" msgstr "" -#: glances/glances.py:2045 +#: glances/glances.py:2434 msgid "sleeping" msgstr "" -#: glances/glances.py:2047 +#: glances/glances.py:2436 msgid "other" msgstr "" -#: glances/glances.py:2077 +#: glances/glances.py:2442 +msgid "sorted automatically" +msgstr "" + +#: glances/glances.py:2444 +msgid "sorted by " +msgstr "" + +#: glances/glances.py:2477 msgid "VIRT" msgstr "" -#: glances/glances.py:2081 +#: glances/glances.py:2481 msgid "RES" msgstr "" -#: glances/glances.py:2085 +#: glances/glances.py:2485 msgid "CPU%" msgstr "" -#: glances/glances.py:2090 +#: glances/glances.py:2490 msgid "MEM%" msgstr "" -#: glances/glances.py:2098 +#: glances/glances.py:2498 msgid "PID" msgstr "" -#: glances/glances.py:2104 +#: glances/glances.py:2504 msgid "USER" msgstr "" -#: glances/glances.py:2110 +#: glances/glances.py:2510 msgid "NI" msgstr "" -#: glances/glances.py:2116 +#: glances/glances.py:2516 msgid "S" msgstr "" -#: glances/glances.py:2122 +#: glances/glances.py:2522 msgid "TIME+" msgstr "" -#: glances/glances.py:2128 -msgid "IO_R" +#: glances/glances.py:2528 +msgid "IOr/s" msgstr "" -#: glances/glances.py:2132 -msgid "IO_W" +#: glances/glances.py:2533 +msgid "IOw/s" msgstr "" -#: glances/glances.py:2137 +#: glances/glances.py:2539 msgid "NAME" msgstr "" -#: glances/glances.py:2224 glances/glances.py:2227 -msgid "A_DENY" -msgstr "" - -#: glances/glances.py:2269 +#: glances/glances.py:2673 msgid "Connected to" msgstr "" -#: glances/glances.py:2272 +#: glances/glances.py:2676 msgid "Disconnected from" msgstr "" -#: glances/glances.py:2274 +#: glances/glances.py:2678 msgid "Press 'h' for help" msgstr "" -#: glances/glances.py:2307 +#: glances/glances.py:2711 msgid "Glances {0} with PsUtil {1}" msgstr "" -#: glances/glances.py:2313 +#: glances/glances.py:2717 msgid "Glances {0}" msgstr "" -#: glances/glances.py:2317 -msgid "Captions: " -msgstr "" - -#: glances/glances.py:2319 +#: glances/glances.py:2725 msgid " OK " msgstr " BUENO " -#: glances/glances.py:2321 +#: glances/glances.py:2727 msgid "CAREFUL " msgstr " CUIDADO " -#: glances/glances.py:2323 +#: glances/glances.py:2729 msgid "WARNING " msgstr " ATENCIÓN " -#: glances/glances.py:2325 +#: glances/glances.py:2731 msgid "CRITICAL" msgstr "CRÍTICA " -#: glances/glances.py:2331 -msgid "Key" +#: glances/glances.py:2737 +msgid "CPU user % " msgstr "" -#: glances/glances.py:2331 -msgid "Function" +#: glances/glances.py:2747 +msgid "CPU system % " msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2757 +msgid "CPU IOwait % " +msgstr "" + +#: glances/glances.py:2767 +msgid "Load " +msgstr "" + +#: glances/glances.py:2777 +msgid "RAM Memory % " +msgstr "" + +#: glances/glances.py:2787 +msgid "Swap memory %" +msgstr "" + +#: glances/glances.py:2797 +msgid "Temp °C " +msgstr "" + +#: glances/glances.py:2807 +msgid "Filesystem % " +msgstr "" + +#: glances/glances.py:2817 +msgid "CPU Process %" +msgstr "" + +#: glances/glances.py:2827 +msgid "MEM Process %" +msgstr "" + +#: glances/glances.py:2841 msgid "a" msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2841 msgid "Sort processes automatically" msgstr "" -#: glances/glances.py:2342 -msgid "b" -msgstr "" - -#: glances/glances.py:2342 -msgid "Switch between bit/s or Byte/s for network IO" -msgstr "" - -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "c" msgstr "" -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "Sort processes by CPU%" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "m" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "Sort processes by MEM%" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "p" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "Sort processes by name" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2865 +msgid "i" +msgstr "" + +#: glances/glances.py:2865 +msgid "Sort processes by IO Rate" +msgstr "" + +#: glances/glances.py:2870 msgid "d" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2870 msgid "Show/hide disk I/O stats" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "f" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "Show/hide file system stats" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "n" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "Show/hide network stats" msgstr "" -#: glances/glances.py:2378 +#: glances/glances.py:2888 msgid "s" msgstr "" -#: glances/glances.py:2378 -msgid "Show/hide sensors stats (Linux-only)" +#: glances/glances.py:2888 +msgid "Show/hide sensors stats" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "l" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "Show/hide log messages" msgstr "" -#: glances/glances.py:2387 +#: glances/glances.py:2904 +msgid "b" +msgstr "" + +#: glances/glances.py:2904 +msgid "Bit/s or Byte/s for network IO" +msgstr "" + +#: glances/glances.py:2912 msgid "w" msgstr "" -#: glances/glances.py:2387 -msgid "Delete finished warning logs messages" +#: glances/glances.py:2912 +msgid "Delete warning logs" msgstr "" -#: glances/glances.py:2391 +#: glances/glances.py:2917 msgid "x" msgstr "" -#: glances/glances.py:2391 -msgid "Delete finished warning and critical logs" +#: glances/glances.py:2917 +msgid "Delete warning and critical logs" msgstr "" -#: glances/glances.py:2395 +#: glances/glances.py:2922 msgid "1" msgstr "" -#: glances/glances.py:2395 -msgid "Switch between global CPU and per core stats" +#: glances/glances.py:2922 +msgid "Global CPU or Per Core stats" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "h" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "Show/hide this help message" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "q" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "Quit (Esc and Ctrl-C also work)" msgstr "" -#: glances/glances.py:2413 +#: glances/glances.py:2942 glances/glances.py:3228 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d.%m.%Y %H:%M:%S" -#: glances/glances.py:2702 +#: glances/glances.py:3261 msgid "Error: creating client socket" msgstr "" -#: glances/glances.py:2710 +#: glances/glances.py:3269 msgid "Error: Connection to server failed" msgstr "" -#: glances/glances.py:2729 +#: glances/glances.py:3289 msgid "Glances version" msgstr "" -#: glances/glances.py:2734 -msgid "Usage: glances [-f file] [-o output] [-t sec] [-h] [-v]" +#: glances/glances.py:3294 +msgid "Usage: glances [opt]" msgstr "" -#: glances/glances.py:2736 +#: glances/glances.py:3295 +msgid " with opt:" +msgstr "" + +#: glances/glances.py:3296 msgid "\t-b\t\tDisplay network rate in Byte per second" msgstr "" -#: glances/glances.py:2737 -msgid "\t-B IP|NAME\tBind server to the given IP or host NAME" +#: glances/glances.py:3297 +msgid "\t-B @IP|host\tBind server to the given IP or host NAME" msgstr "" -#: glances/glances.py:2738 +#: glances/glances.py:3298 msgid "\t-c @IP|host\tConnect to a Glances server" msgstr "" -#: glances/glances.py:2739 +#: glances/glances.py:3299 +#, python-format +msgid "\t-C file\t\tPath to the configuration file (default: %s)" +msgstr "" + +#: glances/glances.py:3301 msgid "\t-d\t\tDisable disk I/O module" msgstr "" -#: glances/glances.py:2740 +#: glances/glances.py:3302 msgid "\t-e\t\tEnable the sensors module (Linux-only)" msgstr "" -#: glances/glances.py:2741 +#: glances/glances.py:3303 msgid "\t-f file\t\tSet the output folder (HTML) or file (CSV)" msgstr "" -#: glances/glances.py:2742 +#: glances/glances.py:3304 msgid "\t-h\t\tDisplay the syntax and exit" msgstr "" -#: glances/glances.py:2743 +#: glances/glances.py:3305 msgid "\t-m\t\tDisable mount module" msgstr "" -#: glances/glances.py:2744 +#: glances/glances.py:3306 msgid "\t-n\t\tDisable network module" msgstr "" -#: glances/glances.py:2745 +#: glances/glances.py:3307 msgid "\t-o output\tDefine additional output (available: HTML or CSV)" msgstr "" -#: glances/glances.py:2746 +#: glances/glances.py:3308 #, python-format msgid "\t-p PORT\t\tDefine the client or server TCP port (default: %d)" msgstr "" -#: glances/glances.py:2748 +#: glances/glances.py:3310 msgid "\t-s\t\tRun Glances in server mode" msgstr "" -#: glances/glances.py:2749 +#: glances/glances.py:3311 #, python-format msgid "\t-t sec\t\tSet the refresh time in seconds (default: %d)" msgstr "" -#: glances/glances.py:2751 +#: glances/glances.py:3313 msgid "\t-v\t\tDisplay the version and exit" msgstr "" -#: glances/glances.py:2832 +#: glances/glances.py:3396 msgid "Error: -B flag need an argument (bind IP address)" msgstr "" -#: glances/glances.py:2840 -msgid "Error: -c flag need an argument (server IP address/name" +#: glances/glances.py:3404 +msgid "Error: -c flag need an argument (server IP address/name)" msgstr "" -#: glances/glances.py:2851 +#: glances/glances.py:3415 #, python-format msgid "Error: Unknown output %s" msgstr "" -#: glances/glances.py:2857 +#: glances/glances.py:3421 msgid "Error: PySensors library not found" msgstr "" -#: glances/glances.py:2862 +#: glances/glances.py:3426 msgid "Error: Sensors module is only available on Linux" msgstr "" -#: glances/glances.py:2870 +#: glances/glances.py:3434 msgid "Error: Refresh time should be a positive integer" msgstr "" -#: glances/glances.py:2887 +#: glances/glances.py:3453 msgid "Error: Can not use both -s and -c flag" msgstr "" -#: glances/glances.py:2890 +#: glances/glances.py:3456 msgid "Error: Can not use both -s and -o flag" msgstr "" -#: glances/glances.py:2895 +#: glances/glances.py:3461 msgid "Error: Can not use both -c and -o flag" msgstr "" -#: glances/glances.py:2900 +#: glances/glances.py:3466 msgid "Error: Need Jinja2 library to export into HTML" msgstr "" -#: glances/glances.py:2901 +#: glances/glances.py:3467 msgid "Try to install the python-jinja2 package" msgstr "" -#: glances/glances.py:2906 +#: glances/glances.py:3472 msgid "Error: HTML export (-o html) needoutput folder definition (-f )" msgstr "" -#: glances/glances.py:2912 +#: glances/glances.py:3478 msgid "Error: Need CSV library to export into CSV" msgstr "" -#: glances/glances.py:2917 +#: glances/glances.py:3483 msgid "Error: CSV export (-o csv) need output file definition (-f )" msgstr "" -#: glances/glances.py:2939 +#: glances/glances.py:3505 msgid "Glances server is running on" msgstr "" -#: glances/glances.py:2952 +#: glances/glances.py:3518 msgid "Error: The server version is not compatible" msgstr "" diff --git a/i18n/fr/LC_MESSAGES/glances.mo b/i18n/fr/LC_MESSAGES/glances.mo index 14f8caa74e6a658f66b9987c04a7e040b89e2c82..da57942e88aebb8e2e2f4ce0ccc0599ce8ab7b98 100644 GIT binary patch literal 7709 zcmbuDYm8iF8OL8PYIjjVKtK_AQJ0+pv$wXiozlv7x@{NtGVIPm5N~H^&g`7_%sIok zY&&U-AG}3PB!1w7K@&{)-~uK_G>G_#iP5N0i6V(H`axr2f-!2Meo*7@dCz-hX1Cj7 z@T8~zIp@5W=Y6jKXMc0`<&P<@D)+m%zk8`t4}%|k1OIX9Hz~CTycN6)d;q)?{5)6y zUjSv^@4-93OLi!=8!UnvTm|0&ejL0J{4#hq_`JoxgSYU!YbaZP8N8L}&w_kX&wy_R zzXkG7y~uyV;E%z#fvtKc&)esh!OMC6tHpnSs9OCCd?R@ITiF}D0z?JsW^gZ90LQ?Og0kMD zpy>H&Q0D&#l>L8hzrPAz$MX)9cs+OvDD(D$BG)n~-`k+r^V9bED;B>E7I^wuUP=`QNr{+MB_aTriRRa`1>wp^k94PvG2E-Lq7n}iqX1`y@N3qXdP}X|@ z6n!*6iI+Aga(xYa2>c5;4bEdM!AC8=1WxdL4aO~kN5EAu0>wTrgLi=c0Y|~xG3G9C z36ym{1(v`cfMeig@62!t6hC!9vBSqeL{N`|V()K&mx0fL;+HRgV&@k@wo*R??hYgZn1%!<0$u4++qXqpAxrRvi8<%ffwRiB8SK*_FClL!!5QJ zd*YtPUqqMh=aw_bHP3y_{L1`Za^8LRxnfc5ExHr=Mc25dn&p;DoByrP^ILpWF7a9M z^R1WYayPf=My})B;=gi9{7iB0Oej?XFZn3FcxV5@ResC4I4{+Zr z5B9=6Ox-vF?&n_O7Jn39ldH}|;9>6DxJggyecYJM_<{J6Tzk3ik{?6G!}^}t z%GqWZCqsw5psr&#T6ZIzggR-udd*vR13g>OVWee@UYMSrVOCi;Jl`D}syInAA6pB9 zhPReRPU3}u`K}9fx8bCIQqm*wPNuC64IS~~w(oRw;3lWS=%i-2tGz%U?tpD}j$Ib2 zGq~25tQ-b`TT5goM<4T@pytL_QU=z|s?MtK>be)7)U)G@x)s(_-{m7h&IIP0oF{gJ zIE-TZSr_KKAU$0S1HU8UHSDRDUAAI$m?rHs(T&irBUs^hb$)KAXhP1e3+3heWm2<$ zCbL5)NSxE!L6z=lFJVBdFJ3E5gQPE8(EpOFqbGN0cON?9HoU;qPQC7lVjVvhtKh6V zo-ao$X%S5%vof`HWpSy>>e*b8tLA$ydo#vbxLU60b{HjtMykt!;-R6XH0Y@r+t?Y% zCK^q6t_=<4N{ZY@b`*D{98>=&Q6?D}Rs;bgJ+Nl#I_;5%^=Yo!Yz=SA2EqZssD zyhoq%@U^g=l+?(B#gSHVq^?JfmqzAGBg^WrmyE}9IB_F>HTapUbaqjd!xo0bJ)FcD z8yn-<_>)`5qf|MKV%#ayybeM!cpB8ldK#!XfxL|qCrZZD5!ZKF>XZ`&Ua)55uSJ-q zhGqP4E#5jHd*{V?wfHc5Hlnblhy&xPY9@-psH6$RhVQH)H6tAK60M~zu~=bM!jcfg z15h-Y$Y<0pG{f4fKW98}T5fM5PJ(Y{wl9Xd7O(Hjw$1%r+?&Yt0^@PIKw#W0K7Xjc z1QLo)(%99jA$B2J#gZ&1r^rPtpEoSdhGn9^=CJctlRZT&6P~rqaK5)1IZKT|@kgDmFH(}H>3*TaHXOY~`lkPYp!UchfYt53CF};bEAAhzM^$? zkBA}j>0Tb;QJajIPpF!dX$nFfuS^m_YD5%?p5&8{T?tMG;i(|cP9t&tp%%G}Bvfn) zio@DTH&L6@xMtlb4NORdLGR<4iE~-pSK^h#^Yxj@b9@U|iM4WNMFPG;W-f;jsXcL$ zSj~k_U6~@akQErk0EViH#Eu?qj+)%ibp1B3Lh1;yuk7j*W4p&DWznX$)?{5dD+YEi zm<#N@|21{k;khbDVxlZDIblrQm*UlhnK+B1auWFzS;vn*+soX;os)V{LK7z6C{DDYSfVc^8&>5eUk&)ounBC#S>XvwVm2Y zPNr6tXO`589I~X>EM0hr((xf)k^~-@URs!4ICi$YG+Ui5PtTdWZTtdp&(1AQA32K{ z%Be{Zl~m2CHQjniQRjH_g8V&9LelwW71);?U6CA_B`%EHW^R0Diich2B+$<6KG*vu zujSRQbK;aIaEan^q4Rs0ywc>7ya^M)=6xCtN334Oj26IOe8@hUc7MEk*0as_V2$`e@_^ zwPx=vV$RRb&-BkVIW{p&DNZPJ#cHRG%!zwC8HXQw!2w-sIuz#Q;7avqabJI&h}3YS z;!IEr>!g*E-nZ%{!xbOq=@*ZNQ7bO#plu%GgHs1|_VZvN(1-No&I7|xm;ur|?HoJ6OCYBE$>lqJFA$tfY#nRa9aN5_U#(;uXyBQq#s zkPvImk%i-+oC67vVZySvJ+9R>L;7SJ8^JH~#l$jJD14#a_PZN$YNvM+s@-{$jz_&{;JiM;sB) z&6p%?1_#X7hma5IIIl{0oYk;Uct~#dt2n>Va)|_?<=qXqWd2K-xwG!pI23fEEiFn6 zL$8mIw8lpsJddHLnNvg2b4}z{C_8>F^|Mfbz_Cd@K-E!Q_X#!Eb5%>)gHhOy6BDor zBa$dg*Si~i=8nK^mynYob!_KEksGPyv@PK*{17!I66q4PP*Wc_b*YP(x<8`#KIi-} zd`srpla`2L2Ah94HB^ZBDCxP;OcTQDIf<|gk90y;b#Yq1WpeF;lP#&;j^W!iEDJ5) zzYKqeZj|YnPU^Bl6|^Q(E?`v zH{cD@8{kyMPzd4cTp>0q)c)@kav6}^bTit~h)Vj=o7 z4P68S$kS_2z`0Rt0MluR1#F9PaT5%t%6{s}8nA)ZBeU@)aiyo@?=vud2?F`6Kwp-@ zfwlv=;8TBP>lMIYRMwMN-`t&;sq<1A`zo!wE&5fG3>p(drj#c68`X9$im4^% zWtGS@FSf?Il92N3-7CY$Ae6Jav8jtOIdY(jk@jWHbTaaHCR604P09L~#d)>l3JXvb ziod*<#wE*`qmGb&!p-;A0yl4B(ydJlE}6Ew8@MtB#|FOCt=CG9{S<43eO)Pbn@)!m z4X;Hj(&-45%oSFcSuUG8n)N&+Y3MdFMUJ5W>{R89b;N2Os!0AGH+)>GXsk)Scnzs{ z+pp5icyZ#%cf;jmN=q25bU$`E*?M3_^XHl^JF!b%rTP_fiyg}R^$J($bpz~aimq&F z+a+w2kJ|J$H~z>)KI5veL(Y4VF{X98@D5=FA*9B&o6f3hl%i&61Um>V+0gV<{3fm2 zHcD@5uGC6(c5Zfgx;nG6ZEq!opZ*G>qo%Vus?Y1Qj0a1PRX#qwbZn;AWi@P*6_u1^ n;9i%-`y}!pZ(G%xzZPz+qz3i-EE8yXpCtr-Yole}(P{k`C~|*= delta 1572 zcmZ9~UuYaf9Ki8ulbS!xU6PtKF@JPYdnUGbCU+`AB4WHI>9tMOB&D|a(9PcDvas1Z zclQ#7lz>$PUj)ZKNuF&i`p`c3pdd9=5TPiDD23va2nFA)FD>}}T`njNyZhOloj|wi((WEU zg$<2LJ&8F?;p-^<-bTjVP#^I!OvNT1!kc&$|G+`)+P4!x4kf?|?8n!TIaG`^Rc|7f zy2#@pyo3kveUyMVQ3Cn|AH$!qm-*E_USz;_dL6{0*n=;j)SpM0c(wlD*8Q~Z4NUX@ z7nDHuH7WH3wxaaUq69LFi)8l#CivcF`AOziKk_0e{0${FcTpmKfDdC6ACl63oWc=& z90NRzA7T=}KrZzyk1YOx8Qja@b2x^QflJ8H>KblHiofJVBK;K!PW^=}Mm?y1H}2o5 zZ^K^dyHF;|pak?Bj^ag>@jk;b{2u%8K0bmytU~%{F@-1E$p53fRHzU?z%+i263}gw zNdKB6G}O+ICw`NO1ozl6u)!NxhVg9cs@Zo+PifO}o_+a2NM5HwjUiyG_z2doBl0QrFEbhey(1 zJ50zTYeiOWueJ;gq|RkhE16VLr;d-OX2(Pn0 zaQ8#6Ibq-hCGD3>kzO%T+J*S`86+gm-V8F*Nh2t$uBQDzRtgLMms@KS4^ng za%glEJ8@(?J2Lj2j`c(?ljV9wk7dW7&0SA)w(PMlbdQXtileEO(bTzr*EQ*zFg7fU z75Z+~*F_WQVmS!5w@hTe={~zr3B462iOW^mX`kEK>7!-cCQ|d&O1;g0f1aJ3J6$+E zv)kyHaT(OO@%9!|sKU$om>0cKHA+u~p{a(tILv6V`ZT0+%o%digBegsU=uiDK;qZh56b|3!W{tH#x?@p&y)wd;F^3}^esny1V49k|dp zad4qrb(dL1e%T32hJ6TP*|i&eY5R2lw7uLvW^eW1w|@@gUY%T8@@QL|wYa?{!Rm?= v%3i25u|&STrRoXQ_4Tjk=L!pj{NyQJA%W6#J%4<1Zf0tIc52q%9nAd$uRa(} diff --git a/i18n/fr/LC_MESSAGES/glances.po b/i18n/fr/LC_MESSAGES/glances.po index 26f69ca7..9ccb8031 100644 --- a/i18n/fr/LC_MESSAGES/glances.po +++ b/i18n/fr/LC_MESSAGES/glances.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: GLANCES 1.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-14 01:52+0100\n" +"POT-Creation-Date: 2013-01-11 19:59+0100\n" "PO-Revision-Date: 2012-01-06 15:23+0100\n" "Last-Translator: Peter Fontaine \n" "Language-Team: French\n" @@ -18,568 +18,641 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: glances/glances.py:68 +#: glances/glances.py:76 msgid "Curses module not found. Glances cannot start." msgstr "Le module Curses n'a pas été trouvé. Glances ne peut pas démarrer" -#: glances/glances.py:75 +#: glances/glances.py:83 msgid "PsUtil module not found. Glances cannot start." msgstr "Le module PsUtil n'a pas été trouvé. Glances ne peut pas démarrer" -#: glances/glances.py:80 +#: glances/glances.py:88 #, python-format msgid "PsUtil version %s detected." -msgstr "" +msgstr "PsUtil version %s détecté" -#: glances/glances.py:81 +#: glances/glances.py:89 msgid "PsUtil 0.4.1 or higher is needed. Glances cannot start." -msgstr "" +msgstr "PsUtil 0.4.1 ou supérieur nécessaire. Glances ne peut pas démarrer" -#: glances/glances.py:1062 +#: glances/glances.py:1319 msgid "Error: Cannot init the curses library.\n" -msgstr " Erreur d'initailisation de la librairie Curses.\n" +msgstr "Erreur d'initialisation de la librairie Curses.\n" -#: glances/glances.py:1414 +#: glances/glances.py:1777 msgid "{0} {1} with {2} {3} on {4}" msgstr "{0} {1} avec {2} {3} sur {4}" -#: glances/glances.py:1419 +#: glances/glances.py:1782 msgid "{0} {1} {2} on {3}" msgstr "{0} {1} {2} sur {3}" -#: glances/glances.py:1463 +#: glances/glances.py:1831 msgid "PerCPU" msgstr "Par CPU" -#: glances/glances.py:1469 glances/glances.py:1515 glances/glances.py:1795 -#: glances/glances.py:1883 glances/glances.py:2143 +#: glances/glances.py:1837 glances/glances.py:1892 glances/glances.py:2166 +#: glances/glances.py:2258 glances/glances.py:2545 msgid "Compute data..." -msgstr "Calcul des données" +msgstr "Calcul des données..." -#: glances/glances.py:1473 glances/glances.py:1525 +#: glances/glances.py:1841 glances/glances.py:1902 msgid "user:" msgstr "" -#: glances/glances.py:1475 glances/glances.py:1536 +#: glances/glances.py:1843 glances/glances.py:1911 msgid "system:" msgstr "" -#: glances/glances.py:1477 glances/glances.py:1545 -msgid "idle:" -msgstr "" - -#: glances/glances.py:1509 -msgid "CPU" -msgstr "" - -#: glances/glances.py:1557 -msgid "nice:" -msgstr "" - -#: glances/glances.py:1566 +#: glances/glances.py:1846 glances/glances.py:1939 msgid "iowait:" msgstr "" -#: glances/glances.py:1576 +#: glances/glances.py:1849 glances/glances.py:1918 +msgid "idle:" +msgstr "" + +#: glances/glances.py:1886 +msgid "CPU" +msgstr "" + +#: glances/glances.py:1930 +msgid "nice:" +msgstr "" + +#: glances/glances.py:1949 msgid "irq:" msgstr "" -#: glances/glances.py:1601 +#: glances/glances.py:1971 msgid "Load" -msgstr "Charge" +msgstr "Load" -#: glances/glances.py:1605 +#: glances/glances.py:1975 msgid "-core" msgstr "" -#: glances/glances.py:1609 +#: glances/glances.py:1979 msgid "1 min:" msgstr "" -#: glances/glances.py:1616 +#: glances/glances.py:1986 msgid "5 min:" msgstr "" -#: glances/glances.py:1626 +#: glances/glances.py:1996 msgid "15 min:" msgstr "" -#: glances/glances.py:1655 +#: glances/glances.py:2022 msgid "Mem" msgstr "" -#: glances/glances.py:1665 glances/glances.py:1750 +#: glances/glances.py:2032 glances/glances.py:2121 msgid "total:" msgstr "" -#: glances/glances.py:1674 glances/glances.py:1760 +#: glances/glances.py:2041 glances/glances.py:2131 msgid "used:" -msgstr "" +msgstr "util:" -#: glances/glances.py:1682 glances/glances.py:1769 +#: glances/glances.py:2049 glances/glances.py:2140 msgid "free:" -msgstr "" +msgstr "libre:" -#: glances/glances.py:1696 +#: glances/glances.py:2063 msgid "active:" -msgstr "" +msgstr "actif:" -#: glances/glances.py:1706 +#: glances/glances.py:2073 msgid "inactive:" -msgstr "" +msgstr "inactif:" -#: glances/glances.py:1716 +#: glances/glances.py:2083 msgid "buffers:" msgstr "" -#: glances/glances.py:1726 +#: glances/glances.py:2093 msgid "cached:" -msgstr "" +msgstr "cacher:" -#: glances/glances.py:1738 +#: glances/glances.py:2108 msgid "Swap" msgstr "" -#: glances/glances.py:1785 +#: glances/glances.py:2156 msgid "Network" -msgstr "" +msgstr "Reseau" -#: glances/glances.py:1788 +#: glances/glances.py:2159 msgid "Rx/s" msgstr "" -#: glances/glances.py:1790 +#: glances/glances.py:2161 msgid "Tx/s" msgstr "" -#: glances/glances.py:1844 +#: glances/glances.py:2218 msgid "Sensors" -msgstr "" +msgstr "Capteurs" -#: glances/glances.py:1847 +#: glances/glances.py:2221 msgid "°C" msgstr "" -#: glances/glances.py:1872 +#: glances/glances.py:2247 msgid "Disk I/O" msgstr "IO Disque" -#: glances/glances.py:1876 +#: glances/glances.py:2251 msgid "In/s" msgstr "" -#: glances/glances.py:1878 +#: glances/glances.py:2253 msgid "Out/s" msgstr "" -#: glances/glances.py:1919 +#: glances/glances.py:2294 msgid "Mount" -msgstr "Montage" +msgstr "" -#: glances/glances.py:1923 +#: glances/glances.py:2298 msgid "Used" -msgstr "Utilisé" +msgstr "Util" -#: glances/glances.py:1925 +#: glances/glances.py:2300 msgid "Total" msgstr "" -#: glances/glances.py:1969 +#: glances/glances.py:2342 msgid "WARNING|CRITICAL logs for CPU|LOAD|MEM" -msgstr "Alertes WARNING|CRITICAL pout CPU|CHARGE|MEM" +msgstr "Alertes WARNING|CRITICAL pour CPU|CHARGE|MEM" -#: glances/glances.py:1971 +#: glances/glances.py:2344 msgid " (lasts " msgstr " (dernières " -#: glances/glances.py:1972 +#: glances/glances.py:2345 msgid " entries)" msgstr " entrées)" -#: glances/glances.py:1974 +#: glances/glances.py:2347 msgid " (one entry)" msgstr " (une entrée)" -#: glances/glances.py:2032 +#: glances/glances.py:2421 msgid "Processes" msgstr "Processus" -#: glances/glances.py:2043 +#: glances/glances.py:2432 msgid "running" msgstr "" -#: glances/glances.py:2045 +#: glances/glances.py:2434 msgid "sleeping" msgstr "" -#: glances/glances.py:2047 +#: glances/glances.py:2436 msgid "other" msgstr "" -#: glances/glances.py:2077 +#: glances/glances.py:2442 +msgid "sorted automatically" +msgstr "triés automatiquement" + +#: glances/glances.py:2444 +msgid "sorted by " +msgstr "triés par " + +#: glances/glances.py:2477 msgid "VIRT" msgstr "" -#: glances/glances.py:2081 +#: glances/glances.py:2481 msgid "RES" msgstr "" -#: glances/glances.py:2085 +#: glances/glances.py:2485 msgid "CPU%" msgstr "" -#: glances/glances.py:2090 +#: glances/glances.py:2490 msgid "MEM%" msgstr "" -#: glances/glances.py:2098 +#: glances/glances.py:2498 msgid "PID" msgstr "" -#: glances/glances.py:2104 +#: glances/glances.py:2504 msgid "USER" -msgstr "" +msgstr "UTILISATEUR" -#: glances/glances.py:2110 +#: glances/glances.py:2510 msgid "NI" msgstr "" -#: glances/glances.py:2116 +#: glances/glances.py:2516 msgid "S" msgstr "" -#: glances/glances.py:2122 +#: glances/glances.py:2522 msgid "TIME+" msgstr "" -#: glances/glances.py:2128 -msgid "IO_R" +#: glances/glances.py:2528 +msgid "IOr/s" msgstr "" -#: glances/glances.py:2132 -msgid "IO_W" +#: glances/glances.py:2533 +msgid "IOw/s" msgstr "" -#: glances/glances.py:2137 +#: glances/glances.py:2539 msgid "NAME" -msgstr "" +msgstr "NOM" -#: glances/glances.py:2224 glances/glances.py:2227 -msgid "A_DENY" -msgstr "" - -#: glances/glances.py:2269 +#: glances/glances.py:2673 msgid "Connected to" msgstr "Connecté à" -#: glances/glances.py:2272 +#: glances/glances.py:2676 msgid "Disconnected from" msgstr "Deconnecté de" -#: glances/glances.py:2274 +#: glances/glances.py:2678 msgid "Press 'h' for help" msgstr "'h' pour l'aide en ligne" -#: glances/glances.py:2307 +#: glances/glances.py:2711 msgid "Glances {0} with PsUtil {1}" msgstr "Glances {0} avec PsUtil {1}" -#: glances/glances.py:2313 +#: glances/glances.py:2717 msgid "Glances {0}" msgstr "" -#: glances/glances.py:2317 -msgid "Captions: " -msgstr "Alertes: " - -#: glances/glances.py:2319 +#: glances/glances.py:2725 msgid " OK " msgstr "" -#: glances/glances.py:2321 +#: glances/glances.py:2727 msgid "CAREFUL " msgstr "" -#: glances/glances.py:2323 +#: glances/glances.py:2729 msgid "WARNING " msgstr "" -#: glances/glances.py:2325 +#: glances/glances.py:2731 msgid "CRITICAL" msgstr "" -#: glances/glances.py:2331 -msgid "Key" -msgstr "Touches" +#: glances/glances.py:2737 +msgid "CPU user % " +msgstr "" -#: glances/glances.py:2331 -msgid "Function" -msgstr "Fonction" +#: glances/glances.py:2747 +msgid "CPU system % " +msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2757 +msgid "CPU IOwait % " +msgstr "" + +#: glances/glances.py:2767 +msgid "Load " +msgstr "" + +#: glances/glances.py:2777 +msgid "RAM Memory % " +msgstr "" + +#: glances/glances.py:2787 +msgid "Swap memory %" +msgstr "" + +#: glances/glances.py:2797 +msgid "Temp °C " +msgstr "" + +#: glances/glances.py:2807 +msgid "Filesystem % " +msgstr "" + +#: glances/glances.py:2817 +msgid "CPU Process %" +msgstr "" + +#: glances/glances.py:2827 +msgid "MEM Process %" +msgstr "" + +#: glances/glances.py:2841 msgid "a" msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2841 msgid "Sort processes automatically" msgstr "Classer automatiquement les processus" -#: glances/glances.py:2342 -msgid "b" -msgstr "" - -#: glances/glances.py:2342 -msgid "Switch between bit/s or Byte/s for network IO" -msgstr "" - -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "c" msgstr "" -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "Sort processes by CPU%" msgstr "Classer les processus par CPU%" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "m" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "Sort processes by MEM%" msgstr "Classer les processus par MEM%" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "p" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "Sort processes by name" msgstr "Classer les processus par ordre alphabetique" -#: glances/glances.py:2363 +#: glances/glances.py:2865 +msgid "i" +msgstr "" + +#: glances/glances.py:2865 +msgid "Sort processes by IO Rate" +msgstr "Classer les processus par débit IO" + +#: glances/glances.py:2870 msgid "d" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2870 msgid "Show/hide disk I/O stats" msgstr "Montrer/cacher les IO disques" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "f" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "Show/hide file system stats" msgstr "Montrer/cacher les statistiques sur les montages" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "n" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "Show/hide network stats" msgstr "Montrer/cacher IO réseau" -#: glances/glances.py:2378 +#: glances/glances.py:2888 msgid "s" msgstr "" -#: glances/glances.py:2378 -msgid "Show/hide sensors stats (Linux-only)" +#: glances/glances.py:2888 +msgid "Show/hide sensors stats" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "l" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "Show/hide log messages" msgstr "Montrer ou cacher les logs" -#: glances/glances.py:2387 +#: glances/glances.py:2904 +msgid "b" +msgstr "" + +#: glances/glances.py:2904 +msgid "Bit/s or Byte/s for network IO" +msgstr "Bit/s ou Octet/s pour le réseau" + +#: glances/glances.py:2912 msgid "w" msgstr "" -#: glances/glances.py:2387 -msgid "Delete finished warning logs messages" -msgstr "Supprimer les alertes WARNING finies" +#: glances/glances.py:2912 +msgid "Delete warning logs" +msgstr "Suppression des alertes warning" -#: glances/glances.py:2391 +#: glances/glances.py:2917 msgid "x" msgstr "" -#: glances/glances.py:2391 -msgid "Delete finished warning and critical logs" -msgstr "Supprimer toutes les alertes finies" +#: glances/glances.py:2917 +msgid "Delete warning and critical logs" +msgstr "Supression de toutes les alertes" -#: glances/glances.py:2395 +#: glances/glances.py:2922 msgid "1" msgstr "" -#: glances/glances.py:2395 -msgid "Switch between global CPU and per core stats" -msgstr "Afficher le détail par CPU" +#: glances/glances.py:2922 +msgid "Global CPU or Per Core stats" +msgstr "CPU globale ou par CPU" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "h" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "Show/hide this help message" msgstr "Afficher l'aide en ligne" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "q" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "Quit (Esc and Ctrl-C also work)" msgstr "Quitter Glances (ESC ou Ctrl-C marche aussi...)" -#: glances/glances.py:2413 +#: glances/glances.py:2942 glances/glances.py:3228 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d/%m/%Y %H:%M:%S" -#: glances/glances.py:2702 +#: glances/glances.py:3261 msgid "Error: creating client socket" msgstr "Erreur: Impossible de créer la socket cliente" -#: glances/glances.py:2710 +#: glances/glances.py:3269 msgid "Error: Connection to server failed" msgstr "Erreur: Impossible de se connecter au serveur" -#: glances/glances.py:2729 +#: glances/glances.py:3289 msgid "Glances version" msgstr "" -#: glances/glances.py:2734 -msgid "Usage: glances [-f file] [-o output] [-t sec] [-h] [-v]" -msgstr "" +#: glances/glances.py:3294 +msgid "Usage: glances [opt]" +msgstr "Usage: glances [options]" -#: glances/glances.py:2736 +#: glances/glances.py:3295 +msgid " with opt:" +msgstr " avec les options:" + +#: glances/glances.py:3296 msgid "\t-b\t\tDisplay network rate in Byte per second" -msgstr "" +msgstr "\t-b\t\tAffichage des débits réseau en Octet par seconde" -#: glances/glances.py:2737 -msgid "\t-B IP|NAME\tBind server to the given IP or host NAME" +#: glances/glances.py:3297 +msgid "\t-B @IP|host\tBind server to the given IP or host NAME" msgstr "" +"\t-B @IP|host\tMettre le serveur en écoute sur une adresse IP ou hostname" -#: glances/glances.py:2738 +#: glances/glances.py:3298 msgid "\t-c @IP|host\tConnect to a Glances server" -msgstr "" +msgstr "\t-c @IP|host\tLancer Glances en mode client (adresse IP du serveur)" -#: glances/glances.py:2739 +#: glances/glances.py:3299 +#, python-format +msgid "\t-C file\t\tPath to the configuration file (default: %s)" +msgstr "\t-C file\t\tChemin vers le fichier de conf (par défaut %s)" + +#: glances/glances.py:3301 msgid "\t-d\t\tDisable disk I/O module" -msgstr "" +msgstr "\t-d\t\tDéscativer le module disk I/O" -#: glances/glances.py:2740 +#: glances/glances.py:3302 msgid "\t-e\t\tEnable the sensors module (Linux-only)" -msgstr "" +msgstr "\t-e\t\tActiver le module capteur (seulement sous Linux)" -#: glances/glances.py:2741 +#: glances/glances.py:3303 msgid "\t-f file\t\tSet the output folder (HTML) or file (CSV)" msgstr "" +"\t-f file\t\tConfigurer le répertoire (HTML) ou le fichier (CSV) de sortie" -#: glances/glances.py:2742 +#: glances/glances.py:3304 msgid "\t-h\t\tDisplay the syntax and exit" -msgstr "" +msgstr "\t-h\t\tAfficher la syntaxe puis sortir" -#: glances/glances.py:2743 +#: glances/glances.py:3305 msgid "\t-m\t\tDisable mount module" -msgstr "" +msgstr "\t-m\t\tDésactiver le module file system" -#: glances/glances.py:2744 +#: glances/glances.py:3306 msgid "\t-n\t\tDisable network module" -msgstr "" +msgstr "\t-n\t\tDéscativer le module réseau" -#: glances/glances.py:2745 +#: glances/glances.py:3307 msgid "\t-o output\tDefine additional output (available: HTML or CSV)" -msgstr "" +msgstr "\t-o output\tDéfinir le mode de sortie supplémentaire (HTML ou CSV)" -#: glances/glances.py:2746 +#: glances/glances.py:3308 #, python-format msgid "\t-p PORT\t\tDefine the client or server TCP port (default: %d)" msgstr "" +"\t-p PORT\t\tDéfinir le port TCP utilisé pour le mode client/serveur " +"(defaut: %d)" -#: glances/glances.py:2748 +#: glances/glances.py:3310 msgid "\t-s\t\tRun Glances in server mode" -msgstr "" +msgstr "\t-s\t\tLancer Glances en mode serveur" -#: glances/glances.py:2749 +#: glances/glances.py:3311 #, python-format msgid "\t-t sec\t\tSet the refresh time in seconds (default: %d)" -msgstr "" +msgstr "\t-t sec\t\tDéfinir le temps de rafraichissement (defaut: %d)" -#: glances/glances.py:2751 +#: glances/glances.py:3313 msgid "\t-v\t\tDisplay the version and exit" -msgstr "" +msgstr "\t-v\t\tAfficher la version et sortir" -#: glances/glances.py:2832 +#: glances/glances.py:3396 msgid "Error: -B flag need an argument (bind IP address)" -msgstr "" +msgstr "Erreur: L'option -B nécessite un argument (bind IP address)" -#: glances/glances.py:2840 -msgid "Error: -c flag need an argument (server IP address/name" -msgstr "" +#: glances/glances.py:3404 +msgid "Error: -c flag need an argument (server IP address/name)" +msgstr "Erreur: L'option -c nécessite un argument (server IP address/name)" -#: glances/glances.py:2851 +#: glances/glances.py:3415 #, python-format msgid "Error: Unknown output %s" -msgstr "" +msgstr "Erreur: Mode de sortie demandée inconnue (%s)" -#: glances/glances.py:2857 +#: glances/glances.py:3421 msgid "Error: PySensors library not found" -msgstr "" +msgstr "Erreur: Librairie PySensors introuvable" -#: glances/glances.py:2862 +#: glances/glances.py:3426 msgid "Error: Sensors module is only available on Linux" -msgstr "" +msgstr "Erreur: Le module Sensors est seulement disponible sous GNU/Linux" -#: glances/glances.py:2870 +#: glances/glances.py:3434 msgid "Error: Refresh time should be a positive integer" -msgstr "" +msgstr "Erreur: Le temps de rafraichissement doit être > 0" -#: glances/glances.py:2887 +#: glances/glances.py:3453 msgid "Error: Can not use both -s and -c flag" -msgstr "" +msgstr "Erreur: Impossible d'utiliser en même temps les options -s et -c" -#: glances/glances.py:2890 +#: glances/glances.py:3456 msgid "Error: Can not use both -s and -o flag" -msgstr "" +msgstr "Erreur: Impossible d'utiliser en même temps les options -s et -o" -#: glances/glances.py:2895 +#: glances/glances.py:3461 msgid "Error: Can not use both -c and -o flag" -msgstr "" +msgstr "Erreur: Impossible d'utiliser en même temps les options -c et -o" -#: glances/glances.py:2900 +#: glances/glances.py:3466 msgid "Error: Need Jinja2 library to export into HTML" -msgstr "" +msgstr "Erreur: La librairie Jinja2 est introuvable" -#: glances/glances.py:2901 +#: glances/glances.py:3467 msgid "Try to install the python-jinja2 package" -msgstr "" +msgstr "Essayer d'installer le package python-jinja2" -#: glances/glances.py:2906 +#: glances/glances.py:3472 msgid "Error: HTML export (-o html) needoutput folder definition (-f )" msgstr "" +"Erreur: L'export HTML (-o html) nécessite la configuration du répertoire de " +"sortie (-f )" -#: glances/glances.py:2912 +#: glances/glances.py:3478 msgid "Error: Need CSV library to export into CSV" -msgstr "" +msgstr "Erreur: La librairie CSV est introuvable" -#: glances/glances.py:2917 +#: glances/glances.py:3483 msgid "Error: CSV export (-o csv) need output file definition (-f )" msgstr "" +"Erreur: L'export CVS (-o cvs) nécessite la configuration du fichier de " +"sortie (-f )" -#: glances/glances.py:2939 +#: glances/glances.py:3505 msgid "Glances server is running on" msgstr "Le serveur Glances est lancé" -#: glances/glances.py:2952 +#: glances/glances.py:3518 msgid "Error: The server version is not compatible" -msgstr "" -"Erreur: La version de Glances sur le serveur est incompatible avec celle du " -"client" +msgstr "Erreur: La version du serveur Glances n'est pas compatible" + +#~ msgid "Captions: " +#~ msgstr "Alertes: " + +#~ msgid "Key" +#~ msgstr "Touches" + +#~ msgid "Function" +#~ msgstr "Fonction" + +#~ msgid "Delete finished warning logs messages" +#~ msgstr "Supprimer les alertes WARNING finies" + +#~ msgid "Delete finished warning and critical logs" +#~ msgstr "Supprimer toutes les alertes finies" + +#~ msgid "Switch between global CPU and per core stats" +#~ msgstr "Afficher le détail par CPU" #~ msgid "On Ubuntu 12.04 or higher:" #~ msgstr "Sur Ubuntu 12.04 ou supérieur" diff --git a/i18n/glances.pot b/i18n/glances.pot index 78c9769f..d8976ebe 100644 --- a/i18n/glances.pot +++ b/i18n/glances.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-14 01:52+0100\n" +"POT-Creation-Date: 2013-01-11 19:59+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,563 +17,612 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: glances/glances.py:68 +#: glances/glances.py:76 msgid "Curses module not found. Glances cannot start." msgstr "" -#: glances/glances.py:75 +#: glances/glances.py:83 msgid "PsUtil module not found. Glances cannot start." msgstr "" -#: glances/glances.py:80 +#: glances/glances.py:88 #, python-format msgid "PsUtil version %s detected." msgstr "" -#: glances/glances.py:81 +#: glances/glances.py:89 msgid "PsUtil 0.4.1 or higher is needed. Glances cannot start." msgstr "" -#: glances/glances.py:1062 +#: glances/glances.py:1319 msgid "Error: Cannot init the curses library.\n" msgstr "" -#: glances/glances.py:1414 +#: glances/glances.py:1777 msgid "{0} {1} with {2} {3} on {4}" msgstr "" -#: glances/glances.py:1419 +#: glances/glances.py:1782 msgid "{0} {1} {2} on {3}" msgstr "" -#: glances/glances.py:1463 +#: glances/glances.py:1831 msgid "PerCPU" msgstr "" -#: glances/glances.py:1469 glances/glances.py:1515 glances/glances.py:1795 -#: glances/glances.py:1883 glances/glances.py:2143 +#: glances/glances.py:1837 glances/glances.py:1892 glances/glances.py:2166 +#: glances/glances.py:2258 glances/glances.py:2545 msgid "Compute data..." msgstr "" -#: glances/glances.py:1473 glances/glances.py:1525 +#: glances/glances.py:1841 glances/glances.py:1902 msgid "user:" msgstr "" -#: glances/glances.py:1475 glances/glances.py:1536 +#: glances/glances.py:1843 glances/glances.py:1911 msgid "system:" msgstr "" -#: glances/glances.py:1477 glances/glances.py:1545 -msgid "idle:" -msgstr "" - -#: glances/glances.py:1509 -msgid "CPU" -msgstr "" - -#: glances/glances.py:1557 -msgid "nice:" -msgstr "" - -#: glances/glances.py:1566 +#: glances/glances.py:1846 glances/glances.py:1939 msgid "iowait:" msgstr "" -#: glances/glances.py:1576 +#: glances/glances.py:1849 glances/glances.py:1918 +msgid "idle:" +msgstr "" + +#: glances/glances.py:1886 +msgid "CPU" +msgstr "" + +#: glances/glances.py:1930 +msgid "nice:" +msgstr "" + +#: glances/glances.py:1949 msgid "irq:" msgstr "" -#: glances/glances.py:1601 +#: glances/glances.py:1971 msgid "Load" msgstr "" -#: glances/glances.py:1605 +#: glances/glances.py:1975 msgid "-core" msgstr "" -#: glances/glances.py:1609 +#: glances/glances.py:1979 msgid "1 min:" msgstr "" -#: glances/glances.py:1616 +#: glances/glances.py:1986 msgid "5 min:" msgstr "" -#: glances/glances.py:1626 +#: glances/glances.py:1996 msgid "15 min:" msgstr "" -#: glances/glances.py:1655 +#: glances/glances.py:2022 msgid "Mem" msgstr "" -#: glances/glances.py:1665 glances/glances.py:1750 +#: glances/glances.py:2032 glances/glances.py:2121 msgid "total:" msgstr "" -#: glances/glances.py:1674 glances/glances.py:1760 +#: glances/glances.py:2041 glances/glances.py:2131 msgid "used:" msgstr "" -#: glances/glances.py:1682 glances/glances.py:1769 +#: glances/glances.py:2049 glances/glances.py:2140 msgid "free:" msgstr "" -#: glances/glances.py:1696 +#: glances/glances.py:2063 msgid "active:" msgstr "" -#: glances/glances.py:1706 +#: glances/glances.py:2073 msgid "inactive:" msgstr "" -#: glances/glances.py:1716 +#: glances/glances.py:2083 msgid "buffers:" msgstr "" -#: glances/glances.py:1726 +#: glances/glances.py:2093 msgid "cached:" msgstr "" -#: glances/glances.py:1738 +#: glances/glances.py:2108 msgid "Swap" msgstr "" -#: glances/glances.py:1785 +#: glances/glances.py:2156 msgid "Network" msgstr "" -#: glances/glances.py:1788 +#: glances/glances.py:2159 msgid "Rx/s" msgstr "" -#: glances/glances.py:1790 +#: glances/glances.py:2161 msgid "Tx/s" msgstr "" -#: glances/glances.py:1844 +#: glances/glances.py:2218 msgid "Sensors" msgstr "" -#: glances/glances.py:1847 +#: glances/glances.py:2221 msgid "°C" msgstr "" -#: glances/glances.py:1872 +#: glances/glances.py:2247 msgid "Disk I/O" msgstr "" -#: glances/glances.py:1876 +#: glances/glances.py:2251 msgid "In/s" msgstr "" -#: glances/glances.py:1878 +#: glances/glances.py:2253 msgid "Out/s" msgstr "" -#: glances/glances.py:1919 +#: glances/glances.py:2294 msgid "Mount" msgstr "" -#: glances/glances.py:1923 +#: glances/glances.py:2298 msgid "Used" msgstr "" -#: glances/glances.py:1925 +#: glances/glances.py:2300 msgid "Total" msgstr "" -#: glances/glances.py:1969 +#: glances/glances.py:2342 msgid "WARNING|CRITICAL logs for CPU|LOAD|MEM" msgstr "" -#: glances/glances.py:1971 +#: glances/glances.py:2344 msgid " (lasts " msgstr "" -#: glances/glances.py:1972 +#: glances/glances.py:2345 msgid " entries)" msgstr "" -#: glances/glances.py:1974 +#: glances/glances.py:2347 msgid " (one entry)" msgstr "" -#: glances/glances.py:2032 +#: glances/glances.py:2421 msgid "Processes" msgstr "" -#: glances/glances.py:2043 +#: glances/glances.py:2432 msgid "running" msgstr "" -#: glances/glances.py:2045 +#: glances/glances.py:2434 msgid "sleeping" msgstr "" -#: glances/glances.py:2047 +#: glances/glances.py:2436 msgid "other" msgstr "" -#: glances/glances.py:2077 +#: glances/glances.py:2442 +msgid "sorted automatically" +msgstr "" + +#: glances/glances.py:2444 +msgid "sorted by " +msgstr "" + +#: glances/glances.py:2477 msgid "VIRT" msgstr "" -#: glances/glances.py:2081 +#: glances/glances.py:2481 msgid "RES" msgstr "" -#: glances/glances.py:2085 +#: glances/glances.py:2485 msgid "CPU%" msgstr "" -#: glances/glances.py:2090 +#: glances/glances.py:2490 msgid "MEM%" msgstr "" -#: glances/glances.py:2098 +#: glances/glances.py:2498 msgid "PID" msgstr "" -#: glances/glances.py:2104 +#: glances/glances.py:2504 msgid "USER" msgstr "" -#: glances/glances.py:2110 +#: glances/glances.py:2510 msgid "NI" msgstr "" -#: glances/glances.py:2116 +#: glances/glances.py:2516 msgid "S" msgstr "" -#: glances/glances.py:2122 +#: glances/glances.py:2522 msgid "TIME+" msgstr "" -#: glances/glances.py:2128 -msgid "IO_R" +#: glances/glances.py:2528 +msgid "IOr/s" msgstr "" -#: glances/glances.py:2132 -msgid "IO_W" +#: glances/glances.py:2533 +msgid "IOw/s" msgstr "" -#: glances/glances.py:2137 +#: glances/glances.py:2539 msgid "NAME" msgstr "" -#: glances/glances.py:2224 glances/glances.py:2227 -msgid "A_DENY" -msgstr "" - -#: glances/glances.py:2269 +#: glances/glances.py:2673 msgid "Connected to" msgstr "" -#: glances/glances.py:2272 +#: glances/glances.py:2676 msgid "Disconnected from" msgstr "" -#: glances/glances.py:2274 +#: glances/glances.py:2678 msgid "Press 'h' for help" msgstr "" -#: glances/glances.py:2307 +#: glances/glances.py:2711 msgid "Glances {0} with PsUtil {1}" msgstr "" -#: glances/glances.py:2313 +#: glances/glances.py:2717 msgid "Glances {0}" msgstr "" -#: glances/glances.py:2317 -msgid "Captions: " -msgstr "" - -#: glances/glances.py:2319 +#: glances/glances.py:2725 msgid " OK " msgstr "" -#: glances/glances.py:2321 +#: glances/glances.py:2727 msgid "CAREFUL " msgstr "" -#: glances/glances.py:2323 +#: glances/glances.py:2729 msgid "WARNING " msgstr "" -#: glances/glances.py:2325 +#: glances/glances.py:2731 msgid "CRITICAL" msgstr "" -#: glances/glances.py:2331 -msgid "Key" +#: glances/glances.py:2737 +msgid "CPU user % " msgstr "" -#: glances/glances.py:2331 -msgid "Function" +#: glances/glances.py:2747 +msgid "CPU system % " msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2757 +msgid "CPU IOwait % " +msgstr "" + +#: glances/glances.py:2767 +msgid "Load " +msgstr "" + +#: glances/glances.py:2777 +msgid "RAM Memory % " +msgstr "" + +#: glances/glances.py:2787 +msgid "Swap memory %" +msgstr "" + +#: glances/glances.py:2797 +msgid "Temp °C " +msgstr "" + +#: glances/glances.py:2807 +msgid "Filesystem % " +msgstr "" + +#: glances/glances.py:2817 +msgid "CPU Process %" +msgstr "" + +#: glances/glances.py:2827 +msgid "MEM Process %" +msgstr "" + +#: glances/glances.py:2841 msgid "a" msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2841 msgid "Sort processes automatically" msgstr "" -#: glances/glances.py:2342 -msgid "b" -msgstr "" - -#: glances/glances.py:2342 -msgid "Switch between bit/s or Byte/s for network IO" -msgstr "" - -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "c" msgstr "" -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "Sort processes by CPU%" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "m" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "Sort processes by MEM%" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "p" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "Sort processes by name" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2865 +msgid "i" +msgstr "" + +#: glances/glances.py:2865 +msgid "Sort processes by IO Rate" +msgstr "" + +#: glances/glances.py:2870 msgid "d" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2870 msgid "Show/hide disk I/O stats" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "f" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "Show/hide file system stats" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "n" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "Show/hide network stats" msgstr "" -#: glances/glances.py:2378 +#: glances/glances.py:2888 msgid "s" msgstr "" -#: glances/glances.py:2378 -msgid "Show/hide sensors stats (Linux-only)" +#: glances/glances.py:2888 +msgid "Show/hide sensors stats" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "l" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "Show/hide log messages" msgstr "" -#: glances/glances.py:2387 +#: glances/glances.py:2904 +msgid "b" +msgstr "" + +#: glances/glances.py:2904 +msgid "Bit/s or Byte/s for network IO" +msgstr "" + +#: glances/glances.py:2912 msgid "w" msgstr "" -#: glances/glances.py:2387 -msgid "Delete finished warning logs messages" +#: glances/glances.py:2912 +msgid "Delete warning logs" msgstr "" -#: glances/glances.py:2391 +#: glances/glances.py:2917 msgid "x" msgstr "" -#: glances/glances.py:2391 -msgid "Delete finished warning and critical logs" +#: glances/glances.py:2917 +msgid "Delete warning and critical logs" msgstr "" -#: glances/glances.py:2395 +#: glances/glances.py:2922 msgid "1" msgstr "" -#: glances/glances.py:2395 -msgid "Switch between global CPU and per core stats" +#: glances/glances.py:2922 +msgid "Global CPU or Per Core stats" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "h" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "Show/hide this help message" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "q" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "Quit (Esc and Ctrl-C also work)" msgstr "" -#: glances/glances.py:2413 +#: glances/glances.py:2942 glances/glances.py:3228 msgid "%Y-%m-%d %H:%M:%S" msgstr "" -#: glances/glances.py:2702 +#: glances/glances.py:3261 msgid "Error: creating client socket" msgstr "" -#: glances/glances.py:2710 +#: glances/glances.py:3269 msgid "Error: Connection to server failed" msgstr "" -#: glances/glances.py:2729 +#: glances/glances.py:3289 msgid "Glances version" msgstr "" -#: glances/glances.py:2734 -msgid "Usage: glances [-f file] [-o output] [-t sec] [-h] [-v]" +#: glances/glances.py:3294 +msgid "Usage: glances [opt]" msgstr "" -#: glances/glances.py:2736 +#: glances/glances.py:3295 +msgid " with opt:" +msgstr "" + +#: glances/glances.py:3296 msgid "\t-b\t\tDisplay network rate in Byte per second" msgstr "" -#: glances/glances.py:2737 -msgid "\t-B IP|NAME\tBind server to the given IP or host NAME" +#: glances/glances.py:3297 +msgid "\t-B @IP|host\tBind server to the given IP or host NAME" msgstr "" -#: glances/glances.py:2738 +#: glances/glances.py:3298 msgid "\t-c @IP|host\tConnect to a Glances server" msgstr "" -#: glances/glances.py:2739 +#: glances/glances.py:3299 +#, python-format +msgid "\t-C file\t\tPath to the configuration file (default: %s)" +msgstr "" + +#: glances/glances.py:3301 msgid "\t-d\t\tDisable disk I/O module" msgstr "" -#: glances/glances.py:2740 +#: glances/glances.py:3302 msgid "\t-e\t\tEnable the sensors module (Linux-only)" msgstr "" -#: glances/glances.py:2741 +#: glances/glances.py:3303 msgid "\t-f file\t\tSet the output folder (HTML) or file (CSV)" msgstr "" -#: glances/glances.py:2742 +#: glances/glances.py:3304 msgid "\t-h\t\tDisplay the syntax and exit" msgstr "" -#: glances/glances.py:2743 +#: glances/glances.py:3305 msgid "\t-m\t\tDisable mount module" msgstr "" -#: glances/glances.py:2744 +#: glances/glances.py:3306 msgid "\t-n\t\tDisable network module" msgstr "" -#: glances/glances.py:2745 +#: glances/glances.py:3307 msgid "\t-o output\tDefine additional output (available: HTML or CSV)" msgstr "" -#: glances/glances.py:2746 +#: glances/glances.py:3308 #, python-format msgid "\t-p PORT\t\tDefine the client or server TCP port (default: %d)" msgstr "" -#: glances/glances.py:2748 +#: glances/glances.py:3310 msgid "\t-s\t\tRun Glances in server mode" msgstr "" -#: glances/glances.py:2749 +#: glances/glances.py:3311 #, python-format msgid "\t-t sec\t\tSet the refresh time in seconds (default: %d)" msgstr "" -#: glances/glances.py:2751 +#: glances/glances.py:3313 msgid "\t-v\t\tDisplay the version and exit" msgstr "" -#: glances/glances.py:2832 +#: glances/glances.py:3396 msgid "Error: -B flag need an argument (bind IP address)" msgstr "" -#: glances/glances.py:2840 -msgid "Error: -c flag need an argument (server IP address/name" +#: glances/glances.py:3404 +msgid "Error: -c flag need an argument (server IP address/name)" msgstr "" -#: glances/glances.py:2851 +#: glances/glances.py:3415 #, python-format msgid "Error: Unknown output %s" msgstr "" -#: glances/glances.py:2857 +#: glances/glances.py:3421 msgid "Error: PySensors library not found" msgstr "" -#: glances/glances.py:2862 +#: glances/glances.py:3426 msgid "Error: Sensors module is only available on Linux" msgstr "" -#: glances/glances.py:2870 +#: glances/glances.py:3434 msgid "Error: Refresh time should be a positive integer" msgstr "" -#: glances/glances.py:2887 +#: glances/glances.py:3453 msgid "Error: Can not use both -s and -c flag" msgstr "" -#: glances/glances.py:2890 +#: glances/glances.py:3456 msgid "Error: Can not use both -s and -o flag" msgstr "" -#: glances/glances.py:2895 +#: glances/glances.py:3461 msgid "Error: Can not use both -c and -o flag" msgstr "" -#: glances/glances.py:2900 +#: glances/glances.py:3466 msgid "Error: Need Jinja2 library to export into HTML" msgstr "" -#: glances/glances.py:2901 +#: glances/glances.py:3467 msgid "Try to install the python-jinja2 package" msgstr "" -#: glances/glances.py:2906 +#: glances/glances.py:3472 msgid "Error: HTML export (-o html) needoutput folder definition (-f )" msgstr "" -#: glances/glances.py:2912 +#: glances/glances.py:3478 msgid "Error: Need CSV library to export into CSV" msgstr "" -#: glances/glances.py:2917 +#: glances/glances.py:3483 msgid "Error: CSV export (-o csv) need output file definition (-f )" msgstr "" -#: glances/glances.py:2939 +#: glances/glances.py:3505 msgid "Glances server is running on" msgstr "" -#: glances/glances.py:2952 +#: glances/glances.py:3518 msgid "Error: The server version is not compatible" msgstr "" diff --git a/i18n/it/LC_MESSAGES/glances.mo b/i18n/it/LC_MESSAGES/glances.mo index dc39194376df6e3b5f2be6e315220eb8f519401c..724c059e922cfb0f7678550e5cc0088e86df0c3e 100644 GIT binary patch delta 26 hcmcc0c9m_z8Ae`XT?0d1Lqi2aODj{$%{Liq7y)rF2h9Kg delta 26 gcmcc0c9m_z8Ae_sT|*!;Q7|yHGBw(Kld*;o0C407!2kdN diff --git a/i18n/it/LC_MESSAGES/glances.po b/i18n/it/LC_MESSAGES/glances.po index c508c7fc..2055e6e2 100644 --- a/i18n/it/LC_MESSAGES/glances.po +++ b/i18n/it/LC_MESSAGES/glances.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: GLANCES 1.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-14 01:52+0100\n" +"POT-Creation-Date: 2013-01-11 19:59+0100\n" "PO-Revision-Date: 2012-09-07 01:21+0100\n" "Last-Translator: Domenico Luciani \n" "Language-Team: Italian\n" @@ -17,564 +17,613 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: glances/glances.py:68 +#: glances/glances.py:76 msgid "Curses module not found. Glances cannot start." msgstr "" -#: glances/glances.py:75 +#: glances/glances.py:83 msgid "PsUtil module not found. Glances cannot start." msgstr "" -#: glances/glances.py:80 +#: glances/glances.py:88 #, python-format msgid "PsUtil version %s detected." msgstr "" -#: glances/glances.py:81 +#: glances/glances.py:89 msgid "PsUtil 0.4.1 or higher is needed. Glances cannot start." msgstr "" -#: glances/glances.py:1062 +#: glances/glances.py:1319 msgid "Error: Cannot init the curses library.\n" msgstr "" -#: glances/glances.py:1414 +#: glances/glances.py:1777 msgid "{0} {1} with {2} {3} on {4}" msgstr "" -#: glances/glances.py:1419 +#: glances/glances.py:1782 msgid "{0} {1} {2} on {3}" msgstr "" -#: glances/glances.py:1463 +#: glances/glances.py:1831 msgid "PerCPU" msgstr "" -#: glances/glances.py:1469 glances/glances.py:1515 glances/glances.py:1795 -#: glances/glances.py:1883 glances/glances.py:2143 +#: glances/glances.py:1837 glances/glances.py:1892 glances/glances.py:2166 +#: glances/glances.py:2258 glances/glances.py:2545 msgid "Compute data..." msgstr "" -#: glances/glances.py:1473 glances/glances.py:1525 +#: glances/glances.py:1841 glances/glances.py:1902 msgid "user:" msgstr "" -#: glances/glances.py:1475 glances/glances.py:1536 +#: glances/glances.py:1843 glances/glances.py:1911 msgid "system:" msgstr "" -#: glances/glances.py:1477 glances/glances.py:1545 -msgid "idle:" -msgstr "" - -#: glances/glances.py:1509 -msgid "CPU" -msgstr "" - -#: glances/glances.py:1557 -msgid "nice:" -msgstr "" - -#: glances/glances.py:1566 +#: glances/glances.py:1846 glances/glances.py:1939 msgid "iowait:" msgstr "" -#: glances/glances.py:1576 +#: glances/glances.py:1849 glances/glances.py:1918 +msgid "idle:" +msgstr "" + +#: glances/glances.py:1886 +msgid "CPU" +msgstr "" + +#: glances/glances.py:1930 +msgid "nice:" +msgstr "" + +#: glances/glances.py:1949 msgid "irq:" msgstr "" -#: glances/glances.py:1601 +#: glances/glances.py:1971 msgid "Load" msgstr "Carica" -#: glances/glances.py:1605 +#: glances/glances.py:1975 msgid "-core" msgstr "" -#: glances/glances.py:1609 +#: glances/glances.py:1979 msgid "1 min:" msgstr "1 minuto:" -#: glances/glances.py:1616 +#: glances/glances.py:1986 msgid "5 min:" msgstr "" -#: glances/glances.py:1626 +#: glances/glances.py:1996 msgid "15 min:" msgstr "" -#: glances/glances.py:1655 +#: glances/glances.py:2022 msgid "Mem" msgstr "" -#: glances/glances.py:1665 glances/glances.py:1750 +#: glances/glances.py:2032 glances/glances.py:2121 msgid "total:" msgstr "" -#: glances/glances.py:1674 glances/glances.py:1760 +#: glances/glances.py:2041 glances/glances.py:2131 msgid "used:" msgstr "" -#: glances/glances.py:1682 glances/glances.py:1769 +#: glances/glances.py:2049 glances/glances.py:2140 msgid "free:" msgstr "" -#: glances/glances.py:1696 +#: glances/glances.py:2063 msgid "active:" msgstr "" -#: glances/glances.py:1706 +#: glances/glances.py:2073 msgid "inactive:" msgstr "" -#: glances/glances.py:1716 +#: glances/glances.py:2083 msgid "buffers:" msgstr "" -#: glances/glances.py:1726 +#: glances/glances.py:2093 msgid "cached:" msgstr "" -#: glances/glances.py:1738 +#: glances/glances.py:2108 msgid "Swap" msgstr "" -#: glances/glances.py:1785 +#: glances/glances.py:2156 msgid "Network" msgstr "" -#: glances/glances.py:1788 +#: glances/glances.py:2159 msgid "Rx/s" msgstr "" -#: glances/glances.py:1790 +#: glances/glances.py:2161 msgid "Tx/s" msgstr "" -#: glances/glances.py:1844 +#: glances/glances.py:2218 msgid "Sensors" msgstr "" -#: glances/glances.py:1847 +#: glances/glances.py:2221 msgid "°C" msgstr "" -#: glances/glances.py:1872 +#: glances/glances.py:2247 msgid "Disk I/O" msgstr "I/O Disco" -#: glances/glances.py:1876 +#: glances/glances.py:2251 msgid "In/s" msgstr "" -#: glances/glances.py:1878 +#: glances/glances.py:2253 msgid "Out/s" msgstr "" -#: glances/glances.py:1919 +#: glances/glances.py:2294 msgid "Mount" msgstr "Monta" -#: glances/glances.py:1923 +#: glances/glances.py:2298 msgid "Used" msgstr "Usato" -#: glances/glances.py:1925 +#: glances/glances.py:2300 msgid "Total" msgstr "Totale" -#: glances/glances.py:1969 +#: glances/glances.py:2342 msgid "WARNING|CRITICAL logs for CPU|LOAD|MEM" msgstr "" -#: glances/glances.py:1971 +#: glances/glances.py:2344 msgid " (lasts " msgstr "" -#: glances/glances.py:1972 +#: glances/glances.py:2345 msgid " entries)" msgstr "" -#: glances/glances.py:1974 +#: glances/glances.py:2347 msgid " (one entry)" msgstr "" -#: glances/glances.py:2032 +#: glances/glances.py:2421 msgid "Processes" msgstr "" -#: glances/glances.py:2043 +#: glances/glances.py:2432 msgid "running" msgstr "" -#: glances/glances.py:2045 +#: glances/glances.py:2434 msgid "sleeping" msgstr "" -#: glances/glances.py:2047 +#: glances/glances.py:2436 msgid "other" msgstr "" -#: glances/glances.py:2077 +#: glances/glances.py:2442 +msgid "sorted automatically" +msgstr "" + +#: glances/glances.py:2444 +msgid "sorted by " +msgstr "" + +#: glances/glances.py:2477 msgid "VIRT" msgstr "" -#: glances/glances.py:2081 +#: glances/glances.py:2481 msgid "RES" msgstr "" -#: glances/glances.py:2085 +#: glances/glances.py:2485 msgid "CPU%" msgstr "" -#: glances/glances.py:2090 +#: glances/glances.py:2490 msgid "MEM%" msgstr "" -#: glances/glances.py:2098 +#: glances/glances.py:2498 msgid "PID" msgstr "" -#: glances/glances.py:2104 +#: glances/glances.py:2504 msgid "USER" msgstr "" -#: glances/glances.py:2110 +#: glances/glances.py:2510 msgid "NI" msgstr "" -#: glances/glances.py:2116 +#: glances/glances.py:2516 msgid "S" msgstr "" -#: glances/glances.py:2122 +#: glances/glances.py:2522 msgid "TIME+" msgstr "" -#: glances/glances.py:2128 -msgid "IO_R" +#: glances/glances.py:2528 +msgid "IOr/s" msgstr "" -#: glances/glances.py:2132 -msgid "IO_W" +#: glances/glances.py:2533 +msgid "IOw/s" msgstr "" -#: glances/glances.py:2137 +#: glances/glances.py:2539 msgid "NAME" msgstr "" -#: glances/glances.py:2224 glances/glances.py:2227 -msgid "A_DENY" -msgstr "" - -#: glances/glances.py:2269 +#: glances/glances.py:2673 msgid "Connected to" msgstr "" -#: glances/glances.py:2272 +#: glances/glances.py:2676 msgid "Disconnected from" msgstr "" -#: glances/glances.py:2274 +#: glances/glances.py:2678 msgid "Press 'h' for help" msgstr "" -#: glances/glances.py:2307 +#: glances/glances.py:2711 msgid "Glances {0} with PsUtil {1}" msgstr "" -#: glances/glances.py:2313 +#: glances/glances.py:2717 msgid "Glances {0}" msgstr "" -#: glances/glances.py:2317 -msgid "Captions: " -msgstr "" - -#: glances/glances.py:2319 +#: glances/glances.py:2725 msgid " OK " msgstr " OK " -#: glances/glances.py:2321 +#: glances/glances.py:2727 msgid "CAREFUL " msgstr " ATTENZIONE " -#: glances/glances.py:2323 +#: glances/glances.py:2729 msgid "WARNING " msgstr " ALLARME " -#: glances/glances.py:2325 +#: glances/glances.py:2731 msgid "CRITICAL" msgstr "CRITICO " -#: glances/glances.py:2331 -msgid "Key" +#: glances/glances.py:2737 +msgid "CPU user % " msgstr "" -#: glances/glances.py:2331 -msgid "Function" +#: glances/glances.py:2747 +msgid "CPU system % " msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2757 +msgid "CPU IOwait % " +msgstr "" + +#: glances/glances.py:2767 +msgid "Load " +msgstr "" + +#: glances/glances.py:2777 +msgid "RAM Memory % " +msgstr "" + +#: glances/glances.py:2787 +msgid "Swap memory %" +msgstr "" + +#: glances/glances.py:2797 +msgid "Temp °C " +msgstr "" + +#: glances/glances.py:2807 +msgid "Filesystem % " +msgstr "" + +#: glances/glances.py:2817 +msgid "CPU Process %" +msgstr "" + +#: glances/glances.py:2827 +msgid "MEM Process %" +msgstr "" + +#: glances/glances.py:2841 msgid "a" msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2841 msgid "Sort processes automatically" msgstr "" -#: glances/glances.py:2342 -msgid "b" -msgstr "" - -#: glances/glances.py:2342 -msgid "Switch between bit/s or Byte/s for network IO" -msgstr "" - -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "c" msgstr "" -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "Sort processes by CPU%" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "m" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "Sort processes by MEM%" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "p" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "Sort processes by name" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2865 +msgid "i" +msgstr "" + +#: glances/glances.py:2865 +msgid "Sort processes by IO Rate" +msgstr "" + +#: glances/glances.py:2870 msgid "d" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2870 msgid "Show/hide disk I/O stats" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "f" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "Show/hide file system stats" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "n" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "Show/hide network stats" msgstr "" -#: glances/glances.py:2378 +#: glances/glances.py:2888 msgid "s" msgstr "" -#: glances/glances.py:2378 -msgid "Show/hide sensors stats (Linux-only)" +#: glances/glances.py:2888 +msgid "Show/hide sensors stats" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "l" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "Show/hide log messages" msgstr "" -#: glances/glances.py:2387 +#: glances/glances.py:2904 +msgid "b" +msgstr "" + +#: glances/glances.py:2904 +msgid "Bit/s or Byte/s for network IO" +msgstr "" + +#: glances/glances.py:2912 msgid "w" msgstr "" -#: glances/glances.py:2387 -msgid "Delete finished warning logs messages" +#: glances/glances.py:2912 +msgid "Delete warning logs" msgstr "" -#: glances/glances.py:2391 +#: glances/glances.py:2917 msgid "x" msgstr "" -#: glances/glances.py:2391 -msgid "Delete finished warning and critical logs" +#: glances/glances.py:2917 +msgid "Delete warning and critical logs" msgstr "" -#: glances/glances.py:2395 +#: glances/glances.py:2922 msgid "1" msgstr "" -#: glances/glances.py:2395 -msgid "Switch between global CPU and per core stats" +#: glances/glances.py:2922 +msgid "Global CPU or Per Core stats" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "h" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "Show/hide this help message" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "q" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "Quit (Esc and Ctrl-C also work)" msgstr "" -#: glances/glances.py:2413 +#: glances/glances.py:2942 glances/glances.py:3228 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d.%m.%Y %H:%M:%S" -#: glances/glances.py:2702 +#: glances/glances.py:3261 msgid "Error: creating client socket" msgstr "" -#: glances/glances.py:2710 +#: glances/glances.py:3269 msgid "Error: Connection to server failed" msgstr "" -#: glances/glances.py:2729 +#: glances/glances.py:3289 msgid "Glances version" msgstr "" -#: glances/glances.py:2734 -msgid "Usage: glances [-f file] [-o output] [-t sec] [-h] [-v]" +#: glances/glances.py:3294 +msgid "Usage: glances [opt]" msgstr "" -#: glances/glances.py:2736 +#: glances/glances.py:3295 +msgid " with opt:" +msgstr "" + +#: glances/glances.py:3296 msgid "\t-b\t\tDisplay network rate in Byte per second" msgstr "" -#: glances/glances.py:2737 -msgid "\t-B IP|NAME\tBind server to the given IP or host NAME" +#: glances/glances.py:3297 +msgid "\t-B @IP|host\tBind server to the given IP or host NAME" msgstr "" -#: glances/glances.py:2738 +#: glances/glances.py:3298 msgid "\t-c @IP|host\tConnect to a Glances server" msgstr "" -#: glances/glances.py:2739 +#: glances/glances.py:3299 +#, python-format +msgid "\t-C file\t\tPath to the configuration file (default: %s)" +msgstr "" + +#: glances/glances.py:3301 msgid "\t-d\t\tDisable disk I/O module" msgstr "" -#: glances/glances.py:2740 +#: glances/glances.py:3302 msgid "\t-e\t\tEnable the sensors module (Linux-only)" msgstr "" -#: glances/glances.py:2741 +#: glances/glances.py:3303 msgid "\t-f file\t\tSet the output folder (HTML) or file (CSV)" msgstr "" -#: glances/glances.py:2742 +#: glances/glances.py:3304 msgid "\t-h\t\tDisplay the syntax and exit" msgstr "" -#: glances/glances.py:2743 +#: glances/glances.py:3305 msgid "\t-m\t\tDisable mount module" msgstr "" -#: glances/glances.py:2744 +#: glances/glances.py:3306 msgid "\t-n\t\tDisable network module" msgstr "" -#: glances/glances.py:2745 +#: glances/glances.py:3307 msgid "\t-o output\tDefine additional output (available: HTML or CSV)" msgstr "" -#: glances/glances.py:2746 +#: glances/glances.py:3308 #, python-format msgid "\t-p PORT\t\tDefine the client or server TCP port (default: %d)" msgstr "" -#: glances/glances.py:2748 +#: glances/glances.py:3310 msgid "\t-s\t\tRun Glances in server mode" msgstr "" -#: glances/glances.py:2749 +#: glances/glances.py:3311 #, python-format msgid "\t-t sec\t\tSet the refresh time in seconds (default: %d)" msgstr "" -#: glances/glances.py:2751 +#: glances/glances.py:3313 msgid "\t-v\t\tDisplay the version and exit" msgstr "" -#: glances/glances.py:2832 +#: glances/glances.py:3396 msgid "Error: -B flag need an argument (bind IP address)" msgstr "" -#: glances/glances.py:2840 -msgid "Error: -c flag need an argument (server IP address/name" +#: glances/glances.py:3404 +msgid "Error: -c flag need an argument (server IP address/name)" msgstr "" -#: glances/glances.py:2851 +#: glances/glances.py:3415 #, python-format msgid "Error: Unknown output %s" msgstr "" -#: glances/glances.py:2857 +#: glances/glances.py:3421 msgid "Error: PySensors library not found" msgstr "" -#: glances/glances.py:2862 +#: glances/glances.py:3426 msgid "Error: Sensors module is only available on Linux" msgstr "" -#: glances/glances.py:2870 +#: glances/glances.py:3434 msgid "Error: Refresh time should be a positive integer" msgstr "" -#: glances/glances.py:2887 +#: glances/glances.py:3453 msgid "Error: Can not use both -s and -c flag" msgstr "" -#: glances/glances.py:2890 +#: glances/glances.py:3456 msgid "Error: Can not use both -s and -o flag" msgstr "" -#: glances/glances.py:2895 +#: glances/glances.py:3461 msgid "Error: Can not use both -c and -o flag" msgstr "" -#: glances/glances.py:2900 +#: glances/glances.py:3466 msgid "Error: Need Jinja2 library to export into HTML" msgstr "" -#: glances/glances.py:2901 +#: glances/glances.py:3467 msgid "Try to install the python-jinja2 package" msgstr "" -#: glances/glances.py:2906 +#: glances/glances.py:3472 msgid "Error: HTML export (-o html) needoutput folder definition (-f )" msgstr "" -#: glances/glances.py:2912 +#: glances/glances.py:3478 msgid "Error: Need CSV library to export into CSV" msgstr "" -#: glances/glances.py:2917 +#: glances/glances.py:3483 msgid "Error: CSV export (-o csv) need output file definition (-f )" msgstr "" -#: glances/glances.py:2939 +#: glances/glances.py:3505 msgid "Glances server is running on" msgstr "" -#: glances/glances.py:2952 +#: glances/glances.py:3518 msgid "Error: The server version is not compatible" msgstr "" diff --git a/i18n/pt_BR/LC_MESSAGES/glances.mo b/i18n/pt_BR/LC_MESSAGES/glances.mo index 9e854b06af4da0ce97761d94160418c35fd20492..3fa00c53de7ddae66d2a8ba7d11c8695ba57a45b 100644 GIT binary patch delta 26 hcmbQkK8Jn7e@0$oT?0d1Lqi2aODj{$%{)vK7y)Nv2G{@q delta 26 gcmbQkK8Jn7e@0#-T|*!;Q7|yHGBw)F!!&^r0B0Bm%m4rY diff --git a/i18n/pt_BR/LC_MESSAGES/glances.po b/i18n/pt_BR/LC_MESSAGES/glances.po index 6b5a6f1d..0726dcbb 100644 --- a/i18n/pt_BR/LC_MESSAGES/glances.po +++ b/i18n/pt_BR/LC_MESSAGES/glances.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Glances 1.4.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-14 01:52+0100\n" +"POT-Creation-Date: 2013-01-11 19:59+0100\n" "PO-Revision-Date: 2012-09-20 01:53-0300\n" "Last-Translator: Rafael Beraldo \n" "Language-Team: Brazilian Portuguese\n" @@ -17,564 +17,613 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: glances/glances.py:68 +#: glances/glances.py:76 msgid "Curses module not found. Glances cannot start." msgstr "" -#: glances/glances.py:75 +#: glances/glances.py:83 msgid "PsUtil module not found. Glances cannot start." msgstr "" -#: glances/glances.py:80 +#: glances/glances.py:88 #, python-format msgid "PsUtil version %s detected." msgstr "" -#: glances/glances.py:81 +#: glances/glances.py:89 msgid "PsUtil 0.4.1 or higher is needed. Glances cannot start." msgstr "" -#: glances/glances.py:1062 +#: glances/glances.py:1319 msgid "Error: Cannot init the curses library.\n" msgstr "" -#: glances/glances.py:1414 +#: glances/glances.py:1777 msgid "{0} {1} with {2} {3} on {4}" msgstr "" -#: glances/glances.py:1419 +#: glances/glances.py:1782 msgid "{0} {1} {2} on {3}" msgstr "" -#: glances/glances.py:1463 +#: glances/glances.py:1831 msgid "PerCPU" msgstr "" -#: glances/glances.py:1469 glances/glances.py:1515 glances/glances.py:1795 -#: glances/glances.py:1883 glances/glances.py:2143 +#: glances/glances.py:1837 glances/glances.py:1892 glances/glances.py:2166 +#: glances/glances.py:2258 glances/glances.py:2545 msgid "Compute data..." msgstr "" -#: glances/glances.py:1473 glances/glances.py:1525 +#: glances/glances.py:1841 glances/glances.py:1902 msgid "user:" msgstr "" -#: glances/glances.py:1475 glances/glances.py:1536 +#: glances/glances.py:1843 glances/glances.py:1911 msgid "system:" msgstr "" -#: glances/glances.py:1477 glances/glances.py:1545 -msgid "idle:" -msgstr "" - -#: glances/glances.py:1509 -msgid "CPU" -msgstr "" - -#: glances/glances.py:1557 -msgid "nice:" -msgstr "" - -#: glances/glances.py:1566 +#: glances/glances.py:1846 glances/glances.py:1939 msgid "iowait:" msgstr "" -#: glances/glances.py:1576 +#: glances/glances.py:1849 glances/glances.py:1918 +msgid "idle:" +msgstr "" + +#: glances/glances.py:1886 +msgid "CPU" +msgstr "" + +#: glances/glances.py:1930 +msgid "nice:" +msgstr "" + +#: glances/glances.py:1949 msgid "irq:" msgstr "" -#: glances/glances.py:1601 +#: glances/glances.py:1971 msgid "Load" msgstr "Carga" -#: glances/glances.py:1605 +#: glances/glances.py:1975 msgid "-core" msgstr "" -#: glances/glances.py:1609 +#: glances/glances.py:1979 msgid "1 min:" msgstr "1 min:" -#: glances/glances.py:1616 +#: glances/glances.py:1986 msgid "5 min:" msgstr "" -#: glances/glances.py:1626 +#: glances/glances.py:1996 msgid "15 min:" msgstr "" -#: glances/glances.py:1655 +#: glances/glances.py:2022 msgid "Mem" msgstr "Mem" -#: glances/glances.py:1665 glances/glances.py:1750 +#: glances/glances.py:2032 glances/glances.py:2121 msgid "total:" msgstr "" -#: glances/glances.py:1674 glances/glances.py:1760 +#: glances/glances.py:2041 glances/glances.py:2131 msgid "used:" msgstr "" -#: glances/glances.py:1682 glances/glances.py:1769 +#: glances/glances.py:2049 glances/glances.py:2140 msgid "free:" msgstr "" -#: glances/glances.py:1696 +#: glances/glances.py:2063 msgid "active:" msgstr "" -#: glances/glances.py:1706 +#: glances/glances.py:2073 msgid "inactive:" msgstr "" -#: glances/glances.py:1716 +#: glances/glances.py:2083 msgid "buffers:" msgstr "" -#: glances/glances.py:1726 +#: glances/glances.py:2093 msgid "cached:" msgstr "" -#: glances/glances.py:1738 +#: glances/glances.py:2108 msgid "Swap" msgstr "Swap" -#: glances/glances.py:1785 +#: glances/glances.py:2156 msgid "Network" msgstr "" -#: glances/glances.py:1788 +#: glances/glances.py:2159 msgid "Rx/s" msgstr "" -#: glances/glances.py:1790 +#: glances/glances.py:2161 msgid "Tx/s" msgstr "" -#: glances/glances.py:1844 +#: glances/glances.py:2218 msgid "Sensors" msgstr "" -#: glances/glances.py:1847 +#: glances/glances.py:2221 msgid "°C" msgstr "" -#: glances/glances.py:1872 +#: glances/glances.py:2247 msgid "Disk I/O" msgstr "I/O do Disco" -#: glances/glances.py:1876 +#: glances/glances.py:2251 msgid "In/s" msgstr "" -#: glances/glances.py:1878 +#: glances/glances.py:2253 msgid "Out/s" msgstr "" -#: glances/glances.py:1919 +#: glances/glances.py:2294 msgid "Mount" msgstr "Partições" -#: glances/glances.py:1923 +#: glances/glances.py:2298 msgid "Used" msgstr "Usado" -#: glances/glances.py:1925 +#: glances/glances.py:2300 msgid "Total" msgstr "Total" -#: glances/glances.py:1969 +#: glances/glances.py:2342 msgid "WARNING|CRITICAL logs for CPU|LOAD|MEM" msgstr "" -#: glances/glances.py:1971 +#: glances/glances.py:2344 msgid " (lasts " msgstr "" -#: glances/glances.py:1972 +#: glances/glances.py:2345 msgid " entries)" msgstr "" -#: glances/glances.py:1974 +#: glances/glances.py:2347 msgid " (one entry)" msgstr "" -#: glances/glances.py:2032 +#: glances/glances.py:2421 msgid "Processes" msgstr "" -#: glances/glances.py:2043 +#: glances/glances.py:2432 msgid "running" msgstr "" -#: glances/glances.py:2045 +#: glances/glances.py:2434 msgid "sleeping" msgstr "" -#: glances/glances.py:2047 +#: glances/glances.py:2436 msgid "other" msgstr "" -#: glances/glances.py:2077 +#: glances/glances.py:2442 +msgid "sorted automatically" +msgstr "" + +#: glances/glances.py:2444 +msgid "sorted by " +msgstr "" + +#: glances/glances.py:2477 msgid "VIRT" msgstr "" -#: glances/glances.py:2081 +#: glances/glances.py:2481 msgid "RES" msgstr "" -#: glances/glances.py:2085 +#: glances/glances.py:2485 msgid "CPU%" msgstr "" -#: glances/glances.py:2090 +#: glances/glances.py:2490 msgid "MEM%" msgstr "" -#: glances/glances.py:2098 +#: glances/glances.py:2498 msgid "PID" msgstr "" -#: glances/glances.py:2104 +#: glances/glances.py:2504 msgid "USER" msgstr "" -#: glances/glances.py:2110 +#: glances/glances.py:2510 msgid "NI" msgstr "" -#: glances/glances.py:2116 +#: glances/glances.py:2516 msgid "S" msgstr "" -#: glances/glances.py:2122 +#: glances/glances.py:2522 msgid "TIME+" msgstr "" -#: glances/glances.py:2128 -msgid "IO_R" +#: glances/glances.py:2528 +msgid "IOr/s" msgstr "" -#: glances/glances.py:2132 -msgid "IO_W" +#: glances/glances.py:2533 +msgid "IOw/s" msgstr "" -#: glances/glances.py:2137 +#: glances/glances.py:2539 msgid "NAME" msgstr "" -#: glances/glances.py:2224 glances/glances.py:2227 -msgid "A_DENY" -msgstr "" - -#: glances/glances.py:2269 +#: glances/glances.py:2673 msgid "Connected to" msgstr "" -#: glances/glances.py:2272 +#: glances/glances.py:2676 msgid "Disconnected from" msgstr "" -#: glances/glances.py:2274 +#: glances/glances.py:2678 msgid "Press 'h' for help" msgstr "" -#: glances/glances.py:2307 +#: glances/glances.py:2711 msgid "Glances {0} with PsUtil {1}" msgstr "" -#: glances/glances.py:2313 +#: glances/glances.py:2717 msgid "Glances {0}" msgstr "" -#: glances/glances.py:2317 -msgid "Captions: " -msgstr "" - -#: glances/glances.py:2319 +#: glances/glances.py:2725 msgid " OK " msgstr " OK " -#: glances/glances.py:2321 +#: glances/glances.py:2727 msgid "CAREFUL " msgstr "CUIDADO " -#: glances/glances.py:2323 +#: glances/glances.py:2729 msgid "WARNING " msgstr "AVISO" -#: glances/glances.py:2325 +#: glances/glances.py:2731 msgid "CRITICAL" msgstr "CRÍTICO" -#: glances/glances.py:2331 -msgid "Key" +#: glances/glances.py:2737 +msgid "CPU user % " msgstr "" -#: glances/glances.py:2331 -msgid "Function" +#: glances/glances.py:2747 +msgid "CPU system % " msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2757 +msgid "CPU IOwait % " +msgstr "" + +#: glances/glances.py:2767 +msgid "Load " +msgstr "" + +#: glances/glances.py:2777 +msgid "RAM Memory % " +msgstr "" + +#: glances/glances.py:2787 +msgid "Swap memory %" +msgstr "" + +#: glances/glances.py:2797 +msgid "Temp °C " +msgstr "" + +#: glances/glances.py:2807 +msgid "Filesystem % " +msgstr "" + +#: glances/glances.py:2817 +msgid "CPU Process %" +msgstr "" + +#: glances/glances.py:2827 +msgid "MEM Process %" +msgstr "" + +#: glances/glances.py:2841 msgid "a" msgstr "" -#: glances/glances.py:2336 +#: glances/glances.py:2841 msgid "Sort processes automatically" msgstr "" -#: glances/glances.py:2342 -msgid "b" -msgstr "" - -#: glances/glances.py:2342 -msgid "Switch between bit/s or Byte/s for network IO" -msgstr "" - -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "c" msgstr "" -#: glances/glances.py:2349 +#: glances/glances.py:2848 msgid "Sort processes by CPU%" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "m" msgstr "" -#: glances/glances.py:2355 +#: glances/glances.py:2855 msgid "Sort processes by MEM%" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "p" msgstr "" -#: glances/glances.py:2359 +#: glances/glances.py:2860 msgid "Sort processes by name" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2865 +msgid "i" +msgstr "" + +#: glances/glances.py:2865 +msgid "Sort processes by IO Rate" +msgstr "" + +#: glances/glances.py:2870 msgid "d" msgstr "" -#: glances/glances.py:2363 +#: glances/glances.py:2870 msgid "Show/hide disk I/O stats" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "f" msgstr "" -#: glances/glances.py:2368 +#: glances/glances.py:2876 msgid "Show/hide file system stats" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "n" msgstr "" -#: glances/glances.py:2373 +#: glances/glances.py:2882 msgid "Show/hide network stats" msgstr "" -#: glances/glances.py:2378 +#: glances/glances.py:2888 msgid "s" msgstr "" -#: glances/glances.py:2378 -msgid "Show/hide sensors stats (Linux-only)" +#: glances/glances.py:2888 +msgid "Show/hide sensors stats" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "l" msgstr "" -#: glances/glances.py:2383 +#: glances/glances.py:2894 msgid "Show/hide log messages" msgstr "" -#: glances/glances.py:2387 +#: glances/glances.py:2904 +msgid "b" +msgstr "" + +#: glances/glances.py:2904 +msgid "Bit/s or Byte/s for network IO" +msgstr "" + +#: glances/glances.py:2912 msgid "w" msgstr "" -#: glances/glances.py:2387 -msgid "Delete finished warning logs messages" +#: glances/glances.py:2912 +msgid "Delete warning logs" msgstr "" -#: glances/glances.py:2391 +#: glances/glances.py:2917 msgid "x" msgstr "" -#: glances/glances.py:2391 -msgid "Delete finished warning and critical logs" +#: glances/glances.py:2917 +msgid "Delete warning and critical logs" msgstr "" -#: glances/glances.py:2395 +#: glances/glances.py:2922 msgid "1" msgstr "" -#: glances/glances.py:2395 -msgid "Switch between global CPU and per core stats" +#: glances/glances.py:2922 +msgid "Global CPU or Per Core stats" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "h" msgstr "" -#: glances/glances.py:2399 +#: glances/glances.py:2927 msgid "Show/hide this help message" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "q" msgstr "" -#: glances/glances.py:2403 +#: glances/glances.py:2932 msgid "Quit (Esc and Ctrl-C also work)" msgstr "" -#: glances/glances.py:2413 +#: glances/glances.py:2942 glances/glances.py:3228 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d-%m-%Y %H:%M:%S" -#: glances/glances.py:2702 +#: glances/glances.py:3261 msgid "Error: creating client socket" msgstr "" -#: glances/glances.py:2710 +#: glances/glances.py:3269 msgid "Error: Connection to server failed" msgstr "" -#: glances/glances.py:2729 +#: glances/glances.py:3289 msgid "Glances version" msgstr "" -#: glances/glances.py:2734 -msgid "Usage: glances [-f file] [-o output] [-t sec] [-h] [-v]" +#: glances/glances.py:3294 +msgid "Usage: glances [opt]" msgstr "" -#: glances/glances.py:2736 +#: glances/glances.py:3295 +msgid " with opt:" +msgstr "" + +#: glances/glances.py:3296 msgid "\t-b\t\tDisplay network rate in Byte per second" msgstr "" -#: glances/glances.py:2737 -msgid "\t-B IP|NAME\tBind server to the given IP or host NAME" +#: glances/glances.py:3297 +msgid "\t-B @IP|host\tBind server to the given IP or host NAME" msgstr "" -#: glances/glances.py:2738 +#: glances/glances.py:3298 msgid "\t-c @IP|host\tConnect to a Glances server" msgstr "" -#: glances/glances.py:2739 +#: glances/glances.py:3299 +#, python-format +msgid "\t-C file\t\tPath to the configuration file (default: %s)" +msgstr "" + +#: glances/glances.py:3301 msgid "\t-d\t\tDisable disk I/O module" msgstr "" -#: glances/glances.py:2740 +#: glances/glances.py:3302 msgid "\t-e\t\tEnable the sensors module (Linux-only)" msgstr "" -#: glances/glances.py:2741 +#: glances/glances.py:3303 msgid "\t-f file\t\tSet the output folder (HTML) or file (CSV)" msgstr "" -#: glances/glances.py:2742 +#: glances/glances.py:3304 msgid "\t-h\t\tDisplay the syntax and exit" msgstr "" -#: glances/glances.py:2743 +#: glances/glances.py:3305 msgid "\t-m\t\tDisable mount module" msgstr "" -#: glances/glances.py:2744 +#: glances/glances.py:3306 msgid "\t-n\t\tDisable network module" msgstr "" -#: glances/glances.py:2745 +#: glances/glances.py:3307 msgid "\t-o output\tDefine additional output (available: HTML or CSV)" msgstr "" -#: glances/glances.py:2746 +#: glances/glances.py:3308 #, python-format msgid "\t-p PORT\t\tDefine the client or server TCP port (default: %d)" msgstr "" -#: glances/glances.py:2748 +#: glances/glances.py:3310 msgid "\t-s\t\tRun Glances in server mode" msgstr "" -#: glances/glances.py:2749 +#: glances/glances.py:3311 #, python-format msgid "\t-t sec\t\tSet the refresh time in seconds (default: %d)" msgstr "" -#: glances/glances.py:2751 +#: glances/glances.py:3313 msgid "\t-v\t\tDisplay the version and exit" msgstr "" -#: glances/glances.py:2832 +#: glances/glances.py:3396 msgid "Error: -B flag need an argument (bind IP address)" msgstr "" -#: glances/glances.py:2840 -msgid "Error: -c flag need an argument (server IP address/name" +#: glances/glances.py:3404 +msgid "Error: -c flag need an argument (server IP address/name)" msgstr "" -#: glances/glances.py:2851 +#: glances/glances.py:3415 #, python-format msgid "Error: Unknown output %s" msgstr "" -#: glances/glances.py:2857 +#: glances/glances.py:3421 msgid "Error: PySensors library not found" msgstr "" -#: glances/glances.py:2862 +#: glances/glances.py:3426 msgid "Error: Sensors module is only available on Linux" msgstr "" -#: glances/glances.py:2870 +#: glances/glances.py:3434 msgid "Error: Refresh time should be a positive integer" msgstr "" -#: glances/glances.py:2887 +#: glances/glances.py:3453 msgid "Error: Can not use both -s and -c flag" msgstr "" -#: glances/glances.py:2890 +#: glances/glances.py:3456 msgid "Error: Can not use both -s and -o flag" msgstr "" -#: glances/glances.py:2895 +#: glances/glances.py:3461 msgid "Error: Can not use both -c and -o flag" msgstr "" -#: glances/glances.py:2900 +#: glances/glances.py:3466 msgid "Error: Need Jinja2 library to export into HTML" msgstr "" -#: glances/glances.py:2901 +#: glances/glances.py:3467 msgid "Try to install the python-jinja2 package" msgstr "" -#: glances/glances.py:2906 +#: glances/glances.py:3472 msgid "Error: HTML export (-o html) needoutput folder definition (-f )" msgstr "" -#: glances/glances.py:2912 +#: glances/glances.py:3478 msgid "Error: Need CSV library to export into CSV" msgstr "" -#: glances/glances.py:2917 +#: glances/glances.py:3483 msgid "Error: CSV export (-o csv) need output file definition (-f )" msgstr "" -#: glances/glances.py:2939 +#: glances/glances.py:3505 msgid "Glances server is running on" msgstr "" -#: glances/glances.py:2952 +#: glances/glances.py:3518 msgid "Error: The server version is not compatible" msgstr "" diff --git a/setup.py b/setup.py index 1de20473..2f696eed 100755 --- a/setup.py +++ b/setup.py @@ -14,6 +14,8 @@ data_files = [ 'NEWS', 'screenshot.png']), ('share/doc/glances/doc', glob('doc/*.png')), + ('/etc', ['glances/conf/glances.conf']), + ('share/glances/conf-default', ['glances/conf/glances.conf']), ('share/glances/html', glob('glances/html/*.html')), ('share/glances/css', glob('glances/css/*.css')), ('share/glances/img', glob('glances/img/*.png')), @@ -23,8 +25,8 @@ for mo in glob('i18n/*/LC_MESSAGES/*.mo'): data_files.append((dirname(mo).replace('i18n/', 'share/locale/'), [mo])) setup(name='Glances', - version='1.5.2', - download_url='https://s3.amazonaws.com/glances/glances-1.5.2.tar.gz', + version='1.6b', + download_url='https://s3.amazonaws.com/glances/glances-1.6b.tar.gz', url='https://github.com/nicolargo/glances', description='CLI curses-based monitoring tool', author='Nicolas Hennion',