int main(int argc, char * const * argv) { InitModuleObjects(); try { KeyPatchParams params; getParams(argc, argv, params); Owned<IKeyDiffApplicator> applicator; if(params.mode == KEYPATCH_explicit) applicator.setown(createKeyDiffApplicator(params.patch.str(), params.oldIndex.str(), params.newIndex.str(), params.newTLK.str(), params.overwrite, params.ignoreTLK)); else applicator.setown(createKeyDiffApplicator(params.patch.str(), params.overwrite, params.ignoreTLK)); if(params.mode == KEYPATCH_info) showInfo(params.patch.str(), applicator); else { if(params.xmitTLK) applicator->setTransmitTLK(new CNodeSender(params.tlkPort, params.xmitEp)); else if(params.recvTLK) applicator->setReceiveTLK(new CNodeReceiver(params.tlkPort), params.recvNum); if(params.progressFrequency) applicator->setProgressCallback(new KeyPatchProgressCallback, params.progressFrequency); applicator->run(); } } catch(IException * e) { EXCLOG(e); e->Release(); releaseAtoms(); return 1; } releaseAtoms(); return 0; }
int main(int argc, char **argv) { InitModuleObjects(); addAbortHandler(ControlHandler); try { StringBuffer codeDirectory; splitFilename(argv[0], &codeDirectory, &codeDirectory, NULL, NULL); if (!codeDirectory.length()) codeDirectory.append("."); execSvr.setown(new CEclAgentExecutionServer()); execSvr->start(codeDirectory); } catch (...) { printf("Unexpected error running agentexec server\r\n"); } if (execSvr) { execSvr->stop(); } releaseAtoms(); ExitModuleObjects(); return 0; }
int main(int argc, char* argv[]) { InitModuleObjects(); // These are the internal unit tests covered by other modules and libraries Array objects; objects.append(*(new LoadedObject ("jhtree"))); objects.append(*(new LoadedObject ("roxiemem"))); objects.append(*(new LoadedObject ("thorhelper"))); queryStderrLogMsgHandler()->setMessageFields(MSGFIELD_time); CppUnit::TextUi::TestRunner runner; if (argc==1) { CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(); runner.addTest( registry.makeTest() ); } else { for (int name = 1; name < argc; name++) { CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(argv[name]); runner.addTest( registry.makeTest() ); } } bool wasSucessful = runner.run( "", false ); ExitModuleObjects(); releaseAtoms(); return wasSucessful; }
int main(int argc, char** argv) { InitModuleObjects(); //CEnvGen * envGen = new CEnvGen(); CEnvGen envGen; try { if (!envGen.parseArgs(argc, argv)) { // delete envGen; return 1; } envGen.process(); } catch (IException* e) { int errCode = e->errorCode(); StringBuffer errMsg; e->errorMessage(errMsg); printf("Error: %d, %s\n", errCode, errMsg.str()); e->Release(); // delete envGen; return 1; } //delete envGen; return 0; }
int main(int argc, char* argv[]) { enableMemLeakChecking(true); InitModuleObjects(); EnableSEHtoExceptionMapping(); if (argc<2) { usage(argv[0]); return -1; } SocketEndpoint dalieps(argv[1],DALI_SERVER_PORT); // endpoint of dali server Owned<IGroup> group = createIGroup(1,&dalieps); try { initClientProcess(group, DCR_Other); // I will add a DCR_Orbit at some point try { doStuff(); } catch (IException *e) { pexception(argv[0],e); e->Release(); } closedownClientProcess(); } catch (IException *e) { pexception(argv[0],e); e->Release(); } releaseAtoms(); return 0; }
int main(int argc, char **argv) { InitModuleObjects(); addAbortHandler(ControlHandler); try { execSvr.setown(new CEclAgentExecutionServer()); execSvr->start(); } catch (...) { printf("Unexpected error running agentexec server\r\n"); } if (execSvr) { execSvr->stop(); } releaseAtoms(); ExitModuleObjects(); return 0; }
int main(int argc, char* argv[]) { InitModuleObjects(); EnableSEHtoExceptionMapping(); if (argc<6) { usage(); return 0; } try { const char *filename = argv[1]; Owned<IDaliCapabilityCreator> cc = createDaliCapabilityCreator(); cc->setSystemID(argv[2]); cc->setServerPassword(argv[3]); for (unsigned i=4;i<argc;i++) { const char *cmd = argv[i++]; if (i==argc) break; const char *param = argv[i]; if (stricmp(cmd,"THORWIDTH")==0) { cc->setLimit(DCR_ThorSlave,atoi(param)); } else if (stricmp(cmd,"DALINODE")==0) { StringBuffer mac; if (strchr(param,'.')) { // must be ip IpAddress ip; ip.set(param); if (!getMAC(ip,mac)) { printf("ERROR: could mot get MAC address for %s\n",param); return 1; } } else mac.append(param); cc->addCapability(DCR_DaliServer,mac.str()); } else { printf("ERROR: unknown command %s\n",cmd); return 1; } } StringBuffer results; cc->save(results); Owned<IFile> ifile = createIFile(filename); Owned<IFileIO> ifileio = ifile->open(IFOcreate); ifileio->write(0,results.length(),results.str()); printf("Dali Capabilities sucessfully exported to %s\n", filename); } catch (IException *e) { EXCLOG(e); e->Release(); } releaseAtoms(); return 0; }
int main(int argc, char * argv[]) { InitModuleObjects(); setDaliServixSocketCaching(true); FtSlave slave; slave.run(argc, argv); return 0; }
int main(int argc, const char *argv[]) { InitModuleObjects(); queryStderrLogMsgHandler()->setMessageFields(0); unsigned exitCode = doMain(argc, argv); releaseAtoms(); exit(exitCode); }
int main( int argc, char *argv[] ) { int res=0; if (argc < 3) { printf ("frunssh <nodelistfile> \"command\" [options] \n" " options: -i:<identity-file> \n" " -u:<user> \n" " -n:<number_of_threads>\n" " -t:<connect-timeout-secs>\n" " -a:<connect-attempts>\n" " -d:<working_directory>\n" " -s -- strict, must match known_hosts\n" " -b -- background\n" " -pw:<password> -- INSECURE: requires pssh (NB identity file preferred)\n" " -pe:<password> -- INSECURE: as -pw except encrypted password\n" " -pl -- use plink (on windows)\n" " -v -- verbose, lists commands run\n" " -d -- dry run (for testing, enables verbose)\n" ); return 255; } InitModuleObjects(); #ifndef __64BIT__ // Restrict stack sizes on 32-bit systems Thread::setDefaultStackSize(0x10000); // NB under windows requires linker setting (/stack:) #endif try { StringBuffer logname; splitFilename(argv[0], NULL, NULL, &logname, NULL); Owned<IComponentLogFileCreator> lf = createComponentLogFileCreator("frunssh"); lf->setCreateAliasFile(false); lf->setMsgFields(MSGFIELD_prefix); lf->beginLogging(); Owned<IFRunSSH> runssh = createFRunSSH(); runssh->init(argc,argv); runssh->exec(); } catch(IException *e) { EXCLOG(e,"frunssh"); e->Release(); res=255; } releaseAtoms(); return res; }
int main( int argc, char *argv[] ) { int res=0; if (argc < 3) { printf ("frunssh <nodelistfile> \"command\" [options] \n" " options: -i:<identity-file> \n" " -u:<user> \n" " -n:<number_of_threads>\n" " -t:<connect-timeout-secs>\n" " -a:<connect-attempts>\n" " -d:<working_directory>\n" " -s -- strict, must match known_hosts\n" " -b -- background\n" " -pw:<password> -- INSECURE: requires pssh (NB identity file preferred)\n" " -pe:<password> -- INSECURE: as -pw except encrypted password\n" " -pl -- use plink (on windows)\n" " -v -- verbose, lists commands run\n" " -d -- dry run (for testing, enables verbose)\n" ); return 255; } InitModuleObjects(); try { StringBuffer logname; splitFilename(argv[0], NULL, NULL, &logname, NULL); StringBuffer logdir; if (getConfigurationDirectory(NULL,"log","frunssh",logname.str(),logdir)) { recursiveCreateDirectory(logdir.str()); StringBuffer tmp(logname); addPathSepChar(logname.clear().append(logdir)).append(tmp); } addFileTimestamp(logname, true); logname.append(".log"); appendLogFile(logname.str(),0,false); queryStderrLogMsgHandler()->setMessageFields(MSGFIELD_prefix); Owned<IFRunSSH> runssh = createFRunSSH(); runssh->init(argc,argv); runssh->exec(); } catch(IException *e) { EXCLOG(e,"frunssh"); e->Release(); res=255; } releaseAtoms(); return res; }
int main(int argc, char* argv[]) { if(argc != 2) { printf("usage: addScopes daliconf.xml\n"); printf("\n\tCreates all user-specific LDAP private file scopes 'hpccinternal::<user>'\n\tand grants users access to their scope. The configuration file\n\tdaliconf.xml is the dali configuration file, typically\n\tfound in /var/lib/HPCCSystems/mydali\n\n"); return -1; } InitModuleObjects(); try { Owned<IPropertyTree> cfg = createPTreeFromXMLFile(argv[1]); Owned<IPropertyTree> seccfg = cfg->getPropTree(".//ldapSecurity"); if(seccfg == NULL) { printf("ldapSecurity not found\n"); return -1; } #ifdef _NO_LDAP printf("System was built with _NO_LDAP\n"); return -1; #else Owned<ISecManager> secmgr = newLdapSecManager("addScopes", *LINK(seccfg)); if(secmgr == NULL) { printf("Security manager can't be created\n"); return -1; } bool ok = secmgr->createUserScopes(); printf(ok ? "User scopes added\n" : "Some scopes not added\n"); #endif } catch(IException* e) { StringBuffer errmsg; e->errorMessage(errmsg); printf("%s\n", errmsg.str()); } catch(...) { printf("Unknown exception\n"); } releaseAtoms(); return 0; }
int main(int argc, char* argv[]) { InitModuleObjects(); if (argc != 3 && argc != 4) { usage(); return 0; } int nTimeOut = (argc == 4 ? atoi(argv[3]) : nDefaultTimeOut); startMPServer(0); Owned<ISashaCommand> cmd = createSashaCommand(); cmd->setAction(SCA_null); SocketEndpoint ep(argv[1], atoi(argv[2])); Owned<INode> node = createINode(ep); try { if (cmd->send(node, nTimeOut) == false) { return critical(argv[1], argv[2]); } else { return ok(); } } catch (...) { return critical(argv[1], argv[2]); } stopMPServer(); return 0; }
int main(int argc, char * const * argv) { InitModuleObjects(); try { KeyDiffParams params; getParams(argc, argv, params); Owned<IKeyDiffGenerator> generator(createKeyDiffGenerator(params.oldIndex.str(), params.newIndex.str(), params.patch.str(), (params.tlkInfo ? params.newTLK.str() : 0), params.overwrite, params.compress)); if(params.progressFrequency) generator->setProgressCallback(new KeyDiffProgressCallback, params.progressFrequency); generator->run(); if(params.stats) generator->logStats(); } catch(IException * e) { EXCLOG(e); e->Release(); releaseAtoms(); return 1; } releaseAtoms(); return 0; }
int main(int argc, char* argv[]) { loadDlls(); InitModuleObjects(); queryStderrLogMsgHandler()->setMessageFields(MSGFIELD_time); CppUnit::TextUi::TestRunner runner; if (argc==1) { CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(); runner.addTest( registry.makeTest() ); } else { for (int name = 1; name < argc; name++) { CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(argv[name]); runner.addTest( registry.makeTest() ); } } bool wasSucessful = runner.run( "", false ); ExitModuleObjects(); releaseAtoms(); return wasSucessful; }
int main(int argc, char* argv[]) { InitModuleObjects(); EnableSEHtoExceptionMapping(); if (argc<2) { usage(argv[0]); return -1; } bool forceGroupUpdate = false; StringBuffer filename; StringBuffer inst; StringBuffer dcat; StringBuffer dcomp; StringBuffer dinst; StringBuffer dip; for (int i=1;i<argc;i++) { if (argv[i][0]=='-') { if ((stricmp(argv[i],"-i")==0)&&(i+1<argc)) { inst.append(argv[++i]); } else if (0==stricmp(argv[i],"-f")) { forceGroupUpdate = true; } else if ((stricmp(argv[i],"-d")==0)&&(i+3<argc)) { dcat.append(argv[++i]); dcomp.append(argv[++i]); dinst.append(argv[++i]); } else if ((stricmp(argv[i],"-ip")==0)&&(i+1<argc)) { dip.append(argv[++i]); } else { usage(argv[0]); return -1; } } else { if (filename.length()) { usage(argv[0]); return -1; } filename.append(argv[i]); } } Owned<IPropertyTree> env; try { env.setown(createPTreeFromXMLFile(argv[1])); if (!env.get()) { fprintf(stderr,"Could not load Environment from %s\n",argv[1]); return 1; } const char *s = env->queryName(); if (!s||(strcmp(s,"Environment")!=0)) { fprintf(stderr,"File %s is invalid\n",argv[1]); return 1; } } catch (IException *e) { StringBuffer err; e->errorMessage(err); fprintf(stderr,"Could not load Environment from %s, %s\n",argv[1],err.str()); return 1; } int ret = 0; try { if (dcat.length()) { IPropertyTree* dirs = env->queryPropTree("Software/Directories"); StringBuffer dirout; if (getConfigurationDirectory(dirs,dcat.str(),dcomp.str(),dinst.str(),dirout)&&dirout.length()) { if (dip.length()) { SocketEndpoint ep(dip.str()); RemoteFilename rfn; rfn.setPath(ep,dirout.str()); rfn.getRemotePath(dirout.clear()); } printf("%s",dirout.str()); } else { ret = 1; } } else { if (!updateDaliEnv(env, forceGroupUpdate, inst.str())) ret = 1; } } catch (IException *e) { pexception("updtdalienv",e); e->Release(); ret = 1; } releaseAtoms(); return ret; }
int main( int argc, char *argv[] ) { #if defined(WIN32) && defined(_DEBUG) int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag( tmpFlag ); #endif InitModuleObjects(); addAbortHandler(ControlHandler); EnableSEHtoExceptionMapping(); dummyProc(); #ifndef __64BIT__ // Restrict stack sizes on 32-bit systems Thread::setDefaultStackSize(0x10000); // NB under windows requires linker setting (/stack:) #endif #ifdef _WIN32 Owned<CReleaseMutex> globalNamedMutex; #endif if (globals) globals->Release(); { Owned<IFile> iFile = createIFile("thor.xml"); globals = iFile->exists() ? createPTree(*iFile, ipt_caseInsensitive) : createPTree("Thor", ipt_caseInsensitive); } unsigned multiThorMemoryThreshold = 0; Owned<IException> unregisterException; try { if (argc==1) { usage(); return 1; } cmdArgs = argv+1; mergeCmdParams(globals); cmdArgs = argv+1; const char *master = globals->queryProp("@MASTER"); if (!master) usage(); const char *slave = globals->queryProp("@SLAVE"); if (slave) { slfEp.set(slave); localHostToNIC(slfEp); } else slfEp.setLocalHost(0); mySlaveNum = globals->getPropInt("@SLAVENUM"); setMachinePortBase(slfEp.port); slfEp.port = getMachinePortBase(); startSlaveLog(); setSlaveAffinity(globals->getPropInt("@SLAVEPROCESSNUM")); startMPServer(getFixedPort(TPORT_mp)); #ifdef USE_MP_LOG startLogMsgParentReceiver(); LOG(MCdebugProgress, thorJob, "MPServer started on port %d", getFixedPort(TPORT_mp)); #endif SocketEndpoint masterEp(master); localHostToNIC(masterEp); setMasterPortBase(masterEp.port); markNodeCentral(masterEp); if (RegisterSelf(masterEp)) { if (globals->getPropBool("Debug/@slaveDaliClient")) enableThorSlaveAsDaliClient(); IDaFileSrvHook *daFileSrvHook = queryDaFileSrvHook(); if (daFileSrvHook) // probably always installed daFileSrvHook->addFilters(globals->queryPropTree("NAS"), &slfEp); StringBuffer thorPath; globals->getProp("@thorPath", thorPath); recursiveCreateDirectory(thorPath.str()); int err = _chdir(thorPath.str()); if (err) { IException *e = makeErrnoExceptionV(-1, "Failed to change dir to '%s'", thorPath.str()); FLLOG(MCexception(e), thorJob, e); throw e; } // Initialization from globals setIORetryCount(globals->getPropInt("Debug/@ioRetries")); // default == 0 == off StringBuffer str; if (globals->getProp("@externalProgDir", str.clear())) _mkdir(str.str()); else globals->setProp("@externalProgDir", thorPath); const char * overrideBaseDirectory = globals->queryProp("@thorDataDirectory"); const char * overrideReplicateDirectory = globals->queryProp("@thorReplicateDirectory"); StringBuffer datadir; StringBuffer repdir; if (getConfigurationDirectory(globals->queryPropTree("Directories"),"data","thor",globals->queryProp("@name"),datadir)) overrideBaseDirectory = datadir.str(); if (getConfigurationDirectory(globals->queryPropTree("Directories"),"mirror","thor",globals->queryProp("@name"),repdir)) overrideReplicateDirectory = repdir.str(); if (overrideBaseDirectory&&*overrideBaseDirectory) setBaseDirectory(overrideBaseDirectory, false); if (overrideReplicateDirectory&&*overrideBaseDirectory) setBaseDirectory(overrideReplicateDirectory, true); StringBuffer tempDirStr; if (getConfigurationDirectory(globals->queryPropTree("Directories"),"temp","thor",globals->queryProp("@name"), tempDirStr)) globals->setProp("@thorTempDirectory", tempDirStr.str()); else tempDirStr.append(globals->queryProp("@thorTempDirectory")); addPathSepChar(tempDirStr).append(getMachinePortBase()); logDiskSpace(); // Log before temp space is cleared SetTempDir(tempDirStr.str(), "thtmp", true); useMemoryMappedRead(globals->getPropBool("@useMemoryMappedRead")); LOG(MCdebugProgress, thorJob, "ThorSlave Version LCR - %d.%d started",THOR_VERSION_MAJOR,THOR_VERSION_MINOR); StringBuffer url; LOG(MCdebugProgress, thorJob, "Slave %s - temporary dir set to : %s", slfEp.getUrlStr(url).str(), queryTempDir()); #ifdef _WIN32 ULARGE_INTEGER userfree; ULARGE_INTEGER total; ULARGE_INTEGER free; if (GetDiskFreeSpaceEx("c:\\",&userfree,&total,&free)&&total.QuadPart) { unsigned pc = (unsigned)(free.QuadPart*100/total.QuadPart); LOG(MCdebugProgress, thorJob, "Total disk space = %" I64F "d k", total.QuadPart/1000); LOG(MCdebugProgress, thorJob, "Free disk space = %" I64F "d k", free.QuadPart/1000); LOG(MCdebugProgress, thorJob, "%d%% disk free\n",pc); } #endif if (getConfigurationDirectory(globals->queryPropTree("Directories"),"query","thor",globals->queryProp("@name"),str.clear())) globals->setProp("@query_so_dir", str.str()); else globals->getProp("@query_so_dir", str.clear()); if (str.length()) { if (globals->getPropBool("Debug/@dllsToSlaves", true)) { StringBuffer uniqSoPath; if (PATHSEPCHAR == str.charAt(str.length()-1)) uniqSoPath.append(str.length()-1, str.str()); else uniqSoPath.append(str); uniqSoPath.append("_").append(getMachinePortBase()); str.swapWith(uniqSoPath); globals->setProp("@query_so_dir", str.str()); } PROGLOG("Using querySo directory: %s", str.str()); recursiveCreateDirectory(str.str()); } multiThorMemoryThreshold = globals->getPropInt("@multiThorMemoryThreshold")*0x100000; if (multiThorMemoryThreshold) { StringBuffer lgname; if (!globals->getProp("@multiThorResourceGroup",lgname)) globals->getProp("@nodeGroup",lgname); if (lgname.length()) { Owned<ILargeMemLimitNotify> notify = createMultiThorResourceMutex(lgname.str()); setMultiThorMemoryNotify(multiThorMemoryThreshold,notify); PROGLOG("Multi-Thor resource limit for %s set to %" I64F "d",lgname.str(),(__int64)multiThorMemoryThreshold); } else multiThorMemoryThreshold = 0; } slaveMain(jobListenerStopped); } LOG(MCdebugProgress, thorJob, "ThorSlave terminated OK"); } catch (IException *e) { if (!jobListenerStopped) FLLOG(MCexception(e), thorJob, e,"ThorSlave"); unregisterException.setown(e); } ClearTempDirs(); if (multiThorMemoryThreshold) setMultiThorMemoryNotify(0,NULL); roxiemem::releaseRoxieHeap(); if (unregisterException.get()) UnregisterSelf(unregisterException); if (globals->getPropBool("Debug/@slaveDaliClient")) disableThorSlaveAsDaliClient(); #ifdef USE_MP_LOG stopLogMsgReceivers(); #endif stopMPServer(); ::Release(globals); releaseAtoms(); // don't know why we can't use a module_exit to destruct these... ExitModuleObjects(); // not necessary, atexit will call, but good for leak checking return 0; }
int main(int argc, const char *argv[]) { InitModuleObjects(); int ret = 0; bool dryRun = false; bool offline = false; StringAttr daliServer, envPath; enum CmdType { cmd_none, cmd_swap, cmd_auto, cmd_history, cmd_email, cmd_swapped, cmd_reset, cmd_resetspares, cmd_addspares, cmd_removespares, cmd_resethistory }; CmdType cmd = cmd_none; ArgvIterator iter(argc, argv); try { bool stop=false; StringArray params; for (; !ret&&!iter.done(); iter.next()) { const char *arg = iter.query(); if ('-' == *arg) { bool value; if (iter.matchFlag(value, "-dryrun")) dryRun = value; else if (iter.matchFlag(value, "-offline")) offline = value; else { PROGLOG("Unknown option"); ret = 2; usage(); break; } } else { switch (cmd) { case cmd_none: if (strieq("swap", arg)) cmd = cmd_swap; else if (strieq("auto", arg)) cmd = cmd_auto; else if (strieq("history", arg)) cmd = cmd_history; else if (strieq("email", arg)) cmd = cmd_email; else if (strieq("swapped", arg)) cmd = cmd_swapped; else if (strieq("reset", arg)) cmd = cmd_reset; else if (strieq("resetspares", arg)) cmd = cmd_resetspares; else if (strieq("addspares", arg)) cmd = cmd_addspares; else if (strieq("removespares", arg)) cmd = cmd_removespares; else if (strieq("resethistory", arg)) cmd = cmd_resethistory; else { PROGLOG("Unknown command"); usage(); ret = 2; } break; default: params.append(iter.query()); break; } } } unsigned requiredParams=UINT_MAX; switch (cmd) { case cmd_swap: requiredParams = 4; break; case cmd_addspares: case cmd_removespares: requiredParams = 3; break; case cmd_auto: case cmd_history: case cmd_email: case cmd_swapped: case cmd_reset: case cmd_resetspares: case cmd_resethistory: requiredParams = 2; break; } if (params.ordinality() < requiredParams) { usage(); ret = 2; } else { StringAttr daliServer = params.item(0); StringAttr clusterName = params.item(1); DaliClient dclient(daliServer); StringBuffer logname; splitFilename(argv[0], NULL, NULL, &logname, NULL); addFileTimestamp(logname, true); logname.append(".log"); StringBuffer lf; openLogFile(lf, logname.str(),0,false,true); queryStderrLogMsgHandler()->setMessageFields(MSGFIELD_prefix); Owned<IRemoteConnection> conn = querySDS().connect("/Environment", myProcessSession(), RTM_LOCK_READ, SDS_LOCK_TIMEOUT); IPropertyTree *environment = conn->queryRoot(); StringBuffer xpath("Software/ThorCluster[@name=\""); xpath.append(clusterName).append("\"]"); IPropertyTree *cluster = environment->queryPropTree(xpath.str()); if (!cluster) { PROGLOG("Unknown cluster: %s", clusterName.get()); ret = 3; } if (!ret) { Owned<IPropertyTree> options = createPTreeFromIPT(cluster); conn.clear(); if (options&&options->getPropBool("@enableSysLog",true)) UseSysLogForOperatorMessages(); switch (cmd) { case cmd_auto: { if (!autoSwapNode(clusterName, dryRun)) ret = 3; break; } case cmd_swap: { const char *oldip=params.item(2); const char *newip=params.item(3); if (!swapNode(clusterName, oldip, newip)) ret = 3; break; } case cmd_history: case cmd_swapped: case cmd_email: { unsigned days = params.isItem(2) ? atoi(params.item(2)) : 0; // for history or swapped switch (cmd) { case cmd_history: swapNodeHistory(clusterName, days, NULL); break; case cmd_swapped: swappedList(clusterName, days, NULL); break; case cmd_email: { bool sendSwapped = false; bool sendHistory = false; if (params.isItem(2)) { if (strieq("swapped", params.item(2))) sendSwapped = true; else if (strieq("history", params.item(2))) sendHistory = true; } emailSwap(clusterName, NULL, true, sendSwapped, sendHistory); break; } } break; } case cmd_reset: case cmd_resetspares: { StringBuffer response; if (!resetClusterGroup(clusterName, "ThorCluster", cmd==cmd_resetspares, response)) { WARNLOG("%s", response.str()); ret = 3; } break; } case cmd_addspares: case cmd_removespares: { SocketEndpointArray allEps; unsigned p=2; do { const char *ipOrRange = params.item(p); SocketEndpointArray epa; epa.fromText(ipOrRange, 0); ForEachItemIn(e, epa) allEps.append(epa.item(e)); p++; } while (p<params.ordinality()); StringBuffer response; bool res; if (cmd == cmd_addspares) res = addClusterSpares(clusterName, "ThorCluster", allEps, response); else res = removeClusterSpares(clusterName, "ThorCluster", allEps, response); if (!res) { WARNLOG("%s", response.str()); ret = 3; } break; } case cmd_resethistory: { Owned<IRemoteConnection> conn = querySDS().connect("/SwapNode", myProcessSession(), RTM_LOCK_WRITE, SDS_LOCK_TIMEOUT); if (conn) { StringBuffer groupName; getClusterGroupName(*options, groupName); VStringBuffer xpath("Thor[@group=\"%s\"]", groupName.str()); if (conn->queryRoot()->removeProp(xpath.str())) PROGLOG("SwapNode info for cluster %s removed", clusterName.get()); else PROGLOG("SwapNode info for cluster %s not found", clusterName.get()); } break; } } } } UseSysLogForOperatorMessages(false); } catch (IException *e) { EXCLOG(e,"SWAPNODE"); e->Release(); ret = -1; } ExitModuleObjects(); return ret; }
int main( int argc, char *argv[] ) { #if defined(WIN32) && defined(_DEBUG) int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag( tmpFlag ); #endif InitModuleObjects(); addAbortHandler(ControlHandler); EnableSEHtoExceptionMapping(); dummyProc(); #ifndef __64BIT__ Thread::setDefaultStackSize(0x10000); // NB under windows requires linker setting (/stack:) #endif #ifdef _WIN32 Owned<CReleaseMutex> globalNamedMutex; #endif if (globals) globals->Release(); { Owned<IFile> iFile = createIFile("thor.xml"); globals = iFile->exists() ? createPTree(*iFile, ipt_caseInsensitive) : createPTree("Thor", ipt_caseInsensitive); } unsigned multiThorMemoryThreshold = 0; try { if (argc==1) { usage(); return 1; } cmdArgs = argv+1; mergeCmdParams(globals); cmdArgs = argv+1; const char *master = globals->queryProp("@MASTER"); if (!master) usage(); const char *slave = globals->queryProp("@SLAVE"); if (slave) { slfEp.set(slave); localHostToNIC(slfEp); } else slfEp.setLocalHost(0); if (globals->hasProp("@SLAVENUM")) mySlaveNum = atoi(globals->queryProp("@SLAVENUM")); else mySlaveNum = slfEp.port; // shouldn't happen, provided by script setMachinePortBase(slfEp.port); slfEp.port = getMachinePortBase(); startSlaveLog(); startMPServer(getFixedPort(TPORT_mp)); #ifdef USE_MP_LOG startLogMsgParentReceiver(); LOG(MCdebugProgress, thorJob, "MPServer started on port %d", getFixedPort(TPORT_mp)); #endif SocketEndpoint masterEp(master); localHostToNIC(masterEp); setMasterPortBase(masterEp.port); markNodeCentral(masterEp); if (RegisterSelf(masterEp)) { #define ISDALICLIENT // JCSMORE plugins *can* access dali - though I think we should probably prohibit somehow. #ifdef ISDALICLIENT const char *daliServers = globals->queryProp("@DALISERVERS"); if (!daliServers) { LOG(MCerror, thorJob, "No Dali server list specified\n"); return 1; } Owned<IGroup> serverGroup = createIGroup(daliServers, DALI_SERVER_PORT); unsigned retry = 0; loop { try { LOG(MCdebugProgress, thorJob, "calling initClientProcess"); initClientProcess(serverGroup,DCR_ThorSlave, getFixedPort(TPORT_mp)); break; } catch (IJSOCK_Exception *e) { if ((e->errorCode()!=JSOCKERR_port_in_use)) throw; FLLOG(MCexception(e), thorJob, e,"InitClientProcess"); if (retry++>10) throw; e->Release(); LOG(MCdebugProgress, thorJob, "Retrying"); Sleep(retry*2000); } } setPasswordsFromSDS(); #endif IDaFileSrvHook *daFileSrvHook = queryDaFileSrvHook(); if (daFileSrvHook) // probably always installed daFileSrvHook->addSubnetFilters(globals->queryPropTree("NAS"), NULL); StringBuffer thorPath; globals->getProp("@thorPath", thorPath); recursiveCreateDirectory(thorPath.str()); int err = _chdir(thorPath.str()); if (err) { IException *e = MakeErrnoException(-1, "Failed to change dir to '%s'",thorPath.str()); FLLOG(MCexception(e), thorJob, e); throw e; } // Initialization from globals setIORetryCount(globals->getPropInt("Debug/@ioRetries")); // default == 0 == off StringBuffer str; if (globals->getProp("@externalProgDir", str.clear())) _mkdir(str.str()); else globals->setProp("@externalProgDir", thorPath); const char * overrideBaseDirectory = globals->queryProp("@thorDataDirectory"); const char * overrideReplicateDirectory = globals->queryProp("@thorReplicateDirectory"); StringBuffer datadir; StringBuffer repdir; if (getConfigurationDirectory(globals->queryPropTree("Directories"),"data","thor",globals->queryProp("@name"),datadir)) overrideBaseDirectory = datadir.str(); if (getConfigurationDirectory(globals->queryPropTree("Directories"),"mirror","thor",globals->queryProp("@name"),repdir)) overrideReplicateDirectory = repdir.str(); if (overrideBaseDirectory&&*overrideBaseDirectory) setBaseDirectory(overrideBaseDirectory, false); if (overrideReplicateDirectory&&*overrideBaseDirectory) setBaseDirectory(overrideReplicateDirectory, true); StringBuffer tempdirstr; const char *tempdir = globals->queryProp("@thorTempDirectory"); if (getConfigurationDirectory(globals->queryPropTree("Directories"),"temp","thor",globals->queryProp("@name"),tempdirstr)) tempdir = tempdirstr.str(); SetTempDir(tempdir,true); useMemoryMappedRead(globals->getPropBool("@useMemoryMappedRead")); LOG(MCdebugProgress, thorJob, "ThorSlave Version LCR - %d.%d started",THOR_VERSION_MAJOR,THOR_VERSION_MINOR); StringBuffer url; LOG(MCdebugProgress, thorJob, "Slave %s - temporary dir set to : %s", slfEp.getUrlStr(url).toCharArray(), queryTempDir()); #ifdef _WIN32 ULARGE_INTEGER userfree; ULARGE_INTEGER total; ULARGE_INTEGER free; if (GetDiskFreeSpaceEx("c:\\",&userfree,&total,&free)&&total.QuadPart) { unsigned pc = (unsigned)(free.QuadPart*100/total.QuadPart); LOG(MCdebugProgress, thorJob, "Total disk space = %"I64F"d k", total.QuadPart/1000); LOG(MCdebugProgress, thorJob, "Free disk space = %"I64F"d k", free.QuadPart/1000); LOG(MCdebugProgress, thorJob, "%d%% disk free\n",pc); } #endif if (getConfigurationDirectory(globals->queryPropTree("Directories"),"query","thor",globals->queryProp("@name"),str.clear())) globals->setProp("@query_so_dir", str.str()); else globals->getProp("@query_so_dir", str.clear()); if (str.length()) { if (globals->getPropBool("Debug/@dllsToSlaves", true)) { StringBuffer uniqSoPath; if (PATHSEPCHAR == str.charAt(str.length()-1)) uniqSoPath.append(str.length()-1, str.str()); else uniqSoPath.append(str); uniqSoPath.append("_").append(getMachinePortBase()); str.swapWith(uniqSoPath); globals->setProp("@query_so_dir", str.str()); } PROGLOG("Using querySo directory: %s", str.str()); recursiveCreateDirectory(str.str()); } multiThorMemoryThreshold = globals->getPropInt("@multiThorMemoryThreshold")*0x100000; if (multiThorMemoryThreshold) { StringBuffer lgname; if (!globals->getProp("@multiThorResourceGroup",lgname)) globals->getProp("@nodeGroup",lgname); if (lgname.length()) { Owned<ILargeMemLimitNotify> notify = createMultiThorResourceMutex(lgname.str()); setMultiThorMemoryNotify(multiThorMemoryThreshold,notify); PROGLOG("Multi-Thor resource limit for %s set to %"I64F"d",lgname.str(),(__int64)multiThorMemoryThreshold); } else multiThorMemoryThreshold = 0; } slaveMain(); } LOG(MCdebugProgress, thorJob, "ThorSlave terminated OK"); } catch (IException *e) { FLLOG(MCexception(e), thorJob, e,"ThorSlave"); e->Release(); } catch (CATCHALL) { FLLOG(MCerror, thorJob, "ThorSlave exiting because of uncaught exception"); } ClearTempDirs(); if (multiThorMemoryThreshold) setMultiThorMemoryNotify(0,NULL); roxiemem::releaseRoxieHeap(); #ifdef ISDALICLIENT closeEnvironment(); closedownClientProcess(); // dali client closedown #endif #ifdef USE_MP_LOG stopLogMsgReceivers(); #endif stopMPServer(); ::Release(globals); releaseAtoms(); // don't know why we can't use a module_exit to destruct these... return 0; }
int main(int argc, char* argv[]) { InitModuleObjects(); int exitCode = 1; try { if (argc<2) { printf("usage: dalistop <server_ip:port> [/nowait]\n"); printf("eg: dalistop . -- stop dali server running locally\n"); printf(" dalistop eq0001016 -- stop dali server running remotely\n"); } else { SocketEndpoint ep; ep.set(argv[1],DALI_SERVER_PORT); bool nowait = false; if (argc>=3) nowait = stricmp(argv[2],"/nowait")==0; printf("Stopping Dali Server on %s\n",argv[1]); startMPServer(0); Owned<IGroup> group = createIGroup(1,&ep); Owned<ICommunicator> comm = createCommunicator(group); CMessageBuffer mb; int fn=-1; mb.append(fn); if (comm->verifyConnection(0,2000)) { comm->send(mb,0,MPTAG_DALI_COVEN_REQUEST,MP_ASYNC_SEND); if (nowait) { Sleep(1000); exitCode = 0; } else { // verifyConnection() has a min conn timeout of 10s // use recv() instead to check for socket closed ... try { while (!comm->recv(mb,0,MPTAG_DALI_COVEN_REQUEST,nullptr,5000)) { printf("Waiting for Dali Server to stop....\n"); } exitCode = 0; } catch (IMP_Exception *e) { if (e->errorCode() == MPERR_link_closed) exitCode = 0; e->Release(); } } } else fprintf(stderr, "Dali not responding\n"); stopMPServer(); } } catch (IException *e) { pexception("Exception",e); stopMPServer(); } releaseAtoms(); return exitCode; }
int main(int argc, char *argv[]) { InitModuleObjects(); int i = 1; StringBuffer strConfigGenPath; StringBuffer strOutputPath; StringBuffer strEnvFilePath; StringBuffer strURL; StringArray strEclWatchHostPortArray; bool bGenerateHostGroup = false; bool bGenerateServiceAndHost = false; bool bGenerateNRPECommands = false; bool bGenerateEscalationCommands = false; bool bUseDetailForHostPort = true; if (argc == 1) { usage(); return 0; } for (int c = 1; c < argc; c++) { CHPCCNagiosToolSet::m_strCommandLine.append(argv[c]).append(" "); } while (i < argc) { if (argc == 1 || stricmp(argv[i],"-h") == 0 || stricmp(argv[i],"-help") == 0) { usage(); return 0; } else if (stricmp(argv[i], "-c") == 0 || stricmp(argv[i], "-cfggen") == 0) { i++; strConfigGenPath.set(argv[i]); } else if (stricmp(argv[i], "-g") == 0 || stricmp(argv[i], "-hostgroup") == 0) { bGenerateHostGroup = true; } else if (stricmp(argv[i], "-s") == 0 || stricmp(argv[i], "-service") == 0) { bGenerateServiceAndHost = true; } else if (stricmp(argv[i], "-n") == 0 || stricmp(argv[i], "-nrpe") == 0) { CHPCCNagiosToolSet::m_bUseNPRE = true; } else if (stricmp(argv[i], "-o") == 0 || stricmp(argv[i], "-output") == 0 || stricmp(argv[i], "-out") == 0) { i++; strOutputPath.set(argv[i]); } else if (stricmp(argv[i], "-e") == 0 || stricmp(argv[i], "-env") == 0) { i++; strEnvFilePath.set(argv[i]); } else if (stricmp(argv[i], "-r") == 0 || stricmp(argv[i], "-retry") == 0) { CHPCCNagiosToolSet::m_retryHostNameLookUp = true; } else if (stricmp(argv[i], "-m") == 0 || stricmp(argv[i], "-commands") == 0) { bGenerateNRPECommands = true; } else if (stricmp(argv[i], "-ec") == 0 || stricmp(argv[i], "-escalation_cmds") == 0) { bGenerateEscalationCommands = true; } else if (stricmp(argv[i], "-enable_host_notify") == 0) { CHPCCNagiosToolSet::m_bEnableHostEscalations = true; } else if (stricmp(argv[i], "-enable_service_notify") == 0) { CHPCCNagiosToolSet::m_bEnableServiceEscalations = true; } else if (stricmp(argv[i], "-override_send_host_status") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pSendServiceStatus, argv[i], sizeof(CHPCCNagiosToolSet::m_pSendServiceStatus)); } else { std::cout << "invalid override_send_host_status value\n"; exit(1); } } else if (stricmp(argv[i], "-override_send_service_status") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pSendHostStatus, argv[i], sizeof(CHPCCNagiosToolSet::m_pSendHostStatus)); } else { std::cout << "invalid override_send_service_statusl value"; exit(1); } } else if (stricmp(argv[i], "-override_service_status") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pServiceNotificatonCommand, argv[i], sizeof(CHPCCNagiosToolSet::m_pServiceNotificatonCommand)); } else { std::cout << "invalid override_service_status value"; exit(1); } } else if (stricmp(argv[i], "-override_host_status") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pHostNotificatonCommand, argv[i], sizeof(CHPCCNagiosToolSet::m_pHostNotificatonCommand)); } else { std::cout << "invalid override_host_status value"; exit(1); } } else if (stricmp(argv[i], "-override_eclwatch_host_port") == 0) { i++; strEclWatchHostPortArray.append(argv[i]); } else if (stricmp(argv[i], "-u") == 0 || stricmp(argv[i], "-user") == 0) { CHPCCNagiosToolSet::m_bUseAuthentication = true; i++; strncpy(CHPCCNagiosToolSet::m_pUserMacro, argv[i], sizeof(CHPCCNagiosToolSet::m_pUserMacro)); } else if (stricmp(argv[i], "-p") == 0 || stricmp(argv[i], "-pass") == 0) { CHPCCNagiosToolSet::m_bUseAuthentication = true; i++; strncpy(CHPCCNagiosToolSet::m_pPasswordMacro, argv[i], sizeof(CHPCCNagiosToolSet::m_pPasswordMacro)); } else if (stricmp(argv[i], "-set_esp_username_pw") == 0) { CHPCCNagiosToolSet::m_bUseAuthentication = true; static int nOverrideCount = 0; i++; (CHPCCNagiosToolSet::m_EspUserNamePWOverrides[nOverrideCount]).set(argv[i]); i++; (CHPCCNagiosToolSet::m_pUserMacroArray[nOverrideCount]).set(argv[i]); i++; (CHPCCNagiosToolSet::m_pPasswordMacroArray[nOverrideCount]).set(argv[i]); nOverrideCount++; } else if (stricmp(argv[i], "-d") == 0 || stricmp(argv[i], "-debug") == 0) { CHPCCNagiosToolSet::m_bVerbose = true; std::cout << "\n**verbose debug on**\n"; } else if (stricmp(argv[i], "-attempts") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "\nInvalid attempts (-a) specified\n"; exit(1); } CHPCCNagiosToolSet::m_uMaxCheckAttempts = atoi(argv[i]); } else if (stricmp(argv[i], "-disable_check_all_disks") == 0) { CHPCCNagiosToolSet::m_bCheckAllDisks = false; } else if (stricmp(argv[i], "-disable_check_users") == 0) { CHPCCNagiosToolSet::m_bCheckUsers = false; } else if (stricmp(argv[i], "-disable_check_procs") == 0) { CHPCCNagiosToolSet::m_bCheckProcs = false; } else if (stricmp(argv[i], "-disable_check_load") == 0) { CHPCCNagiosToolSet::m_bCheckLoad = false; } else if (stricmp(argv[i], "-sysload1warn") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_fSystemLoad1Warn = atoi(argv[i]); } else { std::cout << "invalid sysload1warn value"; exit(1); } } else if (stricmp(argv[i], "-sysload5warn") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_fSystemLoad5Warn = atoi(argv[i]); } else { std::cout << "invalid sysload5warn value"; exit(1); } } else if (stricmp(argv[i], "-sysload15warn") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_fSystemLoad15Warn = atoi(argv[i]); } else { std::cout << "invalid sysload15warn value"; exit(1); } } else if (stricmp(argv[i], "-sysload1crit") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_fSystemLoad15Critical = atoi(argv[i]); } else { std::cout << "invalid sysload1crit value"; exit(1); } } else if (stricmp(argv[i], "-sysload5crit") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_fSystemLoad15Critical = atoi(argv[i]); } else { std::cout << "invalid sysload5crit value"; exit(1); } } else if (stricmp(argv[i], "-sysload15crit") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_fSystemLoad15Critical = atoi(argv[i]); } else { std::cout << "invalid sysload15crit value"; exit(1); } } else if (stricmp(argv[i], "-diskspacewarn") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nDiskSpacePercentageWarning = atoi(argv[i]); } else { std::cout << "invalid diskspacewarn value"; exit(1); } } else if (stricmp(argv[i], "-diskspacecrit") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nDiskSpacePercentageCritical = atoi(argv[i]); } else { std::cout << "invalid -diskspacecrit value"; exit(1); } } else if (stricmp(argv[i], "-usernumwarn") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nUserNumberWarning = atoi(argv[i]); } else { std::cout << "invalid usernumwarn value"; exit(1); } } else if (stricmp(argv[i], "-usernumcrit") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nUserNumberCritical = atoi(argv[i]); } else { std::cout << "invalid usernumcrit value"; exit(1); } } else if (stricmp(argv[i], "-totalprocswarn") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nTotalProcsWarning = atoi(argv[i]); } else { std::cout << "invalid totalprocswarn value"; exit(1); } } else if (stricmp(argv[i], "-totalprocscrit") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nTotalProcsCritical = atoi(argv[i]); } else { std::cout << "invalid totalprocscrit value"; exit(1); } } else if (stricmp(argv[i], "-checkperiod") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pCheckPeriod, argv[i], sizeof(CHPCCNagiosToolSet::m_pCheckPeriod)); } else { std::cout << "invalid checkperiod value"; exit(1); } } else if (stricmp(argv[i], "-contacts") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pContacts, argv[i], sizeof(CHPCCNagiosToolSet::m_pContacts)); } else { std::cout << "invalid contacts value"; exit(1); } } else if (stricmp(argv[i], "-contactgroups") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pContactGroups, argv[i], sizeof(CHPCCNagiosToolSet::m_pContactGroups)); } else { std::cout << "invalid contactgroups value"; exit(1); } } else if (stricmp(argv[i], "-notify_interval") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { CHPCCNagiosToolSet::m_nNotificationInterval = atoi(argv[i]); } else { std::cout << "invalid notify_interval value"; exit(1); } } else if (stricmp(argv[i], "-notify_period") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pNotificationPeriod, argv[i], sizeof(CHPCCNagiosToolSet::m_pNotificationPeriod)); } else { std::cout << "invalid notify_period value"; exit(1); } } else if (stricmp(argv[i], "-override_check_all_disks") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pCheckDiskSpace, argv[i], sizeof(CHPCCNagiosToolSet::m_pCheckDiskSpace)); } else { std::cout << "invalid override_check_all_disks value"; exit(1); } } else if (stricmp(argv[i], "-override_check_users") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pCheckUsers, argv[i], sizeof(CHPCCNagiosToolSet::m_pCheckUsers)); } else { std::cout << "invalid override_check_users value"; exit(1); } } else if (stricmp(argv[i], "-override_check_procs") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pCheckProcs, argv[i], sizeof(CHPCCNagiosToolSet::m_pCheckProcs)); } else { std::cout << "invalid override_check_procs value"; exit(1); } } else if (stricmp(argv[i], "-override_retry_interval") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_retry_interval value"; exit(1); } CHPCCNagiosToolSet::m_nRetryInteval = atoi(argv[i]); } else if (stricmp(argv[i], "-override_active_checks_enabled") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_active_checks_enabled value"; exit(1); } CHPCCNagiosToolSet::m_nActiveChecksEnabled = atoi(argv[i]); } else if (stricmp(argv[i], "-override_check_load") == 0) { i++; if (argv[i] != NULL && *argv[i] != 0) { strncpy(CHPCCNagiosToolSet::m_pCheckLoad, argv[i], sizeof(CHPCCNagiosToolSet::m_pCheckLoad)); } else { std::cout << "invalid override_check_load value"; exit(1); } } else if (stricmp(argv[i], "-override_passive_checks_enabled") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_passive_checks_enabled value"; exit(1); } CHPCCNagiosToolSet::m_nPassiveChecksEnabled = atoi(argv[i]); } else if (stricmp(argv[i], "-override_parallelize_check") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_parallelize_check value"; exit(1); } CHPCCNagiosToolSet::m_nParallelizeCheck = atoi(argv[i]); } else if (stricmp(argv[i], "-override_obsess_over_service") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_obsess_over_service value"; exit(1); } CHPCCNagiosToolSet::m_nObsessOverService = atoi(argv[i]); } else if (stricmp(argv[i], "-override_check_freshness") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_check_freshness value"; exit(1); } CHPCCNagiosToolSet::m_nCheckFreshness = atoi(argv[i]); } else if (stricmp(argv[i], "-override_event_handler_enabled") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_event_handler_enabled value"; exit(1); } CHPCCNagiosToolSet::m_nEventHandlerEnabled = atoi(argv[i]); } else if (stricmp(argv[i], "-override_is_volatile") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_is_volatile value"; exit(1); } CHPCCNagiosToolSet::m_nIsVolatile = atoi(argv[i]); } else if (stricmp(argv[i], "-override_normal_check_interval") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_normal_check_interval value"; exit(1); } CHPCCNagiosToolSet::m_nNormalCheckInterval = atoi(argv[i]); } else if (stricmp(argv[i], "-override_retry_check_interval") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_retry_check_interval value"; exit(1); } CHPCCNagiosToolSet::m_nRetryCheckInterval = atoi(argv[i]); } else if (stricmp(argv[i], "-override_flap_detection_enabled") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_flap_detection_enabled value"; exit(1); } CHPCCNagiosToolSet::m_nFlapDetectionEnabled = atoi(argv[i]); } else if (stricmp(argv[i], "-override_process_perf_data") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_process_perf_data value"; exit(1); } CHPCCNagiosToolSet::m_nProcessPerfData = atoi(argv[i]); } else if (stricmp(argv[i], "-override_failure_prediction_enabled") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_failure_prediction_enabled value"; exit(1); } CHPCCNagiosToolSet::m_nFailurePredictionEnabled = atoi(argv[i]); } else if (stricmp(argv[i], "-override_retain_status_information") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_retain_status_information value"; exit(1); } CHPCCNagiosToolSet::m_nRetainStatusInformation = atoi(argv[i]); } else if (stricmp(argv[i], "-override_retain_nonstatus_information") == 0) { i++; if (argv[i] == NULL || *argv[i] == 0) { std::cout << "invalid override_retain_nonstatus_information value"; exit(1); } CHPCCNagiosToolSet::m_nRetainNonStatusInformation = atoi(argv[i]); } else if (stricmp(argv[i], "-use_https") == 0) { CHPCCNagiosToolSet::m_bUseHTTPS = true; } else if (stricmp(argv[i], "-disable_use_of_note_for_host_port") == 0) { bUseDetailForHostPort = false; } else if (stricmp(argv[i], "-set_url") == 0) { i++; strURL.set(argv[i]); } i++; } try { if (strOutputPath.length() == 0) { std::cout << "Missing output file path! (-output)\n"; return 0; } else if ( bGenerateServiceAndHost + bGenerateHostGroup + bGenerateNRPECommands + bGenerateEscalationCommands!= 1) //(bGenerateServiceAndHost^bGenerateHostGroup)^bGenerateNRPECommands) == false) { std::cout << "Select one (1) type of config per invocation (e.g. -hostgroup xor -service xor -nrpe xor -escalation_cmds)\n"; return 0; } else if (bGenerateHostGroup == true) { std::cout << "Generating hostgroup --> " << strOutputPath.str(); std::flush(std::cout); if (CHPCCNagiosToolSet::generateHostGroupsConfigurationFile(strOutputPath.str(), strEnvFilePath.length() == 0 ? NULL : strEnvFilePath.str()) == false, strConfigGenPath.length() == 0 ? NULL : strConfigGenPath.str()) { std::cout << "\nError generating configuration!. Verify input.\n"; return 0; } } else if (bGenerateServiceAndHost == true) { std::cout << "Generating service and host config --> " << strOutputPath.str(); std::flush(std::cout); if (CHPCCNagiosToolSet::generateServerAndHostConfigurationFile(strOutputPath.str(), strEnvFilePath.length() == 0 ? NULL : strEnvFilePath.str()) == false, strConfigGenPath.length() == 0 ? NULL : strConfigGenPath.str()) { std::cout << "\nError generating service and host configuration!. Verify input.\n"; return 0; } } else if (bGenerateNRPECommands == true) { std::cout << "Generating nrpe client command config --> " << strOutputPath.str(); std::flush(std::cout); } else if (bGenerateServiceAndHost^bGenerateHostGroup^bGenerateEscalationCommands == false) { std::cout << "Can only generate 1 type of config per invocation! (-hostgroup xor -service xor -escalation_cmds)\n"; return 0; } else if (bGenerateServiceAndHost == false && bGenerateHostGroup == false && bGenerateEscalationCommands == false) { std::cout << "Nothing to generate! (-hostgroup xor -service)\n"; return 0; } else if (bGenerateHostGroup == true) { std::cout << "Generating hostgroup --> " << strOutputPath.str(); std::flush(std::cout); if (CHPCCNagiosToolSet::generateHostGroupsConfigurationFile(strOutputPath.str(), strEnvFilePath.length() == 0 ? NULL : strEnvFilePath.str()) == false, strConfigGenPath.length() == 0 ? NULL : strConfigGenPath.str()) { std::cout << "\nError generating configuration! Verify input.\n"; return 0; } } else if (bGenerateServiceAndHost == true) { std::cout << "Generating service and host config --> " << strOutputPath.str(); std::flush(std::cout); if (CHPCCNagiosToolSet::generateServerAndHostConfigurationFile(strOutputPath.str(), strEnvFilePath.length() == 0 ? NULL : strEnvFilePath.str()) == false, strConfigGenPath.length() == 0 ? NULL : strConfigGenPath.str()) { std::cout << "\nError generating service and host configuration! Verify input.\n"; return 0; } } else if (bGenerateEscalationCommands == true) { std::cout << "Generating escalation command config --> " << strOutputPath.str(); std::flush(std::cout); if (CHPCCNagiosToolSet::generateEscalationCommandConfigurationFile(strOutputPath.str(), strEclWatchHostPortArray, (CHPCCNagiosToolSet::m_bUseAuthentication == true) ? CHPCCNagiosToolSet::m_pUserMacro : NULL, (CHPCCNagiosToolSet::m_bUseAuthentication == true) ? CHPCCNagiosToolSet::m_pPasswordMacro : NULL, CHPCCNagiosToolSet::m_bUseHTTPS, bUseDetailForHostPort, strURL.str(), (strEnvFilePath.length() == 0 ? NULL : strEnvFilePath.str()), (strConfigGenPath.length() == 0 ? NULL : strConfigGenPath.str()) ) == false) { std::cout << "\nError generating command configuration! Verify input.\n"; return 0; } } std::cout << "\nDone!\n"; } catch (...) { std::cout << "\nException caught!\n -->Check that files and directories exists and that permissions are set properly.\n"; } return 0; }
int main(int argc,char **argv) { InitModuleObjects(); EnableSEHtoExceptionMapping(); #ifndef __64BIT__ Thread::setDefaultStackSize(0x10000); // 64K stack (also set in windows DSP) #endif StringBuffer logDir; #ifdef _WIN32 logDir.append("c:\\"); #else if (checkDirExists("/c$")) logDir.append("/c$/"); #endif Owned<IFile> sentinelFile = createSentinelTarget(); removeSentinelFile(sentinelFile); SocketEndpoint listenep; unsigned sendbufsize = 0; unsigned recvbufsize = 0; int i = 1; bool isdaemon = (memicmp(argv[0]+strlen(argv[0])-4,".exe",4)==0); // bit of a kludge for windows - if .exe not specified then not daemon bool locallisten = false; const char *logdir=NULL; bool requireauthenticate = false; while (argc>i) { if (stricmp(argv[i],"-D")==0) { i++; isdaemon = true; } else if (stricmp(argv[i],"-R")==0) { // for remote run i++; #ifdef _WIN32 isdaemon = false; #else isdaemon = true; #endif } else if (stricmp(argv[i],"-A")==0) { i++; requireauthenticate = true; } else if ((argv[i][0]=='-')&&(toupper(argv[i][1])=='T')&&(!argv[i][2]||isdigit(argv[i][2]))) { if (argv[i][2]) setDafsTrace(NULL,(byte)atoi(argv[i]+2)); i++; isdaemon = false; } else if ((argc>i+1)&&(stricmp(argv[i],"-L")==0)) { i++; logDir.clear().append(argv[i++]); addPathSepChar(logDir); } else if (stricmp(argv[i],"-LOCAL")==0) { i++; locallisten = true; } else break; } #ifdef _WIN32 if ((argc>i)&&(stricmp(argv[i],"-install")==0)) { if (installService(DAFS_SERVICE_NAME,DAFS_SERVICE_DISPLAY_NAME,NULL)) { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Installed"); return 0; } return 1; } if ((argc>i)&&(stricmp(argv[i],"-remove")==0)) { if (uninstallService(DAFS_SERVICE_NAME,DAFS_SERVICE_DISPLAY_NAME)) { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Uninstalled"); return 0; } return 1; } #endif if (argc == i) listenep.port = DAFILESRV_PORT; else { if (strchr(argv[i],'.')||!isdigit(argv[i][0])) listenep.set(argv[i],DAFILESRV_PORT); else listenep.port = atoi(argv[i]); if (listenep.port==0) { usage(); exit(-1); } sendbufsize = (argc>i+1)?(atoi(argv[i+1])*1024):0; recvbufsize = (argc>i+2)?(atoi(argv[i+2])*1024):0; } if (isdaemon) { #ifdef _WIN32 class cserv: public CService { bool stopped; bool started; SocketEndpoint listenep; bool requireauthenticate; class cpollthread: public Thread { cserv *parent; public: cpollthread( cserv *_parent ) : Thread("CService::cpollthread"), parent(_parent) { } int run() { while (parent->poll()) Sleep(1000); return 1; } } pollthread; Owned<IRemoteFileServer> server; public: cserv(SocketEndpoint _listenep) : listenep(_listenep),pollthread(this) { stopped = false; started = false; } virtual ~cserv() { stopped = true; if (started) pollthread.join(); } bool init() { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Initialized"); started = true; pollthread.start(); return true; } bool poll() { if (stopped||!running()) { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Stopping"); if (server) { server->stop(); server.clear(); } return false; } return true; } void run() { // Get params from HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DaFileSrv\Parameters int requireauthenticate=0; HKEY hkey; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\DaFileSrv\\Parameters", 0, KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS) { DWORD dwType = 0; DWORD dwSize = sizeof(requireauthenticate); RegQueryValueEx(hkey, "RequireAuthentication", NULL, &dwType, (BYTE*)&requireauthenticate, &dwSize); RegCloseKey(hkey); } StringBuffer eps; if (listenep.isNull()) eps.append(listenep.port); else listenep.getUrlStr(eps); enableDafsAuthentication(requireauthenticate!=0); PROGLOG("Opening "DAFS_SERVICE_DISPLAY_NAME" on %s", eps.str()); const char * verstring = remoteServerVersionString(); PROGLOG("Version: %s", verstring); PROGLOG("Authentication:%s required",requireauthenticate?"":" not"); PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Running"); server.setown(createRemoteFileServer()); try { server->run(listenep); } catch (IException *e) { EXCLOG(e,DAFS_SERVICE_NAME); e->Release(); } PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Stopped"); stopped = true; } } service(listenep); service.start(); return 0; #else int ret = initDaemon(); if (ret) return ret; #endif } { Owned<IComponentLogFileCreator> lf = createComponentLogFileCreator(logDir.str(), "DAFILESRV"); lf->setCreateAliasFile(false); lf->setMaxDetail(TopDetail); lf->beginLogging(); } const char * verstring = remoteServerVersionString(); StringBuffer eps; if (listenep.isNull()) eps.append(listenep.port); else listenep.getUrlStr(eps); enableDafsAuthentication(requireauthenticate); PROGLOG("Opening Dali File Server on %s", eps.str()); PROGLOG("Version: %s", verstring); PROGLOG("Authentication:%s required",requireauthenticate?"":" not"); startPerformanceMonitor(10*60*1000, PerfMonStandard); server.setown(createRemoteFileServer()); writeSentinelFile(sentinelFile); try { server->run(listenep); } catch (IException *e) { EXCLOG(e,"DAFILESRV"); e->Release(); } if (server) server->stop(); server.clear(); PROGLOG("Stopped Dali File Server"); return 0; }
//----------------------------------------------------- // //----------------------------------------------------- int main(int argc, char* argv[]) { #ifdef _NO_LDAP fprintf(stderr, "System was built with _NO_LDAP\n"); return -1; #endif for (int x = 1; x < argc; x++) { if (0==strncmp("-h", argv[x], 2)) { usage(); exit(0); } else { fprintf(stderr, "\nERROR: Unrecognized parameter : '%s', enter 'initldap -h' for help\n", argv[x]); exit(1); } } InitModuleObjects(); //execute configgen to query the LDAP Server configuration(s) StringBuffer cmd; cmd.appendf("%s%cconfiggen -env %s%c%s -listldapservers", ADMIN_DIR,PATHSEPCHAR,CONFIG_DIR, PATHSEPCHAR, ENV_XML_FILE); char * configBuffer = NULL; //acquire LDAP configuration by executing configgen and capturing output { StringBuffer configBuff; Owned<IPipeProcess> pipe = createPipeProcess(); if (pipe->run("configgen", cmd.str(), ".", false, true, true, 0)) { Owned<ISimpleReadStream> pipeReader = pipe->getOutputStream(); const size32_t chunkSize = 8192; for (;;) { size32_t sizeRead = pipeReader->read(chunkSize, configBuff.reserve(chunkSize)); if (sizeRead < chunkSize) { configBuff.setLength(configBuff.length() - (chunkSize - sizeRead)); break; } } pipe->closeOutput(); } int retcode = pipe->wait(); if (retcode) { fprintf(stderr, "\nERROR %d: unable to execute %s", retcode, cmd.str()); exit(1); } configBuffer = strdup(configBuff.str()); } //Using the LDAP Server parms queried from configgen, build an //LDAPSecurity property tree for each LDAP Server and call the LDAP //Security Manager to create the needed entries Owned<IPropertyTree> ldapProps; char *saveptr; char * pLine = strtok_r(configBuffer, "\n", &saveptr); while (pLine) { if (pLine && 0==strcmp(pLine, "LDAPServerProcess")) { if (ldapProps) initLDAP(ldapProps); ldapProps.clear(); ldapProps.setown(createPTree("ldapSecurity")); } else { char * sep = strchr(pLine, ','); if (sep) { *sep = (char)NULL; ldapProps->addProp(pLine, sep+1); } } pLine = strtok_r(NULL, "\n", &saveptr); } if (ldapProps) initLDAP(ldapProps); if (configBuffer) free(configBuffer); ldapProps.clear(); releaseAtoms(); return 0; }
int main(int argc, char** argv) { InitModuleObjects(); const char* out_envname = NULL; const char* in_ipfilename; StringBuffer ipAddrs; int roxieNodes=0, thorNodes=0, slavesPerNode=1; MapStringTo<StringBuffer> dirMap; int i = 1; bool writeToFiles = false; int port = 80; while(i<argc) { if(stricmp(argv[i], "-help") == 0 || stricmp(argv[i], "-?") == 0) { usage(); releaseAtoms(); return 0; } else if (stricmp(argv[i], "-env") == 0) { i++; out_envname = argv[i++]; } else if (stricmp(argv[i], "-roxienodes") == 0) { i++; roxieNodes = atoi(argv[i++]); } else if (stricmp(argv[i], "-thornodes") == 0) { i++; thorNodes = atoi(argv[i++]); } else if (stricmp(argv[i], "-slavespernode") == 0) { i++; slavesPerNode = atoi(argv[i++]); } else if (stricmp(argv[i], "-ip") == 0) { i++; ipAddrs.append(argv[i++]); } else if(stricmp(argv[i], "-ipfile") == 0) { i++; in_ipfilename = argv[i++]; ipAddrs.loadFile(in_ipfilename); } else if(stricmp(argv[i], "-o") == 0) { i++; StringArray sbarr; DelimToStringArray(argv[i++], sbarr, "="); if (sbarr.length() != 2) continue; if (strstr(sbarr.item(1), "[NAME]") && (strstr(sbarr.item(1), "[INST]") || strstr(sbarr.item(1), "[COMPONENT]"))) dirMap.setValue(sbarr.item(0), sbarr.item(1)); else { fprintf(stderr, "Error: Directory Override must contain [NAME] and either [INST] or [COMPONENT]\n"); releaseAtoms(); return 1; } } else { fprintf(stderr, "Error: unknown command line parameter: %s\n", argv[i]); usage(); releaseAtoms(); return 1; } } if (!out_envname) { fprintf(stderr, "Error: Output environment xml file is required. Please specify.\n"); usage(); releaseAtoms(); return 1; } if (ipAddrs.length() == 0) { fprintf(stderr, "Error: Ip addresses are required. Please specify.\n"); usage(); releaseAtoms(); return 1; } try { validateIPS(ipAddrs.str()); StringBuffer optionsXml, envXml; const char* pServiceName = "WsDeploy_wsdeploy_esp"; Owned<IPropertyTree> pCfg = createPTreeFromXMLFile(ENVGEN_PATH_TO_ESP_CONFIG); optionsXml.appendf("<XmlArgs roxieNodes=\"%d\" thorNodes=\"%d\" slavesPerNode=\"%d\" ipList=\"%s\"/>", roxieNodes, thorNodes, slavesPerNode, ipAddrs.str()); buildEnvFromWizard(optionsXml, pServiceName, pCfg, envXml, &dirMap); if(envXml.length()) { StringBuffer env; StringBuffer thisip; queryHostIP().getIpText(thisip); env.appendf("<"XML_HEADER">\n<!-- Generated with envgen on ip %s -->\n", thisip.str()); env.append(envXml); Owned<IEnvironmentFactory> factory = getEnvironmentFactory(); Owned<IConstEnvironment> constEnv = factory->loadLocalEnvironment(env); validateEnv(constEnv); Owned<IFile> pFile; pFile.setown(createIFile(out_envname)); Owned<IFileIO> pFileIO; pFileIO.setown(pFile->open(IFOcreaterw)); pFileIO->write(0, env.length(), env.str()); } } catch(IException *excpt) { StringBuffer errMsg; fprintf(stderr, "Exception: %d:\n%s\n", excpt->errorCode(), excpt->errorMessage(errMsg).str()); releaseAtoms(); excpt->Release(); return 1; } catch(...) { fprintf(stderr, "Unknown exception\n"); releaseAtoms(); return 1; } releaseAtoms(); return 0; }
int main(int argc, const char* argv[]) { InitModuleObjects(); if ((argc >= 2) && ((stricmp(argv[1], "/version") == 0) || (stricmp(argv[1], "-v") == 0) || (stricmp(argv[1], "--version") == 0))) { printVersion(); return 0; } Owned<IFile> inifile = createIFile("dfuplus.ini"); if(argc < 2 && !(inifile->exists() && inifile->size() > 0)) { handleSyntax(); return 0; } if ((argc >= 2) && ((argv[1][0]=='/' || argv[1][0]=='-') && (argv[1][1]=='?' || argv[1][1]=='h'))) { handleSyntax(); return 0; } //queryLogMsgManager()->changeMonitorFilterOwn(queryStderrLogMsgHandler(), getPassNoneLogMsgFilter()); Owned<IProperties> globals = createProperties("dfuplus.ini", true); if(!build_globals(argc, argv, globals)) { fprintf(stderr, "ERROR: Invalid command syntax.\n"); releaseAtoms(); return DFUERR_InvalidCommandSyntax; } const char* action = globals->queryProp("action"); if(!action || !*action) { handleSyntax(); fprintf(stderr, "\nERROR: please specify one action"); releaseAtoms(); return DFUERR_TooFewArguments; } const char* server = globals->queryProp("server"); if (!server || !*server) { if (stricmp(action,"dafilesrv")==0) globals->setProp("server","127.0.0.1"); // dummy else { fprintf(stderr, "ERROR: Esp server url not specified.\n"); releaseAtoms(); return DFUERR_TooFewArguments; } } try { Owned<CDfuPlusHelper> helper = new CDfuPlusHelper(LINK(globals.get())); helper->doit(); } catch(IException* e) { StringBuffer errmsg; e->errorMessage(errmsg); fprintf(stderr, "%s\n", errmsg.str()); } releaseAtoms(); return 0; }
int init_main(int argc, char* argv[]) { InitModuleObjects(); Owned<IProperties> inputs = createProperties(true); bool interactive = false; for (int i = 1; i < argc; i++) { if (stricmp(argv[i], "-?")==0 || stricmp(argv[i], "-h")==0 || stricmp(argv[i], "-help")==0 || stricmp(argv[i], "/?")==0 || stricmp(argv[i], "/h")==0) usage(); else if(stricmp(argv[i], "interactive") == 0) interactive = true; else if (strchr(argv[i],'=')) { inputs->loadProp(argv[i]); } else { fprintf(stderr, "Unknown option: %s", argv[i]); return 0; } } int result = -1; #ifdef _WIN32 if (!interactive) ::SetErrorMode(SEM_NOGPFAULTERRORBOX|SEM_FAILCRITICALERRORS); #endif SET_ESP_SIGNAL_HANDLER(SIGPIPE, brokenpipe_handler); bool SEHMappingEnabled = false; CEspAbortHandler abortHandler; Owned<IFile> sentinelFile = createSentinelTarget(); removeSentinelFile(sentinelFile); Owned<CEspConfig> config; Owned<CEspServer> server; try { const char* cfgfile = NULL; const char* procname = NULL; if(inputs.get()) { if(inputs->hasProp("config")) cfgfile = inputs->queryProp("config"); if(inputs->hasProp("process")) procname = inputs->queryProp("process"); } if(!cfgfile || !*cfgfile) cfgfile = "esp.xml"; Owned<IPropertyTree> envpt= createPTreeFromXMLFile(cfgfile, ipt_caseInsensitive); Owned<IPropertyTree> procpt = NULL; if (envpt) { envpt->addProp("@config", cfgfile); StringBuffer xpath; if (procname==NULL || strcmp(procname, ".")==0) xpath.appendf("Software/EspProcess[1]"); else xpath.appendf("Software/EspProcess[@name=\"%s\"]", procname); DBGLOG("Using ESP configuration section [%s]", xpath.str()); procpt.set(envpt->queryPropTree(xpath.str())); if (!procpt) throw MakeStringException(-1, "Config section [%s] not found", xpath.str()); } else throw MakeStringException(-1, "Failed to load config file %s", cfgfile); StringBuffer logdir; if(procpt->hasProp("@name")) { StringBuffer espNameStr; procpt->getProp("@name", espNameStr); if (!getConfigurationDirectory(envpt->queryPropTree("Software/Directories"), "log", "esp", espNameStr.str(), logdir)) { logdir.clear(); } } const char* build_ver = BUILD_TAG; setBuildVersion(build_ver); const char* build_level = BUILD_LEVEL; setBuildLevel(build_level); if(logdir.length() == 0) { if(procpt->hasProp("@logDir")) procpt->getProp("@logDir", logdir); } if(logdir.length() == 0) logdir.append("."); if(stricmp(logdir.str(), ".") != 0) { recursiveCreateDirectory(logdir.str()); } if(logdir.charAt(logdir.length() - 1) != PATHSEPCHAR) logdir.append(PATHSEPCHAR); openEspLogFile(logdir.str(), procpt.get()); StringBuffer componentfilesDir; if(procpt->hasProp("@componentfilesDir")) procpt->getProp("@componentfilesDir", componentfilesDir); if(componentfilesDir.length() > 0 && strcmp(componentfilesDir.str(), ".") != 0) { DBGLOG("componentfiles are under %s", componentfilesDir.str()); setCFD(componentfilesDir.str()); } StringBuffer sehsetting; procpt->getProp("@enableSEHMapping", sehsetting); if(!interactive && sehsetting.length() > 0 && (stricmp(sehsetting.str(), "true") == 0 || stricmp(sehsetting.str(), "1") == 0)) SEHMappingEnabled = true; if(SEHMappingEnabled) EnableSEHtoExceptionMapping(); CEspConfig* cfg = new CEspConfig(inputs.getLink(), envpt.getLink(), procpt.getLink(), false); if(cfg && cfg->isValid()) { config.setown(cfg); abortHandler.setConfig(cfg); } } catch(IException* e) { StringBuffer description; ERRLOG("ESP Unhandled IException (%d -- %s)", e->errorCode(), e->errorMessage(description).str()); e->Release(); return -1; } catch (...) { ERRLOG("ESP Unhandled General Exception."); return -1; } if (config && config->isValid()) { PROGLOG("Configuring Esp Platform..."); try { CEspServer *srv = new CEspServer(config); if(SEHMappingEnabled) srv->setSavedSEHHandler(SEHMappingEnabled); server.setown(srv); abortHandler.setServer(srv); setEspContainer(server.get()); config->loadAll(); config->bindServer(*server.get(), *server.get()); } catch(IException* e) { StringBuffer description; ERRLOG("ESP Unhandled IException (%d -- %s)", e->errorCode(), e->errorMessage(description).str()); e->Release(); return -1; } catch (...) { ERRLOG("ESP Unhandled General Exception."); return -1; } writeSentinelFile(sentinelFile); result = work_main(*config, *server.get()); } else { ERRLOG("!!! Unable to load ESP configuration."); } return result; }
int main(int argc, const char *argv[]) { InitModuleObjects(); EnableSEHtoExceptionMapping(); NoQuickEditSection xxx; Owned<IFile> file = createIFile("dfuserver.xml"); if (file->exists()) globals.setown(createPTreeFromXMLFile("dfuserver.xml", ipt_caseInsensitive)); else globals.setown(readOldIni()); for (unsigned i=1;i<(unsigned)argc;i++) { const char *arg = argv[i]; StringBuffer prop("@"); StringBuffer val; while (*arg && *arg != '=') prop.append(*arg++); if (*arg) { arg++; while (isspace(*arg)) arg++; val.append(arg); prop.clip(); val.clip(); if (prop.length()>1) globals->setProp(prop.str(), val.str()); } } StringBuffer daliServer; StringBuffer queue; if (!globals->getProp("@DALISERVERS", daliServer)||!globals->getProp("@QUEUE", queue)) { usage(); globals.clear(); releaseAtoms(); return 1; } Owned<IFile> sentinelFile; bool stop = globals->getPropInt("@STOP",0)!=0; if (!stop) { sentinelFile.setown(createSentinelTarget()); removeSentinelFile(sentinelFile); StringBuffer logname; StringBuffer logdir; if (!getConfigurationDirectory(globals->queryPropTree("Directories"),"log","dfuserver",globals->queryProp("@name"),logdir)) globals->getProp("@LOG_DIR", logdir); if (logdir.length() && recursiveCreateDirectory(logdir.str())) logname.append(logdir); else appendCurrentDirectory(logname, true); if (logname.length() && logname.charAt(logname.length()-1) != PATHSEPCHAR) logname.append(PATHSEPCHAR); logname.append("dfuserver"); StringBuffer aliasLogName(logname); aliasLogName.append(".log"); fileMsgHandler = getRollingFileLogMsgHandler(logname.str(), ".log", MSGFIELD_STANDARD, false, true, NULL, aliasLogName.str()); queryLogMsgManager()->addMonitorOwn(fileMsgHandler, getCategoryLogMsgFilter(MSGAUD_all, MSGCLS_all, 1000)); } StringBuffer ftslogdir; if (getConfigurationDirectory(globals->queryPropTree("Directories"),"log","ftslave",globals->queryProp("@name"),ftslogdir)) // NB instance deliberately dfuserver's setFtSlaveLogDir(ftslogdir.str()); setRemoteSpawnSSH( globals->queryProp("SSH/@SSHidentityfile"), globals->queryProp("SSH/@SSHusername"), globals->queryProp("SSH/@SSHpassword"), globals->getPropInt("SSH/@SSHtimeout",0), globals->getPropInt("SSH/@SSHretries",3), "run_"); bool enableSNMP = globals->getPropInt("@enableSNMP")!=0; CSDSServerStatus *serverstatus=NULL; Owned<IReplicateServer> replserver; try { Owned<IGroup> serverGroup = createIGroup(daliServer.str(),DALI_SERVER_PORT); initClientProcess(serverGroup, DCR_DfuServer, 0, NULL, NULL, stop?(1000*30):MP_WAIT_FOREVER); setPasswordsFromSDS(); if(!stop) { if (globals->getPropBool("@enableSysLog",true)) UseSysLogForOperatorMessages(); serverstatus = new CSDSServerStatus("DFUserver"); setDaliServixSocketCaching(true); // speeds up lixux operations startLogMsgParentReceiver(); // for auditing connectLogMsgManagerToDali(); engine.setown(createDFUengine()); addAbortHandler(exitDFUserver); } const char *q = queue.str(); loop { StringBuffer subq; const char *comma = strchr(q,','); if (comma) subq.append(comma-q,q); else subq.append(q); if (stop) { stopDFUserver(subq.str()); } else { StringBuffer mask; mask.appendf("Queue[@name=\"%s\"][1]",subq.str()); IPropertyTree *t=serverstatus->queryProperties()->queryPropTree(mask.str()); if (t) t->setPropInt("@num",t->getPropInt("@num",0)+1); else { t = createPTree(); t->setProp("@name",subq.str()); t->setPropInt("@num",1); serverstatus->queryProperties()->addPropTree("Queue",t); } serverstatus->commitProperties(); engine->setDefaultTransferBufferSize((size32_t)globals->getPropInt("@transferBufferSize")); engine->startListener(subq.str(),serverstatus); } if (!comma) break; q = comma+1; if (!*q) break; } q = globals->queryProp("@MONITORQUEUE"); if (q&&*q) { if (stop) { stopDFUserver(q); } else { IPropertyTree *t=serverstatus->queryProperties()->addPropTree("MonitorQueue",createPTree()); t->setProp("@name",q); engine->startMonitor(q,serverstatus,globals->getPropInt("@MONITORINTERVAL",60)*1000); } } q = globals->queryProp("@REPLICATEQUEUE"); if (q&&*q) { if (stop) { // TBD? } else { replserver.setown(createReplicateServer(q)); replserver->runServer(); } } if (!stop) { serverstatus->commitProperties(); writeSentinelFile(sentinelFile); engine->joinListeners(); if (replserver.get()) replserver->stopServer(); LOG(MCprogress, unknownJob, "Exiting"); } } catch(IException *e){ EXCLOG(e, "DFU Server Exception: "); e->Release(); } catch (const char *s) { WARNLOG("DFU: %s",s); } delete serverstatus; if (stop) Sleep(2000); // give time to stop engine.clear(); globals.clear(); closeEnvironment(); closedownClientProcess(); UseSysLogForOperatorMessages(false); setDaliServixSocketCaching(false); releaseAtoms(); return 0; }
int main(int argc,char **argv) { InitModuleObjects(); EnableSEHtoExceptionMapping(); #ifndef __64BIT__ // Restrict stack sizes on 32-bit systems Thread::setDefaultStackSize(0x10000); // 64K stack (also set in windows DSP) #endif Owned<IFile> sentinelFile = createSentinelTarget(); removeSentinelFile(sentinelFile); SocketEndpoint listenep; unsigned sendbufsize = 0; unsigned recvbufsize = 0; int i = 1; bool isdaemon = (memicmp(argv[0]+strlen(argv[0])-4,".exe",4)==0); // bit of a kludge for windows - if .exe not specified then not daemon bool locallisten = false; const char *logdir=NULL; bool requireauthenticate = false; StringBuffer logDir; StringBuffer instanceName; //Get SSL Settings const char * sslCertFile; bool useSSL; unsigned short dafsPort;//DAFILESRV_PORT or SECURE_DAFILESRV_PORT querySecuritySettings(&useSSL, &dafsPort, &sslCertFile, NULL); unsigned parallelRequestLimit = DEFAULT_PARALLELREQUESTLIMIT; unsigned throttleDelayMs = DEFAULT_THROTTLEDELAYMS; unsigned throttleCPULimit = DEFAULT_THROTTLECPULIMIT; Owned<IPropertyTree> env = getHPCCEnvironment(); if (env) { StringBuffer dafilesrvPath("Software/DafilesrvProcess"); if (instanceName.length()) dafilesrvPath.appendf("[@name=\"%s\"]", instanceName.str()); IPropertyTree *daFileSrv = env->queryPropTree(dafilesrvPath); if (daFileSrv) { // global DaFileSrv settings: parallelRequestLimit = daFileSrv->getPropInt("@parallelRequestLimit", DEFAULT_PARALLELREQUESTLIMIT); throttleDelayMs = daFileSrv->getPropInt("@throttleDelayMs", DEFAULT_THROTTLEDELAYMS); throttleCPULimit = daFileSrv->getPropInt("@throttleCPULimit", DEFAULT_THROTTLECPULIMIT); // any overrides by Instance definitions? // NB: This won't work if netAddress is "." or if we start supporting hostnames there StringBuffer ipStr; queryHostIP().getIpText(ipStr); VStringBuffer daFileSrvPath("Instance[@netAddress=\"%s\"]", ipStr.str()); IPropertyTree *dafileSrvInstance = daFileSrv->queryPropTree(daFileSrvPath); if (dafileSrvInstance) { parallelRequestLimit = dafileSrvInstance->getPropInt("@parallelRequestLimit", parallelRequestLimit); throttleDelayMs = dafileSrvInstance->getPropInt("@throttleDelayMs", throttleDelayMs); throttleCPULimit = dafileSrvInstance->getPropInt("@throttleCPULimit", throttleCPULimit); } } } while (argc>i) { if (stricmp(argv[i],"-D")==0) { i++; isdaemon = true; } else if (stricmp(argv[i],"-R")==0) { // for remote run i++; #ifdef _WIN32 isdaemon = false; #else isdaemon = true; #endif } else if (stricmp(argv[i],"-A")==0) { i++; requireauthenticate = true; } else if ((argv[i][0]=='-')&&(toupper(argv[i][1])=='T')&&(!argv[i][2]||isdigit(argv[i][2]))) { if (argv[i][2]) setDafsTrace(NULL,(byte)atoi(argv[i]+2)); i++; isdaemon = false; } else if ((argc>i+1)&&(stricmp(argv[i],"-L")==0)) { i++; logDir.clear().append(argv[i++]); } else if ((argc>i+1)&&(stricmp(argv[i],"-I")==0)) { i++; instanceName.clear().append(argv[i++]); } else if (stricmp(argv[i],"-LOCAL")==0) { i++; locallisten = true; } else if (stricmp(argv[i],"-NOSSL")==0) {//overrides config setting i++; if (useSSL) { PROGLOG("DaFileSrv SSL specified in config but overridden by -NOSSL in command line"); useSSL = false; dafsPort = DAFILESRV_PORT; } } else break; } if (useSSL && !sslCertFile) { ERRLOG("DaFileSrv SSL specified but certificate file information missing from environment.conf"); exit(-1); } if (0 == logDir.length()) { getConfigurationDirectory(NULL,"log","dafilesrv",instanceName.str(),logDir); if (0 == logDir.length()) logDir.append("."); } if (instanceName.length()) { addPathSepChar(logDir); logDir.append(instanceName.str()); } #ifdef _WIN32 if ((argc>i)&&(stricmp(argv[i],"-install")==0)) { if (installService(DAFS_SERVICE_NAME,DAFS_SERVICE_DISPLAY_NAME,NULL)) { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Installed"); return 0; } return 1; } if ((argc>i)&&(stricmp(argv[i],"-remove")==0)) { if (uninstallService(DAFS_SERVICE_NAME,DAFS_SERVICE_DISPLAY_NAME)) { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Uninstalled"); return 0; } return 1; } #endif if (argc == i) listenep.port = dafsPort; else { if (strchr(argv[i],'.')||!isdigit(argv[i][0])) listenep.set(argv[i], dafsPort); else listenep.port = atoi(argv[i]); if (listenep.port==0) { usage(); exit(-1); } sendbufsize = (argc>i+1)?(atoi(argv[i+1])*1024):0; recvbufsize = (argc>i+2)?(atoi(argv[i+2])*1024):0; } if (isdaemon) { #ifdef _WIN32 class cserv: public CService { bool stopped; bool started; SocketEndpoint listenep; bool useSSL; bool requireauthenticate; class cpollthread: public Thread { cserv *parent; public: cpollthread( cserv *_parent ) : Thread("CService::cpollthread"), parent(_parent) { } int run() { while (parent->poll()) Sleep(1000); return 1; } } pollthread; Owned<IRemoteFileServer> server; public: cserv(SocketEndpoint _listenep, bool _useSSL) : listenep(_listenep),useSSL(_useSSL),pollthread(this) { stopped = false; started = false; } virtual ~cserv() { stopped = true; if (started) pollthread.join(); } bool init() { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Initialized"); started = true; pollthread.start(); return true; } bool poll() { if (stopped||!running()) { PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Stopping"); if (server) { server->stop(); server.clear(); } return false; } return true; } void run() { // Get params from HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DaFileSrv\Parameters int requireauthenticate=0; HKEY hkey; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\DaFileSrv\\Parameters", 0, KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS) { DWORD dwType = 0; DWORD dwSize = sizeof(requireauthenticate); RegQueryValueEx(hkey, "RequireAuthentication", NULL, &dwType, (BYTE*)&requireauthenticate, &dwSize); RegCloseKey(hkey); } StringBuffer eps; if (listenep.isNull()) eps.append(listenep.port); else listenep.getUrlStr(eps); enableDafsAuthentication(requireauthenticate!=0); PROGLOG("Opening " DAFS_SERVICE_DISPLAY_NAME " on %s%s", useSSL?"SECURE ":"",eps.str()); const char * verstring = remoteServerVersionString(); PROGLOG("Version: %s", verstring); PROGLOG("Authentication:%s required",requireauthenticate?"":" not"); PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Running"); server.setown(createRemoteFileServer(parallelRequestLimit, throttleDelayMs, throttleCPULimit)); try { server->run(listenep, useSSL); } catch (IException *e) { EXCLOG(e,DAFS_SERVICE_NAME); e->Release(); } PROGLOG(DAFS_SERVICE_DISPLAY_NAME " Stopped"); stopped = true; } } service(listenep, useSSL); service.start(); return 0; #else int ret = initDaemon(); if (ret) return ret; #endif } { Owned<IComponentLogFileCreator> lf = createComponentLogFileCreator(logDir.str(), "DAFILESRV"); lf->setCreateAliasFile(false); lf->setMaxDetail(TopDetail); lf->beginLogging(); } PROGLOG("Parallel request limit = %d, throttleDelayMs = %d, throttleCPULimit = %d", parallelRequestLimit, throttleDelayMs, throttleCPULimit); const char * verstring = remoteServerVersionString(); StringBuffer eps; if (listenep.isNull()) eps.append(listenep.port); else listenep.getUrlStr(eps); enableDafsAuthentication(requireauthenticate); PROGLOG("Opening Dali File Server on %s%s", useSSL?"SECURE ":"",eps.str()); PROGLOG("Version: %s", verstring); PROGLOG("Authentication:%s required",requireauthenticate?"":" not"); startPerformanceMonitor(10*60*1000, PerfMonStandard); server.setown(createRemoteFileServer(parallelRequestLimit, throttleDelayMs, throttleCPULimit)); writeSentinelFile(sentinelFile); try { server->run(listenep, useSSL); } catch (IException *e) { EXCLOG(e,"DAFILESRV"); e->Release(); } if (server) server->stop(); server.clear(); PROGLOG("Stopped Dali File Server"); return 0; }
int main( int argc, char *argv[] ) { int res=0; if (argc < 3) { printf("frunagent <nodelist> start \"command\" [options] \n" " stop <commandid> [options]\n" " account <user> <password> <dir> [option]\n" " dir <dir> [option]\n" " alive <integer> [option]\n\n" "where <nodelist> is of the form h009100:h009119,h007010:h007020\n" "or 192.168.6.100:192.168.6.119,192.168.7.10:192.168.7.20\n" "or @filename where filename contains a file in the above format\n" "options: /n<number_of_thread> /t<call_time_out> /encrypt /o<replication_offset>\n" ); return 255; } InitModuleObjects(); StringBuffer tracepath; tracepath.append(".").append(PATHSEPCHAR).append("frunagent.txt"); settrace(tracepath.str(),false); ECHO_TO_CONSOLE=true; try { setoptions(argc,argv); split_node x(argc,argv); if (argv[1][0]=='@') { StringBuffer b; b.loadFile(argv[1]+1); char *finger = (char *) b.str(); while (*finger) { if (*finger == '\n') *finger++ = ';'; else if (*finger == '#') { while (*finger && *finger != '\n') *finger++ = ' '; } else finger++; } x.split_nodes_ex(b.str(),replicationoffset); } else x.split_nodes_ex(argv[1],replicationoffset); disp->all_done_ex(false); } catch(IException *e) { pexception("",e); e->Release(); res=255; } catch (...) { traceft("Caught unknown exception"); } #ifdef _TRACING traceflush(); #endif if (disp) delete disp; return res; }
int main(int argc, char* argv[]) { InitModuleObjects(); InstanceType itype = IT_UNKNOWN; int times = 1; int threads = 1; StringBuffer in_fname; StringBuffer out_fname; StringBuffer host; int port = 80; int localport = 80; bool use_ssl = false; bool add_soap_headers = false; StringBuffer scfname; StringBuffer url; const char* soapaction = NULL; int delay = 0; int recvDelay = 0, sendDelay = 0, blockDelay = 0; int i = 1; while(i<argc) { if (stricmp(argv[i], "-s")==0) { itype = HTTPSERVER; i++; } else if (stricmp(argv[i], "-c")==0) { itype = HTTPCLIENT; i++; } else if (stricmp(argv[i], "-x")==0) { itype = HTTPPROXY; i++; } else if (stricmp(argv[i],"-r")==0) { i++; times = atoi(argv[i++]); } else if (stricmp(argv[i],"-t")==0) { i++; threads = atoi(argv[i++]); } else if (stricmp(argv[i], "-h")==0) { i++; host.clear().append(argv[i++]); } else if (stricmp(argv[i], "-p")==0) { i++; port = atoi(argv[i++]); } else if (stricmp(argv[i], "-i") == 0) { i++; in_fname.clear().append(argv[i++]); } else if (stricmp(argv[i], "-o") == 0) { i++; out_fname.clear().append(argv[i++]); } else if (stricmp(argv[i], "-ssl") == 0) { use_ssl = true; i++; } else if (stricmp(argv[i], "-sc") == 0) { i++; scfname.clear().append(argv[i++]); } else if (stricmp(argv[i], "-lp") == 0) { i++; localport = atoi(argv[i++]); } else if (stricmp(argv[i], "-delay") == 0) { i++; delay = atoi(argv[i++]); } else if (stricmp(argv[i], "-dr") == 0) { i++; recvDelay = atoi(argv[i++]); } else if (stricmp(argv[i], "-ds") == 0) { i++; sendDelay = atoi(argv[i++]); } else if (stricmp(argv[i], "-dc") == 0) { i++; blockDelay = atoi(argv[i++]); } else if(stricmp(argv[i], "-url") == 0) { i++; url.append(argv[i++]); } else if (stricmp(argv[i], "-soap")==0) { add_soap_headers = true; i++; } else if (stricmp(argv[i], "-action")==0) { i++; soapaction = argv[i++]; } else if (stricmp(argv[i], "-d")==0) { i++; httptest_tracelevel = atoi(argv[i++]);; } else { printf("Error: command format error\n"); usage(); } } try { Owned<IPropertyTree> sslconfig; if(scfname.length() > 0) sslconfig.setown(createPTreeFromXMLFile(scfname.str(), ipt_caseInsensitive)); FILE* ofile = NULL; if(out_fname.length() != 0) { ofile = fopen(out_fname.str(), "a+"); if(ofile == NULL) { printf("can't open file %s\n", out_fname.str()); exit(-1); } } else { ofile = stdout; } if(itype == HTTPSERVER) { HttpServer server(port, in_fname.str(), ofile, use_ssl, sslconfig.get()); server.setDelays(recvDelay, sendDelay, blockDelay); server.start(); } else if(itype == HTTPPROXY) { HttpProxy proxy(localport, host.str(), port, ofile, use_ssl, sslconfig.get()); proxy.start(); } else { if(add_soap_headers && url.length() == 0) { printf("Error: when you use -soap option, you must provide the full url\ntype in \"%s -h\" for usage", argv[0]); return 0; } if(host.length() == 0 && url.length() == 0) { printf("Error: destination host or url required\n"); usage(); } if(add_soap_headers) { HttpClient client(threads, times, ofile); if(delay > 0) client.setDelay(delay); client.sendSoapRequest(url.str(), soapaction, in_fname.str()); } else if(url.length() == 0) { HttpClient client(threads, times, host.str(), port, ofile, use_ssl, sslconfig.get()); if(delay > 0) client.setDelay(delay); client.sendRequest(in_fname.str()); } else { HttpClient client(threads, times, ofile); if(delay > 0) client.setDelay(delay); client.getUrl(url.str()); } } fclose(ofile); } catch(IException *excpt) { StringBuffer errMsg; DBGLOG("Error - %d:%s", excpt->errorCode(), excpt->errorMessage(errMsg).str()); return -1; } catch(...) { DBGLOG("Unknown exception"); return -1; } releaseAtoms(); return 0; }