Ramnath K. Chellappa

31 papers A* 1C 7Journal 16Unranked 7
YearRankTypeTitle / Venue / Authors
2025 C conf
ICIS
Chen Tian, Ramnath K. Chellappa, Jonathan Gomez Martinez
2021 J jnl
Manag. Sci.
Ramnath K. Chellappa, Rajiv Mukherjee
2018 J jnl
Manag. Sci.
Ramnath K. Chellappa, Amit Mehra
2017 J jnl
Data Inf. Manag.
Eric Zheng, Yong Tan, Paulo B. Góes, Ramnath K. Chellappa, D. J. Wu, Michael Shaw, Olivia R. Liu Sheng, Alok Gupta
2011 J jnl
Inf. Syst. Res.
Ramnath K. Chellappa, Raymond G. Sin, S. Siddarth
2010 J jnl
Inf. Syst. Res.
Ramnath K. Chellappa, Nilesh Saraf
2010 J jnl
Inf. Syst. Res.
Ramnath K. Chellappa, Vallabh Sambamurthy, Nilesh Saraf
2010 J jnl
Manag. Sci.
Ramnath K. Chellappa, Shivendu Shivendu
2009 C conf
ICIS
Ramnath K. Chellappa, Conny Chen
2008 J jnl
J. Manag. Inf. Syst.
Ramnath K. Chellappa, Shivendu Shivendu
2008 conf
WEIS
Ramnath K. Chellappa, Raymond G. Sin
2007 C conf
ICEC
Ramnath K. Chellappa, Raymond G. Sin
2007 conf
WEIS
Ramnath K. Chellappa, Shivendu Shivendu
2007 A* conf
EC
David Kempe, Adam Meyerson, Nainesh Solanki, Ramnath K. Chellappa
2006 J jnl
Inf. Technol. Manag.
Ramnath K. Chellappa, Shivendu Shivendu
2006 C conf
ICIS
Raymond G. Sin, Ramnath K. Chellappa, S. Siddarth
2006 conf
HICSS
Alok Gupta, Ramnath K. Chellappa
2006 conf
CHI Extended Abstracts
Alfred Kobsa, Ramnath K. Chellappa, Sarah Spiekermann
2005 J jnl
J. Manag. Inf. Syst.
Ramnath K. Chellappa, K. Ravi Kumar
2005 J jnl
Inf. Syst. Res.
Ramnath K. Chellappa, Shivendu Shivendu
2005 conf
HICSS
Alok Gupta, Ramnath K. Chellappa
2005 J jnl
Inf. Technol. Manag.
Ramnath K. Chellappa, Raymond G. Sin
2004 C conf
ICIS
Ramnath K. Chellappa, Raymond G. Sin
2004 conf
HICSS
Alok Gupta, Ramnath K. Chellappa
2003 J jnl
J. Manag. Inf. Syst.
Ramnath K. Chellappa, Shivendu Shivendu
2003 conf
HICSS
Ramnath K. Chellappa, Shivendu Shivendu
2003 C conf
ICEC
Ramnath K. Chellappa, Shivendu Shivendu
2002 J jnl
Int. J. Netw. Manag.
Ramnath K. Chellappa, Alok Gupta
1996 C conf
ICIS
Ramnath K. Chellappa, Anitesh Barua, Andrew B. Whinston
1996 J jnl
Int. J. Electron. Commer.
Anitesh Barua, Ramnath K. Chellappa, Andrew B. Whinston
1995 J jnl
J. Organ. Comput.
Anitesh Barua, Ramnath K. Chellappa, Andrew B. Whinston
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