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 @@
-
{{ localDate(value) }}
+
{{ localDate(date_iso) }}
@@ -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 158c57f9..dcc393de 100644
Binary files a/glances/outputs/static/public/glances.js and b/glances/outputs/static/public/glances.js differ
diff --git a/glances/plugins/now/__init__.py b/glances/plugins/now/__init__.py
index 49f90228..3f997b71 100644
--- a/glances/plugins/now/__init__.py
+++ b/glances/plugins/now/__init__.py
@@ -2,7 +2,7 @@
#
# This file is part of Glances.
#
-# SPDX-FileCopyrightText: 2022 Nicolas Hennion
+# 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