Whamcloud - gitweb
LU-5030 snmp: migrate lustre SNMP utilites to use cfs_get_paths 65/17465/9
authorJames Simmons <uja.ornl@yahoo.com>
Thu, 14 Jan 2016 19:43:22 +0000 (14:43 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 25 Jan 2016 01:57:33 +0000 (01:57 +0000)
Move the SNMP lustre tools to use cfs_get_paths so
the tools function with the upstream client as well.

Change-Id: I18d76e10c45a9c8c582e77917a33bb2afa86aac4
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Signed-off-by: Wang Chao <chao.ornl@gmail.com>
Reviewed-on: http://review.whamcloud.com/17465
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Emoly Liu <emoly.liu@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
autoMakefile.am
snmp/Makefile.am
snmp/lustre-snmp-trap.c
snmp/lustre-snmp-util.c
snmp/lustre-snmp-util.h
snmp/lustre-snmp.c

index effac1e..1a44bf2 100644 (file)
@@ -1,15 +1,15 @@
 SUBDIRS := @LDISKFS_SUBDIR@ \
        . \
-       @SNMP_SUBDIR@ \
        @LUSTREIOKIT_SUBDIR@ \
        @LIBCFS_SUBDIR@ \
+       @SNMP_SUBDIR@ \
        lnet \
        lustre
 
 DIST_SUBDIRS := ldiskfs \
-       @SNMP_DIST_SUBDIR@ \
        lustre-iokit \
        @LIBCFS_SUBDIR@ \
+       @SNMP_DIST_SUBDIR@ \
        lnet \
        lustre \
        config contrib
index f616215..453f3ff 100644 (file)
@@ -9,8 +9,10 @@ liblustresnmp_la_SOURCES =     \
        lustre-snmp-util.c      \
        lustre-snmp-util.h
 
+LIBCFS = $(top_builddir)/libcfs/libcfs/libcfs.a
+
 liblustresnmp_la_CFLAGS := $(NET_SNMP_CFLAGS)
-liblustresnmp_la_LIBADD := $(NET_SNMP_LIBS)
+liblustresnmp_la_LIBADD := $(NET_SNMP_LIBS) $(LIBCFS)
 liblustresnmp_la_LDFLAGS := -version-info 1:0:0
 
 SUBDIRS =
index c908d47..7cb35ea 100644 (file)
@@ -232,16 +232,23 @@ void health_poll_worker(unsigned int registration_number, void *clientarg)
     FILE    *fptr = NULL;
     char string[MAX_LINE_SIZE];
     int b_seen_portals_catastrophe = 0;
-    const char *filename =  g_health_check_test_file == 0 ? 
-            LUSTRE_PATH FILENAME_SYSHEALTHCHECK : 
-            g_health_check_test_file;
-    
+    char *filename;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "health_check") != 0)
+        return;
+
+    filename = g_health_check_test_file == 0 ? path.gl_pathv[0] : g_health_check_test_file;
+
     /*DEBUGMSGTL(("lsnmpd","health_entry_parser(%s)\n",filename));*/
 
     /* Open the file.  Use the test file env variable if
        there is one */    
     fptr = fopen(filename,"r");
         
+    /* Free parameter's path string */
+    cfs_free_param_data(&path);
+
     /* If the path is not found do nothing */
     if( NULL == fptr)
         return;
index 5f88c6a..f69c6ec 100644 (file)
@@ -728,8 +728,13 @@ error_out :
 extern int mds_stats_values(char * name_value, unsigned long long * nb_sample, unsigned long long * min, unsigned long long * max, unsigned long long * sum, unsigned long long * sum_square)
 {
   unsigned long long tmp_nb_sample=0,tmp_min=0,tmp_max=0,tmp_sum=0,tmp_sum_square=0;
+  glob_t path;
+
 /*we parse the three MDS stat files and sum values*/
-  if( stats_values(FILEPATH_MDS_SERVER_STATS,name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+  if (cfs_get_param_paths(&path, "mdt/MDS/mds/stats") != 0)
+    return ERROR;
+  if( stats_values(path.gl_pathv[0],name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+    cfs_free_param_data(&path);
     return ERROR;
   } else {
     *nb_sample=tmp_nb_sample;
@@ -738,8 +743,12 @@ extern int mds_stats_values(char * name_value, unsigned long long * nb_sample, u
     *sum=tmp_sum;
     *sum_square=tmp_sum_square;
   }
+  cfs_free_param_data(&path);
 
-  if( stats_values(FILEPATH_MDS_SERVER_READPAGE_STATS,name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+  if (cfs_get_param_paths(&path, "mdt/MDS/mds_readpage/stats") != 0)
+    return ERROR;
+  if( stats_values(path.gl_pathv[0],name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+    cfs_free_param_data(&path);
     return ERROR;
   } else {
     *nb_sample += tmp_nb_sample;
@@ -748,8 +757,12 @@ extern int mds_stats_values(char * name_value, unsigned long long * nb_sample, u
     *sum += tmp_sum;
     *sum_square += tmp_sum_square;
   }
+  cfs_free_param_data(&path);
 
-  if( stats_values(FILEPATH_MDS_SERVER_SETATTR_STATS,name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+  if (cfs_get_param_paths(&path, "mdt/MDS/mds_setattr/stats") != 0)
+    return ERROR;
+  if( stats_values(path.gl_pathv[0],name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+    cfs_free_param_data(&path);
     return ERROR;
   } else {
     *nb_sample += tmp_nb_sample;
@@ -758,6 +771,7 @@ extern int mds_stats_values(char * name_value, unsigned long long * nb_sample, u
     *sum += tmp_sum;
     *sum_square += tmp_sum_square;
   }
+  cfs_free_param_data(&path);
   
   return SUCCESS;
 }
index 6e46d24..14078ab 100644 (file)
@@ -39,6 +39,8 @@
 #ifndef LUSTRE_SNMP_UTIL_H
 #define LUSTRE_SNMP_UTIL_H
 
+#include <libcfs/util/param.h>
+
 /*
  * Definitions of magic values
  */
 #define LNETROUTEBYTES      120
 #define LNETDROPBYTES       121
 
-/* Defining the proc paths for Lustre file system */
-#define LUSTRE_PATH                 "/proc/fs/lustre/"
-#define LNET_PATH                   "/proc/sys/lnet/"
-#define OSD_PATH                    LUSTRE_PATH "obdfilter/"
-#define OSC_PATH                    LUSTRE_PATH "osc/"
-#define MDS_PATH                    LUSTRE_PATH "mds/"
-#define MDC_PATH                    LUSTRE_PATH "mdc/"
-#define CLIENT_PATH                 LUSTRE_PATH "llite/"
-#define LOV_PATH                    LUSTRE_PATH "lov/"
-#define LDLM_PATH                   LUSTRE_PATH "ldlm/namespaces/"
-#define FILEPATH_MDS_SERVER_STATS             LUSTRE_PATH "mdt/MDS/mds/stats"
-#define FILEPATH_MDS_SERVER_READPAGE_STATS             LUSTRE_PATH "mdt/MDS/mds_readpage/stats"
-#define FILEPATH_MDS_SERVER_SETATTR_STATS             LUSTRE_PATH "mdt/MDS/mds_setattr/stats"
-
 /* Common procfs file entries that are refrenced in mulitple locations*/
-#define FILENAME_SYSHEALTHCHECK     "health_check"
 #define FILENAME_SYS_STATUS         "/var/lustre/sysStatus"
 
 #define FILENAME_NUM_REF            "num_refs"
index 2c1bcf3..10d841d 100644 (file)
@@ -45,6 +45,8 @@
 #include <pthread.h>
 #include "lustre-snmp.h"
 
+#include <libcfs/util/param.h>
+
 #define LNET_CHECK_INTERVAL 500
 
 /* 
@@ -238,7 +240,7 @@ var_clusterFileSystems(struct variable *vp,
   static long long_ret;
   static u_long ulong_ret;
   static unsigned char string[SPRINT_MAX_LEN];
-  char file_path[MAX_PATH_SIZE];
+  glob_t path;
   uint32_t num;
   char *dir_list;
 
@@ -253,23 +255,35 @@ var_clusterFileSystems(struct variable *vp,
   switch(vp->magic) {
 
     case SYSVERSION:
-        sprintf(file_path, "%s%s", LUSTRE_PATH,"version");
-        if( SUCCESS != read_string(file_path, (char *)string,sizeof(string)))
+        if (cfs_get_param_paths(&path, "version") != 0)
+            return NULL;
+        if( SUCCESS != read_string(path.gl_pathv[0], (char *)string,sizeof(string))){
+            cfs_free_param_data(&path);
             return NULL;
+        }
+        cfs_free_param_data(&path);
         *var_len = strlen((char *)string);
         return (unsigned char *) string;
 
     case SYSKERNELVERSION:
-        sprintf(file_path, "%s%s", LUSTRE_PATH,"kernel_version");
-        if( SUCCESS != read_string(file_path, (char *)string,sizeof(string)))
+        if (cfs_get_param_paths(&path, "kernel_version") != 0)
             return NULL;
+        if( SUCCESS != read_string(path.gl_pathv[0], (char *)string,sizeof(string))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        cfs_free_param_data(&path);
         *var_len = strlen((char *)string);
         return (unsigned char *) string;
 
     case SYSHEALTHCHECK:
-        sprintf(file_path, "%s%s", LUSTRE_PATH,FILENAME_SYSHEALTHCHECK);
-        if( SUCCESS != read_string(file_path, (char *)string,sizeof(string)))
+        if (cfs_get_param_paths(&path, "health_check") != 0)
+            return NULL;
+        if( SUCCESS != read_string(path.gl_pathv[0], (char *)string,sizeof(string))){
+            cfs_free_param_data(&path);
             return NULL;
+        }
+        cfs_free_param_data(&path);
         *var_len = strlen((char*)string);
         return (unsigned char *) string;
 
@@ -281,57 +295,92 @@ var_clusterFileSystems(struct variable *vp,
         return NULL;
                       
     case OSDNUMBER:
-        if( 0 == (dir_list = get_file_list(OSD_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "obdfilter") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",OSD_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case OSCNUMBER:
-        if( 0 == (dir_list = get_file_list(OSC_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "osc") != 0)
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",OSC_PATH,num));  
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case MDDNUMBER:
-        if( 0 == (dir_list = get_file_list(MDS_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "mds") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",MDS_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case MDCNUMBER:
-        if( 0 == (dir_list = get_file_list(MDC_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "mdc") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",MDC_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case CLIMOUNTNUMBER:
-        if( 0 == (dir_list = get_file_list(CLIENT_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "llite") != 0)
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",CLIENT_PATH,num));  
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case LOVNUMBER:
-        if( 0 == (dir_list = get_file_list(LOV_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "lov") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",LOV_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case LDLMNUMBER:
-        if( 0 == (dir_list = get_file_list(LDLM_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "ldlm/namespaces") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",LDLM_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
@@ -366,8 +415,16 @@ var_osdTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        OSD_PATH,osd_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "obdfilter") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table osc_table[] =
@@ -394,8 +451,16 @@ var_oscTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        OSC_PATH,osc_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "osc") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table mds_table[] =
@@ -421,8 +486,16 @@ var_mdsTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        MDS_PATH,mds_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "mds") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table mdc_table[] =
@@ -450,10 +523,17 @@ var_mdcTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        MDC_PATH,mdc_table);
-}
+    unsigned char *table;
+    glob_t path;
 
+    if (cfs_get_param_paths(&path, "mdc") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
+}
 
 struct oid_table cli_table[] =
 { 
@@ -479,10 +559,17 @@ var_cliTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        CLIENT_PATH,cli_table);
-}
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "llite") != 0)
+        return NULL;
 
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
+}
 
 struct oid_table lov_table[] =
 { 
@@ -514,8 +601,16 @@ var_lovTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        LOV_PATH,lov_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "lov") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table ldlm_table[] =
@@ -540,8 +635,16 @@ var_ldlmTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        LDLM_PATH,ldlm_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "ldlm/namespaces") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 /*****************************************************************************
@@ -565,16 +668,20 @@ var_lnetInformation(struct variable *vp,
         static unsigned int       c32;
         struct timeval            current_tv;
         unsigned long             current;
-        char                      file_path[MAX_PATH_SIZE];
+        glob_t                    file_path;
 
         /* Update at most every LNET_STATS_INTERVAL milliseconds */
         gettimeofday(&current_tv, NULL);
         current = current_tv.tv_sec * 1000000 + current_tv.tv_usec;
         if (current >= next_update) {
-                sprintf(file_path, "%s%s", LNET_PATH, "stats");
-                if (read_string(file_path, (char *) string, sizeof(string))
-                    != SUCCESS)
+                if (cfs_get_param_paths(&file_path, "stats") != 0)
+                        return NULL;
+                if (read_string(file_path.gl_pathv[0], (char *) string, sizeof(string))
+                    != SUCCESS) {
+                        cfs_free_param_data(&file_path);
                         return NULL;
+                }
+                cfs_free_param_data(&file_path);
 
                 sscanf((char *) string,
                        "%u %u %u %u %u %u %u %llu %llu %llu %llu",