mirror of
https://github.com/nicolargo/glances.git
synced 2024-08-17 00:10:48 +03:00
chore: ruff cleanup
This commit is contained in:
parent
396e78c415
commit
acb5ef585f
35
docs/conf.py
35
docs/conf.py
@ -125,8 +125,7 @@ html_theme = 'sphinx_rtd_theme'
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
html_theme_options = {
|
||||
}
|
||||
html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
# html_theme_path = []
|
||||
@ -166,14 +165,7 @@ html_static_path = ['_static']
|
||||
# html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
html_sidebars = {
|
||||
'**': [
|
||||
'about.html',
|
||||
'navigation.html',
|
||||
'links.html',
|
||||
'searchbox.html'
|
||||
]
|
||||
}
|
||||
html_sidebars = {'**': ['about.html', 'navigation.html', 'links.html', 'searchbox.html']}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
@ -227,13 +219,10 @@ htmlhelp_basename = 'Glancesdoc'
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
@ -242,8 +231,7 @@ latex_elements = {
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'Glances.tex', 'Glances Documentation',
|
||||
'Nicolas Hennion', 'manual'),
|
||||
(master_doc, 'Glances.tex', 'Glances Documentation', 'Nicolas Hennion', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
@ -271,10 +259,7 @@ latex_documents = [
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('glances', 'glances', 'An eye on your system',
|
||||
'', 1)
|
||||
]
|
||||
man_pages = [('glances', 'glances', 'An eye on your system', '', 1)]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
# man_show_urls = False
|
||||
@ -286,9 +271,15 @@ man_pages = [
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'Glances', 'Glances Documentation',
|
||||
author, 'Glances', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
(
|
||||
master_doc,
|
||||
'Glances',
|
||||
'Glances Documentation',
|
||||
author,
|
||||
'Glances',
|
||||
'One line description of project.',
|
||||
'Miscellaneous',
|
||||
),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
|
@ -122,8 +122,9 @@ class GlancesClient(object):
|
||||
else:
|
||||
self.log_and_exit(
|
||||
(
|
||||
'Client and server not compatible: '
|
||||
'Client version: {} / Server version: {}'.format(__version__, client_version)
|
||||
'Client and server not compatible: ' 'Client version: {} / Server version: {}'.format(
|
||||
__version__, client_version
|
||||
)
|
||||
)
|
||||
)
|
||||
return False
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
"""RESTful interface class."""
|
||||
|
||||
|
||||
from glances.globals import listkeys
|
||||
from glances.logger import logger
|
||||
from glances.exports.export import GlancesExport
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Manage the folder list."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
|
@ -19,8 +19,6 @@ import sys
|
||||
import platform
|
||||
import ujson
|
||||
from operator import itemgetter, methodcaller
|
||||
import unicodedata
|
||||
import types
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
import re
|
||||
@ -28,14 +26,8 @@ import base64
|
||||
import functools
|
||||
import weakref
|
||||
|
||||
import queue
|
||||
from configparser import ConfigParser, NoOptionError, NoSectionError
|
||||
from statistics import mean
|
||||
from xmlrpc.client import Fault, ProtocolError, ServerProxy, Transport, Server
|
||||
from xmlrpc.server import SimpleXMLRPCRequestHandler, SimpleXMLRPCServer
|
||||
from urllib.request import urlopen, Request
|
||||
from urllib.error import HTTPError, URLError
|
||||
from urllib.parse import urlparse
|
||||
|
||||
# Correct issue #1025 by monkey path the xmlrpc lib
|
||||
from defusedxml.xmlrpc import monkey_patch
|
||||
|
@ -241,7 +241,7 @@ Examples of use:
|
||||
)
|
||||
parser.add_argument(
|
||||
'--enable-irq', action='store_true', default=False, dest='enable_irq', help='enable IRQ module'
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--enable-process-extended',
|
||||
action='store_true',
|
||||
@ -255,14 +255,14 @@ Examples of use:
|
||||
default=True,
|
||||
dest='enable_separator',
|
||||
help='disable separator in the UI (between top and others modules)',
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--disable-cursor',
|
||||
action='store_true',
|
||||
default=False,
|
||||
dest='disable_cursor',
|
||||
help='disable cursor (process selection) in the UI',
|
||||
),
|
||||
)
|
||||
# Sort processes list
|
||||
parser.add_argument(
|
||||
'--sort-processes',
|
||||
|
@ -46,7 +46,7 @@ class Outdated(object):
|
||||
self.cache_file = os.path.join(self.cache_dir, 'glances-version.db')
|
||||
|
||||
# Set default value...
|
||||
self.data = {u'installed_version': __version__, u'latest_version': '0.0', u'refresh_date': datetime.now()}
|
||||
self.data = {'installed_version': __version__, 'latest_version': '0.0', 'refresh_date': datetime.now()}
|
||||
|
||||
# Disable update check if `packaging` is not installed
|
||||
if not PACKAGING_IMPORT:
|
||||
@ -154,14 +154,14 @@ class Outdated(object):
|
||||
logger.debug("Get latest Glances version from the PyPI RESTful API ({})".format(PYPI_API_URL))
|
||||
|
||||
# Update the current time
|
||||
self.data[u'refresh_date'] = datetime.now()
|
||||
self.data['refresh_date'] = datetime.now()
|
||||
|
||||
try:
|
||||
res = urlopen(PYPI_API_URL, timeout=3).read()
|
||||
except (HTTPError, URLError, CertificateError) as e:
|
||||
logger.debug("Cannot get Glances version from the PyPI RESTful API ({})".format(e))
|
||||
else:
|
||||
self.data[u'latest_version'] = json.loads(nativestr(res))['info']['version']
|
||||
self.data['latest_version'] = json.loads(nativestr(res))['info']['version']
|
||||
logger.debug("Save Glances version to the cache file")
|
||||
|
||||
# Save result to the cache file
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Curses interface class."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import sys
|
||||
|
@ -16,7 +16,7 @@ from io import open
|
||||
import webbrowser
|
||||
from urllib.parse import urljoin
|
||||
|
||||
try:
|
||||
try:
|
||||
from typing import Annotated
|
||||
except ImportError:
|
||||
# Only for Python 3.8
|
||||
|
@ -75,9 +75,7 @@ WebUI refresh
|
||||
It is possible to change the Web UI refresh rate (default is 2 seconds) using the following option in the URL:
|
||||
``http://localhost:61208/glances/?refresh=5``
|
||||
|
||||
""".format(
|
||||
api_version=__apiversion__
|
||||
)
|
||||
""".format(api_version=__apiversion__)
|
||||
|
||||
|
||||
def indent_stat(stat, indent=' '):
|
||||
|
@ -10,14 +10,14 @@
|
||||
"""Manage unicode message for Glances output."""
|
||||
|
||||
_unicode_message = {
|
||||
'ARROW_LEFT': [u'\u2190', u'<'],
|
||||
'ARROW_RIGHT': [u'\u2192', u'>'],
|
||||
'ARROW_UP': [u'\u2191', u'^'],
|
||||
'ARROW_DOWN': [u'\u2193', u'v'],
|
||||
'CHECK': [u'\u2713', u''],
|
||||
'PROCESS_SELECTOR': [u'>', u'>'],
|
||||
'MEDIUM_LINE': [u'\u23AF', u'-'],
|
||||
'LOW_LINE': [u'\u2581', u'_'],
|
||||
'ARROW_LEFT': ['\u2190', '<'],
|
||||
'ARROW_RIGHT': ['\u2192', '>'],
|
||||
'ARROW_UP': ['\u2191', '^'],
|
||||
'ARROW_DOWN': ['\u2193', 'v'],
|
||||
'CHECK': ['\u2713', ''],
|
||||
'PROCESS_SELECTOR': ['>', '>'],
|
||||
'MEDIUM_LINE': ['\u23af', '-'],
|
||||
'LOW_LINE': ['\u2581', '_'],
|
||||
}
|
||||
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Connections plugin."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from glances.logger import logger
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Docker Extension unit for Glances' Containers plugin."""
|
||||
|
||||
import time
|
||||
|
||||
from glances.globals import iterkeys, itervalues, nativestr, pretty_date, replace_special_chars
|
||||
|
@ -7,6 +7,7 @@
|
||||
# SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
"""Podman Extension unit for Glances' Containers plugin."""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from glances.globals import iterkeys, itervalues, nativestr, pretty_date, string_value_to_float, replace_special_chars
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Disk I/O plugin."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from glances.logger import logger
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Folder plugin."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from glances.logger import logger
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""File system plugin."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import operator
|
||||
@ -166,7 +167,7 @@ class PluginModel(GlancesPluginModel):
|
||||
'device_name': fs.device,
|
||||
'fs_type': fs.fstype,
|
||||
# Manage non breaking space (see issue #1065)
|
||||
'mnt_point': u(fs.mountpoint).replace(u'\u00A0', ' '),
|
||||
'mnt_point': u(fs.mountpoint).replace('\u00a0', ' '),
|
||||
'size': fs_usage.total,
|
||||
'used': fs_usage.used,
|
||||
'free': fs_usage.free,
|
||||
|
@ -12,6 +12,7 @@ Help plugin.
|
||||
|
||||
Just a stupid plugin to display the help screen.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from glances.globals import iteritems
|
||||
from glances import __version__, psutil_version
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Network plugin."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from glances.plugins.plugin.model import GlancesPluginModel
|
||||
|
@ -8,6 +8,7 @@
|
||||
#
|
||||
|
||||
"""Sensors plugin."""
|
||||
|
||||
from enum import Enum
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import List, Dict, Literal, Any
|
||||
@ -369,8 +370,7 @@ class GlancesGrabSensors(object):
|
||||
sensors_current['label'] = feature.label
|
||||
# Sensors value, limit and unit
|
||||
sensors_current['unit'] = self.sensor_unit
|
||||
sensors_current['value'] = int(
|
||||
getattr(feature, 'current', 0) if getattr(feature, 'current', 0) else 0)
|
||||
sensors_current['value'] = int(getattr(feature, 'current', 0) if getattr(feature, 'current', 0) else 0)
|
||||
system_warning = getattr(feature, 'high', None)
|
||||
system_critical = getattr(feature, 'critical', None)
|
||||
sensors_current['warning'] = int(system_warning) if system_warning is not None else None
|
||||
|
@ -97,7 +97,7 @@ class GlancesSNMPClient(object):
|
||||
cmdgen.UdpTransportTarget((self.host, self.port)),
|
||||
non_repeaters,
|
||||
max_repetitions,
|
||||
*oid
|
||||
*oid,
|
||||
)
|
||||
if self.version.startswith('2'):
|
||||
errorIndication, errorStatus, errorIndex, varBindTable = self.cmdGen.bulkCmd(
|
||||
@ -105,7 +105,7 @@ class GlancesSNMPClient(object):
|
||||
cmdgen.UdpTransportTarget((self.host, self.port)),
|
||||
non_repeaters,
|
||||
max_repetitions,
|
||||
*oid
|
||||
*oid,
|
||||
)
|
||||
else:
|
||||
# Bulk request are not available with SNMP version 1
|
||||
|
@ -4,6 +4,13 @@ skip-string-normalization = true
|
||||
exclude = '\./glances/outputs/static/*'
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 120
|
||||
target-version = "py38"
|
||||
|
||||
[tool.ruff.format]
|
||||
quote-style = "preserve"
|
||||
|
||||
[tool.ruff.lint]
|
||||
# Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.
|
||||
select = ["E", "F"]
|
||||
ignore = []
|
||||
@ -34,18 +41,13 @@ exclude = [
|
||||
"dist",
|
||||
"node_modules",
|
||||
"venv",
|
||||
"docs"
|
||||
"docs",
|
||||
"./glances/outputs/static/*"
|
||||
]
|
||||
|
||||
# Same as Black.
|
||||
line-length = 120
|
||||
|
||||
# Allow unused variables when underscore-prefixed.
|
||||
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
||||
|
||||
# Assume Python 3.11
|
||||
target-version = "py311"
|
||||
|
||||
[tool.ruff.mccabe]
|
||||
[tool.ruff.lint.mccabe]
|
||||
# Unlike Flake8, default to a complexity level of 10.
|
||||
max-complexity = 10
|
1
run.py
1
run.py
@ -3,6 +3,7 @@
|
||||
import re
|
||||
import sys
|
||||
from glances import main
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
|
38
setup.py
38
setup.py
@ -32,16 +32,20 @@ with open('README.rst', encoding='utf-8') as f:
|
||||
|
||||
def get_data_files():
|
||||
data_files = [
|
||||
('share/doc/glances', ['AUTHORS', 'COPYING', 'NEWS.rst', 'README.rst', "SECURITY.md",
|
||||
'CONTRIBUTING.md', 'conf/glances.conf']),
|
||||
('share/man/man1', ['docs/man/glances.1'])
|
||||
(
|
||||
'share/doc/glances',
|
||||
['AUTHORS', 'COPYING', 'NEWS.rst', 'README.rst', "SECURITY.md", 'CONTRIBUTING.md', 'conf/glances.conf'],
|
||||
),
|
||||
('share/man/man1', ['docs/man/glances.1']),
|
||||
]
|
||||
|
||||
return data_files
|
||||
|
||||
|
||||
with open('requirements.txt') as f:
|
||||
required = f.read().splitlines()
|
||||
|
||||
|
||||
def get_install_requires():
|
||||
requires = required
|
||||
if sys.platform.startswith('win'):
|
||||
@ -59,10 +63,23 @@ def get_install_extras_require():
|
||||
'browser': ['zeroconf>=0.19.1'],
|
||||
'cloud': ['requests'],
|
||||
'containers': ['docker>=6.1.1', 'python-dateutil', 'six', 'podman', 'packaging'],
|
||||
'export': ['bernhard', 'cassandra-driver', 'elasticsearch', 'graphitesender',
|
||||
'ibmcloudant', 'influxdb>=1.0.0', 'influxdb-client', 'pymongo',
|
||||
'kafka-python', 'pika', 'paho-mqtt', 'potsdb', 'prometheus_client',
|
||||
'pyzmq', 'statsd'],
|
||||
'export': [
|
||||
'bernhard',
|
||||
'cassandra-driver',
|
||||
'elasticsearch',
|
||||
'graphitesender',
|
||||
'ibmcloudant',
|
||||
'influxdb>=1.0.0',
|
||||
'influxdb-client',
|
||||
'pymongo',
|
||||
'kafka-python',
|
||||
'pika',
|
||||
'paho-mqtt',
|
||||
'potsdb',
|
||||
'prometheus_client',
|
||||
'pyzmq',
|
||||
'statsd',
|
||||
],
|
||||
'gpu': ['nvidia-ml-py'],
|
||||
'graph': ['pygal'],
|
||||
'ip': ['netifaces'],
|
||||
@ -71,7 +88,7 @@ def get_install_extras_require():
|
||||
'snmp': ['pysnmp'],
|
||||
'sparklines': ['sparklines'],
|
||||
'web': ['fastapi', 'uvicorn', 'jinja2', 'requests'],
|
||||
'wifi': ['wifi']
|
||||
'wifi': ['wifi'],
|
||||
}
|
||||
if sys.platform.startswith('linux'):
|
||||
extras_require['sensors'] = ['batinfo']
|
||||
@ -94,6 +111,7 @@ class tests(Command):
|
||||
def run(self):
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
for t in glob.glob('unittest-core.py'):
|
||||
ret = subprocess.call([sys.executable, t]) != 0
|
||||
if ret != 0:
|
||||
@ -138,6 +156,6 @@ setup(
|
||||
'Programming Language :: Python :: 3.10',
|
||||
'Programming Language :: Python :: 3.11',
|
||||
'Programming Language :: Python :: 3.12',
|
||||
'Topic :: System :: Monitoring'
|
||||
]
|
||||
'Topic :: System :: Monitoring',
|
||||
],
|
||||
)
|
||||
|
@ -45,8 +45,7 @@ test_config = core.get_config()
|
||||
test_args = core.get_args()
|
||||
|
||||
# Init Glances stats
|
||||
stats = GlancesStats(config=test_config,
|
||||
args=test_args)
|
||||
stats = GlancesStats(config=test_config, args=test_args)
|
||||
|
||||
# Unitest class
|
||||
# ==============
|
||||
@ -78,7 +77,14 @@ class TestGlances(unittest.TestCase):
|
||||
self.assertIsInstance(plugin_instance.get_raw(), (dict, list))
|
||||
if plugin_instance.history_enable() and isinstance(plugin_instance.get_raw(), dict):
|
||||
self.assertEqual(plugin_instance.get_key(), None)
|
||||
self.assertTrue(all([f in [h['name'] for h in plugin_instance.items_history_list] for f in plugin_instance.get_raw_history()]))
|
||||
self.assertTrue(
|
||||
all(
|
||||
[
|
||||
f in [h['name'] for h in plugin_instance.items_history_list]
|
||||
for f in plugin_instance.get_raw_history()
|
||||
]
|
||||
)
|
||||
)
|
||||
elif plugin_instance.history_enable() and isinstance(plugin_instance.get_raw(), list):
|
||||
self.assertNotEqual(plugin_instance.get_key(), None)
|
||||
|
||||
@ -135,11 +141,17 @@ class TestGlances(unittest.TestCase):
|
||||
if isinstance(plugin_instance.get_raw(), dict):
|
||||
first_history_field = plugin_instance.get_items_history_list()[0]['name']
|
||||
elif isinstance(plugin_instance.get_raw(), list):
|
||||
first_history_field = '_'.join([plugin_instance.get_raw()[0][plugin_instance.get_key()],
|
||||
plugin_instance.get_items_history_list()[0]['name']])
|
||||
first_history_field = '_'.join(
|
||||
[
|
||||
plugin_instance.get_raw()[0][plugin_instance.get_key()],
|
||||
plugin_instance.get_items_history_list()[0]['name'],
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 2)
|
||||
self.assertGreater(plugin_instance.get_raw_history(first_history_field)[1][0],
|
||||
plugin_instance.get_raw_history(first_history_field)[0][0])
|
||||
self.assertGreater(
|
||||
plugin_instance.get_raw_history(first_history_field)[1][0],
|
||||
plugin_instance.get_raw_history(first_history_field)[0][0],
|
||||
)
|
||||
|
||||
# Update stats (add third element)
|
||||
plugin_instance.update()
|
||||
@ -158,10 +170,8 @@ class TestGlances(unittest.TestCase):
|
||||
elif isinstance(plugin_instance.get_raw(), list):
|
||||
first_history_field = plugin_instance.get_items_history_list()[0]['name']
|
||||
first_item = plugin_instance.get_raw()[0][plugin_instance.get_key()]
|
||||
self.assertIsInstance(plugin_instance.get_views(item=first_item,
|
||||
key=first_history_field), dict)
|
||||
self.assertTrue('decoration' in plugin_instance.get_views(item=first_item,
|
||||
key=first_history_field))
|
||||
self.assertIsInstance(plugin_instance.get_views(item=first_item, key=first_history_field), dict)
|
||||
self.assertTrue('decoration' in plugin_instance.get_views(item=first_item, key=first_history_field))
|
||||
self.assertIsInstance(json.loads(plugin_instance.get_json_views()), dict)
|
||||
self.assertEqual(json.loads(plugin_instance.get_json_views()), plugin_instance.get_views())
|
||||
|
||||
@ -352,12 +362,14 @@ class TestGlances(unittest.TestCase):
|
||||
def test_016_subsample(self):
|
||||
"""Test subsampling function."""
|
||||
print('INFO: [TEST_016] Subsampling')
|
||||
for l_test in [([1, 2, 3], 4),
|
||||
([1, 2, 3, 4], 4),
|
||||
([1, 2, 3, 4, 5, 6, 7], 4),
|
||||
([1, 2, 3, 4, 5, 6, 7, 8], 4),
|
||||
(list(range(1, 800)), 4),
|
||||
(list(range(1, 8000)), 800)]:
|
||||
for l_test in [
|
||||
([1, 2, 3], 4),
|
||||
([1, 2, 3, 4], 4),
|
||||
([1, 2, 3, 4, 5, 6, 7], 4),
|
||||
([1, 2, 3, 4, 5, 6, 7, 8], 4),
|
||||
(list(range(1, 800)), 4),
|
||||
(list(range(1, 8000)), 800),
|
||||
]:
|
||||
l_subsample = subsample(l_test[0], l_test[1])
|
||||
self.assertLessEqual(len(l_subsample), l_test[1])
|
||||
|
||||
@ -501,8 +513,9 @@ class TestGlances(unittest.TestCase):
|
||||
plugins_list = stats.getPluginsList()
|
||||
for plugin in plugins_list:
|
||||
for method in mandatories_methods:
|
||||
self.assertTrue(hasattr(stats.get_plugin(plugin), method),
|
||||
msg='{} has no method {}()'.format(plugin, method))
|
||||
self.assertTrue(
|
||||
hasattr(stats.get_plugin(plugin), method), msg='{} has no method {}()'.format(plugin, method)
|
||||
)
|
||||
|
||||
def test_096_views(self):
|
||||
"""Test get_views method"""
|
||||
@ -511,14 +524,14 @@ class TestGlances(unittest.TestCase):
|
||||
for plugin in plugins_list:
|
||||
stats.get_plugin(plugin).get_raw()
|
||||
views_grab = stats.get_plugin(plugin).get_views()
|
||||
self.assertTrue(isinstance(views_grab, dict),
|
||||
msg='{} view is not a dict'.format(plugin))
|
||||
self.assertTrue(isinstance(views_grab, dict), msg='{} view is not a dict'.format(plugin))
|
||||
|
||||
def test_097_attribute(self):
|
||||
"""Test GlancesAttribute classes"""
|
||||
print('INFO: [TEST_097] Test attribute')
|
||||
# GlancesAttribute
|
||||
from glances.attribute import GlancesAttribute
|
||||
|
||||
a = GlancesAttribute('a', description='ad', history_max_size=3)
|
||||
self.assertEqual(a.name, 'a')
|
||||
self.assertEqual(a.description, 'ad')
|
||||
@ -542,6 +555,7 @@ class TestGlances(unittest.TestCase):
|
||||
print('INFO: [TEST_098] Test history')
|
||||
# GlancesHistory
|
||||
from glances.history import GlancesHistory
|
||||
|
||||
h = GlancesHistory()
|
||||
h.add('a', 1, history_max_size=100)
|
||||
h.add('a', 2, history_max_size=100)
|
||||
@ -633,10 +647,8 @@ class TestGlances(unittest.TestCase):
|
||||
print('INFO: [TEST_700] Secure functions')
|
||||
|
||||
if WINDOWS:
|
||||
self.assertIn(secure_popen('echo TEST'), ['TEST\n',
|
||||
'TEST\r\n'])
|
||||
self.assertIn(secure_popen('echo TEST1 && echo TEST2'), ['TEST1\nTEST2\n',
|
||||
'TEST1\r\nTEST2\r\n'])
|
||||
self.assertIn(secure_popen('echo TEST'), ['TEST\n', 'TEST\r\n'])
|
||||
self.assertIn(secure_popen('echo TEST1 && echo TEST2'), ['TEST1\nTEST2\n', 'TEST1\r\nTEST2\r\n'])
|
||||
else:
|
||||
self.assertEqual(secure_popen('echo -n TEST'), 'TEST')
|
||||
self.assertEqual(secure_popen('echo -n TEST1 && echo -n TEST2'), 'TEST1TEST2')
|
||||
@ -647,6 +659,7 @@ class TestGlances(unittest.TestCase):
|
||||
def test_800_memory_leak(self):
|
||||
"""Memory leak check"""
|
||||
import tracemalloc
|
||||
|
||||
print('INFO: [TEST_800] Memory leak check')
|
||||
tracemalloc.start()
|
||||
# 3 iterations just to init the stats and fill the memory
|
||||
|
@ -43,12 +43,9 @@ class TestGlances(unittest.TestCase):
|
||||
def http_get(self, url, gzip=False):
|
||||
"""Make the request"""
|
||||
if gzip:
|
||||
ret = requests.get(url,
|
||||
stream=True,
|
||||
headers={'Accept-encoding': 'gzip'})
|
||||
ret = requests.get(url, stream=True, headers={'Accept-encoding': 'gzip'})
|
||||
else:
|
||||
ret = requests.get(url,
|
||||
headers={'Accept-encoding': 'identity'})
|
||||
ret = requests.get(url, headers={'Accept-encoding': 'identity'})
|
||||
return ret
|
||||
|
||||
def test_000_start_server(self):
|
||||
@ -102,9 +99,24 @@ class TestGlances(unittest.TestCase):
|
||||
self.assertTrue(req.ok)
|
||||
if p in ('uptime', 'version', 'psutilversion'):
|
||||
self.assertIsInstance(req.json(), text_type)
|
||||
elif p in ('fs', 'percpu', 'sensors', 'alert', 'processlist', 'diskio',
|
||||
'hddtemp', 'batpercent', 'network', 'folders', 'amps', 'ports',
|
||||
'irq', 'wifi', 'gpu', 'containers'):
|
||||
elif p in (
|
||||
'fs',
|
||||
'percpu',
|
||||
'sensors',
|
||||
'alert',
|
||||
'processlist',
|
||||
'diskio',
|
||||
'hddtemp',
|
||||
'batpercent',
|
||||
'network',
|
||||
'folders',
|
||||
'amps',
|
||||
'ports',
|
||||
'irq',
|
||||
'wifi',
|
||||
'gpu',
|
||||
'containers',
|
||||
):
|
||||
self.assertIsInstance(req.json(), list)
|
||||
if len(req.json()) > 0:
|
||||
self.assertIsInstance(req.json()[0], dict)
|
||||
|
Loading…
Reference in New Issue
Block a user