You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			622 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			622 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (C) 2019 MariaDB Corporation
 | 
						|
 | 
						|
   This program is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU General Public License
 | 
						|
   as published by the Free Software Foundation; version 2 of
 | 
						|
   the License.
 | 
						|
 | 
						|
   This program is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
   GNU General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU General Public License
 | 
						|
   along with this program; if not, write to the Free Software
 | 
						|
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | 
						|
   MA 02110-1301, USA. */
 | 
						|
 | 
						|
#include "mcsSupportUtil.h"
 | 
						|
 | 
						|
using namespace std;
 | 
						|
using namespace oam;
 | 
						|
using namespace config;
 | 
						|
 | 
						|
void getSystemNetworkConfig(FILE* pOutputFile)
 | 
						|
{
 | 
						|
  Oam oam;
 | 
						|
  // get and display Module Network Config
 | 
						|
  SystemModuleTypeConfig systemmoduletypeconfig;
 | 
						|
  systemmoduletypeconfig.moduletypeconfig.clear();
 | 
						|
 | 
						|
  // get max length of a host name for header formatting
 | 
						|
 | 
						|
  int maxSize = 9;
 | 
						|
 | 
						|
  try
 | 
						|
  {
 | 
						|
    oam.getSystemConfig(systemmoduletypeconfig);
 | 
						|
 | 
						|
    for (unsigned int i = 0; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
 | 
						|
    {
 | 
						|
      if (systemmoduletypeconfig.moduletypeconfig[i].ModuleType.empty())
 | 
						|
        // end of list
 | 
						|
        break;
 | 
						|
 | 
						|
      int moduleCount = systemmoduletypeconfig.moduletypeconfig[i].ModuleCount;
 | 
						|
      string moduletype = systemmoduletypeconfig.moduletypeconfig[i].ModuleType;
 | 
						|
      string moduletypedesc = systemmoduletypeconfig.moduletypeconfig[i].ModuleDesc;
 | 
						|
 | 
						|
      if (moduleCount > 0)
 | 
						|
      {
 | 
						|
        DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin();
 | 
						|
 | 
						|
        for (; pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++)
 | 
						|
        {
 | 
						|
          HostConfigList::iterator pt1 = (*pt).hostConfigList.begin();
 | 
						|
 | 
						|
          for (; pt1 != (*pt).hostConfigList.end(); pt1++)
 | 
						|
          {
 | 
						|
            if (maxSize < (int)(*pt1).HostName.size())
 | 
						|
              maxSize = (*pt1).HostName.size();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  catch (exception& e)
 | 
						|
  {
 | 
						|
    fprintf(pOutputFile, "**** getNetworkConfig Failed =  %s\n\n", e.what());
 | 
						|
  }
 | 
						|
 | 
						|
  fprintf(pOutputFile, "%-15s%-30s%-10s%-14s%-20s\n", "Module Name", "Module Description", "NIC ID",
 | 
						|
          "Host Name", "IP Address");
 | 
						|
  fprintf(pOutputFile, "%-15s%-30s%-10s%-14s%-20s\n", "-----------", "-------------------------", "------",
 | 
						|
          "---------", "---------------");
 | 
						|
 | 
						|
  try
 | 
						|
  {
 | 
						|
    oam.getSystemConfig(systemmoduletypeconfig);
 | 
						|
 | 
						|
    for (unsigned int i = 0; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
 | 
						|
    {
 | 
						|
      if (systemmoduletypeconfig.moduletypeconfig[i].ModuleType.empty())
 | 
						|
        // end of list
 | 
						|
        break;
 | 
						|
 | 
						|
      int moduleCount = systemmoduletypeconfig.moduletypeconfig[i].ModuleCount;
 | 
						|
      string moduletype = systemmoduletypeconfig.moduletypeconfig[i].ModuleType;
 | 
						|
      string moduletypedesc = systemmoduletypeconfig.moduletypeconfig[i].ModuleDesc;
 | 
						|
 | 
						|
      if (moduleCount > 0)
 | 
						|
      {
 | 
						|
        DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin();
 | 
						|
 | 
						|
        for (; pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++)
 | 
						|
        {
 | 
						|
          string modulename = (*pt).DeviceName;
 | 
						|
          string moduleID = modulename.substr(MAX_MODULE_TYPE_SIZE, MAX_MODULE_ID_SIZE);
 | 
						|
          string modulenamedesc = moduletypedesc + " #" + moduleID;
 | 
						|
 | 
						|
          fprintf(pOutputFile, "%-15s%-30s", modulename.c_str(), modulenamedesc.c_str());
 | 
						|
 | 
						|
          HostConfigList::iterator pt1 = (*pt).hostConfigList.begin();
 | 
						|
 | 
						|
          for (; pt1 != (*pt).hostConfigList.end(); pt1++)
 | 
						|
          {
 | 
						|
            /* MCOL-1607.  IPAddr may be a host name here b/c it is read straight
 | 
						|
            from the config file. */
 | 
						|
            string tmphost = getIPAddress(pt1->IPAddr);
 | 
						|
            string ipAddr;
 | 
						|
            if (tmphost.empty())
 | 
						|
              ipAddr = pt1->IPAddr;
 | 
						|
            else
 | 
						|
              ipAddr = tmphost;
 | 
						|
            string hostname = (*pt1).HostName;
 | 
						|
            string nicID = oam.itoa((*pt1).NicID);
 | 
						|
 | 
						|
            if (nicID != "1")
 | 
						|
            {
 | 
						|
              fprintf(pOutputFile, "%-45s", "");
 | 
						|
            }
 | 
						|
            fprintf(pOutputFile, "%-13s%-14s%-20s\n", nicID.c_str(), hostname.c_str(), ipAddr.c_str());
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  catch (exception& e)
 | 
						|
  {
 | 
						|
    fprintf(pOutputFile, "**** getNetworkConfig Failed =  %s\n\n", e.what());
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void getModuleTypeConfig(FILE* pOutputFile)
 | 
						|
{
 | 
						|
  Oam oam;
 | 
						|
  SystemModuleTypeConfig systemmoduletypeconfig;
 | 
						|
  ModuleTypeConfig moduletypeconfig;
 | 
						|
  ModuleConfig moduleconfig;
 | 
						|
  systemmoduletypeconfig.moduletypeconfig.clear();
 | 
						|
 | 
						|
  try
 | 
						|
  {
 | 
						|
    oam.getSystemConfig(systemmoduletypeconfig);
 | 
						|
 | 
						|
    fprintf(pOutputFile, "Module Type Configuration\n\n");
 | 
						|
 | 
						|
    for (unsigned int i = 0; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
 | 
						|
    {
 | 
						|
      if (systemmoduletypeconfig.moduletypeconfig[i].ModuleType.empty())
 | 
						|
        // end of list
 | 
						|
        break;
 | 
						|
 | 
						|
      int moduleCount = systemmoduletypeconfig.moduletypeconfig[i].ModuleCount;
 | 
						|
 | 
						|
      if (moduleCount < 1)
 | 
						|
        continue;
 | 
						|
 | 
						|
      string moduletype = systemmoduletypeconfig.moduletypeconfig[i].ModuleType;
 | 
						|
 | 
						|
      fprintf(pOutputFile, "ModuleType '%s' Configuration information\n", moduletype.c_str());
 | 
						|
      fprintf(pOutputFile, "ModuleDesc = %s\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleDesc.c_str());
 | 
						|
      fprintf(pOutputFile, "ModuleCount = %i\n", moduleCount);
 | 
						|
 | 
						|
      if (moduleCount > 0)
 | 
						|
      {
 | 
						|
        DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin();
 | 
						|
 | 
						|
        for (; pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++)
 | 
						|
        {
 | 
						|
          string modulename = (*pt).DeviceName;
 | 
						|
          HostConfigList::iterator pt1 = (*pt).hostConfigList.begin();
 | 
						|
 | 
						|
          for (; pt1 != (*pt).hostConfigList.end(); pt1++)
 | 
						|
          {
 | 
						|
            string ipAddr = (*pt1).IPAddr;
 | 
						|
            string servername = (*pt1).HostName;
 | 
						|
            fprintf(pOutputFile, "ModuleHostName and ModuleIPAddr for NIC ID %u on module '%s' = %s ,  %s\n",
 | 
						|
                    (*pt1).NicID, modulename.c_str(), servername.c_str(), ipAddr.c_str());
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      DeviceDBRootList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleDBRootList.begin();
 | 
						|
 | 
						|
      for (; pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleDBRootList.end(); pt++)
 | 
						|
      {
 | 
						|
        if ((*pt).dbrootConfigList.size() > 0)
 | 
						|
        {
 | 
						|
          fprintf(pOutputFile, "DBRootIDs assigned to module 'pm%u' = ", (*pt).DeviceID);
 | 
						|
          DBRootConfigList::iterator pt1 = (*pt).dbrootConfigList.begin();
 | 
						|
 | 
						|
          for (; pt1 != (*pt).dbrootConfigList.end();)
 | 
						|
          {
 | 
						|
            fprintf(pOutputFile, "%u", *pt1);
 | 
						|
            pt1++;
 | 
						|
 | 
						|
            if (pt1 != (*pt).dbrootConfigList.end())
 | 
						|
              fprintf(pOutputFile, ", ");
 | 
						|
          }
 | 
						|
        }
 | 
						|
        fprintf(pOutputFile, "\n");
 | 
						|
      }
 | 
						|
 | 
						|
      fprintf(pOutputFile, "ModuleCPUCriticalThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUCriticalThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleCPUMajorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUMajorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleCPUMinorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUMinorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleCPUMinorClearThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleCPUMinorClearThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleDiskCriticalThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleDiskCriticalThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleDiskMajorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleDiskMajorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleDiskMinorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleDiskMinorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleMemCriticalThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleMemCriticalThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleMemMajorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleMemMajorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleMemMinorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleMemMinorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleSwapCriticalThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleSwapCriticalThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleSwapMajorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleSwapMajorThreshold);
 | 
						|
      fprintf(pOutputFile, "ModuleSwapMinorThreshold = %u%%\n",
 | 
						|
              systemmoduletypeconfig.moduletypeconfig[i].ModuleSwapMinorThreshold);
 | 
						|
 | 
						|
      DiskMonitorFileSystems::iterator pt2 = systemmoduletypeconfig.moduletypeconfig[i].FileSystems.begin();
 | 
						|
      int id = 1;
 | 
						|
 | 
						|
      for (; pt2 != systemmoduletypeconfig.moduletypeconfig[i].FileSystems.end(); pt2++)
 | 
						|
      {
 | 
						|
        string fs = *pt2;
 | 
						|
        fprintf(pOutputFile, "ModuleDiskMonitorFileSystem#%i =  %s\n", id, fs.c_str());
 | 
						|
        ++id;
 | 
						|
      }
 | 
						|
      fprintf(pOutputFile, "\n");
 | 
						|
    }
 | 
						|
  }
 | 
						|
  catch (exception& e)
 | 
						|
  {
 | 
						|
    cout << endl << "**** getModuleTypeConfig Failed =  " << e.what() << endl;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void getStorageConfig(FILE* pOutputFile)
 | 
						|
{
 | 
						|
  Oam oam;
 | 
						|
  try
 | 
						|
  {
 | 
						|
    systemStorageInfo_t t;
 | 
						|
    t = oam.getStorageConfig();
 | 
						|
 | 
						|
    string cloud;
 | 
						|
 | 
						|
    try
 | 
						|
    {
 | 
						|
      oam.getSystemConfig("Cloud", cloud);
 | 
						|
    }
 | 
						|
    catch (...)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    string::size_type pos = cloud.find("amazon", 0);
 | 
						|
 | 
						|
    if (pos != string::npos)
 | 
						|
      cloud = "amazon";
 | 
						|
 | 
						|
    fprintf(pOutputFile, "System Storage Configuration\n");
 | 
						|
 | 
						|
    fprintf(pOutputFile, "Performance Module (DBRoot) Storage Type = %s\n", boost::get<0>(t).c_str());
 | 
						|
 | 
						|
    if (cloud == "amazon")
 | 
						|
      fprintf(pOutputFile, "User Module Storage Type = %s\n", boost::get<3>(t).c_str());
 | 
						|
 | 
						|
    fprintf(pOutputFile, "System Assigned DBRoot Count = %i\n", boost::get<1>(t));
 | 
						|
 | 
						|
    DeviceDBRootList moduledbrootlist = boost::get<2>(t);
 | 
						|
 | 
						|
    typedef std::vector<int> dbrootList;
 | 
						|
    dbrootList dbrootlist;
 | 
						|
 | 
						|
    DeviceDBRootList::iterator pt = moduledbrootlist.begin();
 | 
						|
 | 
						|
    for (; pt != moduledbrootlist.end(); pt++)
 | 
						|
    {
 | 
						|
      fprintf(pOutputFile, "DBRoot IDs assigned to 'pm%u' = ", (*pt).DeviceID);
 | 
						|
      DBRootConfigList::iterator pt1 = (*pt).dbrootConfigList.begin();
 | 
						|
 | 
						|
      for (; pt1 != (*pt).dbrootConfigList.end();)
 | 
						|
      {
 | 
						|
        fprintf(pOutputFile, "%u", *pt1);
 | 
						|
        dbrootlist.push_back(*pt1);
 | 
						|
        pt1++;
 | 
						|
 | 
						|
        if (pt1 != (*pt).dbrootConfigList.end())
 | 
						|
          fprintf(pOutputFile, ", ");
 | 
						|
      }
 | 
						|
 | 
						|
      fprintf(pOutputFile, "\n");
 | 
						|
    }
 | 
						|
 | 
						|
    // get any unassigned DBRoots
 | 
						|
    /*DBRootConfigList undbrootlist;
 | 
						|
 | 
						|
    try
 | 
						|
    {
 | 
						|
        oam.getUnassignedDbroot(undbrootlist);
 | 
						|
    }
 | 
						|
    catch (...) {}
 | 
						|
 | 
						|
    if ( !undbrootlist.empty() )
 | 
						|
    {
 | 
						|
        fprintf(pOutputFile,"DBRoot IDs unassigned = ");
 | 
						|
        DBRootConfigList::iterator pt1 = undbrootlist.begin();
 | 
						|
 | 
						|
        for ( ; pt1 != undbrootlist.end() ;)
 | 
						|
        {
 | 
						|
            fprintf(pOutputFile,"%u",*pt1);
 | 
						|
            pt1++;
 | 
						|
 | 
						|
            if (pt1 != undbrootlist.end())
 | 
						|
                fprintf(pOutputFile,", ");
 | 
						|
        }
 | 
						|
 | 
						|
        fprintf(pOutputFile,"\n");
 | 
						|
    }*/
 | 
						|
 | 
						|
    fprintf(pOutputFile, "\n");
 | 
						|
 | 
						|
    // um volumes
 | 
						|
    if (cloud == "amazon" && boost::get<3>(t) == "external")
 | 
						|
    {
 | 
						|
      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
 | 
						|
        {
 | 
						|
          oam.getSystemConfig(volumeNameID, volumeName);
 | 
						|
          oam.getSystemConfig(deviceNameID, deviceName);
 | 
						|
        }
 | 
						|
        catch (...)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        fprintf(pOutputFile, "Amazon EC2 Volume Name/Device Name for 'um%i': %s, %s", id, volumeName.c_str(),
 | 
						|
                deviceName.c_str());
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    // pm volumes
 | 
						|
    if (cloud == "amazon" && boost::get<0>(t) == "external")
 | 
						|
    {
 | 
						|
      fprintf(pOutputFile, "\n");
 | 
						|
 | 
						|
      DBRootConfigList dbrootConfigList;
 | 
						|
 | 
						|
      try
 | 
						|
      {
 | 
						|
        oam.getSystemDbrootConfig(dbrootConfigList);
 | 
						|
 | 
						|
        DBRootConfigList::iterator pt = dbrootConfigList.begin();
 | 
						|
 | 
						|
        for (; pt != dbrootConfigList.end(); pt++)
 | 
						|
        {
 | 
						|
          string volumeNameID = "PMVolumeName" + oam.itoa(*pt);
 | 
						|
          string volumeName = oam::UnassignedName;
 | 
						|
          string deviceNameID = "PMVolumeDeviceName" + oam.itoa(*pt);
 | 
						|
          string deviceName = oam::UnassignedName;
 | 
						|
 | 
						|
          try
 | 
						|
          {
 | 
						|
            oam.getSystemConfig(volumeNameID, volumeName);
 | 
						|
            oam.getSystemConfig(deviceNameID, deviceName);
 | 
						|
          }
 | 
						|
          catch (...)
 | 
						|
          {
 | 
						|
            continue;
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
      catch (exception& e)
 | 
						|
      {
 | 
						|
        cout << endl << "**** getSystemDbrootConfig Failed :  " << e.what() << endl;
 | 
						|
      }
 | 
						|
 | 
						|
      // print un-assigned dbroots
 | 
						|
      /*DBRootConfigList::iterator pt1 = undbrootlist.begin();
 | 
						|
 | 
						|
      for ( ; pt1 != undbrootlist.end() ; pt1++)
 | 
						|
      {
 | 
						|
          string volumeNameID = "PMVolumeName" + oam.itoa(*pt1);
 | 
						|
          string volumeName = oam::UnassignedName;
 | 
						|
          string deviceNameID = "PMVolumeDeviceName" + oam.itoa(*pt1);
 | 
						|
          string deviceName = oam::UnassignedName;
 | 
						|
 | 
						|
          try
 | 
						|
          {
 | 
						|
              oam.getSystemConfig( volumeNameID, volumeName);
 | 
						|
              oam.getSystemConfig( deviceNameID, deviceName);
 | 
						|
          }
 | 
						|
          catch (...)
 | 
						|
          {
 | 
						|
              continue;
 | 
						|
          }
 | 
						|
      }*/
 | 
						|
    }
 | 
						|
 | 
						|
    string DataRedundancyConfig;
 | 
						|
    int DataRedundancyCopies;
 | 
						|
    string DataRedundancyStorageType;
 | 
						|
 | 
						|
    try
 | 
						|
    {
 | 
						|
      oam.getSystemConfig("DataRedundancyConfig", DataRedundancyConfig);
 | 
						|
      oam.getSystemConfig("DataRedundancyCopies", DataRedundancyCopies);
 | 
						|
      oam.getSystemConfig("DataRedundancyStorageType", DataRedundancyStorageType);
 | 
						|
    }
 | 
						|
    catch (...)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    if (DataRedundancyConfig == "y")
 | 
						|
    {
 | 
						|
      fprintf(pOutputFile, "\nData Redundant Configuration\n\n");
 | 
						|
      fprintf(pOutputFile, "Copies Per DBroot = %i", DataRedundancyCopies);
 | 
						|
 | 
						|
      oamModuleInfo_t st;
 | 
						|
      string moduleType;
 | 
						|
 | 
						|
      try
 | 
						|
      {
 | 
						|
        st = oam.getModuleInfo();
 | 
						|
        moduleType = boost::get<1>(st);
 | 
						|
      }
 | 
						|
      catch (...)
 | 
						|
      {
 | 
						|
      }
 | 
						|
 | 
						|
      if (moduleType != "pm")
 | 
						|
        return;
 | 
						|
 | 
						|
      try
 | 
						|
      {
 | 
						|
        DBRootConfigList dbrootConfigList;
 | 
						|
        oam.getSystemDbrootConfig(dbrootConfigList);
 | 
						|
 | 
						|
        DBRootConfigList::iterator pt = dbrootConfigList.begin();
 | 
						|
 | 
						|
        for (; pt != dbrootConfigList.end(); pt++)
 | 
						|
        {
 | 
						|
          fprintf(pOutputFile, "DBRoot #%u has copies on PMs = ", *pt);
 | 
						|
 | 
						|
          string pmList = "";
 | 
						|
 | 
						|
          try
 | 
						|
          {
 | 
						|
            string errmsg;
 | 
						|
            // oam.glusterctl(oam::GLUSTER_WHOHAS, oam.itoa(*pt), pmList, errmsg);
 | 
						|
          }
 | 
						|
          catch (...)
 | 
						|
          {
 | 
						|
          }
 | 
						|
 | 
						|
          boost::char_separator<char> sep(" ");
 | 
						|
          boost::tokenizer<boost::char_separator<char> > tokens(pmList, sep);
 | 
						|
 | 
						|
          for (boost::tokenizer<boost::char_separator<char> >::iterator it = tokens.begin();
 | 
						|
               it != tokens.end(); ++it)
 | 
						|
          {
 | 
						|
            fprintf(pOutputFile, "%s ", (*it).c_str());
 | 
						|
          }
 | 
						|
 | 
						|
          fprintf(pOutputFile, "\n");
 | 
						|
        }
 | 
						|
 | 
						|
        fprintf(pOutputFile, "\n");
 | 
						|
      }
 | 
						|
      catch (exception& e)
 | 
						|
      {
 | 
						|
        cout << endl << "**** getSystemDbrootConfig Failed :  " << e.what() << endl;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  catch (exception& e)
 | 
						|
  {
 | 
						|
    cout << endl << "**** getStorageConfig Failed :  " << e.what() << endl;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void getStorageStatus(FILE* pOutputFile)
 | 
						|
{
 | 
						|
  Oam oam;
 | 
						|
 | 
						|
  fprintf(pOutputFile, "System External DBRoot Storage Statuses\n\n");
 | 
						|
  fprintf(pOutputFile, "Component     Status                       Last Status Change\n");
 | 
						|
  fprintf(pOutputFile, "------------  --------------------------   ------------------------\n");
 | 
						|
 | 
						|
  /*try
 | 
						|
  {
 | 
						|
      oam.getSystemStatus(systemstatus, false);
 | 
						|
 | 
						|
      if ( systemstatus.systemdbrootstatus.dbrootstatus.size() == 0 )
 | 
						|
      {
 | 
						|
          fprintf(pOutputFile," No External DBRoot Storage Configured\n\n");
 | 
						|
          return;
 | 
						|
      }
 | 
						|
 | 
						|
      for ( unsigned int i = 0 ; i < systemstatus.systemdbrootstatus.dbrootstatus.size(); i++)
 | 
						|
      {
 | 
						|
          if ( systemstatus.systemdbrootstatus.dbrootstatus[i].Name.empty() )
 | 
						|
              // end of list
 | 
						|
              break;
 | 
						|
 | 
						|
          int state = systemstatus.systemdbrootstatus.dbrootstatus[i].OpState;
 | 
						|
          string stime = systemstatus.systemdbrootstatus.dbrootstatus[i].StateChangeDate ;
 | 
						|
          stime = stime.substr (0, 24);
 | 
						|
          fprintf(pOutputFile,"DBRoot%s%-29s%-24s\n",
 | 
						|
                              systemstatus.systemdbrootstatus.dbrootstatus[i].Name.c_str(),
 | 
						|
                              oamState[state].c_str(),
 | 
						|
                              stime.c_str());
 | 
						|
      }
 | 
						|
      fprintf(pOutputFile,"\n");
 | 
						|
  }
 | 
						|
  catch (exception& e)
 | 
						|
  {
 | 
						|
      cout << endl << "**** getSystemStatus Failed =  " << e.what() << endl;
 | 
						|
  }*/
 | 
						|
 | 
						|
  string DataRedundancyConfig;
 | 
						|
  int DataRedundancyCopies;
 | 
						|
  string DataRedundancyStorageType;
 | 
						|
 | 
						|
  try
 | 
						|
  {
 | 
						|
    oam.getSystemConfig("DataRedundancyConfig", DataRedundancyConfig);
 | 
						|
    oam.getSystemConfig("DataRedundancyCopies", DataRedundancyCopies);
 | 
						|
    oam.getSystemConfig("DataRedundancyStorageType", DataRedundancyStorageType);
 | 
						|
  }
 | 
						|
  catch (...)
 | 
						|
  {
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
 *
 | 
						|
 * checkLogStatus - Check for a phrase in a log file and return status
 | 
						|
 *
 | 
						|
 ********************************************************************/
 | 
						|
bool checkLogStatus(std::string fileName, std::string phrase)
 | 
						|
{
 | 
						|
  ifstream file(fileName.c_str());
 | 
						|
 | 
						|
  if (!file.is_open())
 | 
						|
  {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  string buf;
 | 
						|
 | 
						|
  while (getline(file, buf))
 | 
						|
  {
 | 
						|
    string::size_type pos = buf.find(phrase, 0);
 | 
						|
 | 
						|
    if (pos != string::npos)
 | 
						|
      // found phrase
 | 
						|
      return true;
 | 
						|
  }
 | 
						|
 | 
						|
  if (file.bad())
 | 
						|
  {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  file.close();
 | 
						|
  return false;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************************
 | 
						|
 * @brief   Get Network IP Address for Host Name
 | 
						|
 *
 | 
						|
 * purpose: Get Network IP Address for Host Name
 | 
						|
 *
 | 
						|
 ******************************************************************************************/
 | 
						|
string getIPAddress(string hostName)
 | 
						|
{
 | 
						|
  static uint32_t my_bind_addr;
 | 
						|
  struct hostent* ent;
 | 
						|
  string IPAddr = "";
 | 
						|
  Oam oam;
 | 
						|
 | 
						|
  ent = gethostbyname(hostName.c_str());
 | 
						|
 | 
						|
  if (ent != 0)
 | 
						|
  {
 | 
						|
    my_bind_addr = (uint32_t)((in_addr*)ent->h_addr_list[0])->s_addr;
 | 
						|
 | 
						|
    uint8_t split[4];
 | 
						|
    uint32_t ip = my_bind_addr;
 | 
						|
    split[0] = (ip & 0xff000000) >> 24;
 | 
						|
    split[1] = (ip & 0x00ff0000) >> 16;
 | 
						|
    split[2] = (ip & 0x0000ff00) >> 8;
 | 
						|
    split[3] = (ip & 0x000000ff);
 | 
						|
 | 
						|
    IPAddr =
 | 
						|
        oam.itoa(split[3]) + "." + oam.itoa(split[2]) + "." + oam.itoa(split[1]) + "." + oam.itoa(split[0]);
 | 
						|
  }
 | 
						|
 | 
						|
  return IPAddr;
 | 
						|
}
 |