Solaris subagent: implemented System.Memory.Physical.* parameters
[public/netxms.git] / src / agent / subagents / sunos / main.cpp
index b14f016..d04c870 100644 (file)
@@ -33,6 +33,7 @@ LONG H_DiskInfo(char *pszParam, char *pArg, char *pValue);
 LONG H_Hostname(char *pszParam, char *pArg, char *pValue);
 LONG H_KStat(char *pszParam, char *pArg, char *pValue);
 LONG H_LoadAvg(char *pszParam, char *pArg, char *pValue);
+LONG H_MemoryInfo(char *pszParam, char *pArg, char *pValue);
 LONG H_NetIfList(char *pszParam, char *pArg, NETXMS_VALUES_LIST *pValue);
 LONG H_NetIfAdminStatus(char *pszParam, char *pArg, char *pValue);
 LONG H_NetIfDescription(char *pszParam, char *pArg, char *pValue);
@@ -45,11 +46,25 @@ LONG H_Uname(char *pszParam, char *pArg, char *pValue);
 LONG H_Uptime(char *pszParam, char *pArg, char *pValue);
 
 
+//
+// Global variables
+//
+
+BOOL g_bShutdown = FALSE;
+
+
+//
+// Static data
+//
+
+static THREAD m_hCPUStatThread = INVALID_THREAD_HANDLE;
+
+
 //
 // Detect support for source packages
 //
 
-LONG H_SourcePkg(char *pszParam, char *pArg, char *pValue)
+static LONG H_SourcePkg(char *pszParam, char *pArg, char *pValue)
 {
        ret_int(pValue, 1);
        return SYSINFO_RC_SUCCESS;
@@ -62,6 +77,8 @@ LONG H_SourcePkg(char *pszParam, char *pArg, char *pValue)
 
 static void UnloadHandler(void)
 {
+       g_bShutdown = TRUE;
+       ThreadJoin(m_hCPUStatThread);
 }
 
 
@@ -101,6 +118,12 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
    { "System.CPU.Usage15(*)", H_CPUUsage, "C2", DCI_DT_FLOAT, "Average CPU {instance} utilization for last 15 minutes" },
    { "System.Hostname", H_Hostname, NULL, DCI_DT_STRING, "Host name" },
    { "System.KStat(*)", H_KStat, NULL, DCI_DT_STRING, "" },
+       { "System.Memory.Physical.Free", H_MemoryInfo, (char *)MEMINFO_PHYSICAL_FREE, DCI_DT_UINT64, "Available physical memory" },
+       { "System.Memory.Physical.Total", H_MemoryInfo, (char *)MEMINFO_PHYSICAL_TOTAL, DCI_DT_UINT64, "Total amount of physical memory" },
+       { "System.Memory.Physical.Used", H_MemoryInfo, (char *)MEMINFO_PHYSICAL_USED, DCI_DT_UINT64, "Used physical memory" },
+   { "System.Memory.Swap.Free", H_MemoryInfo, (char *)MEMINFO_SWAP_FREE, DCI_DT_UINT64, "Free swap space" },
+   { "System.Memory.Swap.Total", H_MemoryInfo, (char *)MEMINFO_SWAP_TOTAL, DCI_DT_UINT64, "Total amount of swap space" },
+   { "System.Memory.Swap.Used", H_MemoryInfo, (char *)MEMINFO_SWAP_USED, DCI_DT_UINT64, "Used swap space" },
    { "System.ProcessCount", H_SysProcCount, NULL, DCI_DT_INT, "Total number of processes" },
    { "System.Uname", H_Uname, NULL, DCI_DT_STRING, "System uname" },
    { "System.Uptime", H_Uptime, NULL, DCI_DT_UINT, "System uptime" }
@@ -129,6 +152,8 @@ static NETXMS_SUBAGENT_INFO m_info =
 
 extern "C" BOOL NxSubAgentInit(NETXMS_SUBAGENT_INFO **ppInfo, TCHAR *pszConfigFile)
 {
+       m_hCPUStatThread = ThreadCreateEx(CPUStatCollector, 0, NULL);
+
    *ppInfo = &m_info;
    return TRUE;
 }