示例#1
0
def detect_log_config(arguments):
    """
    Detect access log config (path and format) of nginx. Offer user to select if multiple access logs are detected.
    :return: path and format of detected / selected access log
    """
    config = arguments['--config']
    if config is None:
        config = detect_config_path()
    if not os.path.exists(config):
        error_exit('Nginx config file not found: %s' % config)

    with open(config) as f:
        config_str = f.read()
    access_logs = dict(get_access_logs(config_str))
    if not access_logs:
        error_exit('Access log file is not provided and ngxtop cannot detect it from your config file (%s).' % config)

    log_formats = dict(get_log_formats(config_str))
    if len(access_logs) == 1:
        log_path, format_name = access_logs.items()[0]
        if format_name == 'combined':
            return log_path, LOG_FORMAT_COMBINED
        if format_name not in log_formats:
            error_exit('Incorrect format name set in config for access log file "%s"' % log_path)
        return log_path, log_formats[format_name]

    # multiple access logs configured, offer to select one
    print('Multiple access logs detected in configuration:')
    log_path = choose_one(access_logs.keys(), 'Select access log file to process: ')
    format_name = access_logs[log_path]
    if format_name not in log_formats:
        error_exit('Incorrect format name set in config for access log file "%s"' % log_path)
    return log_path, log_formats[format_name]
示例#2
0
def detect_log_config(arguments):
    """
    Detect access log config (path and format) of nginx. Offer user to select if multiple access logs are detected.
    :return: path and format of detected / selected access log
    """
    config = arguments['--config']
    if config is None:
        config = detect_config_path()
    if not os.path.exists(config):
        error_exit('Nginx config file not found: %s' % config)

    with open(config) as f:
        config_str = f.read()
    access_logs = dict(get_access_logs(config_str))
    if not access_logs:
        error_exit('Access log file is not provided and ngxtop cannot detect it from your config file (%s).' % config)

    log_formats = dict(get_log_formats(config_str))
    if len(access_logs) == 1:
        log_path, format_name = list(access_logs.items())[0]
        if format_name == 'combined':
            return log_path, LOG_FORMAT_COMBINED
        if format_name not in log_formats:
            error_exit('Incorrect format name set in config for access log file "%s"' % log_path)
        return log_path, log_formats[format_name]

    # multiple access logs configured, offer to select one
    print('Multiple access logs detected in configuration:')
    log_path = choose_one(list(access_logs.keys()), 'Select access log file to process: ')
    format_name = access_logs[log_path]
    if format_name not in log_formats:
        error_exit('Incorrect format name set in config for access log file "%s"' % log_path)
    return log_path, log_formats[format_name]
def main(argv=None):
    if argv is None:
        argv = sys.argv
    if (len(argv) > 5) or (len(argv) < 4):
        print "Usage: " + argv[
            0] + " <config file> <domain> <v_node> [YYYY_MM_DD]"
        print "The config file is the same format as used for backups, backup dir, snapshot name and swift credentials are used"
        print 'The domain is the domain to be restored from swift and the v_node is the vertica node name to restore data for'
        print 'If the year/month/day is specified the most recent backup on that day will be downloaded rather than prompting'
        return 1

    config_file = argv[1]
    domain = argv[2]
    v_node_name = argv[3]
    if len(argv) == 5:
        day = argv[4]
    else:
        day = None
    config = yaml.load(open(config_file, 'r'))

    # Setup logging
    logging.basicConfig(format='%(asctime)s %(message)s', level=logging.INFO)
    log = logging.getLogger(__name__)

    with LogTime(log.info, "Restore download completed"):

        # Setup swift/paths
        base_dir, prefix_dir = calculate_paths(config, v_node_name)
        swift_store = SwiftStore(config['swift_key'],
                                 config['swift_region'],
                                 config['swift_tenant'],
                                 config['swift_url'],
                                 config['swift_user'],
                                 prefix_dir,
                                 domain=domain,
                                 vnode=v_node_name)
        fs_store = FSStore(base_dir, prefix_dir)

        # Get the metadata from the last restore (if any)
        current_metadata = DirectoryMetadata(fs_store)

        # Grab the swift metadata we want to restore
        if day is None:
            pickle = choose_one(swift_store.list_pickles(),
                                "Please choose a pickle to restore from")
        else:
            # Since the list is sorted this will find the newest that matches the given day, or None otherwise
            pickle = None
            for option in swift_store.list_pickles():
                if option.startswith(day):
                    pickle = option

        if pickle is None:
            log.error('No backups found in swift.')
            sys.exit(1)
        swift_metadata = DirectoryMetadata.load_pickle(swift_store, pickle)

        # Compare the files in the current restore and swift and download/delete as necessary
        with LogTime(log.debug, "Diff completed", seconds=True):
            to_download, to_del = swift_metadata.diff(current_metadata)

        size_downloaded = 0
        with LogTime(log.info, "Download Completed"):
            for relative_path in to_download:
                size_downloaded += swift_store.download(
                    relative_path, base_dir)
        log.info("\tDownloaded %s in %d items" %
                 (sizeof_fmt(size_downloaded), len(to_download)))

        with LogTime(log.info, "Deleted %d items" % len(to_del)):
            for relative_path in to_del:
                fs_store.delete(relative_path)

        EpochFiles(os.path.join(base_dir, prefix_dir), config['snapshot_name'],
                   swift_metadata.date).restore()

        # Save the swift metadata to the local fs, to indicate the restore is done
        swift_metadata.save(fs_store)

    delete_pickles(fs_store)
def main(argv=None):
    if argv is None:
        argv = sys.argv
    if (len(argv) > 6) or (len(argv) < 5):
        print "Usage: " + argv[0] + " <config file> <domain> <v_node> <hostname> [YYYY_MM_DD]"
        print "The config file is the same format as used for backups, backup dir, snapshot name and swift credentials are used"
        print 'The domain is the domain to be restored from swift and the v_node is the vertica node name to restore data for'
        print 'If the year/month/day is specified the most recent backup on that day will be downloaded rather than prompting'
        return 1

    config_file = argv[1]
    domain = argv[2]
    v_node_name = argv[3]
    hostname = argv[4]
    if len(argv) == 6:
        day = argv[5]
    else:
        day = None
    config = yaml.load(open(config_file, 'r'))

    # Setup logging
    logging.basicConfig(format='%(asctime)s %(message)s', level=logging.INFO)
    log = logging.getLogger(__name__)

    with LogTime(log.info, "Restore download completed"):

        # Setup swift/paths
        base_dir, prefix_dir = calculate_paths(config, v_node_name)
        swift_store = SwiftStore(config['swift_key'], config['swift_region'], config['swift_tenant'],
                                 config['swift_url'], config['swift_user'], prefix_dir, domain=domain,
                                 vnode=v_node_name, hostname=hostname)
        fs_store = FSStore(base_dir, prefix_dir)

        # Get the metadata from the last restore (if any)
        current_metadata = DirectoryMetadata(fs_store)

        # Grab the swift metadata we want to restore
        if day is None:
            pickle = choose_one(swift_store.list_pickles(), "Please choose a pickle to restore from")
        else:
            # Since the list is sorted this will find the newest that matches the given day, or None otherwise
            pickle = None
            for option in swift_store.list_pickles():
                if option.startswith(day):
                    pickle = option

        if pickle is None:
            log.error('No backups found in swift.')
            sys.exit(1)
        swift_metadata = DirectoryMetadata.load_pickle(swift_store, pickle)

        # Compare the files in the current restore and swift and download/delete as necessary
        with LogTime(log.debug, "Diff completed", seconds=True):
            to_download, to_del = swift_metadata.diff(current_metadata)

        size_downloaded = 0
        with LogTime(log.info, "Download Completed"):
            for relative_path in to_download:
                size_downloaded += swift_store.download(relative_path, base_dir)
        log.info("\tDownloaded %s in %d items" % (sizeof_fmt(size_downloaded), len(to_download)))

        with LogTime(log.info, "Deleted %d items" % len(to_del)):
            for relative_path in to_del:
                fs_store.delete(relative_path)

        EpochFiles(os.path.join(base_dir, prefix_dir), config['catalog_dir'], config['snapshot_name'], swift_metadata.date).restore()

        # Save the swift metadata to the local fs, to indicate the restore is done
        swift_metadata.save(fs_store)

    delete_pickles(fs_store)
示例#5
0
def render_battle_1():
    session.monster_name = "Ugly Orc"
    turn = "player"
    player_defense = 0
    monster_defense = 0
    time_to_battle = session.monster_hp > 0 and session.player_hp > 0
    while time_to_battle:
        screen.clear_screen()
        screen.print_general_screen()
        screen.print_battle_screen()
        if turn == "player":
            dice = utils.rolls_dice()
            option = ""
            while option != "q":
                screen.print_battle_options(["Attack", "Defend"])
                option = raw_input("Choose an option (q to quit): ")
                if option == "1":
                    if monster_defense > 0:
                        damage = (dice + session.player_ap) - (
                            session.monster_dp + monster_defense)
                    else:
                        damage = (dice +
                                  session.player_ap) - session.monster_dp
                    if damage < 0:
                        damage = 0
                    screen.clear_screen()
                    screen.print_general_screen()
                    screen.print_battle_screen()
                    screen.print_battle_info(
                        "Player attacks, rolls %s, dealing %s of damage" %
                        (dice, damage))
                    raw_input("Press any key to continue...")
                    session.monster_hp = session.monster_hp - damage
                    player_defense = 0
                    turn = "monster"
                    break
                elif option == "2":
                    player_defense = dice + session.player_dp
                    screen.clear_screen()
                    screen.print_general_screen()
                    screen.print_battle_screen()
                    screen.print_battle_info(
                        "Player defends, rolls %s, getting %s of defense" %
                        (dice, player_defense))
                    raw_input("Press any key to continue...")
                    turn = "monster"
                    break
                else:
                    screen.print_error("Choose a valid option")
        elif turn == "monster":
            dice = utils.rolls_dice()
            option = utils.choose_one(["1", "2"])
            if option == "1":
                if player_defense > 0:
                    damage = (dice + session.monster_ap) - (session.player_dp +
                                                            player_defense)
                else:
                    damage = (dice + session.monster_ap) - session.player_dp
                if damage < 0:
                    damage = 0
                screen.clear_screen()
                screen.print_general_screen()
                screen.print_battle_screen()
                screen.print_battle_info(
                    "Monster attacks, rolls %s, dealing %s of damage" %
                    (dice, damage))
                raw_input("Press any key to continue...")
                session.player_hp = session.player_hp - damage
                monster_defense = 0
                turn = "player"
            elif option == "2":
                monster_defense = dice + session.monster_dp
                screen.clear_screen()
                screen.print_general_screen()
                screen.print_battle_screen()
                screen.print_battle_info(
                    "Monster defends, rolls %s, getting %s of defense" %
                    (dice, monster_defense))
                raw_input("Press any key to continue...")
                turn = "player"
            else:
                screen.print_error("Unknown monster action")
        else:
            screen.print_error("Unknown turn")

        if session.monster_hp <= 0:
            screen.print_room_notice("You won!")
            screen.print_room_notice("You found %sGP" % session.monster_gp)
            session.player_gp = session.player_gp + session.monster_gp
            rooms.render_room_5()
        elif session.player_hp <= 0:
            screen.print_room_notice("You died!")
            screen.print_game_over()
        else:
            continue
示例#6
0
def render_battle_1():
    session.monster_name = "Ugly Orc"
    turn = "player"
    player_defense = 0
    monster_defense = 0
    time_to_battle = session.monster_hp > 0 and session.player_hp > 0
    while time_to_battle:
        screen.clear_screen()
        screen.print_general_screen()
        screen.print_battle_screen()
        if turn == "player":
            dice = utils.rolls_dice()
            option = ""
            while option != "q":
                screen.print_battle_options([
                    "Attack",
                    "Defend"
                ])
                option = raw_input("Choose an option (q to quit): ")
                if option == "1":
                    if monster_defense > 0:
                        damage = (dice + session.player_ap) - (session.monster_dp + monster_defense)
                    else:
                        damage = (dice + session.player_ap) - session.monster_dp
                    if damage < 0:
                        damage = 0
                    screen.clear_screen()
                    screen.print_general_screen()
                    screen.print_battle_screen()
                    screen.print_battle_info(
                        "Player attacks, rolls %s, dealing %s of damage" % (dice, damage)
                    )
                    raw_input("Press any key to continue...")
                    session.monster_hp = session.monster_hp - damage
                    player_defense = 0
                    turn = "monster"
                    break
                elif option == "2":
                    player_defense = dice + session.player_dp
                    screen.clear_screen()
                    screen.print_general_screen()
                    screen.print_battle_screen()
                    screen.print_battle_info(
                        "Player defends, rolls %s, getting %s of defense" % (dice, player_defense)
                    )
                    raw_input("Press any key to continue...")
                    turn = "monster"
                    break
                else:
                    screen.print_error("Choose a valid option")
        elif turn == "monster":
            dice = utils.rolls_dice()
            option = utils.choose_one(["1", "2"])
            if option == "1":
                if player_defense > 0:
                    damage = (dice + session.monster_ap) - (session.player_dp + player_defense)
                else:
                    damage = (dice + session.monster_ap) - session.player_dp
                if damage < 0:
                    damage = 0
                screen.clear_screen()
                screen.print_general_screen()
                screen.print_battle_screen()
                screen.print_battle_info(
                    "Monster attacks, rolls %s, dealing %s of damage" % (dice, damage)
                )
                raw_input("Press any key to continue...")
                session.player_hp = session.player_hp - damage
                monster_defense = 0
                turn = "player"
            elif option == "2":
                monster_defense = dice + session.monster_dp
                screen.clear_screen()
                screen.print_general_screen()
                screen.print_battle_screen()
                screen.print_battle_info(
                    "Monster defends, rolls %s, getting %s of defense" % (dice, monster_defense)
                )
                raw_input("Press any key to continue...")
                turn = "player"
            else:
                screen.print_error("Unknown monster action")
        else:
            screen.print_error("Unknown turn")

        if session.monster_hp <= 0:
            screen.print_room_notice("You won!")
            screen.print_room_notice("You found %sGP" % session.monster_gp)
            session.player_gp = session.player_gp + session.monster_gp
            rooms.render_room_5()
        elif session.player_hp <= 0:
            screen.print_room_notice("You died!")
            screen.print_game_over()
        else:
            continue