예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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