options.cc 6.27 KB
Newer Older
1
/* Copyright (C) 2003 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */

17
#ifdef __GNUC__
18
#pragma implementation
19 20
#endif

21 22 23 24 25 26
#include "options.h"

#include <my_global.h>
#include <my_sys.h>
#include <my_getopt.h>

27
#include "priv.h"
28 29 30

#define QUOTE2(x) #x
#define QUOTE(x) QUOTE2(x)
31

32 33 34 35
char Options::run_as_service;
const char *Options::log_file_name= QUOTE(DEFAULT_LOG_FILE_NAME);
const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME);
const char *Options::socket_file_name= QUOTE(DEFAULT_SOCKET_FILE_NAME);
36 37 38 39 40 41 42
const char *Options::password_file_name= QUOTE(DEFAULT_PASSWORD_FILE_NAME);
const char *Options::default_mysqld_path= QUOTE(DEFAULT_MYSQLD_PATH);
const char *Options::default_admin_user= QUOTE(DEFAULT_USER);
const char *Options::default_admin_password= QUOTE(DEFAULT_PASSWORD);
const char *Options::bind_address= 0;              /* No default value */
uint Options::monitoring_interval= DEFAULT_MONITORING_INTERVAL;
uint Options::port_number= DEFAULT_PORT;
43 44 45 46 47 48 49 50 51 52

/*
  List of options, accepted by the instance manager.
  List must be closed with empty option.
*/

enum options {
  OPT_LOG= 256,
  OPT_PID_FILE,
  OPT_SOCKET,
53 54 55 56 57 58 59 60 61 62
  OPT_PASSWORD_FILE,
  OPT_MYSQLD_PATH,
  OPT_RUN_AS_SERVICE,
  OPT_USER,
  OPT_PASSWORD,
  OPT_DEFAULT_ADMIN_USER,
  OPT_DEFAULT_ADMIN_PASSWORD,
  OPT_MONITORING_INTERVAL,
  OPT_PORT,
  OPT_BIND_ADDRESS
63
};
64

65 66 67 68 69 70 71 72 73 74 75 76
static struct my_option my_long_options[] =
{
  { "help", '?', "Display this help and exit.",
   0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 },

  { "log", OPT_LOG, "Path to log file. Used only with --run-as-service.",
    (gptr *) &Options::log_file_name, (gptr *) &Options::log_file_name,
    0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

  { "pid-file", OPT_PID_FILE, "Pid file to use.",
    (gptr *) &Options::pid_file_name, (gptr *) &Options::pid_file_name,
   0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
77

78 79 80 81
  { "socket", OPT_SOCKET, "Socket file to use for connection.",
    (gptr *) &Options::socket_file_name, (gptr *) &Options::socket_file_name,
    0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

petr@mysql.com's avatar
petr@mysql.com committed
82
  { "bind-address", OPT_BIND_ADDRESS, "Bind address to use for connection.",
83 84 85 86 87 88 89 90 91 92 93 94 95
    (gptr *) &Options::bind_address, (gptr *) &Options::bind_address,
    0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

  { "port", OPT_PORT, "Port number to use for connections",
    (gptr *) &Options::port_number, (gptr *) &Options::port_number,
    0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

  { "password-file", OPT_PASSWORD_FILE, "Look for Instane Manager users"
                                        " and passwords here.",
    (gptr *) &Options::password_file_name,
    (gptr *) &Options::password_file_name,
    0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

petr@mysql.com's avatar
petr@mysql.com committed
96
  { "default-mysqld-path", OPT_MYSQLD_PATH, "Where to look for MySQL"
97 98 99 100
                                            " Server binary.",
    (gptr *) &Options::default_mysqld_path, (gptr *) &Options::default_mysqld_path,
    0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

petr@mysql.com's avatar
petr@mysql.com committed
101
  { "default-admin-user", OPT_DEFAULT_ADMIN_USER, "Username to shutdown MySQL"
102 103 104 105 106
                                           " instances.",
                   (gptr *) &Options::default_admin_user,
                   (gptr *) &Options::default_admin_user,
                   0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

petr@mysql.com's avatar
petr@mysql.com committed
107
  { "default-admin-password", OPT_DEFAULT_ADMIN_PASSWORD, "Password to"
108 109 110 111 112
                                            "shutdown MySQL instances.",
                   (gptr *) &Options::default_admin_password,
                   (gptr *) &Options::default_admin_password,
                   0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

petr@mysql.com's avatar
petr@mysql.com committed
113
  { "monitoring-interval", OPT_MONITORING_INTERVAL, "Interval to monitor instances"
114 115 116 117 118
                                            " in seconds.",
                   (gptr *) &Options::monitoring_interval,
                   (gptr *) &Options::monitoring_interval,
                   0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },

119 120 121 122 123 124 125 126 127 128 129 130
  { "run-as-service", OPT_RUN_AS_SERVICE,
    "Daemonize and start angel process.", (gptr *) &Options::run_as_service,
    0, 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0 },

  { "version", 'V', "Output version information and exit.", 0, 0, 0,
   GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 },

  { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }
};

static void version()
{
131
  printf("%s Ver %s for %s on %s\n", my_progname, mysqlmanager_version,
132 133 134
         SYSTEM_TYPE, MACHINE_TYPE);
}

135 136 137 138

static const char *default_groups[]= { "mysql", "manager", 0 };


139 140 141
static void usage()
{
  version();
142 143 144 145 146 147

  printf("Copyright (C) 2003, 2004 MySQL AB\n"
  "This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n"
  "and you are welcome to modify and redistribute it under the GPL license\n");
  printf("Usage: %s [OPTIONS] \n", my_progname);

148
  my_print_help(my_long_options);
149 150
  print_defaults("my", default_groups);
  my_print_variables(my_long_options);
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
}

C_MODE_START

static my_bool
get_one_option(int optid,
               const struct my_option *opt __attribute__((unused)),
               char *argument __attribute__((unused)))
{
  switch(optid) {
  case 'V':
    version();
    exit(0);
  case 'I':
  case '?':
    usage();
    exit(0);
  }
  return 0;
}

C_MODE_END


175
/*
176
  - call load_defaults to load configuration file section
177
  - call handle_options to assign defaults and command-line arguments
178 179 180 181 182 183 184
  to the class members
  if either of these function fail, exit the program
  May not return.
*/

void Options::load(int argc, char **argv)
{
185 186 187
  /* config-file options are prepended to command-line ones */
  load_defaults("my", default_groups, &argc, &argv);

188 189 190 191
  if (int rc= handle_options(&argc, &argv, my_long_options, get_one_option))
    exit(rc);
}