in host/config/ConfiguratorAPITestBed/ConfiguratorAPITestBed.cpp [137:547]
void run(int argc, char *argv[])
{
tal::GlobalInitialize();
boost::shared_ptr<void> guardTal( static_cast<void*>(0), boost::bind(tal::GlobalShutdown) );
MaskRequiredSignals();
LocalConfigurator lconfigurator ;
std::map<string, string> options;
do
{
if (argc < 2)
{
usage(argv[0]);
break;
}
if ((0 == stricmp(argv[1], "--h")) || (0 == stricmp(argv[1], "--help" )))
{
usage(argv[0]);
break;
}
else if (0 == stricmp(argv[1], "--default"))
{
try
{
ConfigSource configSource = FETCH_SETTINGS_FROM_CX;
if ((argc > 2) && (0 == stricmp(argv[2], "--fromcache")))
{
cout << "Parsing cache setting \n\n";
configSource = USE_ONLY_CACHE_SETTINGS;
}
cout << "PARSING INITIAL SETTINGS START" << endl;
cout << "------------------------------" << endl;
cout << endl << endl;
//Configurator * configurator = 0;
std::string configcachepath ;
SerializeType_t serializerType = lconfigurator.getSerializerType() ;
if (!InitializeConfigurator(&TheConfigurator,configSource, serializerType,configcachepath))
{
std::cout << "Failed to get the configurator" << std::endl;
break;
}
TheConfigurator->GetCurrentSettings() ;
cout << "PARSING INITIAL SETTINGS END" << endl;
cout << "----------------------------" << endl;
//TheConfigurator = configurator;
}
catch( std::exception const& e ) {
std::cout << "exception: " << e.what() << std::endl;
break;
}
}
else if (0 == stricmp(argv[1], "--custom"))
{
if (argc != 8) {
usage(argv[0]);
break;
}
for (int i=2;i < 8; i+=2)
options[argv[i]] = argv[i+1];
std::map<string, string>::iterator endit = options.end();
if ((options.find("--ip") == endit) || (options.find("--port") == endit) ||
(options.find("--hostid") == endit))
{
usage(argv[0]);
break;
}
try
{
cout << "PARSING INITIAL SETTINGS START" << endl;
cout << "------------------------------" << endl;
int const port = atoi(options["--port"].c_str());
if(!InitializeConfigurator(&TheConfigurator,options["--ip"], port, options["--hostid"] ))
{
std::cout << "Failed to get configurator" << std::endl;
break;
}
cout << "PARSING INITIAL SETTINGS END" << endl;
cout << "----------------------------" << endl;
cout << endl;
//TheConfigurator = configurator;
}
catch( std::exception const& e ) {
std::cout << "exception: " << e.what() << std::endl;
break;
}
}
else if (boost::iequals(std::string(argv[1]), std::string("--SourceHealth")))
{
ConfigSource configSource = FETCH_SETTINGS_FROM_CX;
cout << "Parsing cache setting \n\n";
configSource = USE_ONLY_CACHE_SETTINGS;
std::string configcachepath;
SerializeType_t serializerType = lconfigurator.getSerializerType();
if (!InitializeConfigurator(&TheConfigurator, configSource, serializerType, configcachepath))
{
std::cout << "Failed to get the configurator" << std::endl;
break;
}
bool bV2AProvider = true;
char choice_provider;
std::string strHostId;
std::cout << std::endl << "Is this for V2A (y/n)(default:y)? "; std::cin >> choice_provider;
if ((choice_provider == 'y') || (choice_provider == 'Y'))
{
bV2AProvider = true;
}
else
{
bV2AProvider = false;
std::cout << std::endl << "Enter HostId of the Protected Source Machine : "; std::cin >> strHostId;
}
char option;
int numOfDisks;
std::vector<std::string>vDiskSignatures;
std::string strDiskSignature;
bool bCanDiskLevelHealthIssuesbeGenerated = true;
cout << "Do you want to generate Disk Level Health Issues. (y/n)?"; cin >> option;
if ((option == 'y') || (option == 'Y'))
{
cout << endl << "On How many disks you want to generate Disk Level Health Issues?"; cin >> numOfDisks;
for (int i = 0; i < numOfDisks; i++)
{
cout << endl << "Enter the disk signature of Disk" << i << ":"; cin >> strDiskSignature;
strDiskSignature = std::string("{") + strDiskSignature + std::string("}");
cout << endl << "Disk Id:" << strDiskSignature;
vDiskSignatures.push_back(strDiskSignature);
}
}
else
{
cout << endl << "No Disk Level Health Issues can be generated." << endl;
bCanDiskLevelHealthIssuesbeGenerated = false;
}
bool bHealthIssues = true;
do
{
cout << "Choose options for issuing Health Issues to Cx >> " << endl;
cout << "(0) -- Clear all Health Issues." << endl;
cout << "(1) -- VM Level: VSS Writer Health Issue." << endl;
cout << "(2) -- VM Level: VSS Provider Health Issue." << endl;
cout << "(3) -- Disk Level: Peak Churn Health Issue." << endl;
cout << "(4) -- Disk Level: High Latency Health Issue." << endl;
cout << "(5) -- Disk Level: Peak Churn + High Latency Health Issue." << endl;
cout << "(6) -- VM + Disk Level: Peak Churn + VSS Writer Health Issue." << endl;
cout << "(7) -- VM + Disk Level: Peak Churn + VSS Provider Health Issue." << endl;
cout << "(8) -- VM + Disk Level: High Latency + VSS Writer Health Issue." << endl;
cout << "(9) -- VM + Disk Level: High Latency + VSS Provider Health Issue." << endl;
cout << "(10) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer Health Issue." << endl;
cout << "(11) -- VM + Disk Level: High Latency + Peak Churn + VSS Provider Health Issue." << endl;
cout << "(12) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer + VSS Provider Health Issue." << endl;
cout << "(20) -- Do you want to continue? \n"<< endl;
cout << "\nEnter option : >>";
int choose;
cin >> choose;
switch (choose)
{
case 0://"(0) -- Clear all Health Issues"
{
SourceAgentProtectionPairHealthIssues Health;
ClearAllHealthIssues(Health);
break;
}
case 1://"(1) -- VM Level: VSS Writer Health Issue."
{
//VSS Writer Health Issue
SourceAgentProtectionPairHealthIssues Health;
PopulateVSSWriter(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 2://"(2) -- VM Level: VSS Provider Health Issue."
{
//Vss Provider Health Issue
SourceAgentProtectionPairHealthIssues Health;
PopulateVSSProvider(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 3://"(3) -- Disk Level: Peak Churn Health Issue."
{
//Peak Churn Health Issue
SourceAgentProtectionPairHealthIssues Health;
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 4://"(4) -- Disk Level: High Latency Health Issue."
{
//High Latency Health Issue
SourceAgentProtectionPairHealthIssues Health;
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 5://"(5) -- Disk Level: Peak Churn + High Latency Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 6://"(6) -- VM + Disk Level: Peak Churn + VSS Writer Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSWriter(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 7://"(7) -- VM + Disk Level: Peak Churn + VSS Provider Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSProvider(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 8://"(8) -- VM + Disk Level: High Latency + VSS Writer Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSWriter(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 9://"(9) -- VM + Disk Level: High Latency + VSS Provider Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSProvider(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 10://"(10) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSWriter(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 11://"(11) -- VM + Disk Level: High Latency + Peak Churn + VSS Provider Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSProvider(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 12://"(12) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer + VSS Provider Health Issue."
{
SourceAgentProtectionPairHealthIssues Health;
PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
PopulateVSSWriter(Health);
PopulateVSSProvider(Health);
//PostHealthIssues(Health,strHostId,bV2AProvider);
PostHealthIssues(Health);
break;
}
case 20://"(20) -- VM Level: VSS Writer Health Issue."
{
char opt;
cout << endl << "Do you want to continue(y:Exit/n:Continue)? "; cin >> opt;
if ((opt == 'y') || (opt == 'Y'))
{
bHealthIssues = false;
exit(0);
};
break;
}
}
} while (bHealthIssues);
}
else
{
cout << "Error..." << endl;
usage(argv[0]);
break;
}
cout << "Choose options for getting Cx settings >> " << endl;
cout << "(1) -- All settings" << endl;
cout << "(2) -- Initial Settings" << endl;
cout << "(3) -- Snapshot Settings" << endl;
cout << "(4) -- getReplicationPairInfo" << endl;
cout << "(5) -- postHealthIssues" << endl;
cout << "\nEnter option : >>";
int choose;
cin >> choose;
switch (choose)
{
case 1:
{
TestGetInitialSettings* tgis = static_cast<TestGetInitialSettings*>(TheConfigurator);
if (tgis)
tgis->Print();
TestSnapshotAPIs tSnapApis;
tSnapApis.TestGetSnapshotRequestFromCx();
break;
}
case 2:
{
TestGetInitialSettings* tgis = static_cast<TestGetInitialSettings*>(TheConfigurator);
if (tgis)
tgis->Print();
break;
}
case 3:
{
TestSnapshotAPIs tSnapApis;
tSnapApis.TestGetSnapshotRequestFromCx();
break;
}
case 4:
{
std::map<std::string, std::string> map_info;
map_info = TheConfigurator->getReplicationPairInfo("imitswks105");
std::map<std::string, std::string>::iterator it = map_info.begin();
for (;it != map_info.end(); it++)
cout << "first = " << it->first << ", second = " << it->second << endl;
}
case 5:
{
SourceAgentProtectionPairHealthIssues agentHealth;
std::vector<HealthIssue> aglHealthIssues;
//Vss Writer HealthIssue
std::map<std::string, std::string> vssWriterParams1;
vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::HealthCode,"ECH00031" });
vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::ErrorCode,"0x8004230c" });
vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::Operation,"Snapshot" });
vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::WriteName,"SQL VSS Writer" });
//HealthIssue hiVssWriter1(std::string("ECH00031"), vssWriterParams1);
//aglHealthIssues.push_back(hiVssWriter1);
//agentHealth.HealthIssues = aglHealthIssues;
//cout << endl << "Posting only one Agentlevel Health Issue..." << endl;
//TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);
//Vss Writer Health Issue;
std::map<std::string, std::string> vssWriterParams2;
vssWriterParams2.insert({AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::HealthCode,"ECH00031"});
vssWriterParams2.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::ErrorCode,"0x8004233c" });
vssWriterParams2.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::Operation,"Backup" });
vssWriterParams2.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::WriteName,"Sharepoint VSS Writer" });
HealthIssue hiVssWriter2(std::string("ECH00031"), vssWriterParams2);
//aglHealthIssues.push_back(hiVssWriter2);
// agentHealth.HealthIssues = aglHealthIssues;
//cout << endl << "Posting two Agentlevel Health Issues..." << endl;
//TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);
//Vss Provider Health Issue
HealthIssue hiVssProvider(std::string("ECH00030"), std::map<std::string, std::string>());
//aglHealthIssues.push_back(hiVssProvider);//agent level health issues
//agentHealth.HealthIssues = aglHealthIssues;
//cout << endl << "Posting three Agentlevel Health Issues..." << endl;
//TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);
std::vector<AgentDiskLevelHealthIssue> dlHealthIssues;//disk level health issues
std::map<std::string, std::string>peakChurnParams;
peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::HealthCode,"SourceAgentPeakChurnObserved" });
peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::ChurnRate,"60 MBPS" });
peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::UploadPending,"200 MB" });
peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::ObservationTime,"2019-Jul-15 18:41:00" });
AgentDiskLevelHealthIssue hiPeakChurn(std::string("{4087759736}"), AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::HealthCode, peakChurnParams);
dlHealthIssues.push_back(hiPeakChurn);
agentHealth.DiskLevelHealthIssues = dlHealthIssues;
cout << endl << "Posting 3 Agent Level and 1 Disk Level Health Issues..." << endl;
TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);
/*std::map<std::string, std::string>highLatencyParams;
highLatencyParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::HealthCode,"SourceAgentHighLatencyObserved"});
highLatencyParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::UploadPending,"205 MB" });
highLatencyParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::ObservationTime,"2019-Jun-18 19:21:00" });
AgentDiskLevelHealthIssue hiHighLatency(std::string("{3C48DD76-BE19-42A8-A8C7-5FD182E8E64B}"), AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::HealthCode, highLatencyParams);
dlHealthIssues.push_back(hiHighLatency);
agentHealth.DiskLevelHealthIssues = dlHealthIssues;
agentHealth.HealthIssues = aglHealthIssues;
cout << endl << "Posting 3 Agent Level and 2 Disk Level Health Issues..." << endl;
TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);*/
}
break;
default:
break;
}
}
while (false);
}