Skip to content

Commit d99c837

Browse files
authored
[Fixes #13459] Improve sync_geonode_datasets logging (#13477)
* [Fixes #13459] ported Improve sync_geonode_datasets logging * [Fixes #13459] fix logger info not to show if dataset_error is not present
1 parent b9cffb5 commit d99c837

File tree

2 files changed

+50
-43
lines changed

2 files changed

+50
-43
lines changed
Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,24 @@
11
import logging
2-
from logging import getLevelName
3-
4-
from django.conf import settings
52

63
DEFAULT_COMMAND_LOGGER_NAME = "geonode.commands"
74

85

9-
def setup_logger(logger_name=DEFAULT_COMMAND_LOGGER_NAME, formatter_name="command", handler_name="command", level=logging.INFO):
6+
def setup_logger(logger_name=DEFAULT_COMMAND_LOGGER_NAME, level=logging.INFO, **kwargs):
107
logger = logging.getLogger(logger_name)
118

12-
if logger_name not in settings.LOGGING["loggers"]:
13-
format = "%(levelname)-7s %(asctime)s %(message)s"
14-
15-
settings.LOGGING["formatters"][formatter_name] = {
16-
"format": format
17-
}
18-
settings.LOGGING["handlers"][handler_name] = {
19-
"level": "DEBUG",
20-
"class": "logging.StreamHandler",
21-
"formatter": formatter_name
22-
}
23-
settings.LOGGING["loggers"][logger_name] = {
24-
"handlers": [handler_name],
25-
"level": getLevelName(level),
26-
"propagate": False
27-
}
28-
29-
handler = logging.StreamHandler()
30-
handler.setFormatter(logging.Formatter(fmt=format))
31-
handler.setLevel(level)
32-
33-
logger.addHandler(handler)
34-
logger.setLevel(level)
35-
logger.propagate = False
9+
# remove previous handlers
10+
for old_handler in logger.handlers:
11+
logger.removeHandler(old_handler)
12+
13+
format = "%(levelname)-7s %(asctime)s %(message)s"
14+
15+
handler = logging.StreamHandler()
16+
handler.setFormatter(logging.Formatter(fmt=format))
17+
handler.setLevel(level)
18+
19+
logger.addHandler(handler)
20+
21+
logger.setLevel(level)
22+
logger.propagate = False
3623

3724
return logger

geonode/geoserver/management/commands/sync_geonode_datasets.py

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,18 @@
1818
#########################################################################
1919
import sys
2020
import json
21+
import logging
2122

2223
from django.core.management.base import BaseCommand
24+
from geonode.base.management.command_utils import setup_logger
2325

2426
from geonode.layers.models import Dataset
2527
from geonode.security.views import _perms_info_json
2628
from geonode.base.utils import remove_duplicate_links
2729
from geonode.geoserver.helpers import create_gs_thumbnail, sync_instance_with_geoserver, set_attributes_from_geoserver
2830

31+
logger = logging.getLogger(__name__)
32+
2933

3034
def sync_geonode_datasets(
3135
ignore_errors,
@@ -46,47 +50,51 @@ def sync_geonode_datasets(
4650
layers_count = layers.count()
4751
count = 0
4852
dataset_errors = []
53+
if not layers:
54+
logger.warning(f"No layers selected by filter '{filter}'")
55+
return
4956
for layer in layers:
5057
try:
5158
count += 1
52-
print(f"Syncing layer {count}/{layers_count}: {layer.name}")
59+
logger.info(f"=== Syncing layer {count}/{layers_count}: {layer.name}")
5360
if updatepermissions:
54-
print("Syncing permissions...")
61+
logger.info("Syncing permissions...")
5562
# sync permissions in GeoFence
5663
perm_spec = json.loads(_perms_info_json(layer))
5764
# re-sync GeoFence security rules
5865
layer.set_permissions(perm_spec)
5966
if updateattributes:
6067
# recalculate the layer statistics
68+
logger.info("Setting attributes...")
6169
set_attributes_from_geoserver(layer, overwrite=True)
6270
if updatethumbnails:
63-
print("Regenerating thumbnails...")
71+
logger.info("Regenerating thumbnails...")
6472
create_gs_thumbnail(layer, overwrite=True, check_bbox=False)
6573
if updatebbox:
66-
print("Regenerating BBOX...")
74+
logger.info("Regenerating BBOX...")
6775
sync_instance_with_geoserver(layer.id, updatemetadata=False, updatebbox=True)
6876
if updatemetadata:
69-
print("Updating metadata...")
77+
logger.info("Updating metadata...")
7078
sync_instance_with_geoserver(layer.id, updatemetadata=True, updatebbox=False)
7179
if removeduplicates:
7280
# remove duplicates
73-
print("Removing duplicate links...")
81+
logger.info("Removing duplicate links...")
7482
remove_duplicate_links(layer)
7583
except (Exception, RuntimeError):
7684
dataset_errors.append(layer.alternate)
7785
exception_type, error, traceback = sys.exc_info()
78-
print(exception_type, error, traceback)
86+
logger.info(exception_type, error, traceback)
7987
if ignore_errors:
8088
pass
8189
else:
82-
import traceback
83-
84-
traceback.print_exc()
85-
print("Stopping process because --ignore-errors was not set and an error was found.")
90+
logger.error(
91+
"Stopping process because --ignore-errors was not set and an error was found.", stack_info=True
92+
)
8693
return
87-
print(f"There are {len(dataset_errors)} layers which could not be updated because of errors")
88-
for dataset_error in dataset_errors:
89-
print(dataset_error)
94+
if dataset_errors:
95+
logger.info(f"There are {len(dataset_errors)} layers which could not be updated because of errors")
96+
for dataset_error in dataset_errors:
97+
logger.info(dataset_error)
9098

9199

92100
class Command(BaseCommand):
@@ -148,10 +156,22 @@ def add_arguments(self, parser):
148156
action="store_true",
149157
dest="updatemetadata",
150158
default=False,
151-
help="Update the Geoserver ayer metadata.",
159+
help="Update the Geoserver layer metadata.",
160+
)
161+
parser.add_argument(
162+
"--debug",
163+
action="store_true",
164+
dest="log_debug",
165+
default=False,
166+
help="Enable debug logging.",
152167
)
153168

154169
def handle(self, **options):
170+
log_level = logging.DEBUG if options.get("log_debug") else logging.INFO
171+
setup_logger(__name__, level=log_level)
172+
import geonode.geoserver.helpers as helpers
173+
174+
setup_logger(helpers.__name__, level=log_level)
155175
ignore_errors = options.get("ignore_errors")
156176
removeduplicates = options.get("removeduplicates")
157177
updatepermissions = options.get("updatepermissions")

0 commit comments

Comments
 (0)