Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add cmdline opts library/initial falco application object #1886

Merged
merged 5 commits into from
Feb 24, 2022

Commits on Feb 22, 2022

  1. Add cxxopts command line parsing library

    We'll use this to better manage the fairly large set of command line
    options in self-contained objects instead of a scattering of
    individual stack variables.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 22, 2022
    Configuration menu
    Copy the full SHA
    928299a View commit details
    Browse the repository at this point in the history
  2. Add notion of falco application object/cmdline opts skeleton

    Add a notion of a falco application object. Eventually this will
    replace the bulk of falco_init and contain methods to:
    
    - Parse/validate command line options
    - Parse/validate falco config
    - Initialize prerequsites (inspector, falco engine, webserver, etc)
    - Load plugins
    - Load/validate rules
    - Command/subcommand execution (e.g. --list/--list-fields, or
      nothing specified to run "main" loop)
    
    For now, it is only responsible for command line options handling,
    which is stubbed out.
    
    Currently, the only public methods are init() to initialize everything
    and copts() to access command line options.
    
    Command line options are held in a different class
    falco::app::cmdline_opts. application::copts() returns a reference to
    that object, which allows access to parsed command line options bound
    to various public instance variables.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 22, 2022
    Configuration menu
    Copy the full SHA
    08ab8de View commit details
    Browse the repository at this point in the history

Commits on Feb 23, 2022

  1. Initial falco::app::cmdline_options class

    Fill in an initial falco::app::cmdline_options class using cxxopts
    library to hold options:
    
    - falco::app::cmdline_options contains a cxxopts::Options object to
      parse options and a cxxopts::ParseResult to hold the result.
    - The only meaningful public method is parse() which parses argc/argv
      and returns true/false + error.
    - The parsed options are all public instance variables of the object
      and generally use the same names of the corresponding variables in
      the old falco_init(). These variables are all bound to the
      corresponding command line option and are updated in parse().
    - In a few cases, the command line option does not directly map to a
      bound variable (e.g. -b to set buffer format, -p/-pk/-pc to set
      extra formatting options, etc.) In these cases the option values are
      read after parsing and update the public instance variable.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 23, 2022
    Configuration menu
    Copy the full SHA
    4db8069 View commit details
    Browse the repository at this point in the history
  2. Small changes to falco engine/config wrt new cmdline option parsing

    For the most part, replacing getopt() with cxxopts + falco application
    had no effect on falco engine/config interfaces. However, there were a
    few places where it was wasier to change the interface than add
    middleware code that transformed from, for example, vectors to lists.
    
    This commit has those changes.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 23, 2022
    Configuration menu
    Copy the full SHA
    7e1eaa3 View commit details
    Browse the repository at this point in the history
  3. Update falco main to use falco application + cmdline_opts

    Update falco's main falco_init() to use a falco::app::application and
    falco::app::cmdline_opts object instead of storing all its command
    line state in stack variables.
    
    The bulk of the removed code is in usage() (not needed as cxxopt's
    help() is self-documenting.) and getopt_long() which is replaced by
    app.init(argc, argv).
    
    For the most part, this is simply replacing references to local
    variables (e.g. "all_events") to the bound variable inside the
    cmdline_opts object (e.g. app.copts().all_events).
    
    There are a few cases where more complex logic was used (output
    formats, initializing k8s/mesos with string pointers), and those
    changes are still in falco_init().
    
    For the most part, the monolithic parts of falco_init that involve
    reading config files, creating the inspector, loading rules, etc are
    still present. Those will be addressed in later changes.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 23, 2022
    Configuration menu
    Copy the full SHA
    5a0e7b9 View commit details
    Browse the repository at this point in the history