Glances 3.3.1 release

pull/2245/head
nicolargo 2023-01-14 09:59:56 +01:00
parent 10fbb246ac
commit b79edc7df6
9 changed files with 515 additions and 537 deletions

View File

@ -6,7 +6,61 @@
Version 3.3.1
===============
Under development, see milestone https://github.com/nicolargo/glances/milestone/61
Enhancements:
* Minor change on the help screen
* Refactor some loop in the processes function
* Replace json by ujson #2201
Bug corrected:
* Unable to see docker related information #2180
* CSV export dependent on sort order for docker container cpu #2156
* Error when process list is displayed in Programs mode #2209
* Console formatting permanently messed up when other text printed #2211
* API GET uptime returns formatted string, not seconds as the doc says #2158
* Glances UI is breaking for multiline commands #2189
Documentation and CI:
* Add unitary test for memory profiling
* Update memory profile chart
* Add run-docker-ubuntu-* in Makefile
* The open-web-browser option was missing dashes #2219
* Correct regexp in glances.conf file example
* What is CW from network #2222 (related to discussion #2221)
* Change Glances repology URL
* Add example for the date format
* Correct Flake8 configuration file
* Drop UT for Python 3.5 and 3.6 (no more available in Ubuntu 22.04)
* Correct unitary test with Python 3.5
* Update Makefile with comments
* Update Python minimal requirement for py3nvlm
* Update security policy (user can open private issue directly in Github)
* Add a simple run script. Entry point for IDE debuger
Cyber security update:
* Security alert on ujson < 5.4
* Merge pull request #2243 from nicolargo/renovate/nvidia-cuda-12.x
* Merge pull request #2244 from nicolargo/renovate/crazy-max-ghaction-docker-meta-4.x
* Merge pull request #2228 from nicolargo/renovate/zeroconf-0.x
* Merge pull request #2242 from nicolargo/renovate/crazy-max-ghaction-docker-meta-4.x
* Merge pull request #2239 from mfridge/action-command-split
* Merge pull request #2165 from nicolargo/renovate/zeroconf-0.x
* Merge pull request #2199 from nicolargo/renovate/alpine-3.x
* Merge pull request #2202 from chncaption/oscs_fix_cdr0ts8au51t49so8c6g
* Bump loader-utils from 2.0.0 to 2.0.3 in /glances/outputs/static #2187 - Update Web lib
Contributors for this version:
* Nicolargo
* renovate[bot]
* chncaption
* fkwong
* *mfridge
And also a big thanks to @RazCrimson (https://github.com/RazCrimson) for the support to the Glances community !
===============
Version 3.3.0.4

View File

@ -307,6 +307,7 @@ battery_critical=95
#core 0_fans_speed_alias=CPU Core 0 fan
#or
#core 0_alias=CPU Core 0
#core 1_alias=CPU Core 1
[processcount]
disable=False

View File

@ -10,8 +10,10 @@ refresh=2
# Does Glances should check if a newer version is available on PyPI ?
check_update=false
# History size (maximum number of values)
# Default is 3600 seconds (1 hour)
history_size=3600
# Default is 1200 values (~1h with the default refresh rate)
history_size=1200
# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)
#strftime_format="%Y-%m-%d %H:%M:%S %Z"
##############################################################################
# User interface
@ -212,7 +214,7 @@ critical=-85
disable=False
# Define the list of hidden disks (comma-separated regexp)
#hide=sda2,sda5,loop.*
hide=loop.*,/dev/loop*
hide=loop.*,/dev/loop.*
# Define the list of disks to be show (comma-separated)
#show=sda.*
# Alias for sda1

File diff suppressed because it is too large Load Diff

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "GLANCES" "1" "Dec 21, 2022" "3.3.1_beta1" "Glances"
.TH "GLANCES" "1" "Jan 14, 2023" "3.3.1" "Glances"
.SH NAME
glances \- An eye on your system
.SH SYNOPSIS
@ -258,7 +258,7 @@ set the server cache time [default: 1 sec]
.UNINDENT
.INDENT 0.0
.TP
.B open\-web\-browser
.B \-\-open\-web\-browser
try to open the Web UI in the default Web browser
.UNINDENT
.INDENT 0.0
@ -732,60 +732,60 @@ format):
.nf
.ft C
{
"version": 1,
"disable_existing_loggers": "False",
"root": {
"level": "INFO",
"handlers": ["file", "console"]
\(dqversion\(dq: 1,
\(dqdisable_existing_loggers\(dq: \(dqFalse\(dq,
\(dqroot\(dq: {
\(dqlevel\(dq: \(dqINFO\(dq,
\(dqhandlers\(dq: [\(dqfile\(dq, \(dqconsole\(dq]
},
"formatters": {
"standard": {
"format": "%(asctime)s \-\- %(levelname)s \-\- %(message)s"
\(dqformatters\(dq: {
\(dqstandard\(dq: {
\(dqformat\(dq: \(dq%(asctime)s \-\- %(levelname)s \-\- %(message)s\(dq
},
"short": {
"format": "%(levelname)s: %(message)s"
\(dqshort\(dq: {
\(dqformat\(dq: \(dq%(levelname)s: %(message)s\(dq
},
"free": {
"format": "%(message)s"
\(dqfree\(dq: {
\(dqformat\(dq: \(dq%(message)s\(dq
}
},
"handlers": {
"file": {
"level": "DEBUG",
"class": "logging.handlers.RotatingFileHandler",
"formatter": "standard",
"filename": "/var/tmp/glances.log"
\(dqhandlers\(dq: {
\(dqfile\(dq: {
\(dqlevel\(dq: \(dqDEBUG\(dq,
\(dqclass\(dq: \(dqlogging.handlers.RotatingFileHandler\(dq,
\(dqformatter\(dq: \(dqstandard\(dq,
\(dqfilename\(dq: \(dq/var/tmp/glances.log\(dq
},
"console": {
"level": "CRITICAL",
"class": "logging.StreamHandler",
"formatter": "free"
\(dqconsole\(dq: {
\(dqlevel\(dq: \(dqCRITICAL\(dq,
\(dqclass\(dq: \(dqlogging.StreamHandler\(dq,
\(dqformatter\(dq: \(dqfree\(dq
}
},
"loggers": {
"debug": {
"handlers": ["file", "console"],
"level": "DEBUG"
\(dqloggers\(dq: {
\(dqdebug\(dq: {
\(dqhandlers\(dq: [\(dqfile\(dq, \(dqconsole\(dq],
\(dqlevel\(dq: \(dqDEBUG\(dq
},
"verbose": {
"handlers": ["file", "console"],
"level": "INFO"
\(dqverbose\(dq: {
\(dqhandlers\(dq: [\(dqfile\(dq, \(dqconsole\(dq],
\(dqlevel\(dq: \(dqINFO\(dq
},
"standard": {
"handlers": ["file"],
"level": "INFO"
\(dqstandard\(dq: {
\(dqhandlers\(dq: [\(dqfile\(dq],
\(dqlevel\(dq: \(dqINFO\(dq
},
"requests": {
"handlers": ["file", "console"],
"level": "ERROR"
\(dqrequests\(dq: {
\(dqhandlers\(dq: [\(dqfile\(dq, \(dqconsole\(dq],
\(dqlevel\(dq: \(dqERROR\(dq
},
"elasticsearch": {
"handlers": ["file", "console"],
"level": "ERROR"
\(dqelasticsearch\(dq: {
\(dqhandlers\(dq: [\(dqfile\(dq, \(dqconsole\(dq],
\(dqlevel\(dq: \(dqERROR\(dq
},
"elasticsearch.trace": {
"handlers": ["file", "console"],
"level": "ERROR"
\(dqelasticsearch.trace\(dq: {
\(dqhandlers\(dq: [\(dqfile\(dq, \(dqconsole\(dq],
\(dqlevel\(dq: \(dqERROR\(dq
}
}
}
@ -885,6 +885,6 @@ $ glances browser
.sp
Nicolas Hennion aka Nicolargo <\fI\%contact@nicolargo.com\fP>
.SH COPYRIGHT
2022, Nicolas Hennion
2023, Nicolas Hennion
.\" Generated by docutils manpage writer.
.

View File

@ -19,7 +19,7 @@ import sys
# Global name
# Version should start and end with a numerical char
# See https://packaging.python.org/specifications/core-metadata/#version
__version__ = '3.3.1_beta1'
__version__ = '3.3.1'
__author__ = 'Nicolas Hennion <nicolas@nicolargo.com>'
__license__ = 'LGPLv3'

View File

@ -4527,9 +4527,9 @@
"peer": true
},
"node_modules/json5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"bin": {
"json5": "lib/cli.js"
@ -11822,9 +11822,9 @@
"peer": true
},
"json5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true
},
"jsprim": {

View File

@ -29,50 +29,26 @@ import psutil
# 'key': 'interface_name'}
# Fields description
fields_description = {
'interface_name': {
'description': 'Interface name.',
'unit': 'string'
},
'alias': {
'description': 'Interface alias name (optional).',
'unit': 'string'
},
'rx': {
'description': 'The received/input rate (in bit per second).',
'unit': 'bps'
},
'tx': {
'description': 'The sent/output rate (in bit per second).',
'unit': 'bps'
},
'cx': {
'description': 'The cumulative received+sent rate (in bit per second).',
'unit': 'bps'
},
'interface_name': {'description': 'Interface name.', 'unit': 'string'},
'alias': {'description': 'Interface alias name (optional).', 'unit': 'string'},
'rx': {'description': 'The received/input rate (in bit per second).', 'unit': 'bps'},
'tx': {'description': 'The sent/output rate (in bit per second).', 'unit': 'bps'},
'cx': {'description': 'The cumulative received+sent rate (in bit per second).', 'unit': 'bps'},
'cumulative_rx': {
'description': 'The number of bytes received through the interface (cumulative).',
'unit': 'bytes',
},
'cumulative_tx': {
'description': 'The number of bytes sent through the interface (cumulative).',
'unit': 'bytes'
},
'cumulative_tx': {'description': 'The number of bytes sent through the interface (cumulative).', 'unit': 'bytes'},
'cumulative_cx': {
'description': 'The cumulative number of bytes reveived and sent through the interface (cumulative).',
'unit': 'bytes'
'unit': 'bytes',
},
'speed': {
'description': 'Maximum interface speed (in bit per second). Can return 0 on some operating-system.',
'unit': 'bps',
},
'is_up': {
'description': 'Is the interface up ?',
'unit': 'bool'
},
'time_since_update': {
'description': 'Number of seconds since last update.',
'unit': 'seconds'
},
'is_up': {'description': 'Is the interface up ?', 'unit': 'bool'},
'time_since_update': {'description': 'Number of seconds since last update.', 'unit': 'seconds'},
}
# SNMP OID

View File

@ -288,17 +288,19 @@ class GlancesProcesses(object):
# Build the processes stats list (it is why we need psutil>=5.3.0)
# This is one of the main bottleneck of Glances (see flame graph)
# Filter processes
self.processlist = list(filter(lambda p: not (BSD and p.info['name'] == 'idle') and
not (WINDOWS and p.info['name'] == 'System Idle Process') and
not (MACOS and p.info['name'] == 'kernel_task') and
not (self.no_kernel_threads and LINUX and p.info['gids'].real == 0),
psutil.process_iter(attrs=sorted_attrs, ad_value=None)))
self.processlist = list(
filter(
lambda p: not (BSD and p.info['name'] == 'idle')
and not (WINDOWS and p.info['name'] == 'System Idle Process')
and not (MACOS and p.info['name'] == 'kernel_task')
and not (self.no_kernel_threads and LINUX and p.info['gids'].real == 0),
psutil.process_iter(attrs=sorted_attrs, ad_value=None),
)
)
# Only get the info key
self.processlist = [p.info for p in self.processlist]
# Sort the processes list by the current sort_key
self.processlist = sort_stats(self.processlist,
sorted_by=self.sort_key,
reverse=True)
self.processlist = sort_stats(self.processlist, sorted_by=self.sort_key, reverse=True)
# Update the processcount
self.update_processcount(self.processlist)
@ -409,8 +411,7 @@ class GlancesProcesses(object):
self.processlist_cache[proc['pid']] = {cached: proc[cached] for cached in cached_attrs}
# Apply user filter
self.processlist = list(filter(lambda p: not self._filter.is_filtered(p),
self.processlist))
self.processlist = list(filter(lambda p: not self._filter.is_filtered(p), self.processlist))
# Compute the maximum value for keys in self._max_values_list: CPU, MEM
# Useful to highlight the processes with maximum values