예제 #1
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test2() {
		SystemModuleTypeConfig systemmoduletypeconfig;

		Oam oamapi;
		oamapi.getSystemConfig(systemmoduletypeconfig);

		for( unsigned int i = 0 ; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
		{
			if( systemmoduletypeconfig.moduletypeconfig[i].ModuleType.empty() )
				// end of list
				break;

			Svalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleType;
			CPPUNIT_ASSERT(!Svalue.empty());

			Svalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleDesc;
			CPPUNIT_ASSERT(!Svalue.empty());

			Ivalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleCount;
			CPPUNIT_ASSERT(Ivalue != -1);

			Ivalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUCriticalThreshold;
			CPPUNIT_ASSERT(Ivalue != -1);

			Ivalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUMajorThreshold;
			CPPUNIT_ASSERT(Ivalue != -1);

			Ivalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUMinorThreshold;
			CPPUNIT_ASSERT(Ivalue != -1);

			Ivalue = systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUMinorClearThreshold;
			CPPUNIT_ASSERT(Ivalue != -1);
		}
	};
예제 #2
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test10() {
		Oam oamapi;
		oamapi.setSystemConfig("ModuleCPUMajorThreshold1", 7500);

		oamapi.getSystemConfig("ModuleCPUMajorThreshold1", Ivalue);

		CPPUNIT_ASSERT(Ivalue == 7500);
	};
예제 #3
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test8() {
		Oam oamapi;
		oamapi.setSystemConfig("ModuleHeartbeatPeriod", 5);

		oamapi.getSystemConfig("ModuleHeartbeatPeriod", Ivalue);

		CPPUNIT_ASSERT(Ivalue == 5);
	};
예제 #4
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test5() {
		Oam oamapi;
		oamapi.setSystemConfig("SystemVersion", "V2.0.2.3");

		oamapi.getSystemConfig("SystemVersion", Svalue);

		CPPUNIT_ASSERT(Svalue == "V2.0.2.3");
	};
예제 #5
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
/*	void test3() {
		ModuleConfig moduleconfig;
		const string Modulename = "dm1";

		Oam oamapi;
		oamapi.getSystemConfig(Modulename, moduleconfig);

		Svalue = moduleconfig.ModuleName;
		CPPUNIT_ASSERT(!Svalue.empty());

	};
*/
	void test4() {
		ModuleConfig moduleconfig;

		Oam oamapi;
		oamapi.getSystemConfig(moduleconfig);

		Svalue = moduleconfig.ModuleName;
		CPPUNIT_ASSERT(!Svalue.empty());

	};
/**
 * Constructors/Destructors
 */
PredicateOperator::PredicateOperator()
{
    Oam oam;
    // get and set locale language
    string systemLang = "C";

    try
    {
        oam.getSystemConfig("SystemLang", systemLang);
    }
    catch (...)
    {}

    if ( systemLang != "en_US.UTF-8" &&
            systemLang.find("UTF") != string::npos )
        futf8 = true;
}
예제 #7
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test1() {
		SystemConfig systemconfig;

		Oam oamapi;
		oamapi.getSystemConfig(systemconfig);

		Ivalue = systemconfig.ModuleHeartbeatPeriod;
		CPPUNIT_ASSERT(Ivalue != -1);

		Ivalue = systemconfig.ModuleHeartbeatCount;
		CPPUNIT_ASSERT(Ivalue != -1);

//		Ivalue = systemconfig.ProcessHeartbeatPeriod;
//		CPPUNIT_ASSERT(Ivalue != -2);

		Svalue = systemconfig.NMSIPAddr;
		CPPUNIT_ASSERT(!Svalue.empty());
	};
예제 #8
0
/*****************************************************************************************
* @brief	diskMonitor Thread
*
* purpose:	Get current Local and External disk usage and report alarms
*
*****************************************************************************************/
void diskMonitor()
{
	ServerMonitor serverMonitor;
	Oam oam;
    SystemConfig systemConfig;
	ModuleTypeConfig moduleTypeConfig;
	typedef std::vector<std::string> LocalFileSystems;
	LocalFileSystems lfs;
	struct statvfs buf; 

	// set defaults
	int localDiskCritical = 90,
		localDiskMajor = 80,
		localDiskMinor = 70,
		ExternalDiskCritical = 90,
		ExternalDiskMajor = 80,
		ExternalDiskMinor = 70;

	// get module types
	string moduleType;
	int moduleID=-1;
	string moduleName;
	oamModuleInfo_t t;
	try {
		t = oam.getModuleInfo();
		moduleType = boost::get<1>(t);
		moduleID = boost::get<2>(t);
		moduleName = boost::get<0>(t);
	}
	catch (exception& e) {}

	bool Externalflag = false;

	//check for external disk
	DBrootList dbrootList;
	if (moduleType == "pm") {
		systemStorageInfo_t t;
		t = oam.getStorageConfig();
		if ( boost::get<0>(t) == "external")
			Externalflag = true;

		// get dbroot list and storage type from config file
		DBRootConfigList dbrootConfigList;
		oam.getPmDbrootConfig(moduleID, dbrootConfigList);
	
		DBRootConfigList::iterator pt = dbrootConfigList.begin();
		for( ; pt != dbrootConfigList.end() ; pt++)
		{
			int dbrootID = *pt;
	
			string dbroot = "DBRoot" + oam.itoa(dbrootID);
	
			string dbootdir;
			try{
				oam.getSystemConfig(dbroot, dbootdir);
			}
			catch(...) {}
	
			if ( dbootdir.empty() || dbootdir == "" )
				continue;
	
			DBrootData dbrootData;
			dbrootData.dbrootDir = dbootdir;
			dbrootData.downFlag = false;
	
			dbrootList.push_back(dbrootData);
		}
	}

	string cloud = oam::UnassignedName;
	try {
		oam.getSystemConfig( "Cloud", cloud);
	}
	catch(...) {
		cloud = oam::UnassignedName;
	}

	//get Gluster Config setting
	string GlusterConfig = "n";
	try {
		oam.getSystemConfig( "GlusterConfig", GlusterConfig);
	}
	catch(...)
	{
		GlusterConfig = "n";
	}

	int diskSpaceCheck = 0;

	while(true)
	{
		SystemStatus systemstatus;
		try {
			oam.getSystemStatus(systemstatus);
		}
		catch (exception& ex)
		{}
		
		if (systemstatus.SystemOpState != oam::ACTIVE ) {
			sleep(5);
			continue;
		}

		// Get Local/External Disk Mount points to monitor and associated thresholds
		
		try {
			oam.getSystemConfig (moduleTypeConfig);
			localDiskCritical = moduleTypeConfig.ModuleDiskCriticalThreshold; 
			localDiskMajor = moduleTypeConfig.ModuleDiskMajorThreshold; 
			localDiskMinor = moduleTypeConfig.ModuleDiskMinorThreshold;

			DiskMonitorFileSystems::iterator p = moduleTypeConfig.FileSystems.begin();
			for( ; p != moduleTypeConfig.FileSystems.end() ; p++)
			{
				string fs = *p;
				lfs.push_back(fs);

				if (DISK_DEBUG) {
					//Log this event 
					LoggingID lid(SERVER_MONITOR_LOG_ID);
					MessageLog ml(lid);
					Message msg;
					Message::Args args;
					args.add("Local Config File System to monitor =");
					args.add(fs);
					msg.format(args);
					ml.logDebugMessage(msg);
				}
			}

		} catch (...)
		{
			sleep(5);
			continue;
		}

		// get External info
		try
		{
			oam.getSystemConfig(systemConfig);

		} catch (...)
		{
			sleep(5);
			continue;
		}

		if (Externalflag) {
			// get External info
			try
			{
				ExternalDiskCritical = systemConfig.ExternalCriticalThreshold;
				ExternalDiskMajor = systemConfig.ExternalMajorThreshold;
				ExternalDiskMinor = systemConfig.ExternalMinorThreshold;

			} catch (...)
			{
				sleep(5);
				continue;
			}
		}

		//check for local file systems
		LocalFileSystems::iterator p = lfs.begin();
		while(p != lfs.end())
		{
			string deviceName = *p;
			++p;
			string fileName;
			// check local
			if ( deviceName == "/") {
				fileName = deviceName + "usr/local/Calpont/releasenum";
			}
			else
			{
				fileName = deviceName + "/000.dir";
			}

			uint64_t totalBlocks;
			uint64_t usedBlocks;

			if (!statvfs(fileName.c_str(), &buf)) {

				uint64_t blksize, blocks, freeblks, free; 

				blksize = buf.f_bsize; 
				blocks = buf.f_blocks; 
				freeblks = buf.f_bfree; 

				totalBlocks = blocks * blksize;
				free = freeblks * blksize; 
				usedBlocks = totalBlocks - free; 
			}
			else
				continue;

			int64_t diskUsage = 0;
			if ( totalBlocks == 0 ) {
				diskUsage = 0;
	
				//Log this event 
				LoggingID lid(SERVER_MONITOR_LOG_ID);
				MessageLog ml(lid);
				Message msg;
				Message::Args args;
				args.add("Total Disk Usage is set to 0");
				msg.format(args);
				ml.logWarningMessage(msg);
			}
			else
				diskUsage =  (usedBlocks / (totalBlocks / 100)) + 1;

			SMSystemDisk sd;
			sd.deviceName = deviceName;
			sd.usedPercent = diskUsage;
			sd.totalBlocks = totalBlocks;
			sd.usedBlocks = usedBlocks;
			sdl.push_back(sd);

			if (DISK_DEBUG)
				cout << "Disk Usage for " << deviceName << " is " << diskUsage << endl;
	
			if ( diskSpaceCheck == 0 )
			{
				if (diskUsage >= localDiskCritical && localDiskCritical > 0 ) {
					//adjust if over 100%
					if ( diskUsage > 100 )
						diskUsage = 100;
					if ( serverMonitor.sendResourceAlarm(deviceName, DISK_USAGE_HIGH, SET, (int) diskUsage) )
					{
						LoggingID lid(SERVER_MONITOR_LOG_ID);
						MessageLog ml(lid);
						Message msg;
						Message::Args args;
						args.add("Local Disk above Critical Disk threshold with a percentage of ");
						args.add((int) diskUsage);
						msg.format(args);
						ml.logInfoMessage(msg);
					}
				}
				else if (diskUsage >= localDiskMajor && localDiskMajor > 0 ) {
					if (serverMonitor.sendResourceAlarm(deviceName, DISK_USAGE_MED, SET, (int) diskUsage))
					{
						LoggingID lid(SERVER_MONITOR_LOG_ID);
						MessageLog ml(lid);
						Message msg;
						Message::Args args;
						args.add("Local Disk above Major Disk threshold with a percentage of ");
						args.add((int) diskUsage);
						msg.format(args);
						ml.logInfoMessage(msg);
					}
				}
				else if (diskUsage >= localDiskMinor && localDiskMinor > 0 ) {
					if ( serverMonitor.sendResourceAlarm(deviceName, DISK_USAGE_LOW, SET, (int) diskUsage))
					{
						LoggingID lid(SERVER_MONITOR_LOG_ID);
						MessageLog ml(lid);
						Message msg;
						Message::Args args;
						args.add("Local Disk above Minor Disk threshold with a percentage of ");
						args.add((int) diskUsage);
						msg.format(args);
						ml.logInfoMessage(msg);
					}
				}
				else
					serverMonitor.checkDiskAlarm(deviceName);
			}
	
			//check for external file systems/devices
			if (Externalflag ||
				(!Externalflag && GlusterConfig == "y" && moduleType == "pm") ){
				try
				{
					DBRootConfigList dbrootConfigList;
					oam.getPmDbrootConfig(moduleID, dbrootConfigList);
	
					DBRootConfigList::iterator pt = dbrootConfigList.begin();
					for( ; pt != dbrootConfigList.end() ; pt++)
					{
						int dbroot = *pt;
						string deviceName = systemConfig.DBRoot[dbroot-1];
						string fileName = deviceName + "/000.dir";
			
						if (DISK_DEBUG) {
							//Log this event 
							LoggingID lid(SERVER_MONITOR_LOG_ID);
							MessageLog ml(lid);
							Message msg;
							Message::Args args;
							args.add("DBRoots monitoring");
							args.add(dbroot);
							args.add(" ,file system =" );
							args.add(fileName);
							msg.format(args);
							ml.logDebugMessage(msg);
						}
	
						uint64_t totalBlocks;
						uint64_t usedBlocks;
			
						if (!statvfs(fileName.c_str(), &buf)) {
			
							uint64_t blksize, blocks, freeblks, free; 
			
							blksize = buf.f_bsize; 
							blocks = buf.f_blocks; 
							freeblks = buf.f_bfree; 
			
							totalBlocks = blocks * blksize;
							free = freeblks * blksize; 
							usedBlocks = totalBlocks - free; 
						}
						else
						{
							SMSystemDisk sd;
							sd.deviceName = deviceName;
							sd.usedPercent = 0;
							sd.totalBlocks = 0;
							sd.usedBlocks = 0;
							sdl.push_back(sd);
							continue;
						}
			
						int diskUsage = 0;
						if ( totalBlocks == 0 ) {
							diskUsage = 0;
				
							//Log this event 
							LoggingID lid(SERVER_MONITOR_LOG_ID);
							MessageLog ml(lid);
							Message msg;
							Message::Args args;
							args.add("Total Disk Usage is set to 0");
							msg.format(args);
							ml.logWarningMessage(msg);
						}
						else
							diskUsage =  (usedBlocks / (totalBlocks / 100)) + 1;
			
						SMSystemDisk sd;
						sd.deviceName = deviceName;
						sd.usedPercent = diskUsage;
						sd.totalBlocks = totalBlocks;
						sd.usedBlocks = usedBlocks;
						sdl.push_back(sd);
		
						if (DISK_DEBUG)
							cout << "Disk Usage for " << deviceName << " is " << diskUsage << endl;
			
						if (diskUsage >= ExternalDiskCritical && ExternalDiskCritical > 0 ) {
							//adjust if over 100%
							if ( diskUsage > 100 )
								diskUsage = 100;
							if ( serverMonitor.sendResourceAlarm(deviceName, DISK_USAGE_HIGH, SET, diskUsage))
							{
								LoggingID lid(SERVER_MONITOR_LOG_ID);
								MessageLog ml(lid);
								Message msg;
								Message::Args args;
								args.add("Disk usage for");
								args.add(deviceName);
								args.add(" above Critical Disk threshold with a percentage of ");
								args.add((int) diskUsage);
								msg.format(args);
								ml.logInfoMessage(msg);
							}
						}
						else if (diskUsage >= ExternalDiskMajor && ExternalDiskMajor > 0 ) {
							if ( serverMonitor.sendResourceAlarm(deviceName, DISK_USAGE_MED, SET, diskUsage))
							{
								LoggingID lid(SERVER_MONITOR_LOG_ID);
								MessageLog ml(lid);
								Message msg;
								Message::Args args;
								args.add("Disk usage for");
								args.add(deviceName);
								args.add(" above Major Disk threshold with a percentage of ");
								args.add((int) diskUsage);
								msg.format(args);
								ml.logInfoMessage(msg);
							}
						}
						else if (diskUsage >= ExternalDiskMinor && ExternalDiskMinor > 0 ) {
							if ( serverMonitor.sendResourceAlarm(deviceName, DISK_USAGE_LOW, SET, diskUsage))
							{
								LoggingID lid(SERVER_MONITOR_LOG_ID);
								MessageLog ml(lid);
								Message msg;
								Message::Args args;
								args.add("Disk usage for");
								args.add(deviceName);
								args.add(" above Minor Disk threshold with a percentage of ");
								args.add((int) diskUsage);
								msg.format(args);
								ml.logInfoMessage(msg);
							}
						}
						else
							serverMonitor.checkDiskAlarm(deviceName);
					}
				}
				catch (exception& e)
				{
					cout << endl << "**** getPmDbrootConfig Failed :  " << e.what() << endl;
				}
			}
		}

		//check OAM dbroot test flag to validate dbroot exist if on pm
		if ( moduleName.find("pm") != string::npos ) {
			//check OAM dbroot test flag to validate dbroot exist
			if ( dbrootList.size() != 0 ) {
				DBrootList::iterator p = dbrootList.begin();
				while ( p != dbrootList.end() )
				{
					//get dbroot directory
					string dbrootDir = (*p).dbrootDir;
					string dbrootName;
					string dbrootID;

					//get dbroot name
					string::size_type pos = dbrootDir.rfind("/",80);
					if (pos != string::npos)
						dbrootName = dbrootDir.substr(pos+1,80);

					//get ID
					dbrootID = dbrootName.substr(4,80);
			
					string fileName = dbrootDir + "/OAMdbrootCheck";
					// retry in case we hit the remount window
					for ( int retry = 0 ; ; retry++ )
					{
						bool fail = false;
						//first test, check if OAMdbrootCheck exists
						ifstream file (fileName.c_str());
						if (!file)
							fail = true;
						else
						{	//second test for amazon, check volume status
							if ( cloud != oam::UnassignedName ) {
								string volumeNameID = "PMVolumeName" + dbrootID;
								string volumeName = oam::UnassignedName;
								try {
									oam.getSystemConfig( volumeNameID, volumeName);
								}
								catch(...)
								{}
							
								if ( volumeName.empty() || volumeName == oam::UnassignedName )
									fail = false;
								else
								{
									string status = oam.getEC2VolumeStatus(volumeName);
									if ( status == "attached" )
										fail = false;
									else
									{
										fail = true;
										LoggingID lid(SERVER_MONITOR_LOG_ID);
										MessageLog ml(lid);
										Message msg;
										Message::Args args;
										args.add("dbroot monitoring: Volume not attached");
										args.add(volumeName);
										args.add("/");
										args.add(dbrootName);
										msg.format(args);
										ml.logCriticalMessage(msg);
									}
								}
							}
							else
								fail = false;
						}

						if (fail) {
							//double check system status before reporting any error BUG 5078
							SystemStatus systemstatus;
							try {
								oam.getSystemStatus(systemstatus);
							}
							catch (exception& ex)
							{}
							
							if (systemstatus.SystemOpState != oam::ACTIVE ) {
								break;
							}

							if ( retry < 10 ) {
								sleep(3);
								continue;
							}
							else
							{
								if ( !(*p).downFlag ) {
									LoggingID lid(SERVER_MONITOR_LOG_ID);
									MessageLog ml(lid);
									Message msg;
									Message::Args args;
									args.add("dbroot monitoring: Lost access to ");
									args.add(dbrootDir);
									msg.format(args);
									ml.logCriticalMessage(msg);

									oam.sendDeviceNotification(dbrootName, DBROOT_DOWN, moduleName);
									(*p).downFlag = true;

									try{
										oam.setDbrootStatus(dbrootID, oam::AUTO_OFFLINE);
									}
									catch (exception& ex)
									{}

									break;
								}
							}
						}
						else
						{
							if ( (*p).downFlag ) {
								LoggingID lid(SERVER_MONITOR_LOG_ID);
								MessageLog ml(lid);
								Message msg;
								Message::Args args;
								args.add("dbroot monitoring: Access back to ");
								args.add(dbrootDir);
								msg.format(args);
								ml.logInfoMessage(msg);
		
								oam.sendDeviceNotification(dbrootName, DBROOT_UP, moduleName);
								(*p).downFlag = false;

								try{
									oam.setDbrootStatus(dbrootID, oam::ACTIVE);
								}
								catch (exception& ex)
								{}
							}
							file.close();
							break;
						}
					}
					p++;
				}
			}
		}

		//do Gluster status check, if configured
		if ( GlusterConfig == "y")
		{
			bool pass = true;
			string errmsg = "unknown";
			try {
				string arg1 = "";
				string arg2 = "";
				int ret = oam.glusterctl(oam::GLUSTER_STATUS, arg1, arg2, errmsg);
				if ( ret != 0 )
				{
					cerr << "FAILURE: Status check error: " + errmsg << endl;
					pass = false;
				}
			}
			catch (exception& e)
			{
				cerr << endl << "**** glusterctl API exception:  " << e.what() << endl;
				cerr << "FAILURE: Status check error" << endl;
				pass = false;
			}
			catch (...)
			{
				cerr << endl << "**** glusterctl API exception: UNKNOWN" << endl;
				cerr << "FAILURE: Status check error" << endl;
				pass = false;
			}

			if ( !pass )
			{ // issue log and alarm
				LoggingID lid(SERVER_MONITOR_LOG_ID);
				MessageLog ml(lid);
				Message msg;
				Message::Args args;
				args.add("Gluster Status check failure error msg: ");
				args.add(errmsg);
				msg.format(args);
				ml.logWarningMessage(msg);
				serverMonitor.sendResourceAlarm(errmsg, GLUSTER_DISK_FAILURE, SET, 0);
			}
		}

		// sleep 10 seconds
		sleep(MONITOR_PERIOD/6);

		//check disk space every 10 minutes
		diskSpaceCheck++;
		if ( diskSpaceCheck >= 60 )
			diskSpaceCheck = 0;

		lfs.clear();
		sdl.clear();

	} // end of while loop
}
예제 #9
0
int main(int argc, char *argv[])
{
	setenv("CALPONT_HOME", "./", 1);

    Oam oam;
	string systemParentOAMModuleName;
	string parentOAMModuleIPAddr;
	PerformanceModuleList performancemodulelist;
	int pmNumber = 0;
	string prompt;
	int DBRMworkernodeID = 0;
	string remote_installer_debug = "0";
	Config* sysConfigOld;
	Config* sysConfigNew;
	string systemName;
	bool extextMapCheckOnly = false;

    if (argc > 1) {
		string arg1 = argv[1];
		if (  arg1 == "-e" )
			extextMapCheckOnly = true;
		else
			systemName = arg1;
	}
	else
		systemName = oam::UnassignedName;

	try {
		sysConfigOld = Config::makeConfig("./Calpont.xml");
		sysConfigNew = Config::makeConfig("./Calpont.xml.new");
	}
	catch(...)
	{
		cout << "ERROR: Problem reading Calpont.xml files";
		exit(-1);
	}

	string SystemSection = "SystemConfig";
	string InstallSection = "Installation";

	//set install config flag
	try {
		sysConfigNew->setConfig(InstallSection, "InitialInstallFlag", "y");
	}
	catch(...)
	{
		cout << "ERROR: Problem setting InitialInstallFlag from the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//read cloud parameter to see if this is a 3.0 or pre-3.0 build
	string cloud;
	try {
		cloud = sysConfigOld->getConfig(InstallSection, "Cloud");
	}
	catch(...)
	{ }

	bool build3 = false;
	if ( !cloud.empty() )
		build3 = true;
	//set install config flag
	try {
		sysConfigNew->setConfig(InstallSection, "InitialInstallFlag", "y");
	}
	catch(...)
	{
		cout << "ERROR: Problem setting InitialInstallFlag from the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//set gluster flag if it exists
	string GlusterConfig;
	string GlusterCopies;
	string GlusterStorageType;
	try {
		GlusterConfig = sysConfigOld->getConfig(InstallSection, "GlusterConfig");
		GlusterCopies = sysConfigOld->getConfig(InstallSection, "GlusterCopies");
		GlusterStorageType = sysConfigOld->getConfig(InstallSection, "GlusterStorageType");
	}
	catch(...)
	{}
	if ( !GlusterConfig.empty() ) {
		try {
			sysConfigNew->setConfig(InstallSection, "GlusterConfig", GlusterConfig);
			sysConfigNew->setConfig(InstallSection, "GlusterCopies", GlusterCopies);
			sysConfigNew->setConfig(InstallSection, "GlusterStorageType", GlusterStorageType);
		}
		catch(...)
		{}
	}	

	//check and make sure the ExtentMap variables don't get changed at install
	string oldFilesPerColumnPartition;
	string oldExtentsPerSegmentFile;
	string newFilesPerColumnPartition;
	string newExtentsPerSegmentFile;
	try {
		oldFilesPerColumnPartition = sysConfigOld->getConfig("ExtentMap", "FilesPerColumnPartition");
		oldExtentsPerSegmentFile = sysConfigOld->getConfig("ExtentMap", "ExtentsPerSegmentFile");

		newFilesPerColumnPartition = sysConfigNew->getConfig("ExtentMap", "FilesPerColumnPartition");
		newExtentsPerSegmentFile = sysConfigNew->getConfig("ExtentMap", "ExtentsPerSegmentFile");

		if ( oldFilesPerColumnPartition != newFilesPerColumnPartition )
		{
			try {
				sysConfigNew->setConfig("ExtentMap", "FilesPerColumnPartition", oldFilesPerColumnPartition);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting FilesPerColumnPartition in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}

		if ( oldExtentsPerSegmentFile != newExtentsPerSegmentFile )
		{
			try {
				sysConfigNew->setConfig("ExtentMap", "ExtentsPerSegmentFile", oldExtentsPerSegmentFile);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting ExtentsPerSegmentFile in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}
	catch(...)
	{
	}

	//check and update license key
	try {
		string key = sysConfigOld->getConfig("SystemConfig", "Flags");

		if ( !key.empty() )
		{
			try {
				sysConfigNew->setConfig("SystemConfig", "Flags", key);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting Flags in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}
	catch(...)
	{
	}

	sysConfigNew->write();

	if ( extextMapCheckOnly )
		exit(0);

	systemParentOAMModuleName = "pm1";

	//check if systemParentOAMModuleName (pm1) is configured, if not set to 'pm2'
//	string IPaddr = sysConfigOld->getConfig("pm1_ProcessMonitor", "IPAddr");
//	if ( IPaddr == "0.0.0.0" )
//		systemParentOAMModuleName = "pm2";

	//set Parent OAM Module Name
	try{
		sysConfigNew->setConfig(SystemSection, "ParentOAMModuleName", systemParentOAMModuleName);
	}
	catch(...)
	{
		cout << "ERROR: Problem updating the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//setup System Name
	string oldSystemName;
	try {
		oldSystemName = sysConfigOld->getConfig(SystemSection, "SystemName");
	}
	catch(...)
	{ }

	if ( !oldSystemName.empty() )
		systemName = oldSystemName;

	try {
		 sysConfigNew->setConfig(SystemSection, "SystemName", systemName);
	}
	catch(...)
	{
		cout << "ERROR: Problem setting SystemName from the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//setup System Language
	string systemLang = "C";
	try {
		systemLang = sysConfigOld->getConfig(SystemSection, "SystemLang");
	}
	catch(...)
	{ }

	try {
		 sysConfigNew->setConfig(SystemSection, "SystemLang", systemLang);
	}
	catch(...)
	{}

	//setup HA IP Address
	string HA_IPadd;
	try {
		HA_IPadd = sysConfigOld->getConfig("ProcMgr_HA", "IPAddr");
	}
	catch(...)
	{ }

	if ( !HA_IPadd.empty() ) {
		try {
			sysConfigNew->setConfig("ProcMgr_HA", "IPAddr", HA_IPadd);
		}
		catch(...)
		{
			cout << "ERROR: Problem setting ProcMgr_HA from the Calpont System Configuration file" << endl;
			exit(-1);
		}
	}

	//setup CMP IP Addresses
	string CMP_IPadd;
	string CMP_port;
	for ( int id = 1 ;; id ++ )
	{
		string cmpName = "CMP" + oam.itoa(id);
		try {
			CMP_IPadd = sysConfigOld->getConfig(cmpName, "IPAddr");
		}
		catch(...)
		{ }
	
		if ( !CMP_IPadd.empty() ) {
			try {
				CMP_port = sysConfigOld->getConfig(cmpName, "Port");
			}
			catch(...)
			{ }

			try {
				sysConfigNew->setConfig(cmpName, "IPAddr", CMP_IPadd);
				sysConfigNew->setConfig(cmpName, "Port", CMP_port);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting CMP from the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
		else
			break;
	}

	//setup module and process monitor settings
	string ModuleHeartbeatPeriod = "3";
	string ModuleHeartbeatCount = "1";
	string ProcessRestartCount = "3";
	string ProcessRestartPeriod = "1";
	string SwapAction = "restartSystem";
	string ActivePmFailoverDisabled = "n";

	try {
		ModuleHeartbeatPeriod = sysConfigOld->getConfig(SystemSection, "ModuleHeartbeatPeriod");
		ModuleHeartbeatCount = sysConfigOld->getConfig(SystemSection, "ModuleHeartbeatCount");
		ProcessRestartCount = sysConfigOld->getConfig(SystemSection, "ProcessRestartCount");
		ProcessRestartPeriod = sysConfigOld->getConfig(SystemSection, "ProcessRestartPeriod");
		SwapAction = sysConfigOld->getConfig(SystemSection, "SwapAction");
		ActivePmFailoverDisabled = sysConfigOld->getConfig(SystemSection, "ActivePmFailoverDisabled");
	}
	catch(...)
	{ }

	try {
		sysConfigNew->setConfig(SystemSection, "ModuleHeartbeatPeriod", ModuleHeartbeatPeriod);
		sysConfigNew->setConfig(SystemSection, "ModuleHeartbeatCount", ModuleHeartbeatCount);
		sysConfigNew->setConfig(SystemSection, "ProcessRestartCount", ProcessRestartCount);
		sysConfigNew->setConfig(SystemSection, "ProcessRestartPeriod", ProcessRestartPeriod);
		sysConfigNew->setConfig(SystemSection, "SwapAction", SwapAction);
		sysConfigNew->setConfig(SystemSection, "ActivePmFailoverDisabled", ActivePmFailoverDisabled);
	}
	catch(...)
	{}

	//save EEPackageType and EnableSNMP
	string EEPackageType = "rpm";
	string EnableSNMP = "y";

	try {
		EEPackageType = sysConfigOld->getConfig(InstallSection, "EEPackageType");
		EnableSNMP = sysConfigOld->getConfig(InstallSection, "EnableSNMP");
	}
	catch(...)
	{ }

	try {
		sysConfigNew->setConfig(InstallSection, "EEPackageType", EEPackageType);
		sysConfigNew->setConfig(InstallSection, "EnableSNMP", EnableSNMP);
	}
	catch(...)
	{ }

	if ( EEPackageType.empty() )
		EEPackageType = "rpm";

	if ( EnableSNMP.empty() )
		EnableSNMP = "y";

	try {
		sysConfigNew->setConfig(InstallSection, "EEPackageType", EEPackageType);
		sysConfigNew->setConfig(InstallSection, "EnableSNMP", EnableSNMP);
	}
	catch(...)
	{}

	// make DBRM backwards compatiable for pre 1.0.0.157 load
	string dbrmMainProc = "DBRM_Controller";
	string dbrmSubProc = "DBRM_Worker";
	string numSubProc = "NumWorkers";

	//set system startup offline option to default 'n'
	try {
		sysConfigNew->setConfig(InstallSection, "SystemStartupOffline", "n");
	}
	catch(...)
	{
		cout << "ERROR: Problem setting systemStartupOffline in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//CrossEngineSupport
	string Host = "";
	string Port = "3306";
	string User = "";
	string Password = "";

	try {
		Host = sysConfigOld->getConfig("CrossEngineSupport", "Host");
		Port = sysConfigOld->getConfig("CrossEngineSupport", "Port");
		User = sysConfigOld->getConfig("CrossEngineSupport", "User");
		Password = sysConfigOld->getConfig("CrossEngineSupport", "Password");
	}
	catch(...)
	{
		Host = "";
		Port = "3306";
		User = "";
		Password = "";
	}

	try {
		sysConfigNew->setConfig("CrossEngineSupport", "Host", Host);
		sysConfigNew->setConfig("CrossEngineSupport", "Port", Port);
		sysConfigNew->setConfig("CrossEngineSupport", "User", User);
		sysConfigNew->setConfig("CrossEngineSupport", "Password", Password);
	}
	catch(...)
	{}

	//QueryStats and UserPriority
	string QueryStats = "N";
	string UserPriority = "N";

	try {
		QueryStats = sysConfigOld->getConfig("QueryStats", "Enabled");
		UserPriority = sysConfigOld->getConfig("UserPriority", "Enabled");
	}
	catch(...)
	{
		QueryStats = "N";
		UserPriority = "N";
	}

	try {
		sysConfigNew->setConfig("QueryStats", "Enabled", QueryStats);
		sysConfigNew->setConfig("UserPriority", "Enabled", UserPriority);
	}
	catch(...)
	{}

	// @bug4598, DirectIO setting
	string directIO = "y";
	try {
		directIO = sysConfigOld->getConfig("PrimitiveServers", "DirectIO");
	}
	catch(...) {
		directIO = "y";
	}

	try {
		sysConfigNew->setConfig("PrimitiveServers", "DirectIO", directIO);
	}
	catch(...)
	{}

	// @bug4507, configurable pm aggregation AggregationMemoryCheck
	string aggMemCheck;
	try {
		aggMemCheck = sysConfigOld->getConfig("PrimitiveServers", "AggregationMemoryCheck");

		if ( !( aggMemCheck.empty() || aggMemCheck == "" ) ) {
			sysConfigNew->setConfig("PrimitiveServers", "AggregationMemoryCheck", aggMemCheck);
		}
	}
	catch(...) {
	}

	//Priority Settings
	string HighPriorityPercentage;
	try {
		HighPriorityPercentage = sysConfigOld->getConfig("PrimitiveServers", "HighPriorityPercentage");
		sysConfigNew->setConfig("PrimitiveServers", "HighPriorityPercentage", HighPriorityPercentage);
	}
	catch(...) {}

	string MediumPriorityPercentage;
	try {
		MediumPriorityPercentage = sysConfigOld->getConfig("PrimitiveServers", "MediumPriorityPercentage");
		sysConfigNew->setConfig("PrimitiveServers", "MediumPriorityPercentage", MediumPriorityPercentage);
	}
	catch(...) {}

	string LowPriorityPercentage;
	try {
		LowPriorityPercentage = sysConfigOld->getConfig("PrimitiveServers", "LowPriorityPercentage");
		sysConfigNew->setConfig("PrimitiveServers", "LowPriorityPercentage", LowPriorityPercentage);
	}
	catch(...) {}

	// default to single-server install type
	string OserverTypeInstall = oam.itoa(oam::INSTALL_COMBINE_DM_UM_PM);;
	string NserverTypeInstall;
	string OSingleServerInstall = "y";
	int    IserverTypeInstall;

	try {
		OserverTypeInstall = sysConfigOld->getConfig(InstallSection, "ServerTypeInstall");
		OSingleServerInstall = sysConfigOld->getConfig(InstallSection, "SingleServerInstall");
	}
	catch(...)
	{
		// default to Normal mult-server install type
		OserverTypeInstall = oam.itoa(oam::INSTALL_COMBINE_DM_UM_PM);
		OSingleServerInstall = "y";
	}

	// set Server Installation Type
	try {
		sysConfigNew->setConfig(InstallSection, "ServerTypeInstall", OserverTypeInstall);
		sysConfigNew->setConfig(InstallSection, "SingleServerInstall", OSingleServerInstall);
	}
	catch(...)
	{}

	NserverTypeInstall = OserverTypeInstall;

	IserverTypeInstall = atoi(NserverTypeInstall.c_str());

	//set RotatingDestination
	switch ( IserverTypeInstall ) {
		case (oam::INSTALL_COMBINE_DM_UM_PM):	// combined #1 - dm/um/pm on a single server
		{
			try {
				sysConfigNew->setConfig("PrimitiveServers", "RotatingDestination", "n");
			}
			catch(...)
			{
				cout << "ERROR: Problem setting RotatingDestination in the Calpont System Configuration file" << endl;
				exit(-1);
			}

			break;
		}
	}

	string parentOAMModuleType = systemParentOAMModuleName.substr(0,MAX_MODULE_TYPE_SIZE);

	//
	// get Data storage Mount
	//

	string DBRootStorageType;

	int DBRootCount;
	string deviceName;

	try {
		DBRootStorageType = sysConfigOld->getConfig(InstallSection, "DBRootStorageType");
		DBRootCount = strtol(sysConfigOld->getConfig(SystemSection, "DBRootCount").c_str(), 0, 0);
	}
	catch(...)
	{
		cout << "ERROR: Problem getting DB Storage Data from the Calpont System Configuration file" << endl;
		exit(-1);
	}

	// 2.2 to 3.x+ DBRootStorageTypeconversion
	if ( DBRootStorageType == "local" )
		DBRootStorageType = "internal";

	if ( DBRootStorageType == "storage" )
		DBRootStorageType = "external";

	try {
		sysConfigNew->setConfig(InstallSection, "DBRootStorageType", DBRootStorageType);
	}
	catch(...)
	{
		cout << "ERROR: Problem setting DBRootStorageType in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	try {
		sysConfigNew->setConfig(SystemSection, "DBRootCount", oam.itoa(DBRootCount));
	}
	catch(...)
	{
		cout << "ERROR: Problem setting DBRoot Count in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//
	//Update memory and cache settings
	//

	string NumBlocksPct;
	try {
		NumBlocksPct = sysConfigOld->getConfig("DBBC", "NumBlocksPct");
	}
	catch(...)
	{ }

	if ( ( NumBlocksPct.empty() || NumBlocksPct == "" ) &&
		IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM ) {
		NumBlocksPct = "50";
	}

	if ( !( NumBlocksPct.empty() || NumBlocksPct == "" ) ) {
		try {
			sysConfigNew->setConfig("DBBC", "NumBlocksPct", NumBlocksPct);
		}
		catch(...)
		{}
	}

	string TotalUmMemory;
	try {
		TotalUmMemory = sysConfigOld->getConfig("HashJoin", "TotalUmMemory");
	}
	catch(...)
	{ }

	try {
		 sysConfigNew->setConfig("HashJoin", "TotalUmMemory", TotalUmMemory);
	}
	catch(...)
	{}

	string strNumThreads;
    try {
        strNumThreads = sysConfigOld->getConfig("DBBC", "NumThreads");
    }
    catch(...)
    { }

    if ( !( strNumThreads.empty() || strNumThreads == "" ) ) {
        try {
            sysConfigNew->setConfig("DBBC", "NumThreads", strNumThreads);
        }
        catch(...)
        {}
    }

    sysConfigNew->write();

	//Get list of configured system modules
	SystemModuleTypeConfig sysModuleTypeConfig;

	try{
		oam.getSystemConfig(sysModuleTypeConfig);
	}
	catch(...)
	{
		cout << "ERROR: Problem reading the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//
	// Module Configuration
	//
	string ModuleSection = "SystemModuleConfig";
	unsigned int maxPMNicCount = 1;

	for ( unsigned int i = 0 ; i < sysModuleTypeConfig.moduletypeconfig.size(); i++)
	{
		string moduleType = sysModuleTypeConfig.moduletypeconfig[i].ModuleType;
		string moduleDesc = sysModuleTypeConfig.moduletypeconfig[i].ModuleDesc;
		int moduleCount = sysModuleTypeConfig.moduletypeconfig[i].ModuleCount;

		//verify and setup of modules count
		switch ( IserverTypeInstall ) {
			case (oam::INSTALL_COMBINE_DM_UM_PM):
			{
				if ( moduleType == "um" ) {
					moduleCount = 0;

					try {
						string ModuleCountParm = "ModuleCount" + oam.itoa(i+1);
						sysConfigNew->setConfig(ModuleSection, ModuleCountParm, oam.itoa(moduleCount));
						continue;
					}
					catch(...)
					{
						cout << "ERROR: Problem setting Module Count in the Calpont System Configuration file" << endl;
						exit(-1);
					}
				}
				else
				{
					try {
						string ModuleCountParm = "ModuleCount" + oam.itoa(i+1);
						sysConfigNew->setConfig(ModuleSection, ModuleCountParm, oam.itoa(moduleCount));
					}
					catch(...)
					{
						cout << "ERROR: Problem setting Module Count in the Calpont System Configuration file" << endl;
						exit(-1);
					}
				}

				break;
			}
			default:
			{
				try {
					string ModuleCountParm = "ModuleCount" + oam.itoa(i+1);
					sysConfigNew->setConfig(ModuleSection, ModuleCountParm, oam.itoa(moduleCount));
				}
				catch(...)
				{
					cout << "ERROR: Problem setting Module Count in the Calpont System Configuration file" << endl;
					exit(-1);
				}
				break;
			}
		}

		if ( moduleCount == 0 )
			//no modules equipped for this Module Type, skip
			continue;

		if ( moduleType == "pm" )
			pmNumber = moduleCount;

		//get Module Name IP addresses and Host Names
		DeviceNetworkList::iterator listPT = sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.begin();
		for( ; listPT != sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.end() ; listPT++)
		{
			PerformanceModule performancemodule;
			string moduleName = (*listPT).DeviceName;
			int moduleID = atoi(moduleName.substr(MAX_MODULE_TYPE_SIZE,MAX_MODULE_ID_SIZE).c_str());

			string moduleDisableState = (*listPT).DisableState;
			if ( moduleDisableState.empty() ||
				moduleDisableState == oam::UnassignedName )
				moduleDisableState = oam::ENABLEDSTATE;

			if ( moduleDisableState == oam::AUTODISABLEDSTATE )
				moduleDisableState == oam::ENABLEDSTATE;

			//set Module Disable State
			string moduleDisableStateParm = "ModuleDisableState" + oam.itoa(moduleID) + "-" + oam.itoa(i+1);
			try {
				sysConfigNew->setConfig(ModuleSection, moduleDisableStateParm, moduleDisableState);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting ModuleDisableState in the Calpont System Configuration file for " + moduleName << endl;
				exit(-1);
			}
	
			for( unsigned int nicID=1 ; nicID < MAX_NIC+1 ; nicID++ )
			{
				string moduleIPAddr = oam::UnassignedIpAddr;
				string moduleHostName = oam::UnassignedName;

				HostConfigList::iterator pt1 = (*listPT).hostConfigList.begin();
				for( ; pt1 != (*listPT).hostConfigList.end() ; pt1++)
				{
					if ( moduleName == (*listPT).DeviceName && (*pt1).NicID == nicID) {
						moduleIPAddr = (*pt1).IPAddr;
						moduleHostName = (*pt1).HostName;
						break;
					}
				}

				if (moduleHostName.empty() || (moduleHostName == oam::UnassignedName) )
					// exit out to next module ID
					break;

				if (moduleIPAddr.empty())
					moduleIPAddr = oam::UnassignedIpAddr;
		
				string moduleNameDesc = moduleDesc + " #" + oam.itoa(moduleID);
	
				//set New Module Host Name
				string moduleHostNameParm = "ModuleHostName" + oam.itoa(moduleID) + "-" + oam.itoa(nicID) + "-" + oam.itoa(i+1);
				try {
					sysConfigNew->setConfig(ModuleSection, moduleHostNameParm, moduleHostName);
				}
				catch(...)
				{
					cout << "ERROR: Problem setting Host Name in the Calpont System Configuration file" << endl;
					exit(-1);
				}
	
				//set Module IP address
				string moduleIPAddrNameParm = "ModuleIPAddr" + oam.itoa(moduleID) + "-" + oam.itoa(nicID) + "-" + oam.itoa(i+1);
				try {
					sysConfigNew->setConfig(ModuleSection, moduleIPAddrNameParm, moduleIPAddr);
				}
				catch(...)
				{
					cout << "ERROR: Problem setting IP address in the Calpont System Configuration file" << endl;
					exit(-1);
				}

				if ( moduleType == "pm" && moduleDisableState == oam::ENABLEDSTATE  ) {
	
					switch(nicID) {
						case 1:
							performancemodule.moduleIP1 = moduleIPAddr;
							break;
						case 2:
							performancemodule.moduleIP2 = moduleIPAddr;
							break;
						case 3:
							performancemodule.moduleIP3 = moduleIPAddr;
							break;
						case 4:
							performancemodule.moduleIP4 = moduleIPAddr;
							break;
					}
					if ( maxPMNicCount < nicID )
						maxPMNicCount = nicID;
				}

				if ( nicID > 1 )
					continue;
	
				//set port addresses
				if ( moduleName == systemParentOAMModuleName ) {
					parentOAMModuleIPAddr = moduleIPAddr;
	
				//exit out if parentOAMModuleIPAddr is NOT set, this means the System Calpont.xml isn't configured
					if ( parentOAMModuleIPAddr == "0.0.0.0" ) {
						cout << "ERROR: System Calpont.xml not configured" << endl;
						exit(-1);
					}

					//set Parent Processes Port IP Address
					string parentProcessMonitor = systemParentOAMModuleName + "_ProcessMonitor";
					sysConfigNew->setConfig(parentProcessMonitor, "IPAddr", parentOAMModuleIPAddr);
					sysConfigNew->setConfig(parentProcessMonitor, "Port", "8800");
					sysConfigNew->setConfig("ProcMgr", "IPAddr", parentOAMModuleIPAddr);
					sysConfigNew->setConfig("ProcStatusControl", "IPAddr", parentOAMModuleIPAddr);
					string parentServerMonitor = systemParentOAMModuleName + "_ServerMonitor";
					sysConfigNew->setConfig(parentServerMonitor, "IPAddr", parentOAMModuleIPAddr);
					sysConfigNew->setConfig(parentServerMonitor, "Port", "8622");

					if (build3) {
						string portName = systemParentOAMModuleName + "_WriteEngineServer";
						sysConfigNew->setConfig(portName, "IPAddr", parentOAMModuleIPAddr);
						sysConfigNew->setConfig(portName, "Port", "8630");
					}
					else
					{
						sysConfigNew->setConfig("DDLProc", "IPAddr", parentOAMModuleIPAddr);
						sysConfigNew->setConfig("DMLProc", "IPAddr", parentOAMModuleIPAddr);
					}

					if ( IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM ) {

						//set User Module's IP Addresses
						string Section = "ExeMgr" + oam.itoa(moduleID);
		
						sysConfigNew->setConfig(Section, "IPAddr", moduleIPAddr);
						sysConfigNew->setConfig(Section, "Port", "8601");

						//set Performance Module's IP's to first NIC IP entered
						sysConfigNew->setConfig("DDLProc", "IPAddr", moduleIPAddr);
						sysConfigNew->setConfig("DMLProc", "IPAddr", moduleIPAddr);
					}
				}
				else
				{
					//set child Process Monitor Port IP Address
					string portName = moduleName + "_ProcessMonitor";
					sysConfigNew->setConfig(portName, "IPAddr", moduleIPAddr);
					sysConfigNew->setConfig(portName, "Port", "8800");

					//set child Server Monitor Port IP Address
					portName = moduleName + "_ServerMonitor";
					sysConfigNew->setConfig(portName, "IPAddr", moduleIPAddr);
					sysConfigNew->setConfig(portName, "Port", "8622");
	
					//set Performance Module WriteEngineServer Port IP Address
					if ( moduleType == "pm" && build3) {
						portName = moduleName + "_WriteEngineServer";
						sysConfigNew->setConfig(portName, "IPAddr", moduleIPAddr);
						sysConfigNew->setConfig(portName, "Port", "8630");
					}
	
					//set User Module's IP Addresses
					if ( moduleType == "um" ||
						( moduleType == "pm" && IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM ) ) {

						string Section = "ExeMgr" + oam.itoa(moduleID);
	
						sysConfigNew->setConfig(Section, "IPAddr", moduleIPAddr);
						sysConfigNew->setConfig(Section, "Port", "8601");
					}
				}
				
				//set Performance Module's IP's to first NIC IP entered
				if ( moduleName == "um1" && build3) {
					sysConfigNew->setConfig("DDLProc", "IPAddr", moduleIPAddr);
					sysConfigNew->setConfig("DMLProc", "IPAddr", moduleIPAddr);
				}

				//setup DBRM processes
				if ( moduleName == systemParentOAMModuleName )
					sysConfigNew->setConfig(dbrmMainProc, "IPAddr", moduleIPAddr);

				if ( moduleDisableState == oam::ENABLEDSTATE ) {
					DBRMworkernodeID++;
					string DBRMSection = dbrmSubProc + oam.itoa(DBRMworkernodeID);
					sysConfigNew->setConfig(DBRMSection, "IPAddr", moduleIPAddr);
					sysConfigNew->setConfig(DBRMSection, "Module", moduleName);
				}
			} //end of nicID loop

			//set dbroot assigments
			DeviceDBRootList::iterator pt3 = sysModuleTypeConfig.moduletypeconfig[i].ModuleDBRootList.begin();
			for( ; pt3 != sysModuleTypeConfig.moduletypeconfig[i].ModuleDBRootList.end() ; pt3++)
			{
				if ( (*pt3).dbrootConfigList.size() > 0 )
				{
					int moduleID = (*pt3).DeviceID;

					DBRootConfigList::iterator pt4 = (*pt3).dbrootConfigList.begin();

					int dbrootCount = (*pt3).dbrootConfigList.size();
					string moduleCountParm = "ModuleDBRootCount" + oam.itoa(moduleID) + "-" + oam.itoa(i+1);
					try {
						sysConfigNew->setConfig(ModuleSection, moduleCountParm, oam.itoa(dbrootCount));
					}
					catch(...)
					{
						cout << "ERROR: Problem setting Host Name in the Calpont System Configuration file" << endl;
						exit(-1);
					}

					int entry = 1;
					for( ; pt4 != (*pt3).dbrootConfigList.end() ; pt4++, entry++)
					{
						int dbrootid = *pt4;
		
						string moduleDBRootIDParm = "ModuleDBRootID" + oam.itoa(moduleID) + "-" + oam.itoa(entry) + "-" + oam.itoa(i+1);
						try {
							sysConfigNew->setConfig(ModuleSection, moduleDBRootIDParm, oam.itoa(dbrootid));
						}
						catch(...)
						{
							cout << "ERROR: Problem setting Host Name in the Calpont System Configuration file" << endl;
							exit(-1);
						}
					}
				}
			}

			//assign any unassigned dbroots to pm1 on pre build3 upgrades
			if (!build3) {
				//get any unassigned DBRoots
				DBRootConfigList undbrootlist;
				try {
					oam.getUnassignedDbroot(undbrootlist);
				}
				catch(...) {}

				if ( !undbrootlist.empty() )
				{
					string dbrootCount;

					int entry = 1;
					DBRootConfigList::iterator pt1 = undbrootlist.begin();
					for( ; pt1 != undbrootlist.end() ; pt1++ )
					{
						//skip dbroot #1, already setup
						if ( *pt1 == 1 )
							continue;

						entry++;

						string moduleDBRootIDParm = "ModuleDBRootID1-" + oam.itoa(entry) + "-3";
						try {
							sysConfigNew->setConfig(ModuleSection, moduleDBRootIDParm, oam.itoa(*pt1));
						}
						catch(...)
						{
							cout << "ERROR: Problem setting Host Name in the Calpont System Configuration file" << endl;
							exit(-1);
						}
					}

					string moduleCountParm = "ModuleDBRootCount1-3";
					try {
						sysConfigNew->setConfig(ModuleSection, moduleCountParm, oam.itoa(entry));
					}
					catch(...)
					{
						cout << "ERROR: Problem setting Host Name in the Calpont System Configuration file" << endl;
						exit(-1);
					}
				}
			}

			if ( ( moduleType == "pm" && moduleDisableState == oam::ENABLEDSTATE ) ||
				( IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM ) )
				performancemodulelist.push_back(performancemodule);
		} //end of module loop

		sysConfigNew->write();

	} //end of i for loop

	if ( performancemodulelist.size() == 0 )
	{
		cout << "ERROR: performancemodulelist is empty, exiting..." << endl;
		exit(-1);
	}

	//set dm count to 0 always
	try {
		sysConfigNew->setConfig(ModuleSection, "ModuleCount1", "0");
	}
	catch(...)
	{
		cout << "ERROR: Problem setting Module Count in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//setup DBRM Controller
	sysConfigNew->setConfig(dbrmMainProc, numSubProc, oam.itoa(DBRMworkernodeID));

	//setup PrimitiveServers parameters
	try {
		sysConfigNew->setConfig("PrimitiveServers", "ConnectionsPerPrimProc", oam.itoa(maxPMNicCount*2));
	}
	catch(...)
	{
		cout << "ERROR: Problem setting ConnectionsPerPrimProc in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//set the PM Ports based on Number of PM modules equipped, if any equipped
	int minPmPorts = 32;
	sysConfigNew->setConfig("PrimitiveServers", "Count", oam.itoa(pmNumber));

	int pmPorts = pmNumber * (maxPMNicCount*2);
	if ( pmPorts < minPmPorts )
		pmPorts = minPmPorts;

	if ( pmNumber > 0 || 
		( IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM ) )
	{
		const string PM = "PMS";

		for ( int pmsID = 1; pmsID < pmPorts+1 ; )
		{
			for (unsigned int j = 1 ; j < maxPMNicCount+1 ; j++)
			{
				PerformanceModuleList::iterator list1 = performancemodulelist.begin();
		
				for (; list1 != performancemodulelist.end() ; list1++)
				{
					string pmName = PM + oam.itoa(pmsID);
					string IpAddr;
					switch(j) {
						case 1:
							IpAddr = (*list1).moduleIP1;
							break;
						case 2:
							IpAddr = (*list1).moduleIP2;
							break;
						case 3:
							IpAddr = (*list1).moduleIP3;
							break;
						case 4:
							IpAddr = (*list1).moduleIP4;
							break;
					}
					if ( !IpAddr.empty() && IpAddr != oam::UnassignedIpAddr ) {
						sysConfigNew->setConfig(pmName, "IPAddr", IpAddr);
						pmsID++;
						if ( pmsID > pmPorts )
							break;
					}
				}
				if ( pmsID > pmPorts )
					break;
			}
		}
	}

	sysConfigNew->write();

	//
	// Configure Ext Devices
	//
	SystemExtDeviceConfig systemextdeviceconfig;

	try{
		oam.getSystemConfig(systemextdeviceconfig);
	}
	catch(...)
	{
		cout << "ERROR: Problem reading the Calpont System Configuration file" << endl;
		exit(-1);
	}

	if ( systemextdeviceconfig.Count > 0 ) {

        const string NAME = "Name";
        const string IPADDR = "IPAddr";
        const string DISABLE_STATE = "DisableState";

		sysConfigNew->setConfig("SystemExtDeviceConfig", "Count", oam.itoa(systemextdeviceconfig.Count));

		for ( unsigned int i = 0 ; i < systemextdeviceconfig.Count ; i++ )
		{
			string name = NAME + oam.itoa(i+1);
			string ipaddr = IPADDR + oam.itoa(i+1);
			string disablestate = DISABLE_STATE + oam.itoa(i+1);
	
			sysConfigNew->setConfig("SystemExtDeviceConfig", name, systemextdeviceconfig.extdeviceconfig[i].Name);
			sysConfigNew->setConfig("SystemExtDeviceConfig", ipaddr, systemextdeviceconfig.extdeviceconfig[i].IPAddr);
			sysConfigNew->setConfig("SystemExtDeviceConfig", disablestate, systemextdeviceconfig.extdeviceconfig[i].DisableState);
		}
	}

	sysConfigNew->write();


	//
	// Configure NMS Addresses
	//

	string NMSIPAddress;
	try {
		NMSIPAddress = sysConfigOld->getConfig(SystemSection, "NMSIPAddress");
	}
	catch(...)
	{
		cout << "ERROR: Problem getting NMSIPAddress from Calpont System Configuration file" << endl;
		exit(-1);
	}

	try {
		sysConfigNew->setConfig(SystemSection, "NMSIPAddress", NMSIPAddress);
	}
	catch(...)
	{
		cout << "ERROR: Problem setting NMSIPAddress in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//
	// setup TransactionArchivePeriod
	//

	string transactionArchivePeriod;
	try {
		transactionArchivePeriod = sysConfigOld->getConfig(SystemSection, "TransactionArchivePeriod");
	}
	catch(...)
	{
		cout << "ERROR: Problem getting transactionArchivePeriod from Calpont System Configuration file" << endl;
		exit(-1);
	}

	try {
		sysConfigNew->setConfig(SystemSection, "TransactionArchivePeriod", transactionArchivePeriod);
	}
	catch(...)
	{
		cout << "ERROR: Problem setting IP address in the Calpont System Configuration file" << endl;
		exit(-1);
	}

	//
	// 3.0 sn configuration items
	// 
	if (build3) {
		//setup cloud parameters
		string x509Cert;
		string x509PriKey;
		string UMStorageType;
		string rpw;
		string PMInstanceType;
		string UMInstanceType;
		string UMSecurityGroup;
		string UMVolumeSize;
		string PMVolumeSize;
		string UMAutoSync;
		string UMSyncTime;
		string AmazonAutoTagging;
		string AmazonRegion;

		try {
			x509Cert = sysConfigOld->getConfig(InstallSection, "AmazonX509Certificate");
			x509PriKey = sysConfigOld->getConfig(InstallSection, "AmazonX509PrivateKey");
			UMStorageType = sysConfigOld->getConfig(InstallSection, "UMStorageType");
			rpw = sysConfigOld->getConfig(InstallSection, "rpw");
			PMInstanceType = sysConfigOld->getConfig(InstallSection, "PMInstanceType");
			UMInstanceType = sysConfigOld->getConfig(InstallSection, "UMInstanceType");
			UMSecurityGroup = sysConfigOld->getConfig(InstallSection, "UMSecurityGroup");
			UMVolumeSize = sysConfigOld->getConfig(InstallSection, "UMVolumeSize");
			PMVolumeSize = sysConfigOld->getConfig(InstallSection, "PMVolumeSize");
			UMAutoSync = sysConfigOld->getConfig(InstallSection, "UMAutoSync");
			UMSyncTime = sysConfigOld->getConfig(InstallSection, "UMSyncTime");
			AmazonAutoTagging = sysConfigOld->getConfig(InstallSection, "AmazonAutoTagging");
			AmazonRegion = sysConfigOld->getConfig(InstallSection, "AmazonRegion");
		}
		catch(...)
		{ }
	
		if ( cloud == "no" )
			cloud = "n";
	
		try {
			sysConfigNew->setConfig(InstallSection, "Cloud", cloud);
			sysConfigNew->setConfig(InstallSection, "AmazonX509Certificate", x509Cert);
			sysConfigNew->setConfig(InstallSection, "AmazonX509PrivateKey", x509PriKey);
			sysConfigNew->setConfig(InstallSection, "UMStorageType", UMStorageType);
			sysConfigNew->setConfig(InstallSection, "rpw", rpw);
			sysConfigNew->setConfig(InstallSection, "PMInstanceType", PMInstanceType);
			sysConfigNew->setConfig(InstallSection, "UMInstanceType", UMInstanceType);
			sysConfigNew->setConfig(InstallSection, "UMSecurityGroup", UMSecurityGroup);
			sysConfigNew->setConfig(InstallSection, "UMVolumeSize", UMVolumeSize);
			sysConfigNew->setConfig(InstallSection, "PMVolumeSize", PMVolumeSize);
			sysConfigNew->setConfig(InstallSection, "UMAutoSync", UMAutoSync);
			sysConfigNew->setConfig(InstallSection, "UMSyncTime", UMSyncTime);
			sysConfigNew->setConfig(InstallSection, "AmazonAutoTagging", AmazonAutoTagging);
			sysConfigNew->setConfig(InstallSection, "AmazonRegion", AmazonRegion);
		}
		catch(...)
		{
	//		cout << "ERROR: Problem setting Cloud Parameters from the Calpont System Configuration file" << endl;
	//		exit(-1);
		}

		//setup um storage
		if ( cloud == "amazon" && UMStorageType == "external") {
            try
            {
                systemStorageInfo_t t;
                t = oam.getStorageConfig();

				ModuleTypeConfig moduletypeconfig;
				oam.getSystemConfig("um", moduletypeconfig);
				for ( int id = 1; id < moduletypeconfig.ModuleCount+1 ; id++)
				{
					string volumeNameID = "UMVolumeName" + oam.itoa(id);
					string volumeName = oam::UnassignedName;
					string deviceNameID = "UMVolumeDeviceName" + oam.itoa(id);
					string deviceName = oam::UnassignedName;
					try {
						volumeName = sysConfigOld->getConfig(InstallSection, volumeNameID);
						deviceName = sysConfigOld->getConfig(InstallSection, deviceNameID);
					}
					catch(...)
					{}
	
					try {
						sysConfigNew->setConfig(InstallSection, volumeNameID, volumeName);
						sysConfigNew->setConfig(InstallSection, deviceNameID, deviceName);
					}
					catch(...)
					{}
				}
			}
            catch (exception& e)
            {
                cout << endl << "**** getStorageConfig Failed :  " << e.what() << endl;
            }
		}

		//setup dbroot storage
		try
		{
			DBRootConfigList dbrootConfigList;
			oam.getSystemDbrootConfig(dbrootConfigList);
	
			DBRootConfigList::iterator pt = dbrootConfigList.begin();
			for( ; pt != dbrootConfigList.end() ; pt++)
			{
				int id = *pt;
				string DBrootID = "DBRoot" + oam.itoa(id);;
				string pathID =  "/usr/local/Calpont/data" + oam.itoa(id);
		
				try {
					sysConfigNew->setConfig(SystemSection, DBrootID, pathID);
				}
				catch(...)
				{
					cout << "ERROR: Problem setting DBRoot in the Calpont System Configuration file" << endl;
					exit(-1);
				}
	
				if ( cloud == "amazon" && DBRootStorageType == "external") {
	
					string volumeNameID = "PMVolumeName" + oam.itoa(id);
					string volumeName = oam::UnassignedName;
					string deviceNameID = "PMVolumeDeviceName" + oam.itoa(id);
					string deviceName = oam::UnassignedName;
					try {
						volumeName = sysConfigOld->getConfig(InstallSection, volumeNameID);
						deviceName = sysConfigOld->getConfig(InstallSection, deviceNameID);
					}
					catch(...)
					{}
	
					try {
						sysConfigNew->setConfig(InstallSection, volumeNameID, volumeName);
						sysConfigNew->setConfig(InstallSection, deviceNameID, deviceName);
					}
					catch(...)
					{}
				}
			}
		}
		catch (exception& e)
		{
			cout << endl << "**** getSystemDbrootConfig Failed :  " << e.what() << endl;
		}

		//setup unassigned dbroots
		try
		{
			DBRootConfigList dbrootConfigList;
			oam.getUnassignedDbroot(dbrootConfigList);
	
			DBRootConfigList::iterator pt = dbrootConfigList.begin();
			for( ; pt != dbrootConfigList.end() ; pt++)
			{
				int id = *pt;
				string DBrootID = "DBRoot" + oam.itoa(id);;
				string pathID =  "/usr/local/Calpont/data" + oam.itoa(id);
		
				try {
					sysConfigNew->setConfig(SystemSection, DBrootID, pathID);
				}
				catch(...)
				{
					cout << "ERROR: Problem setting DBRoot in the Calpont System Configuration file" << endl;
					exit(-1);
				}
	
				if ( cloud == "amazon" && DBRootStorageType == "external") {
	
					string volumeNameID = "VolumeName" + oam.itoa(id);
					string volumeName = oam::UnassignedName;
					string deviceNameID = "VolumeDeviceName" + oam.itoa(id);
					string deviceName = oam::UnassignedName;
					try {
						volumeName = sysConfigOld->getConfig(InstallSection, volumeNameID);
						deviceName = sysConfigOld->getConfig(InstallSection, deviceNameID);
					}
					catch(...)
					{}
	
					try {
						sysConfigNew->setConfig(InstallSection, volumeNameID, volumeName);
						sysConfigNew->setConfig(InstallSection, deviceNameID, deviceName);
					}
					catch(...)
					{}
	
				}
			}
		}
		catch (exception& e)
		{
			cout << endl << "**** getUnassignedDbroot Failed :  " << e.what() << endl;
		}

		
	}
	else
	{ // pre 3.0 only

		string DBRootStorageLoc;
		for( int i=1 ; i < DBRootCount+1 ; i++)
		{
			if ( DBRootStorageType != "local") {
	
				string DBRootStorageLocID = "DBRootStorageLoc" + oam.itoa(i);
				try {
					DBRootStorageLoc = sysConfigOld->getConfig(InstallSection, DBRootStorageLocID);
				}
				catch(...)
				{
					cout << "ERROR: Problem getting '" + DBRootStorageLocID + "' from the Calpont System Configuration file" << endl;
					exit(-1);
				}
		
				try {
					sysConfigNew->setConfig(InstallSection, DBRootStorageLocID, DBRootStorageLoc);
				}
				catch(...)
				{
					cout << "ERROR: Problem setting '" + DBRootStorageLocID + "' in the Calpont System Configuration file" << endl;
					exit(-1);
				}
			}
	
			string DBrootID = "DBRoot" + oam.itoa(i);
			string pathID =  "/usr/local/Calpont/data" + oam.itoa(i);
	
			try {
				sysConfigNew->setConfig(SystemSection, DBrootID, pathID);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting DBRoot in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}

	//do elastic IP configuration
	int AmazonElasticIPCount = 0;
	try {
		AmazonElasticIPCount = atoi(sysConfigOld->getConfig(InstallSection, "AmazonElasticIPCount").c_str());

		if (AmazonElasticIPCount > 0 )
		{
			for ( int id = 1 ; id < AmazonElasticIPCount+1 ; id++ )
			{
				string AmazonElasticModule = "AmazonElasticModule" + oam.itoa(id);
				string ELmoduleName;
				string AmazonElasticIPAddr = "AmazonElasticIPAddr" + oam.itoa(id);
				string ELIPaddress;

				ELmoduleName = sysConfigOld->getConfig(InstallSection, AmazonElasticModule);
				ELIPaddress = sysConfigOld->getConfig(InstallSection, AmazonElasticIPAddr);

				try {
					sysConfigNew->setConfig(InstallSection, "AmazonElasticIPCount", oam.itoa(AmazonElasticIPCount));
					sysConfigNew->setConfig(InstallSection, AmazonElasticModule, ELmoduleName);
					sysConfigNew->setConfig(InstallSection, AmazonElasticIPAddr, ELIPaddress);
				}
				catch(...)
				{}
			}
		}
	}
	catch(...)
	{}

	try{
		oam.getSystemConfig("AmazonElasticIPCount", AmazonElasticIPCount);
	}
	catch(...) {
		AmazonElasticIPCount = 0;
	}

	// ConcurrentTransactions
	string ConcurrentTransactions;
	try {
		ConcurrentTransactions = sysConfigOld->getConfig(SystemSection, "ConcurrentTransactions");

		if ( !ConcurrentTransactions.empty() )
		{
			try {
				sysConfigNew->setConfig(SystemSection, "ConcurrentTransactions", ConcurrentTransactions);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting ConcurrentTransactions in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}
	catch(...)
	{}

	// NetworkCompression Enabled
	string NetworkCompression;
	try {
		NetworkCompression = sysConfigOld->getConfig("NetworkCompression", "Enabled");

		if ( !NetworkCompression.empty() )
		{
			try {
				sysConfigNew->setConfig("NetworkCompression", "Enabled", NetworkCompression);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting NetworkCompression in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}
	catch(...)
	{}

	// CoreFile Flag
	string CoreFileFlag;
	try {
		CoreFileFlag = sysConfigOld->getConfig("Installation", "CoreFileFlag");

		if ( !CoreFileFlag.empty() )
		{
			try {
				sysConfigNew->setConfig("Installation", "CoreFileFlag", CoreFileFlag);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting CoreFileFlag in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}
	catch(...)
	{}

	//hadoop
	string DataFilePlugin;
	try {
		DataFilePlugin = sysConfigOld->getConfig(SystemSection, "DataFilePlugin");

		if ( !DataFilePlugin.empty() )
		{
			try {
				sysConfigNew->setConfig(SystemSection, "DataFilePlugin", DataFilePlugin);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting DataFilePlugin in the Calpont System Configuration file" << endl;
				exit(-1);
			}

			string DataFileEnvFile;
			try {
				DataFileEnvFile = sysConfigOld->getConfig(SystemSection, "DataFileEnvFile");
		
				if ( !DataFileEnvFile.empty() )
				{
					try {
						sysConfigNew->setConfig(SystemSection, "DataFileEnvFile", DataFileEnvFile);
					}
					catch(...)
					{
						cout << "ERROR: Problem setting DataFileEnvFile in the Calpont System Configuration file" << endl;
						exit(-1);
					}
				}
				else
				{
					if ( DataFilePlugin == "/usr/local/Calpont/lib/hdfs-20.so" )
						DataFileEnvFile = "setenv-hdfs-20";
					else
						DataFileEnvFile = "setenv-hdfs-12";

					try {
						sysConfigNew->setConfig(SystemSection, "DataFileEnvFile", DataFileEnvFile);
					}
					catch(...)
					{
						cout << "ERROR: Problem setting DataFileEnvFile in the Calpont System Configuration file" << endl;
						exit(-1);
					}
				}
			}
			catch(...)
			{}

			string ExtentsPerSegmentFile;
			try {
				ExtentsPerSegmentFile = sysConfigOld->getConfig("ExtentMap", "ExtentsPerSegmentFile");
		
				try {
					sysConfigNew->setConfig("ExtentMap", "ExtentsPerSegmentFile", ExtentsPerSegmentFile);
				}
				catch(...)
				{
					cout << "ERROR: Problem setting ExtentsPerSegmentFile in the Calpont System Configuration file" << endl;
					exit(-1);
				}
			}
			catch(...)
			{}
		}
	}
	catch(...)
	{}

	string DataFileLog;
	try {
		DataFileLog = sysConfigOld->getConfig(SystemSection, "DataFileLog");

		if ( !DataFileLog.empty() )
		{
			try {
				sysConfigNew->setConfig(SystemSection, "DataFileLog", DataFileLog);
			}
			catch(...)
			{
				cout << "ERROR: Problem setting DataFileLog in the Calpont System Configuration file" << endl;
				exit(-1);
			}
		}
	}
	catch(...)
	{}



	//Write out Updated System Configuration File
	sysConfigNew->write();
}
예제 #10
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test9() {
		Oam oamapi;
		oamapi.getSystemConfig("ModuleHeartbeatPeriodBad", Ivalue);
		CPPUNIT_ASSERT(Ivalue == 0);
	};
예제 #11
0
파일: tdriver.cpp 프로젝트: Kangmo/infinidb
	void test6() {
		Oam oamapi;
		oamapi.getSystemConfig("SystemVersionBad", Svalue);
		CPPUNIT_ASSERT(Svalue.size() == 0);
	};
예제 #12
0
/*****************************************************************************************
* @brief	cpuMonitor Thread
*
* purpose:	Get current CPU usage, average over 5 readings and report alarms
*
*****************************************************************************************/
void cpuMonitor()
{
	ServerMonitor serverMonitor;

	// register for Heartbeat monitoring
/*	try {
		ProcHeartbeat procheartbeat;
		procheartbeat.registerHeartbeat(CPU_HEARTBEAT_ID);
	}
	catch (exception& ex)
	{
		string error = ex.what();
		LoggingID lid(SERVER_MONITOR_LOG_ID);
		MessageLog ml(lid);
		Message msg;
		Message::Args args;
		args.add("EXCEPTION ERROR on registerHeartbeat: ");
		args.add(error);
		msg.format(args);
		ml.logErrorMessage(msg);
	}
	catch(...)
	{
		LoggingID lid(SERVER_MONITOR_LOG_ID);
		MessageLog ml(lid);
		Message msg;
		Message::Args args;
		args.add("EXCEPTION ERROR on sendHeartbeat: Caught unknown exception!");
		msg.format(args);
		ml.logErrorMessage(msg);
	}
*/
	int periodCount = 5;
	float cpuPeriod[periodCount];
	int periodCounter = 0;
	float averageCpuUsage = 0;
	currentCpuUsage = 0;

	// set defaults
	unsigned int cpuCritical = 0, 
				 cpuMajor = 0, 
				 cpuMinor = 0,
				 cpuMinorClear = 0;

	// initial cpu Period table
	for (int i =0;i < periodCount; i++)
	{
		cpuPeriod[i] = 0;
	}

	while(true)
	{
		// Get CPU usage water mark from server configuration and compare
		ModuleTypeConfig moduleTypeConfig;
		Oam oam;
		try {
			oam.getSystemConfig(moduleTypeConfig);
			cpuCritical = moduleTypeConfig.ModuleCPUCriticalThreshold; 
			cpuMajor = moduleTypeConfig.ModuleCPUMajorThreshold; 
			cpuMinor = moduleTypeConfig.ModuleCPUMinorThreshold;
			cpuMinorClear = moduleTypeConfig.ModuleCPUMinorClearThreshold;
		} catch (...)
		{
			sleep(5);
			continue;
		}

		if (RESOURCE_DEBUG)
			cout << "critical water: " << moduleTypeConfig.ModuleCPUCriticalThreshold << endl;

		pthread_mutex_lock(&CPU_LOCK);
		//
		// get Process and System CPU usage
		//
		serverMonitor.getCPUdata();

		// store and get average
		cpuPeriod[periodCounter] = currentCpuUsage;
		averageCpuUsage = 0;
		for (int i =0;i < periodCount; i++)
		{
			averageCpuUsage += cpuPeriod[i];
		}
		averageCpuUsage = averageCpuUsage / periodCount;

//		serverMonitor.logCPUactive(averageCpuUsage);
		if (CPU_DEBUG) {
			cout << "Current CPU Usage: " << currentCpuUsage << endl;
			cout << "Average CPU Usage: " << averageCpuUsage << endl;
		}

		if (averageCpuUsage >= cpuCritical && cpuCritical > 0 ) {
			serverMonitor.sendResourceAlarm("CPU", CPU_USAGE_HIGH, SET, (int) averageCpuUsage);
		}
		else if (averageCpuUsage >= cpuMajor && cpuMajor > 0 )
			serverMonitor.sendResourceAlarm("CPU", CPU_USAGE_MED, SET, (int) averageCpuUsage);
		else if (averageCpuUsage >= cpuMinor && cpuMinor > 0 )
			serverMonitor.sendResourceAlarm("CPU", CPU_USAGE_LOW, SET, (int) averageCpuUsage);
		else if (averageCpuUsage >= cpuMinorClear && cpuMinorClear > 0 ) {
			serverMonitor.checkCPUAlarm("CPU", CPU_USAGE_LOW);
			//Log this event 
			LoggingID lid(SERVER_MONITOR_LOG_ID);
			MessageLog ml(lid);
			Message msg;
			Message::Args args;
			args.add("Current CPU usage = ");
			args.add((int) currentCpuUsage);
			args.add(", Average CPU usage = ");
			args.add((int) averageCpuUsage);
			msg.format(args);
			ml.logInfoMessage(msg);
		}
		else
			serverMonitor.checkCPUAlarm("CPU");

		//
		// check CPU usage by process
		//
		ProcessCPUList::iterator p = pcl.begin();
		while(p != pcl.end())
		{
			string processName =  (*p).processName;
			double cpuUsage =  (*p).usedPercent;
			p++;

			if (CPU_DEBUG) {
				cout << "Process Name : " << processName << endl;
				cout << "CPU Usage: " << cpuUsage << endl;
			}

			// check if a Calpont Process, if so alarm is over thresholds
			// if not, just log if over thresholds
			if (cpuUsage >= cpuCritical && cpuCritical > 0) {
/*				try {
					t = oam.getMyProcessStatus(processID);
					processName = boost::get<1>(t);

					serverMonitor.sendResourceAlarm(processName, CPU_USAGE_HIGH, SET, (int) cpuUsage);
				}
				catch (...) {
*/						LoggingID lid(SERVER_MONITOR_LOG_ID);
						MessageLog ml(lid);
						Message msg;
						Message::Args args;
						args.add("Process");
						args.add(processName);
						args.add(" above Critical CPU threshold with a percentage of ");
						args.add((int) cpuUsage);
						msg.format(args);
						ml.logInfoMessage(msg);
//				}
			}
			else if (cpuUsage >= cpuMajor && cpuMajor > 0) {
/*				try {
					t = oam.getMyProcessStatus(processID);
					processName = boost::get<1>(t);

					serverMonitor.sendResourceAlarm(processName, CPU_USAGE_MED, SET, (int) cpuUsage);
				}
				catch (...) {
*/						LoggingID lid(SERVER_MONITOR_LOG_ID);
						MessageLog ml(lid);
						Message msg;
						Message::Args args;
						args.add("Process");
						args.add(processName);
						args.add(" above Major CPU threshold with a percentage of ");
						args.add((int) cpuUsage);
						msg.format(args);
						ml.logInfoMessage(msg);
//				}
			}
			else if (cpuUsage >= cpuMinor && cpuMinor > 0) {
/*				try {
					t = oam.getMyProcessStatus(processID);
					processName = boost::get<1>(t);

					serverMonitor.sendResourceAlarm(processName, CPU_USAGE_LOW, SET, (int) cpuUsage);
				}
				catch (...) {
*/						LoggingID lid(SERVER_MONITOR_LOG_ID);
						MessageLog ml(lid);
						Message msg;
						Message::Args args;
						args.add("Process");
						args.add(processName);
						args.add(" above Minor CPU threshold with a percentage of ");
						args.add((int) cpuUsage);
						msg.format(args);
						ml.logInfoMessage(msg);
//				}
			}
/*			else if (cpuUsage >= cpuMinorClear) {
				try {
					t = oam.getMyProcessStatus(processID);
					processName = boost::get<1>(t);

					serverMonitor.checkCPUAlarm(processName, CPU_USAGE_LOW);
				}
				catch (...) {}
			}
			else
				serverMonitor.checkCPUAlarm(processName);
*/		}

		// send heartbeat message
/*		try {
			ProcHeartbeat procheartbeat;
			procheartbeat.sendHeartbeat(CPU_HEARTBEAT_ID);

			LoggingID lid(SERVER_MONITOR_LOG_ID);
			MessageLog ml(lid);
			Message msg;
			Message::Args args;
			args.add("Sent Heartbeat Msg");
			msg.format(args);
			ml.logInfoMessage(msg);
		}
		catch (exception& ex)
		{
			string error = ex.what();
			if ( error.find("Disabled") == string::npos ) {
				LoggingID lid(SERVER_MONITOR_LOG_ID);
				MessageLog ml(lid);
				Message msg;
				Message::Args args;
				args.add("EXCEPTION ERROR on sendHeartbeat: ");
				args.add(error);
				msg.format(args);
				ml.logErrorMessage(msg);
			}
		}
		catch(...)
		{
			LoggingID lid(SERVER_MONITOR_LOG_ID);
			MessageLog ml(lid);
			Message msg;
			Message::Args args;
			args.add("EXCEPTION ERROR on sendHeartbeat: Caught unknown exception!");
			msg.format(args);
			ml.logErrorMessage(msg);
		}
*/

		pthread_mutex_unlock(&CPU_LOCK);

		// sleep, 5 minutes
		sleep(MONITOR_PERIOD*5);

		++periodCounter;
		if ( periodCounter >= periodCount )
			periodCounter = 0;

	} // end of while loop
}
예제 #13
0
파일: helpers.cpp 프로젝트: Kangmo/infinidb
/******************************************************************************************
* @brief	sendUpgradeRequest
*
* purpose:	send Upgrade Request Msg to all ACTIVE UMs
*
*
******************************************************************************************/
int sendUpgradeRequest(int IserverTypeInstall)
{
	Oam oam;

	while(true)
	{
		try{
			ProcessStatus procstat;
			oam.getProcessStatus("WriteEngineServer", "pm1", procstat);
			if ( procstat.ProcessOpState == oam::ACTIVE)
				break;
		}
		catch (exception& ex)
		{}
	}

	SystemModuleTypeConfig systemmoduletypeconfig;

	try{
		oam.getSystemConfig(systemmoduletypeconfig);
	}
	catch (exception& ex)
	{}

	ByteStream msg;
	ByteStream::byte requestID = RUNUPGRADE;

	msg << requestID;
	msg << mysqlpw;

	int returnStatus = oam::API_SUCCESS;

	for( unsigned int i = 0; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
	{
		int moduleCount = systemmoduletypeconfig.moduletypeconfig[i].ModuleCount;
		if( moduleCount == 0)
			continue;

		string moduleType = systemmoduletypeconfig.moduletypeconfig[i].ModuleType;
		if ( moduleType == "um" ||
			( moduleType == "pm" && IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM ) ) {

			DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin();
			for ( ; pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++)
			{
				int opState;
				bool degraded;
				try {
					oam.getModuleStatus((*pt).DeviceName, opState, degraded);

					if (opState == oam::ACTIVE) {
						returnStatus = sendMsgProcMon( (*pt).DeviceName, msg, requestID, 30 );
		
						if ( returnStatus != API_SUCCESS)
							return returnStatus;
					}
				}
				catch (exception& ex)
				{}
			}
		}
	}
	return returnStatus;
}
int main(int argc, char *argv[])
{
    Oam oam;
	string installDir(startup::StartUp::installDir());

	Config* sysConfig = Config::makeConfig();
	string SystemSection = "SystemConfig";
	string InstallSection = "Installation";

	bool HARDWARE = false;
	bool SOFTWARE = false;
	bool CONFIG = false;
	bool DBMS = false;
	bool RESOURCE = false;
	bool LOG = false;
	bool BULKLOG = false;
	bool HADOOP = false;

	//get current time and date
	time_t now;
	now = time(NULL);
	struct tm tm;
	localtime_r(&now, &tm);
	char timestamp[200];
	strftime (timestamp, 200, "%m:%d:%y-%H:%M:%S", &tm);
	currentDate = timestamp;

	char helpArg[3] = "-h";

	// Get System Name
	try{
		oam.getSystemConfig("SystemName", systemName);
	}
	catch(...)
	{ 
		systemName = "unassigned";
	}

	// get Local Module Name and Server Install Indicator
	string singleServerInstall;

	oamModuleInfo_t st;
	try {
		st = oam.getModuleInfo();
		localModule = boost::get<0>(st);
	}
	catch (...) {
		cout << endl << "**** Failed : Failed to read Local Module Name" << endl;
		exit(-1);
	}

	try{
		oam.getSystemConfig("SingleServerInstall", singleServerInstall);
	}
	catch(...)
	{ 
		singleServerInstall = "y";
	}

    if (argc == 1) {
		argv[1] = &helpArg[0];
		argc = 2;
	}

	string DataFilePlugin;
	try{
		DataFilePlugin = sysConfig->getConfig(SystemSection, "DataFilePlugin");
	}
	catch(...)
	{
		cout << "ERROR: Problem accessing InfiniDB configuration file" << endl;
		exit(-1);
	}
 
   for( int i = 1; i < argc; i++ )
   {
		if( string("-h") == argv[i] ) {
			cout << endl;
			cout << "'calpontSupport' generates a Set of System Support Report Files in a tar file" << endl;
			cout << "called calpontSupportReport.'system-name'.tar.gz in the local directory." << endl;
			cout << "It should be run on the server with the DBRM front-end." << endl;
			cout << "Check the Admin Guide for additional information." << endl;
			cout << endl;
			cout << "Usage: calpontSupport [-h][-a][-hw][-s][-c][-db][-r][-l][-bl][-lc][-p 'root-password'][-mp 'mysql-root-password'][-de]";
			// if hdfs set up print the hadoop option
			if (!DataFilePlugin.empty())
				cout << "[-hd]";
			cout << endl;
			cout << "			-h  help" << endl;
			cout << "			-a  Output all Reports (excluding Bulk Logs Reports)" << endl;
			cout << "			-hw Output Hardware Reports only" << endl;
			cout << "			-s  Output Software Reports only" << endl;
			cout << "			-c  Output Configuration/Status Reports only" << endl;
			cout << "			-db Output DBMS Reports only" << endl;
			cout << "			-r  Output Resource Reports only" << endl;
			cout << "			-l  Output Calpont Log/Alarms Reports only" << endl;
			cout << "			-bl Output Calpont Bulk Log Reports only" << endl;
			cout << "			-lc Output Reports for Local Server only" << endl;
			cout << "			-p  password (multi-server systems), root-password or 'ssh' to use 'ssh keys'" << endl;
			cout << "			-mp mysql root user password" << endl;
			cout << "			-de Debug Flag" << endl;
			// if hdfs set up print the hadoop option
			if (!DataFilePlugin.empty())
			cout << "			-hd Output hadoop reports only" << endl;
			
			exit (0);
		}
		else
		{
			if( string("-a") == argv[i] ) {
				HARDWARE = true;
				SOFTWARE = true;
				CONFIG = true;
				DBMS = true;
				RESOURCE = true;
				LOG = true;
				HADOOP = (DataFilePlugin.empty()? false : true);
			}
			else if( string("-hw") == argv[i] )
				HARDWARE = true;
			else if( string("-s") == argv[i] )
				SOFTWARE = true;
			else if( string("-c") == argv[i] )
				CONFIG = true;
			else if( string("-db") == argv[i] )
				DBMS = true;
			else if( string("-r") == argv[i] )
				RESOURCE = true;
			else if( string("-l") == argv[i] )
				LOG = true;
			else if( string("-bl") == argv[i] )
				BULKLOG = true;
			else if( string("-lc") == argv[i] )
				LOCAL = true;
			else if( string("-p") == argv[i] ) {
				i++;
				if ( argc == i ) {
					cout << "ERROR: missing root password argument" << endl;
					exit(-1);
				}
				rootPassword = argv[i];
				//add single quote for special characters
				if ( rootPassword != "ssh" )
				{
					rootPassword = "******" + rootPassword + "'";
				}
			}
			else if( string("-mp") == argv[i] ) {
				i++;
				if ( argc == i ) {
					cout << "ERROR: missing mysql root user password argument" << endl;
					exit(-1);
				}
				mysqlpw = argv[i];
				mysqlpw = "'" + mysqlpw + "'";
			}
			else if( string("-de") == argv[i] )
				debug_flag = "1";
			else if ( string("-hd") == argv[i] )
			{
				HADOOP = (DataFilePlugin.empty()? false : true);
			}
			else
			{
				cout << "Invalid Option of '" << argv[i] << "', run with '-h' for help" << endl;
				exit (1);
			}
		}
	}

	//default to -a if nothing is set
	if ( !HARDWARE && !SOFTWARE && !CONFIG && !DBMS && !RESOURCE && !LOG && !BULKLOG && !HADOOP)
	{
		HARDWARE = true;
		SOFTWARE = true;
		CONFIG = true;
		DBMS = true;
		RESOURCE = true;
		LOG = true;
		HADOOP = (DataFilePlugin.empty()? false : true);
	}

	//get Parent OAM Module Name and setup of it's Custom OS files
	string PrimaryUMModuleName;
	try{
		PrimaryUMModuleName = sysConfig->getConfig(SystemSection, "PrimaryUMModuleName");
	}
	catch(...)
	{
		cout << "ERROR: Problem getting Parent OAM Module Name" << endl;
		exit(-1);
	}

	if ( PrimaryUMModuleName == "unassigned" )
		PrimaryUMModuleName = localModule;

	if ( (localModule != PrimaryUMModuleName) && DBMS )
	{
		char* pcommand = 0;
		char *p;
		string argument = "n";
	
		while(true)
		{
			cout << endl << "You selected to get the DBMS data." << endl;
			cout << "You need to run the calpontSupport command on module '" << PrimaryUMModuleName << "' to get that information." << endl;
			cout << "Or you can proceed on to get all data except the DBMS." << endl;

			pcommand = readline("           Do you want to proceed: (y or n) [n]: ");
	
			if (pcommand && *pcommand) {
				p = strtok(pcommand," ");
				argument = p;
				free(pcommand);
				pcommand = 0;
			}
	
			if (pcommand) {
				free(pcommand);
				pcommand = 0;
			}
	
			if( argument == "y") {
				cout << endl;
				break;
			}
			else if( argument == "n")
				exit (1);
		}
	}

	//get number of worker-nodes, will tell us if a single server system
	//get Parent OAM Module Name and setup of it's Custom OS files
	try{
		string NumWorkers = sysConfig->getConfig("DBRM_Controller", "NumWorkers");
		if ( NumWorkers == "1" )
			singleServerInstall = "y";
	}
	catch(...)
	{}

	if ( singleServerInstall == "n" && !LOCAL)
		if ( HARDWARE || SOFTWARE || CONFIG || RESOURCE || LOG || HADOOP )
			if ( rootPassword.empty() ) {
				cout << "ERROR: Multi-Module System, Password Argument required or use '-lc' option, check help for more information" << endl;
				exit(-1);
			}

	//get Parent OAM Module Name and setup of it's Custom OS files
	//string parentOAMModuleName;
	ChildModule parentOAMModule;
	try{
		parentOAMModule.moduleName = sysConfig->getConfig(SystemSection, "ParentOAMModuleName");
	}
	catch(...)
	{
		cout << "ERROR: Problem getting Parent OAM Module Name" << endl;
		exit(-1);
	}

	//Get list of configured system modules
	SystemModuleTypeConfig sysModuleTypeConfig;

	try{
		oam.getSystemConfig(sysModuleTypeConfig);
	}
	catch(...)
	{
		cout << "ERROR: Problem reading the Calpont System Configuration file" << endl;
		exit(-1);
	}

	string ModuleSection = "SystemModuleConfig";

	for ( unsigned int i = 0 ; i < sysModuleTypeConfig.moduletypeconfig.size(); i++)
	{
		string moduleType = sysModuleTypeConfig.moduletypeconfig[i].ModuleType;
		int moduleCount = sysModuleTypeConfig.moduletypeconfig[i].ModuleCount;

		if ( moduleCount == 0 )
			//no modules equipped for this Module Type, skip
			continue;

		//get IP addresses and Host Names
		DeviceNetworkList::iterator listPT = sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.begin();
		for( ; listPT != sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.end() ; listPT++)
		{
			string moduleName = (*listPT).DeviceName;
			HostConfigList::iterator pt1 = (*listPT).hostConfigList.begin();
			string moduleIPAddr = (*pt1).IPAddr;
			string moduleHostName = (*pt1).HostName;

			if ( moduleName == localModule) {
				localModuleHostName = moduleHostName;
			}

			//save Child modules
			if ( moduleName != localModule && moduleType != "xm") {
				childmodule.moduleName = moduleName;
				childmodule.moduleIP = moduleIPAddr;
				childmodule.hostName = moduleHostName;
				childmodulelist.push_back(childmodule);
			}
			
			if (moduleName == parentOAMModule.moduleName)
			{
				parentOAMModule.moduleIP = moduleIPAddr;
				parentOAMModule.hostName = moduleHostName;
				parentOAMModule.moduleName = moduleName;
			}
		}
	} //end of i for loop

	// create a clean Calpont Support Report
	system("rm -f *_configReport.txt");
	system("rm -f *_dbmsReport.txt");
	system("rm -f *_hardwareReport.txt");
	system("rm -f *_logReport.txt");
	system("rm -f *_bulklogReport.txt");
	system("rm -f *_resourceReport.txt");
	system("rm -f *_softwareReport.txt");
	system("rm -f hadoopReport.txt");

	//
	// Software
	//

	if ( SOFTWARE ) {
		string reportType = "software";
		pthread_t reportthread;
		int status = pthread_create (&reportthread, NULL, (void*(*)(void*)) &reportThread, &reportType);

		if ( status != 0 ) {
			cout <<  "ERROR: reportthread: pthread_create failed, return status = " + oam.itoa(status);
		}

		sleep(5);
	}

	//
	// Configuration
	//

	if ( CONFIG ) {
		string reportType = "config";
		pthread_t reportthread;
		int status = pthread_create (&reportthread, NULL, (void*(*)(void*)) &reportThread, &reportType);

		if ( status != 0 ) {
			cout <<  "ERROR: reportthread: pthread_create failed, return status = " + oam.itoa(status);
		}

		sleep(5);
	}

	//
	// Alarms and Calpont Logs
	//

	if ( LOG ) {
		string reportType = "log";
		pthread_t reportthread;
		int status = pthread_create (&reportthread, NULL, (void*(*)(void*)) &reportThread, &reportType);

		if ( status != 0 ) {
			cout <<  "ERROR: reportthread: pthread_create failed, return status = " + oam.itoa(status);
		}

		sleep(5);
	}

	//
	// Bulk Logs
	//

	if ( BULKLOG ) {
		string reportType = "bulklog";
		pthread_t reportthread;
		int status = pthread_create (&reportthread, NULL, (void*(*)(void*)) &reportThread, &reportType);

		if ( status != 0 ) {
			cout <<  "ERROR: reportthread: pthread_create failed, return status = " + oam.itoa(status);
		}

		sleep(5);
	}

	//
	// Hardware
	//

	if ( HARDWARE ) {
		string reportType = "hardware";
		pthread_t reportthread;
		int status = pthread_create (&reportthread, NULL, (void*(*)(void*)) &reportThread, &reportType);

		if ( status != 0 ) {
			cout <<  "ERROR: reportthread: pthread_create failed, return status = " + oam.itoa(status);
		}

		sleep(5);
	}

	//
	// Resources
	//

	if ( RESOURCE ) {
		string reportType = "resource";
		pthread_t reportthread;
		int status = pthread_create (&reportthread, NULL, (void*(*)(void*)) &reportThread, &reportType);

		if ( status != 0 ) {
			cout <<  "ERROR: reportthread: pthread_create failed, return status = " + oam.itoa(status);
		}

		sleep(5);
	}

	//
	// DBMS
	//

	if ( DBMS ) {
		system("rm -f calpontSupportReport.txt;touch calpontSupportReport.txt");
		title();

		system("echo '=======================================================================' >> calpontSupportReport.txt");
		system("echo '=                    DBMS Report                                      =' >> calpontSupportReport.txt");
		system("echo '=======================================================================' >> calpontSupportReport.txt");

		// run DBMS report on local server
		cout << "Get dbms report data for " << localModule << endl;

		bool FAILED = false;
		if ( localModule != PrimaryUMModuleName )
		{
			cout << "     FAILED: run calpontSupport on '" << PrimaryUMModuleName << "' to get the dbrm report" << endl;
			FAILED = true;
		}
		else
		{
			// check if mysql is supported and get info
			string calpontMysql = installDir + "/mysql/bin/mysql --defaults-file=" + installDir + "/mysql/my.cnf -u root ";
			string cmd = calpontMysql + " -e 'status' > /tmp/idbmysql.log 2>&1";
			system(cmd.c_str());

			//check for mysql password set
			string pwprompt = " ";
	
			if (oam.checkLogStatus("/tmp/idbmysql.log", "ERROR 1045") ) {
				cout << "NOTE: MySQL root user password is set" << endl;
				//needs a password, was password entered on command line
				if ( mysqlpw == " " )
				{	//go check my.cnf
					string file = installDir + "/mysql/my.cnf";
					ifstream oldFile (file.c_str());
					
					vector <string> lines;
					char line[200];
					string buf;
					while (oldFile.getline(line, 200))
					{
						buf = line;
						string::size_type pos = buf.find("password",0);
						if (pos != string::npos) {
							string::size_type pos1 = buf.find("=",0);
							if (pos1 != string::npos) {
								pos = buf.find("#",0);
								if (pos == string::npos) {
									//password arg in my.cnf, go get password
									cout << "NOTE: Using password from my.cnf" << endl;
									mysqlpw = buf.substr(pos1+1,80);
									cout << mysqlpw << endl;
									break;
								}
							}
						}
					}

					oldFile.close();

					if ( mysqlpw == " " )
					{
						cout << "NOTE: No password provide on command line or found uncommented in my.cnf" << endl;
						cout << endl;
						string prompt = " *** Enter MySQL password > ";
						mysqlpw = getpass(prompt.c_str());
					}
				}

				//check for mysql password set
				pwprompt = "--password="******" -e 'status' > /tmp/idbmysql.log 2>&1";
				system(cmd.c_str());

				if (oam.checkLogStatus("/tmp/idbmysql.log", "ERROR 1045") ) {
					cout << "FAILED: Failed login using MySQL root user password '" << mysqlpw << "'" << endl;
					FAILED = true;
				}
			}

			if (!FAILED)
			{	
				// check if mysql is supported and get info
				string calpontMysql = installDir + "/mysql/bin/mysql --defaults-file=" + installDir + "/mysql/my.cnf -u root " + pwprompt;
				string cmd = calpontMysql + " -V > /dev/null 2>&1";
				int ret = system(cmd.c_str());
				if ( WEXITSTATUS(ret) == 0) {
					// run DBMS report info
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS InfiniDB Mysql Version ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " -e status ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " -e 'status' >> calpontSupportReport.txt";
					system(cmd.c_str());
			
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS Mysql Calpont System Column  ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " -e desc calpontsys.syscolumn ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " -e 'desc calpontsys.syscolumn;' >> calpontSupportReport.txt";
					system(cmd.c_str());
			
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS Mysql Calpont System Table  ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " -e desc calpontsys.systable ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " -e 'desc calpontsys.systable;' >> calpontSupportReport.txt";
					system(cmd.c_str());
			
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS Mysql Calpont System Catalog Data ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " calpontsys < " + installDir + "/mysql/dumpcat_mysql.sql ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " calpontsys < " + installDir + "/mysql/dumpcat_mysql.sql >> calpontSupportReport.txt";
					system(cmd.c_str());
			
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS Mysql Calpont System Table Data ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " -e select * from calpontsys.systable ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " -e 'select * from calpontsys.systable;' >> calpontSupportReport.txt";
					system(cmd.c_str());
			
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS Mysql Calpont Usernames ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " -e show databases ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " -e 'show databases;' >> calpontSupportReport.txt";
					system(cmd.c_str());
		
					system("echo ' ' >> calpontSupportReport.txt");
					system("echo '******************** DBMS Mysql InfiniDB variables ********************' >> calpontSupportReport.txt");
					system("echo ' ' >> calpontSupportReport.txt");
					cmd = "echo '################# " + calpontMysql + " show variables ################# ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = "echo ' ' >> calpontSupportReport.txt";
					system(cmd.c_str());
					cmd = calpontMysql + " -e 'show variables;' >> calpontSupportReport.txt";
					system(cmd.c_str());
				}
			}
		}

		system("echo ' ' >> calpontSupportReport.txt");
		system("echo '******************** Database Size Report ********************' >> calpontSupportReport.txt");
		system("echo ' ' >> calpontSupportReport.txt");
		string cmd = "echo '################# /bin/databaseSizeReport ################# ' >> calpontSupportReport.txt";
		system(cmd.c_str());
		cmd = "echo ' ' >> calpontSupportReport.txt";
		system(cmd.c_str());
		cmd = installDir + "/bin/databaseSizeReport >> calpontSupportReport.txt";
		system(cmd.c_str());

		system("echo ' ' >> calpontSupportReport.txt");
		system("echo '******************** DBMS Mysql InfiniDB config file ********************' >> calpontSupportReport.txt");
		system("echo ' ' >> calpontSupportReport.txt");
		cmd = "echo '################# cat /mysql/my.cnf ################# ' >> calpontSupportReport.txt";
		system(cmd.c_str());
		cmd = "echo ' ' >> calpontSupportReport.txt";
		system(cmd.c_str());
		cmd = "cat " + installDir + "/mysql/my.cnf 2>/dev/null >> calpontSupportReport.txt";
		system(cmd.c_str());

		system("echo ' ' >> calpontSupportReport.txt");
		system("echo '******************** Active Queries ********************' >> calpontSupportReport.txt");
		system("echo ' ' >> calpontSupportReport.txt");
		cmd = "echo '################# mcsadmin getActiveSqlStatement ################# ' >> calpontSupportReport.txt";
		system(cmd.c_str());
		cmd = "echo ' ' >> calpontSupportReport.txt";
		system(cmd.c_str());
		cmd = installDir + "/bin/mcsadmin getActiveSqlStatement >> calpontSupportReport.txt";
		system(cmd.c_str());

		cmd = "cat calpontSupportReport.txt > " + localModule + "_dbmsReport.txt";
		system(cmd.c_str());
	}
	
	//
	// HADOOP
	//

	if (HADOOP)
	{
		if (LOCAL || childmodulelist.empty())
		{
			cout << "Get hadoop report data" << endl;
			string cmd = installDir + "/bin/hadoopReport.sh " + localModule + " " + installDir + "\n";
			cmd += " mv -f /tmp/hadoopReport.txt .";
			FILE* pipe = popen(cmd.c_str(), "r");
			if (!pipe) 
			{
				cout << "Failed to get a pipe for hadoop health check commands" << endl;
				exit(-1);
			}
			pclose(pipe);
		}
		else
		{
			// only get hadoop report from parentOAMModule, because it's consistant view.
			parentmodulelist.push_back(parentOAMModule);
			threadInfo_t *st = new threadInfo_t;
			ChildModuleList::iterator iter = parentmodulelist.begin();
			*st = boost::make_tuple(iter, "hadoop");

			pthread_t hdthread;
			int status = pthread_create (&hdthread, NULL, (void*(*)(void*)) &childReportThread, st);
			if ( status != 0 ) 
			{
				cout <<  "ERROR: childreportthread: pthread_create failed, return status = " + oam.itoa(status) << endl;
			}
		}
	}
	
	//wait for all threads to complete
	sleep(5);
	int wait = 0;
	while (true)
	{
//cout << "check " << runningThreads << endl;
		if (runningThreads < 1)
			break;

		sleep(2);
		wait++;
		// give it 60 minutes to complete
		if ( wait >= 3600 * 5)
		{
			cout << "Timed out (60 minutes) waiting for Requests to complete" << endl;
		}
	}

	system("rm -f calpontSupportReport.txt");

	system("unix2dos *Report.txt > /dev/null 2>&1");
	system("rm -rf calpontSupportReport;mkdir calpontSupportReport;mv *Report.txt calpontSupportReport/. > /dev/null 2>&1;mv *Report.tar.gz calpontSupportReport/. > /dev/null 2>&1");
	string cmd = "tar -zcf calpontSupportReport." + systemName + ".tar.gz calpontSupportReport/*";
	system(cmd.c_str());


	cout << endl << "Calpont Support Script Successfully completed, files located in calpontSupportReport." + systemName + ".tar.gz" << endl;
}
예제 #15
0
//------------------------------------------------------------------------------
// Loads the UM module information from the Calpont.xml file, so that we have
// the list of IP addresses that are valid for each UM.  Note that this method
// does not insure thread safeness, but that's okay because it is assumed that
// it will only be called once from the first call to instance().
//------------------------------------------------------------------------------
void
UmSocketSelector::loadUMModuleInfo()
{
	Oam					oam;
	ModuleTypeConfig	moduleTypeConfig;
	const std::string	UM_MODTYPE("um");

	oam.getSystemConfig(UM_MODTYPE, moduleTypeConfig);

	int			moduleCount= moduleTypeConfig.ModuleCount;
	std::string	moduleType = moduleTypeConfig.ModuleType;

#ifdef LOAD_MODULE_DEBUG
	std::cout << "ModuleConfig for type: " << UM_MODTYPE         << std::endl;
	std::cout << "ModuleDesc  = " << moduleTypeConfig.ModuleDesc << std::endl;
	std::cout << "ModuleCount = " << moduleCount                 << std::endl;
	std::cout << "RunType     = " << moduleTypeConfig.RunType    << std::endl;
#endif

	if ( moduleCount > 0 )
	{
		//..Loop through the list of UM modules
		for (DeviceNetworkList::iterator iter1 =
				moduleTypeConfig.ModuleNetworkList.begin();
			(iter1 != moduleTypeConfig.ModuleNetworkList.end());
			++iter1)
		{
			std::string moduleName = iter1->DeviceName;

#ifdef LOAD_MODULE_DEBUG
			std::cout << "ModuleName-" << moduleName << std::endl;
#endif

			//..Assign the UM index based on whether it is a new UM or one
			//  we have seen before
			unsigned int umIdx = findOrAddUm( moduleName );

			//..Get the list of IP addresses (NIC's) for this UM module
			for (HostConfigList::iterator iter2 = iter1->hostConfigList.begin();
				(iter2 != iter1->hostConfigList.end());
				++iter2)
			{
				std::string ipAddr = iter2->IPAddr;

#ifdef LOAD_MODULE_DEBUG
				std::cout << "  NIC-" << iter2->NicID <<
					"; host-" << iter2->HostName <<
					"; IP-"   << ipAddr          << std::endl;
#endif

				struct in_addr ip;
				if ( inet_aton(ipAddr.c_str(), &ip ) )
				{
					fIpAddressUmMap[ ip.s_addr ] = umIdx;
					fUmModuleIPs[umIdx]->addIP( ip.s_addr );
				}
				else
				{
					std::cerr << "Invalid IP address in SystemModuleConfig "
						"section: " << ipAddr << std::endl;
				}
			} // loop through the IP addresses for a UM module
		} // loop through the list of UM modules
	} // moduleCount > 0
}
/*****************************************************************************************
* @brief	main function
*
* purpose:	Get current CPU usage and return current state
*
*****************************************************************************************/
int main (int argc, char** argv)
{
	unsigned int *times;
	unsigned int cpuUsage = 0;
	// set defaults
	unsigned int cpuCritical = 9000, 
				 cpuMajor = 8000, 
				 cpuMinor = 7000,
				 cpuMinorClear = 6000;
	
	strcpy (cpu, "cpu");
		
	// get specific CPU info
	times = diffUsage();
	
	// no cpus available on the system
	if (times == NULL)
	{
		cout << "No cpus on the system" << endl;
		return 0;
	}

	cpuUsage = calcCPUusage(times);
	logCPUactive(cpuUsage);
	cout << "cpuUsage: " << cpuUsage << endl;
		
	// Get CPU usage water mark from server configuration and compare
	ServerConfig serverConfig;
	Oam oam;
	
	try {
		oam.getSystemConfig (serverConfig);
		cpuCritical = serverConfig.ServerCPUCriticalThreshold; 
		cpuMajor = serverConfig.ServerCPUMajorThreshold; 
		cpuMinor = serverConfig.ServerCPUMinorThreshold;
		cpuMinorClear = serverConfig.ServerCPUMinorClearThreshold;
	} catch (runtime_error e)
	{
		throw e;
	}
	cout << "critical water: " << serverConfig.ServerCPUCriticalThreshold << endl;
	
	if (cpuUsage >= cpuCritical)
	{
		cout << "return critical: " << CRITICAL << endl;
		return CRITICAL;
	}
	else if (cpuUsage >= cpuMajor)
	{
		cout << "return major: " << MAJOR << endl;
		return MAJOR;
	}
	else if (cpuUsage >= cpuMinor)
	{
		cout << "return Minor: " << MINOR << endl;
		return MINOR;
	}
	else if (cpuUsage >= cpuMinorClear)
	{
		cout << "return MinorClear: " << WARNING << endl;
		return WARNING;
	}
	else
	{
		cout << "return Below MinorClear: " << NO_SEVERITY << endl;
		return NO_SEVERITY;
	}
}