Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ Changelog
1.0.9 (unreleased)
------------------

- Nothing changed yet.
- Enable timestamp logging.
[cekk]


1.0.8 (2026-06-15)
Expand Down
17 changes: 10 additions & 7 deletions src/redturtle/rsync/adapters/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,20 +280,23 @@ def create_or_update_item(self, row):
else:
self.update_item(item=item, row=row)

def _get_create_error_message(self, row, e):
return api.portal.translate(
_(
"create_item_error_msg",
default="[ERROR] Unable to create item ${row}: ${e}",
mapping={"row": row, "e": str(e)},
)
)

def create_item(self, row):
"""
Create the item.
"""
try:
res = self.do_create_item(row=row)
except Exception as e:
msg = api.portal.translate(
_(
"create_item_error_msg",
default="[ERROR] Unable to create item ${row}: ${e}",
mapping={"row": row, "e": str(e)},
)
)
msg = self._get_create_error_message(row, e)
self.log_info(msg=msg, type="error")
return
if not res:
Expand Down
27 changes: 23 additions & 4 deletions src/redturtle/rsync/scripts/rsync.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,26 @@
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# same format used by Zope in wsgi.ini
LOG_FORMAT = "%(asctime)s %(levelname)-7.7s [%(name)s] %(message)s"
LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"


def setup_logging():
"""
"bin/instance run" does not setup the logging, so every message is printed
with the Python default format, without the timestamp.

Set our format on the root logger, to have the timestamp on every line.
"""
root = logging.getLogger()
if not root.handlers:
root.addHandler(logging.StreamHandler())
formatter = logging.Formatter(fmt=LOG_FORMAT, datefmt=LOG_DATE_FORMAT)
for handler in root.handlers:
handler.setFormatter(formatter)
root.setLevel(logging.INFO)


class ScriptRunner:
"""
Expand Down Expand Up @@ -79,7 +99,7 @@ def rsync(self):
Do the rsync.
"""
start = datetime.now()
logger.info(f"[{start}] - START RSYNC")
logger.info("START RSYNC")

# setup environment
self.adapter.setup_environment()
Expand Down Expand Up @@ -127,9 +147,7 @@ def rsync(self):
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60

logger.info(
f"[{end}] - END RSYNC (duration {hours:02d}:{minutes:02d}:{seconds:02d})"
)
logger.info(f"END RSYNC (duration {hours:02d}:{minutes:02d}:{seconds:02d})")


def _main(args):
Expand All @@ -145,6 +163,7 @@ def _main(args):


def main():
setup_logging()
_main(sys.argv[3:])


Expand Down
Loading