From 2aa3f418dfaf4c0f80fc25d211397caefb70c0d3 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 27 Apr 2024 17:38:56 +0200 Subject: [PATCH] Alert timestamp is incorrect #2591 --- Makefile | 3 ++ glances/outputs/static/README.md | 4 +- .../static/js/components/plugin-alert.vue | 5 +- .../static/js/components/plugin-now.vue | 11 ++-- glances/outputs/static/public/glances.js | Bin 448445 -> 448345 bytes glances/plugins/now/__init__.py | 50 +++++++++++++----- 6 files changed, 47 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index 99dfff09..06423368 100644 --- a/Makefile +++ b/Makefile @@ -253,6 +253,9 @@ run-docker-ubuntu-dev: ## Start Glances Ubuntu Docker dev in console mode run-webserver: ## Start Glances in Web server mode ./venv/bin/python -m glances -C ./conf/glances.conf -w +run-webserver-local-conf: ## Start Glances in Web server mode with the system conf file + ./venv/bin/python -m glances -w + run-restapiserver: ## Start Glances in REST API server mode ./venv/bin/python -m glances -C ./conf/glances.conf -w --disable-webui diff --git a/glances/outputs/static/README.md b/glances/outputs/static/README.md index 5e8e7838..ca2d9ab1 100644 --- a/glances/outputs/static/README.md +++ b/glances/outputs/static/README.md @@ -13,7 +13,7 @@ NodeJS should be installed/updated on your system. Example on Ubuntu OS: ```bash -sudo apt install nodejs +sudo apt install nodejs npm ``` ### Upgrade NodeJS @@ -22,7 +22,7 @@ Example on Ubuntu OS: ```bash sudo apt update -sudo apt install nodejs +sudo apt install nodejs npm sudo npm install -g n sudo n lts hash -r diff --git a/glances/outputs/static/js/components/plugin-alert.vue b/glances/outputs/static/js/components/plugin-alert.vue index 5eb7cabf..84543100 100644 --- a/glances/outputs/static/js/components/plugin-alert.vue +++ b/glances/outputs/static/js/components/plugin-alert.vue @@ -95,10 +95,7 @@ export default { }, methods: { formatDate(date) { - return new Date(date) - .toISOString() - .slice(0, 19) - .replace(/[^\d-:]/, ' '); + return new Date(date).toLocaleString(); } } }; diff --git a/glances/outputs/static/js/components/plugin-now.vue b/glances/outputs/static/js/components/plugin-now.vue index c61ece90..f3ccba1e 100644 --- a/glances/outputs/static/js/components/plugin-now.vue +++ b/glances/outputs/static/js/components/plugin-now.vue @@ -1,7 +1,7 @@ @@ -14,16 +14,13 @@ export default { } }, computed: { - value() { - return this.data.stats['now']; + date_iso() { + return this.data.stats['now']['iso']; } }, methods: { localDate(date) { - console.log(date) - var local_date = new Date(date) - console.log(local_date) - return local_date.toISOString().slice(0, 19).replace(/[^\d-:]/, ' '); + return new Date(date).toLocaleString(); } } }; diff --git a/glances/outputs/static/public/glances.js b/glances/outputs/static/public/glances.js index 158c57f9a78a8d36977a0e38d8092b309b133ffd..dcc393deb9de7340fcc626d2194354445b22b48a 100644 GIT binary patch delta 123 zcmdnHUi#)b>4p}@7N!>F7M3ln=RfiKTQqz0E1W#*-8Z2$9#)wz@-C9xzmKC?J~ zx*!{y$n*=bZ0v0L<$552#0)l31*=qByS&tL1s9+)jZ{s&l6(|HG^anwV5@=~vOPJI HEh-NHN^vb} delta 229 zcmcb)PI~Wp>4p}@7N!>F7M3ln=RfIs2Kxt>6lLb6YiQ~f=VT_QY8dDkT59SQr55BQ z0(tt;aWN^nRUVeFPtxj%gNk)E3u~l_WesW@tOJYf? zMyh6Ya(-TMeom@hPJTL&Yh9LDq)=j;ms+j>RbX9|T2fk+r+}=kL{q0kuOy#X_ppN< Yq**(?HiNB-wJb5GG +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # @@ -10,18 +10,42 @@ """Now (current date) plugin.""" from time import tzname, strftime +import datetime from glances.plugins.plugin.model import GlancesPluginModel +# Fields description +# description: human readable description +# short_name: shortname to use un UI +# unit: unit type +# rate: if True then compute and add *_gauge and *_rate_per_is fields +# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)... +fields_description = { + 'custom': { + 'description': 'Current date in custom format.' + }, + 'iso': { + 'description': 'Current date in ISO 8601 format.' + } +} + class PluginModel(GlancesPluginModel): """Plugin to get the current date/time. - stats is (string) + stats is a dict: + { + "custom": "2024-04-27 16:43:52 CEST", + "iso": "2024-04-27T16:28:23.382748" + } """ def __init__(self, args=None, config=None): """Init the plugin.""" - super(PluginModel, self).__init__(args=args, config=config) + super(PluginModel, self).__init__( + args=args, + config=config, + fields_description=fields_description, + stats_init_value={}) # We want to display the stat in the curse interface self.display_curse = True @@ -35,23 +59,23 @@ class PluginModel(GlancesPluginModel): if 'global' in config.as_dict(): self.strftime = config.as_dict()['global']['strftime_format'] - def reset(self): - """Reset/init the stats.""" - self.stats = '' - def update(self): """Update current date/time.""" - # Had to convert it to string because datetime is not JSON serializable - # Add the time zone (issue #1249 / #1337 / #1598) + stats = self.get_init_value() + # Start with the ISO format + stats['iso'] = datetime.datetime.now().astimezone().replace(microsecond=0).isoformat() + + # Then the custom if self.strftime: - self.stats = strftime(self.strftime) + stats['custom'] = strftime(self.strftime) else: if len(tzname[1]) > 6: - self.stats = strftime('%Y-%m-%d %H:%M:%S %z') + stats['custom'] = strftime('%Y-%m-%d %H:%M:%S %z') else: - self.stats = strftime('%Y-%m-%d %H:%M:%S %Z') + stats['custom'] = strftime('%Y-%m-%d %H:%M:%S %Z') + self.stats = stats return self.stats def msg_curse(self, args=None, max_width=None): @@ -64,7 +88,7 @@ class PluginModel(GlancesPluginModel): # Build the string message # 23 is the padding for the process list - msg = '{:23}'.format(self.stats) + msg = '{:23}'.format(self.stats['custom']) ret.append(self.curse_add_line(msg)) return ret