X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=snmp%2Flustre-snmp-util.c;h=70d5ecd69e7ef66bc69d43f05d0d751624b1b46b;hp=8048f2d4d6176ae759e0832a29cb050f88a47b76;hb=31197e43bca94d9fbb4ca2090b556d93c6c18542;hpb=c6bc5eb7d073d5a7b7d0934d92bfd8eab15fc825;ds=sidebyside diff --git a/snmp/lustre-snmp-util.c b/snmp/lustre-snmp-util.c index 8048f2d..70d5ecd 100644 --- a/snmp/lustre-snmp-util.c +++ b/snmp/lustre-snmp-util.c @@ -1,23 +1,39 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Copyright (c) 2005 Cluster File Systems, Inc. - * Author: PJ Kirner + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * This file is part of Lustre, http://www.lustre.org. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * GPL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * snmp/lustre-snmp-util.c * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Author: PJ Kirner */ /* @@ -33,12 +49,15 @@ */ #include +#if defined (__linux__) #include +#endif #include #include #include #include #include +#include #include "lustre-snmp-util.h" /********************************************************************* @@ -275,8 +294,6 @@ void lustrefs_ctrl(int command) int get_sysstatus(void) { - FILE *fptr = NULL; - int len = 0; int ret_val = ERROR ; char sys_status[50] = {0}; @@ -341,9 +358,9 @@ int read_counter64(const char *file_path, counter64 *c64,int factor) if ((ret_val = read_string(file_path, file_data,sizeof(file_data))) == SUCCESS) { tmp = atoll(file_data) * factor; - c64->low = (ulong) (0x0FFFFFFFF & tmp); + c64->low = (unsigned long) (0x0FFFFFFFF & tmp); tmp >>= 32; /* Shift right by 4 bytes */ - c64->high = (ulong) (0x0FFFFFFFF & tmp); + c64->high = (unsigned long) (0x0FFFFFFFF & tmp); } return ret_val; } @@ -521,9 +538,9 @@ unsigned char* size_t *var_len) { static unsigned char string[SPRINT_MAX_LEN]; - if( SUCCESS != read_string(file_path, string,sizeof(string))) + if( SUCCESS != read_string(file_path, (char *)string,sizeof(string))) return NULL; - *var_len = strlen(string); + *var_len = strlen((char *)string); return (unsigned char *) string; } @@ -650,3 +667,108 @@ cleanup_and_exit: 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; +} + +void convert_ull(counter64 *c64, unsigned long long ull, size_t *var_len) +{ + *var_len = sizeof(*c64); + c64->low = (unsigned long long) (0x0ffffffff & ull); + ull >>= 32; + c64->high = (unsigned long long) (0x0ffffffff & ull); +} +