added lists to get all logical and physical LVM volumes in system; LVM volume in...
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 5 Jul 2016 18:07:11 +0000 (13:07 -0500)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 5 Jul 2016 18:07:11 +0000 (13:07 -0500)
src/agent/subagents/aix/lvm.cpp
src/agent/subagents/aix/main.cpp

index 50d1d80..6c4f4e6 100644 (file)
@@ -570,6 +570,30 @@ LONG H_LvmLogicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *value
    return SYSINFO_RC_SUCCESS;
 }
 
+/**
+ * Handler for LVM.LogicalVolumes list
+ */
+LONG H_LvmAllLogicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *value, AbstractCommSession *session)
+{
+   ObjectArray<VolumeGroup> *vgs = AcquireLvmData();
+   for(int i = 0; i < vgs->size(); i++)
+   {
+      char name[LVM_NAMESIZ * 2];
+      VolumeGroup *vg = vgs->get(i);
+      strcpy(name, vg->getName());
+      strcat(name, "/");
+      int npos = strlen(name);
+      ObjectArray<LogicalVolume> *lvs = vg->getLogicalVolumes();      
+      for(int j = 0; j < lvs->size(); j++)
+      {
+         strcpy(&name[npos], lvs->get(j)->getName());
+         value->addMBString(name);
+      }
+   }   
+   ReleaseLvmData();
+   return SYSINFO_RC_SUCCESS;
+}
+
 /**
  * Handler for LVM.LogicalVolumes(*) table
  */
@@ -611,11 +635,27 @@ LONG H_LvmLogicalVolumesTable(const TCHAR *param, const TCHAR *arg, Table *value
  */
 LONG H_LvmLogicalVolumeInfo(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCommSession *session)
 {
-   char vgName[LVM_NAMESIZ], lvName[LVM_NAMESIZ];
-   if (!AgentGetParameterArgA(param, 1, vgName, LVM_NAMESIZ) ||
+   char vgName[LVM_NAMESIZ * 2], lvName[LVM_NAMESIZ];
+   if (!AgentGetParameterArgA(param, 1, vgName, LVM_NAMESIZ * 2) ||
        !AgentGetParameterArgA(param, 2, lvName, LVM_NAMESIZ))
       return SYSINFO_RC_UNSUPPORTED;
       
+   // check if volume name given in form vg/lv
+   if (lvName[0] == 0)
+   {
+      char *s = strchr(vgName, '/');
+      if (s != NULL)
+      {
+         *s = 0;
+         s++;
+         strcpy(lvName, s);
+      }
+      else
+      {
+         return SYSINFO_RC_NO_SUCH_INSTANCE;
+      }
+   }
+      
    VolumeGroup *vg = AcquireVolumeGroup(vgName);
    if (vg == NULL)
       return SYSINFO_RC_NO_SUCH_INSTANCE;
@@ -665,6 +705,30 @@ LONG H_LvmPhysicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *valu
    return SYSINFO_RC_SUCCESS;
 }
 
+/**
+ * Handler for LVM.PhysicalVolumes list
+ */
+LONG H_LvmAllPhysicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *value, AbstractCommSession *session)
+{
+   ObjectArray<VolumeGroup> *vgs = AcquireLvmData();
+   for(int i = 0; i < vgs->size(); i++)
+   {
+      char name[LVM_NAMESIZ * 2];
+      VolumeGroup *vg = vgs->get(i);
+      strcpy(name, vg->getName());
+      strcat(name, "/");
+      int npos = strlen(name);
+      ObjectArray<PhysicalVolume> *pvs = vg->getPhysicalVolumes();   
+      for(int j = 0; j < pvs->size(); j++)
+      {
+         strcpy(&name[npos], pvs->get(j)->getName());
+         value->addMBString(name);
+      }
+   }   
+   ReleaseLvmData();
+   return SYSINFO_RC_SUCCESS;
+}
+
 /**
  * Handler for LVM.PhysicalVolumes(*) table
  */
@@ -724,11 +788,27 @@ LONG H_LvmPhysicalVolumesTable(const TCHAR *param, const TCHAR *arg, Table *valu
  */
 LONG H_LvmPhysicalVolumeInfo(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCommSession *session)
 {
-   char vgName[LVM_NAMESIZ], pvName[LVM_NAMESIZ];
-   if (!AgentGetParameterArgA(param, 1, vgName, LVM_NAMESIZ) ||
+   char vgName[LVM_NAMESIZ * 2], pvName[LVM_NAMESIZ];
+   if (!AgentGetParameterArgA(param, 1, vgName, LVM_NAMESIZ * 2) ||
        !AgentGetParameterArgA(param, 2, pvName, LVM_NAMESIZ))
       return SYSINFO_RC_UNSUPPORTED;
       
+   // check if volume name given in form vg/pv
+   if (pvName[0] == 0)
+   {
+      char *s = strchr(vgName, '/');
+      if (s != NULL)
+      {
+         *s = 0;
+         s++;
+         strcpy(pvName, s);
+      }
+      else
+      {
+         return SYSINFO_RC_NO_SUCH_INSTANCE;
+      }
+   }
+      
    VolumeGroup *vg = AcquireVolumeGroup(vgName);
    if (vg == NULL)
       return SYSINFO_RC_NO_SUCH_INSTANCE;
index d6a0be4..07e5e8e 100644 (file)
@@ -36,6 +36,8 @@ LONG H_Hostname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, Abstrac
 LONG H_IOStats(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_IOStatsTotal(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_LoadAvg(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session);
+LONG H_LvmAllLogicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *value, AbstractCommSession *session);
+LONG H_LvmAllPhysicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *value, AbstractCommSession *session);
 LONG H_LvmLogicalVolumeInfo(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_LvmLogicalVolumes(const TCHAR *param, const TCHAR *arg, StringList *value, AbstractCommSession *session);
 LONG H_LvmLogicalVolumesTable(const TCHAR *param, const TCHAR *arg, Table *value, AbstractCommSession *session);
@@ -291,7 +293,9 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
 static NETXMS_SUBAGENT_LIST m_lists[] =
 {
    { _T("FileSystem.MountPoints"), H_MountPoints, NULL },
+   { _T("LVM.LogicalVolumes"), H_LvmAllLogicalVolumes, NULL },
    { _T("LVM.LogicalVolumes(*)"), H_LvmLogicalVolumes, NULL },
+   { _T("LVM.PhysicalVolumes"), H_LvmAllPhysicalVolumes, NULL },
    { _T("LVM.PhysicalVolumes(*)"), H_LvmPhysicalVolumes, NULL },
    { _T("LVM.VolumeGroups"), H_LvmVolumeGroups, NULL },
    { _T("Net.InterfaceList"), H_NetInterfaceList, NULL },