def setup_loggers(opts): """Sets up the file and console loggers :params dict opts: Dictionary of options from the commandline """ import logging root = logging.getLogger() root.setLevel(logging.NOTSET) import log # Log to file unless --log is a single dash if opts['--log'] != '-': import os.path log_filename = log.get_log_filename(opts['MANIFEST']) logpath = os.path.join(opts['--log'], log_filename) file_handler = log.get_file_handler(path=logpath, debug=True) root.addHandler(file_handler) if opts['--color'] == 'never': colorize = False elif opts['--color'] == 'always': colorize = True else: # If --color=auto (default), decide whether to colorize by whether stderr is a tty. import os colorize = os.isatty(2) console_handler = log.get_console_handler(debug=opts['--debug'], colorize=colorize) root.addHandler(console_handler)
def main(): """Main function for invoking the bootstrap process Raises: Exception """ # Get the commandline arguments opts = get_opts() # Require root privileges, except when doing a dry-run where they aren't needed import os if os.geteuid() != 0 and not opts['--dry-run']: raise Exception('This program requires root privileges.') import log # Log to file unless --log is a single dash if opts['--log'] != '-': # Setup logging if not os.path.exists(opts['--log']): os.makedirs(opts['--log']) log_filename = log.get_log_filename(opts['MANIFEST']) logfile = os.path.join(opts['--log'], log_filename) else: logfile = None log.setup_logger(logfile=logfile, debug=opts['--debug']) # Everything has been set up, begin the bootstrapping process run(opts)
def get_log_browser_panel(parent=None, sLogFileName=None, tLogTypes=None, dtStartFilter=None, dtStopFilter=None, tFilters=None, sFilterLogic=None): """ Функция получения объекта панели просмотра журнала сообщений программы. @param parent: Родительское окно. Если не указано, то берется главное окно. @param sLogFileName: Полное имя log файла. @param tLogTypes: Кортеж/список типов сообщений. @param dtStartFilter: Начальная дата/время фильтра по времени. Если не определено, то выбор происходит с начала файла. @param dtStopFilter: Конечная дата/время фильтра по времени. Если не определено, то выбор происходит до конца файла. @param tFilters: Кортеж/список дополнительных методов фильтрации. Методы фильтрации задаются как lambda или функции, которые принимают Словарь записи, а возвращают True-запись попадает в выбор/False - не попадает. @param sFilterLogic: Комманда способа обработки дополнительных фильтров AND - Чтобы запись попала в выбор необходимо положительное выполнение всех фильтров, OR - Чтобы запись попала в выбор достаточно положительное выполнение одного фильтра. @return: Объект панели или None в случае ошибки. """ if parent is None: parent = wx.GetApp().GetTopWindow() if sLogFileName is None: sLogFileName = log.get_log_filename() panel = icLogBrowserPanel(parent=parent) panel.init() panel.set_log_filename(sLogFileName) panel.set_datetime_filter_range(dtStartFilter, dtStopFilter) panel.set_log_types_filter(*(tLogTypes if tLogTypes else ())) panel.set_filters(sFilterLogic, *(tFilters if tFilters else ())) panel.refresh() return panel
def main(): """Main function for invoking the bootstrap process :raises Exception: When the invoking user is not root and --dry-run isn't specified """ # Get the commandline arguments opts = get_opts() # Require root privileges, except when doing a dry-run where they aren't needed import os if os.geteuid() != 0 and not opts['--dry-run']: raise Exception('This program requires root privileges.') import log # Log to file unless --log is a single dash if opts['--log'] != '-': # Setup logging if not os.path.exists(opts['--log']): os.makedirs(opts['--log']) log_filename = log.get_log_filename(opts['MANIFEST']) logfile = os.path.join(opts['--log'], log_filename) else: logfile = None log.setup_logger(logfile=logfile, debug=opts['--debug']) # Everything has been set up, begin the bootstrapping process run(opts)
async def upload_logs_to_dropbox(uploader_path, upload_interval=60): uploaded_logs = set() upload_consecutive_timeouts = 0 async def try_upload(log_filename, uploader_path): nonlocal upload_consecutive_timeouts uploaded = await upload_log(log_filename, uploader_path) if not uploaded: upload_consecutive_timeouts += 1 logger.warning('Upload timeout! Consecutive timeouts {}'.format( upload_consecutive_timeouts)) return False else: upload_consecutive_timeouts = 0 return True while True: # always upload base log await try_upload(get_base_log_filename(), uploader_path) # upload rotated logs only once log_filename = get_log_filename() if log_filename not in uploaded_logs: success = await try_upload(log_filename, uploader_path) if success: uploaded_logs.add(log_filename) await asyncio.sleep(upload_interval)
def main(): """Main function for invoking the bootstrap process Raises: Exception """ # Get the commandline arguments import os args = get_args() # Require root privileges, except when doing a dry-run where they aren't needed if os.geteuid() != 0 and not args.dry_run: raise Exception('This program requires root privileges.') # Setup logging import log log_dir = log.create_log_dir() log_filename = log.get_log_filename(args.manifest) logfile = os.path.join(log_dir, log_filename) log.setup_logger(logfile=logfile, debug=args.debug) # Everything has been set up, begin the bootstrapping process run(args)
def show_log_browser_dlg(parent=None, sLogFileName=None, tLogTypes=None, dtStartFilter=None, dtStopFilter=None, tFilters=None, sFilterLogic=None): """ Вызвать диалоговое окно @param parent: Родительское окно. Если не указано, то берется главное окно. @param sLogFileName: Полное имя log файла. @param tLogTypes: Кортеж/список типов сообщений. @param dtStartFilter: Начальная дата/время фильтра по времени. Если не определено, то выбор происходит с начала файла. @param dtStopFilter: Конечная дата/время фильтра по времени. Если не определено, то выбор происходит до конца файла. @param tFilters: Кортеж/список дополнительных методов фильтрации. Методы фильтрации задаются как lambda или функции, которые принимают Словарь записи, а возвращают True-запись попадает в выбор/False - не попадает. @param sFilterLogic: Комманда способа обработки дополнительных фильтров AND - Чтобы запись попала в выбор необходимо положительное выполнение всех фильтров, OR - Чтобы запись попала в выбор достаточно положительное выполнение одного фильтра. @return: True/False. """ if parent is None: parent = wx.GetApp().GetTopWindow() if sLogFileName is None: sLogFileName = log.get_log_filename() dlg = icLogBrowserDlg(parent=parent) dlg.init() dlg.set_log_filename(sLogFileName) dlg.set_datetime_filter_range(dtStartFilter, dtStopFilter) dlg.set_log_types_filter(*(tLogTypes if tLogTypes else ())) dlg.set_filters(sFilterLogic, *(tFilters if tFilters else ())) dlg.refresh() result = dlg.ShowModal() return result == wx.ID_OK