Navidreza Asadi

17 papers A* 1B 2Journal 5Unranked 9
YearRankTypeTitle / Venue / Authors
2025 conf
PACMI@SOSP
Navidreza Asadi, Dalal Ali, Razvan-Mihai Ursu, Wolfgang Kellerer
2025 B conf
NetSoft
Razvan-Mihai Ursu, Navidreza Asadi, Johannes Zerwas, Leon Wong, Wolfgang Kellerer
2025 conf
BRAINS
Porya Elahi Kheibary, Navidreza Asadi, Wolfgang Kellerer
2025 conf
FedEdge-AI@MobiCom
Navidreza Asadi, Halil Ibrahim Bengu, Lars Wulfert, Hendrik Wöhrle, Wolfgang Kellerer
2025 conf
USENIX ATC
Giovanni Bartolomeo, Navidreza Asadi, Wolfgang Kellerer, Jörg Ott, Nitinder Mohan
2025 A* conf
MobiCom
Navidreza Asadi, Halil Ibrahim Bengu, Lars Wulfert, Hendrik Wöhrle, Wolfgang Kellerer
2025 conf
NGNO@MM
Navidreza Asadi, Razvan-Mihai Ursu, Leon Wong, Wolfgang Kellerer
2025 conf
SIGCOMM (Posters and Demos)
Navidreza Asadi, Razvan-Mihai Ursu, Johannes Zerwas, Leon Wong, Wolfgang Kellerer
2024 J jnl
IEEE Comput. Archit. Lett.
Hossein Katebi, Navidreza Asadi, Maziar Goudarzi
2024 J jnl
IEEE Internet Things J.
Navidreza Asadi, Maziar Goudarzi
2023 conf
DistributedML@CoNEXT
Lars Wulfert, Navidreza Asadi, Wen-Yu Chung, Christian Wiede, Anton Grabmaier
2023 J jnl
CoRR
Navidreza Asadi, Maziar Goudarzi
2023 conf
NFV-SDN
Kaan Aykurt, Razvan-Mihai Ursu, Johannes Zerwas, Patrick Krämer, Navidreza Asadi, Leon Wong, Wolfgang Kellerer
2023 B conf
NetSoft
Razvan-Mihai Ursu, Johannes Zerwas, Patrick Krämer, Navidreza Asadi, Phil Rodgers, Leon Wong, Wolfgang Kellerer
2022 J jnl
CoRR
Hossein Katebi, Navidreza Asadi, Maziar Goudarzi
2022 conf
NoF
Johannes Zerwas, Patrick Krämer, Razvan-Mihai Ursu, Navidreza Asadi, Phil Rodgers, Leon Wong, Wolfgang Kellerer
2022 J jnl
CoRR
Navidreza Asadi, Maziar Goudarzi
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