"The number of unused files on a Meta Data Device."
::= { mddEntry 7 }
+mdsNbSampledReq OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The number of sampled requests ."
+ ::= { metaDataServers 3 }
--============================================================================
--
#include <unistd.h>
#include <stdio.h>
#include <stdarg.h>
+#include <string.h>
#include "lustre-snmp-util.h"
/*********************************************************************
return ret_val;
};
+/**************************************************************************
+ * Function: stats_values
+ *
+ * Description: Setup nb_sample, min, max, sum and sum_square stats values
+ for name_value from filepath.
+ *
+ * Input: filepath, name_value,
+ * pointer to nb_sample, min, max, sum, sum_square
+ *
+ * Output: SUCCESS or ERROR on failure
+ *
+ **************************************************************************/
+int stats_values(char * filepath,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)
+{
+ FILE * statfile;
+ char line[MAX_LINE_SIZE];
+ int nbReadValues = 0;
+
+ if( (statfile=fopen(filepath,"r")) == NULL) {
+ report("stats_value() failed to open %s",filepath);
+ return ERROR;
+ }
+/*find the good line for name_value*/
+ do {
+ if( fgets(line,MAX_LINE_SIZE,statfile) == NULL ) {
+ report("stats_values() failed to find %s values in %s stat_file",name_value,statfile);
+ goto error_out;
+ }
+ } while ( strstr(line,name_value) == NULL );
+/*get stats*/
+ if((nbReadValues=sscanf(line,"%*s %llu %*s %*s %llu %llu %llu %llu",nb_sample,min,max,sum,sum_square)) == 5) {
+ goto success_out;
+ } else if( nbReadValues == 1 && *nb_sample == 0) {
+ *min = *max = *sum = *sum_square = 0;
+ goto success_out;
+ } else {
+ report("stats_values() failed to read stats_values for %s value in %s stat_file",name_value,statfile);
+ goto error_out;
+ }
+
+success_out :
+ fclose(statfile);
+ return SUCCESS;
+error_out :
+ fclose(statfile);
+ return ERROR;
+}
+
+/**************************************************************************
+ * Function: mds_stats_values
+ *
+ * Description: Setup nb_sample, min, max, sum and sum_square stats values
+ for mds stats name_value .
+ *
+ * Input: name_value,
+ * pointer to nb_sample, min, max, sum, sum_square
+ *
+ * Output: SUCCESS or ERROR on failure
+ *
+ **************************************************************************/
+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;
+/*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 ) {
+ return ERROR;
+ } else {
+ *nb_sample=tmp_nb_sample;
+ *min=tmp_min;
+ *max=tmp_max;
+ *sum=tmp_sum;
+ *sum_square=tmp_sum_square;
+ }
+
+ if( stats_values(FILEPATH_MDS_SERVER_READPAGE_STATS,name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+ return ERROR;
+ } else {
+ *nb_sample += tmp_nb_sample;
+ *min += tmp_min;
+ *max += tmp_max;
+ *sum += tmp_sum;
+ *sum_square += tmp_sum_square;
+ }
+
+ if( stats_values(FILEPATH_MDS_SERVER_SETATTR_STATS,name_value,&tmp_nb_sample,&tmp_min,&tmp_max,&tmp_sum,&tmp_sum_square) == ERROR ) {
+ return ERROR;
+ } else {
+ *nb_sample += tmp_nb_sample;
+ *min += tmp_min;
+ *max += tmp_max;
+ *sum += tmp_sum;
+ *sum_square += tmp_sum_square;
+ }
+
+ return SUCCESS;
+}
#define MDDFREECAPACITY 54
#define MDDFILES 55
#define MDDFREEFILES 56
+#define MDSNBSAMPLEDREQ 57
#define MDCNUMBER 60
#define MDCUUID 61
#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_KBYTES_FREE "kbytesfree"
#define FILENAME_FILES_TOTAL "filestotal"
#define FILENAME_FILES_FREE "filesfree"
+#define STR_REQ_WAITIME "req_waittime"
/* strings which the file /var/lustre/sysStatus can hold */
#define STR_ONLINE "online"
const char *path,
struct oid_table *ptable);
+int stats_values(char * filepath,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);
+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);
+
#endif /* LUSTRE_SNMP_UTIL_H */
{ MDDFREECAPACITY , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,5 } },
{ MDDFILES , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,6 } },
{ MDDFREEFILES , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,7 } },
+ { MDSNBSAMPLEDREQ , ASN_COUNTER64 , RONLY , var_mdsNbSampledReq, 4, { 2,1,4,3 } },
/* metaDataClients 2.1.5 */
{ MDCNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,5,1 } },
/*****************************************************************************
+ * Function: var_mdsNbSampledReq
+ *
+ ****************************************************************************/
+unsigned char *
+var_mdsNbSampledReq(struct variable *vp,
+ oid *name,
+ size_t *length,
+ int exact,
+ size_t *var_len,
+ WriteMethod **write_method)
+{
+ unsigned long long nb_sample=0,min=0,max=0,sum=0,sum_square=0;
+ static counter64 c64;
+
+ if (header_generic(vp,name,length,exact,var_len,write_method)
+ == MATCH_FAILED )
+ return NULL;
+
+ if( mds_stats_values(STR_REQ_WAITIME,&nb_sample,&min,&max,&sum,&sum_square) == ERROR) return NULL;
+
+ c64.low = (u_long) (0x0FFFFFFFF & nb_sample);
+ nb_sample >>= 32;
+ c64.high = (u_long) (0x0FFFFFFFF & nb_sample);
+
+ *var_len = sizeof(c64);
+ return (unsigned char *) &c64;
+}
+
+
+/*****************************************************************************
* Function: write_sysStatus
*
****************************************************************************/
FindVarMethod var_cliTable;
FindVarMethod var_ldlmTable;
FindVarMethod var_lovTable;
+FindVarMethod var_mdsNbSampledReq;
WriteMethod write_sysStatus;
#endif /* LUSTRE_SNMP_H */