#include <ndb_global.h>#include <my_sys.h>#include <my_getopt.h>#include <mysql_version.h>#include <ndb_version.h>#include "CPCD.hpp"#include "APIService.hpp"#include <NdbMain.h>#include <NdbSleep.h>#include <BaseString.hpp>#include <logger/Logger.hpp>#include <logger/FileLogHandler.hpp>#include <logger/SysLogHandler.hpp>#include "common.hpp"Include dependency graph for main.cpp:

Go to the source code of this file.
Functions | |
| static my_bool | get_one_option (int optid, const struct my_option *opt __attribute__((unused)), char *argument) |
| int | main (int argc, char **argv) |
Variables | |
| static const char * | work_dir = CPCD_DEFAULT_WORK_DIR |
| static int unsigned | port |
| static int | use_syslog |
| static const char * | logfile = NULL |
| static const char * | user = 0 |
| static struct my_option | my_long_options [] |
| static CPCD * | g_cpcd = 0 |
| const char * | progname = "ndb_cpcd" |
| int main | ( | int | argc, | |
| char ** | argv | |||
| ) |
Definition at line 77 of file main.cpp.
References BaseString::append(), BaseString::c_str(), debug, err, errno, exit, g_cpcd, get_one_option(), handle_options(), Logger::LL_ALL, load_default_groups, load_defaults(), CPCD::loadProcessList(), logfile, logger, MY_INIT, my_long_options, my_print_help(), my_print_variables(), NdbSleep_MilliSleep(), NULL, port, runas(), S_IRGRP, S_IROTH, S_IRWXU, SocketServer::setup(), sigemptyset, SIGPIPE, sleep, SocketServer::startServer(), strlen(), use_syslog, user, and work_dir.
00077 { 00078 int save_argc= argc; 00079 char** save_argv= argv; 00080 const char *load_default_groups[]= { "ndb_cpcd",0 }; 00081 MY_INIT(argv[0]); 00082 00083 load_defaults("ndb_cpcd",load_default_groups,&argc,&argv); 00084 if (handle_options(&argc, &argv, my_long_options, get_one_option)) { 00085 my_print_help(my_long_options); 00086 my_print_variables(my_long_options); 00087 exit(1); 00088 } 00089 00090 logger.setCategory(progname); 00091 logger.enable(Logger::LL_ALL); 00092 00093 if(debug) 00094 logger.createConsoleHandler(); 00095 00096 if(user && runas(user) != 0){ 00097 logger.critical("Unable to change user: %s", user); 00098 _exit(1); 00099 } 00100 00101 if(logfile != NULL){ 00102 BaseString tmp; 00103 if(logfile[0] != '/') 00104 tmp.append(work_dir); 00105 tmp.append(logfile); 00106 logger.addHandler(new FileLogHandler(tmp.c_str())); 00107 } 00108 00109 if(use_syslog) 00110 logger.addHandler(new SysLogHandler()); 00111 00112 logger.info("Starting"); 00113 00114 CPCD cpcd; 00115 g_cpcd = &cpcd; 00116 00117 /* XXX This will probably not work on !unix */ 00118 int err = mkdir(work_dir, S_IRWXU | S_IRGRP | S_IROTH); 00119 if(err != 0) { 00120 switch(errno) { 00121 case EEXIST: 00122 break; 00123 default: 00124 fprintf(stderr, "Cannot mkdir %s: %s\n", work_dir, strerror(errno)); 00125 exit(1); 00126 } 00127 } 00128 00129 if(strlen(work_dir) > 0){ 00130 logger.debug("Changing dir to '%s'", work_dir); 00131 if((err = chdir(work_dir)) != 0){ 00132 fprintf(stderr, "Cannot chdir %s: %s\n", work_dir, strerror(errno)); 00133 exit(1); 00134 } 00135 } 00136 00137 cpcd.loadProcessList(); 00138 00139 SocketServer * ss = new SocketServer(); 00140 CPCDAPIService * serv = new CPCDAPIService(cpcd); 00141 unsigned short real_port= port; // correct type 00142 if(!ss->setup(serv, &real_port)){ 00143 logger.critical("Cannot setup server: %s", strerror(errno)); 00144 sleep(1); 00145 delete ss; 00146 delete serv; 00147 return 1; 00148 } 00149 00150 ss->startServer(); 00151 00152 { 00153 signal(SIGPIPE, SIG_IGN); 00154 signal(SIGCHLD, SIG_IGN); 00155 #if 0 00156 struct sigaction act; 00157 act.sa_handler = 0; 00158 act.sa_sigaction = sig_child; 00159 sigemptyset(&act.sa_mask); 00160 act.sa_flags = SA_SIGINFO; 00161 sigaction(SIGCHLD, &act, 0); 00162 #endif 00163 } 00164 00165 logger.debug("Start completed"); 00166 while(true) NdbSleep_MilliSleep(1000); 00167 00168 delete ss; 00169 return 0; 00170 }
Here is the call graph for this function:

struct my_option my_long_options[] [static] |
Initial value:
{
{ "work-dir", 'w', "Work directory",
(gptr*) &work_dir, (gptr*) &work_dir, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{ "port", 'p', "TCP port to listen on",
(gptr*) &port, (gptr*) &port, 0,
GET_INT, REQUIRED_ARG, CPCD_DEFAULT_TCP_PORT, 0, 0, 0, 0, 0 },
{ "syslog", 'S', "Log events to syslog",
(gptr*) &use_syslog, (gptr*) &use_syslog, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ "logfile", 'L', "File to log events to",
(gptr*) &logfile, (gptr*) &logfile, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{ "debug", 'D', "Enable debug mode",
(gptr*) &debug, (gptr*) &debug, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ "user", 'u', "Run as user",
(gptr*) &user, (gptr*) &user, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
}
int use_syslog [static] |
const char* work_dir = CPCD_DEFAULT_WORK_DIR [static] |
1.4.7

