Oleg G. Monakhov

22 papers B 4Journal 5Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Access
Emilia A. Monakhova, Oleg G. Monakhov, Edward R. Rzaev, Aleksandr A. Amerikanov, Mikhail Y. Romashikhin, Aleksandr Romanov
2023 B conf
PaCT
Oleg G. Monakhov, Emilia A. Monakhova, Sergey Kireev
2023 J jnl
IEEE Trans. Netw. Sci. Eng.
Emilia A. Monakhova, Oleg G. Monakhov, Aleksandr Yu. Romanov
2021 J jnl
IEEE Access
Oleg G. Monakhov, Emilia A. Monakhova, Aleksandr Yu. Romanov, Andrej M. Sukhov, Evgenii V. Lezhnev
2017 J jnl
Int. J. Syst. Assur. Eng. Manag.
Hira Zaheer, Millie Pant, Sushil Kumar, Oleg G. Monakhov, Emilia A. Monakhova, Kusum Deep
2015 conf
SocProS (2)
Hira Zaheer, Millie Pant, Oleg G. Monakhov, Emilia A. Monakhova
2008 J jnl
J. Vis. Lang. Comput.
Yutaka Watanobe, Nikolay N. Mirenkov, Rentaro Yoshioka, Oleg G. Monakhov
2005 conf
AAIP
Oleg G. Monakhov, Emilia A. Monakhova
2003 B conf
Discovery Science
Oleg G. Monakhov, Emilia A. Monakhova
2003 conf
Euro-Par
Oleg G. Monakhov
2002 B conf
IEEE Congress on Evolutionary Computation
Oleg G. Monakhov, Emilia A. Monakhova
2000 conf
ISPAN
Oleg G. Monakhov, Emilia A. Monakhova
1999 conf
EvoWorkshops
Emilia A. Monakhova, Oleg G. Monakhov, E. V. Mukhoed
1998 conf
HPCN Europe
Nikolay N. Mirenkov, Oleg G. Monakhov, O. J. Chunikhin
1998 conf
PARA
Oleg G. Monakhov, E. B. Grosbein
1997 conf
ISPAN
Oleg G. Monakhov, O. J. Chunikhin
1996 conf
PARA
Oleg G. Monakhov, O. Y. Chunikhin
1996 conf
PARA
S. S. Artemiev, S. A. Gusev, Oleg G. Monakhov
1995 conf
PARA
S. S. Artemiev, S. A. Gusev, Oleg G. Monakhov
1995 conf
PARA
Oleg G. Monakhov
1995 B conf
PaCT
A. Kremlev, Oleg G. Monakhov, Thomas Thiel
1994 conf
PARA
V. D. Elinov, Oleg G. Monakhov, I. I. Ushatinsky
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