Iryna Turchenko

15 papers Journal 5Unranked 10
YearRankTypeTitle / Venue / Authors
2024 conf
ACIT
Nadiia Vasylkiv, Lesia Dubchak, Mikolaj P. Karpinski, Iryna Turchenko, Liubomyr Flud, Tetiana Nadvynychna
2023 conf
IDAACS
Viktor Turchenko, Iryna Turchenko, Nadiia Vasylkiv
2023 conf
ACIT
Lesia Dubchak, Nadiia Vasylkiv, Iryna Turchenko, Tetiana Nadvynychna, Nadiia Savka, Amantius Akimjak
2023 conf
IDAACS
Nadiia Vasylkiv, Lesia Dubchak, Iryna Turchenko, Anastasiia Volkova
2022 conf
ACIT
Lesia Dubchak, Nadiia Vasylkiv, Iryna Turchenko, Myroslav Komar, Tetiana Nadvynychna, Rudolf Volner
2021 conf
IDAACS
Oleksandr Martynyuk, Oleksandr Drozd, Anatoliy Sachenko, Hanna Stepova, Dmitry Martynyuk, Lyudmila Sugak, Iryna Turchenko
2020 conf
ACIT
Nadiia Vasylkiv, Iryna Turchenko, Lesia Dubchak
2019 conf
IDAACS
Oleksandr Drozd, Anatoliy Sachenko, Konrad Grzeszczyk, Nadiya Vasylkiv, Julia V. Drozd, Iryna Turchenko, Andriy F. Karachka
2019 conf
IDAACS
Nadiya Vasylkiv, Lesia Dubchak, Iryna Turchenko, Iryna Ivashchuk, Ruslan Savchyshyn
2017 conf
IDAACS
Nadiya Vasylkiv, Lesia Dubchak, Taras Lendyuk, Iryna Turchenko, Inna Shylinska, Marek Boguslav Aleksander
2013 J jnl
Int. J. Comput.
Volodymyr Turchenko, Vladyslav Shults, Iryna Turchenko, Richard M. Wallace, Mehdi Sheikhalishahi, José Luis Vázquez-Poletti, Lucio Grandinetti
2008 J jnl
Int. J. Comput.
Iryna Turchenko
2006 J jnl
Int. J. Comput.
Iryna Turchenko, Volodymyr Kochan, Anatoly Sachenko
2004 J jnl
Int. J. Comput.
Iryna Turchenko, Volodymyr Kochan, Anatoly Sachenko
2003 J jnl
Int. J. Comput.
Oleh Adamiv, Vasyl Koval, Iryna Turchenko
redb/logging_utils.py
← Index redb/logging_utils.py python
"""
Logging utilities and shared enums for REDB.

Contains the ImportResult enum, log formatters, and logger setup functions
used across the ingestor pipeline.
"""
import logging
from logging.handlers import QueueHandler
import os
from enum import Enum


class ImportResult(Enum):
    CORRECTLY = 0
    PARTIALLY = 1
    FAILED = 2
    PENDING = 3
    SKIPPED = 4


class FileNameFormatter(logging.Formatter):
    def format(self, record):
        record.filenameinfo = getattr(record, "filenameinfo", "unknown")
        return super().format(record)


def setup_logger(log_queue, filename):
    logger = logging.getLogger(filename)
    if not logger.handlers:
        if os.getenv("SERVER_ENV") == "prod":
            logger.setLevel(logging.INFO)
        else:
            logger.setLevel(logging.DEBUG)
        handler = QueueHandler(log_queue)
        logger.addHandler(handler)
        logger.propagate = False  # Prevent propagation to parent loggers
    return logger


def logger_thread(log_queue, log_file):
    handler = logging.FileHandler(log_file)
    formatter = FileNameFormatter(
        "%(asctime)s - %(filenameinfo)s - %(levelname)s - %(message)s"
    )
    handler.setFormatter(formatter)

    while True:
        try:
            record = log_queue.get()
            if record is None:
                break
            # Format and write the log record
            message = formatter.format(record)
            handler.stream.write(message + "\n")
            handler.stream.flush()
        except Exception:
            import traceback
            import sys

            print("[ERR] Error in logger thread:", file=sys.stderr)
            traceback.print_exc(file=sys.stderr)


def setup_direct_logger(log_file, filename, pid=None):
    """Setup a logger that writes directly to the log file without using a queue."""
    # Create a unique logger name using the process ID
    logger_name = f"{filename}_{pid}" if pid else filename
    logger = logging.getLogger(logger_name)

    if not logger.handlers:
        handler = logging.FileHandler(log_file)
        formatter = logging.Formatter("%(asctime)s - %(filenameinfo)s - %(levelname)s - %(message)s")
        handler.setFormatter(formatter)
        logger.addHandler(handler)

        if os.getenv("SERVER_ENV") == "prod":
            logger.setLevel(logging.INFO)
        else:
            logger.setLevel(logging.DEBUG)

    # Add filename info to the logger's extra info
    extra = {"filenameinfo": filename}
    logger = logging.LoggerAdapter(logger, extra)

    return logger