Merge pull request #754 from YunoHost/fix-log_corrupted_md_file

[fix] Path not displayed in log_corrupted_md_file
This commit is contained in:
Alexandre Aubin 2019-08-04 18:01:53 +02:00 committed by GitHub
commit 0ad91b027c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 16 deletions

View file

@ -252,7 +252,7 @@
"invalid_url_format": "Invalid URL format", "invalid_url_format": "Invalid URL format",
"ip6tables_unavailable": "You cannot play with ip6tables here. You are either in a container or your kernel does not support it", "ip6tables_unavailable": "You cannot play with ip6tables here. You are either in a container or your kernel does not support it",
"iptables_unavailable": "You cannot play with iptables here. You are either in a container or your kernel does not support it", "iptables_unavailable": "You cannot play with iptables here. You are either in a container or your kernel does not support it",
"log_corrupted_md_file": "The yaml metadata file associated with logs is corrupted: '{md_file}'", "log_corrupted_md_file": "The yaml metadata file associated with logs is corrupted: '{md_file}\nError: {error}'",
"log_category_404": "The log category '{category}' does not exist", "log_category_404": "The log category '{category}' does not exist",
"log_link_to_log": "Full log of this operation: '<a href=\"#/tools/logs/{name}\" style=\"text-decoration:underline\">{desc}</a>'", "log_link_to_log": "Full log of this operation: '<a href=\"#/tools/logs/{name}\" style=\"text-decoration:underline\">{desc}</a>'",
"log_help_to_get_log": "To view the log of the operation '{desc}', use the command 'yunohost log display {name}'", "log_help_to_get_log": "To view the log of the operation '{desc}', use the command 'yunohost log display {name}'",

View file

@ -33,9 +33,10 @@ from datetime import datetime
from logging import FileHandler, getLogger, Formatter from logging import FileHandler, getLogger, Formatter
from moulinette import m18n, msettings from moulinette import m18n, msettings
from moulinette.core import MoulinetteError
from yunohost.utils.error import YunohostError from yunohost.utils.error import YunohostError
from moulinette.utils.log import getActionLogger from moulinette.utils.log import getActionLogger
from moulinette.utils.filesystem import read_file from moulinette.utils.filesystem import read_file, read_yaml
CATEGORIES_PATH = '/var/log/yunohost/categories/' CATEGORIES_PATH = '/var/log/yunohost/categories/'
OPERATIONS_PATH = '/var/log/yunohost/categories/operation/' OPERATIONS_PATH = '/var/log/yunohost/categories/operation/'
@ -102,13 +103,8 @@ def log_list(category=[], limit=None, with_details=False):
entry["started_at"] = log_datetime entry["started_at"] = log_datetime
if with_details: if with_details:
with open(md_path, "r") as md_file: metadata = read_yaml(md_path)
try: entry["success"] = metadata.get("success", "?") if metadata else "?"
metadata = yaml.safe_load(md_file)
except yaml.YAMLError:
logger.warning(m18n.n('log_corrupted_md_file', file=md_path))
entry["success"] = metadata.get("success", "?") if metadata else "?"
result[category].append(entry) result[category].append(entry)
@ -186,17 +182,19 @@ def log_display(path, number=None, share=False):
if os.path.exists(md_path): if os.path.exists(md_path):
with open(md_path, "r") as md_file: with open(md_path, "r") as md_file:
try: try:
metadata = yaml.safe_load(md_file) metadata = read_yaml(md_file)
infos['metadata_path'] = md_path except MoulinetteError as e:
infos['metadata'] = metadata error = m18n.n('log_corrupted_md_file', md_file=md_path, error=e)
if 'log_path' in metadata:
log_path = metadata['log_path']
except yaml.YAMLError:
error = m18n.n('log_corrupted_md_file', file=md_path)
if os.path.exists(log_path): if os.path.exists(log_path):
logger.warning(error) logger.warning(error)
else: else:
raise YunohostError(error) raise YunohostError(error)
else:
infos['metadata_path'] = md_path
infos['metadata'] = metadata
if 'log_path' in metadata:
log_path = metadata['log_path']
# Display logs if exist # Display logs if exist
if os.path.exists(log_path): if os.path.exists(log_path):