From: James Simmons Date: Thu, 14 Jan 2016 19:43:22 +0000 (-0500) Subject: LU-5030 snmp: migrate lustre SNMP utilites to use cfs_get_paths X-Git-Tag: 2.7.66~28 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=ddb28333258d23bd40b21278901841499dd4f198 LU-5030 snmp: migrate lustre SNMP utilites to use cfs_get_paths 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 Signed-off-by: James Simmons Signed-off-by: Wang Chao Reviewed-on: http://review.whamcloud.com/17465 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Emoly Liu Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- diff --git a/autoMakefile.am b/autoMakefile.am index effac1e..1a44bf2 100644 --- a/autoMakefile.am +++ b/autoMakefile.am @@ -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 diff --git a/snmp/Makefile.am b/snmp/Makefile.am index f616215..453f3ff 100644 --- a/snmp/Makefile.am +++ b/snmp/Makefile.am @@ -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 = diff --git a/snmp/lustre-snmp-trap.c b/snmp/lustre-snmp-trap.c index c908d47..7cb35ea 100644 --- a/snmp/lustre-snmp-trap.c +++ b/snmp/lustre-snmp-trap.c @@ -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; diff --git a/snmp/lustre-snmp-util.c b/snmp/lustre-snmp-util.c index 5f88c6a..f69c6ec 100644 --- a/snmp/lustre-snmp-util.c +++ b/snmp/lustre-snmp-util.c @@ -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; } diff --git a/snmp/lustre-snmp-util.h b/snmp/lustre-snmp-util.h index 6e46d24..14078ab 100644 --- a/snmp/lustre-snmp-util.h +++ b/snmp/lustre-snmp-util.h @@ -39,6 +39,8 @@ #ifndef LUSTRE_SNMP_UTIL_H #define LUSTRE_SNMP_UTIL_H +#include + /* * Definitions of magic values */ @@ -125,22 +127,7 @@ #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" diff --git a/snmp/lustre-snmp.c b/snmp/lustre-snmp.c index 2c1bcf3..10d841d 100644 --- a/snmp/lustre-snmp.c +++ b/snmp/lustre-snmp.c @@ -45,6 +45,8 @@ #include #include "lustre-snmp.h" +#include + #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(¤t_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",