From: <kn...@us...> - 2006-07-20 08:49:50
|
Revision: 667 Author: knobi1 Date: 2006-07-20 01:49:41 -0700 (Thu, 20 Jul 2006) ViewCVS: http://svn.sourceforge.net/ganglia/?rev=667&view=rev Log Message: ----------- MKN: Fix for bx #33 by sm...@bn... (Jason A. Smith). MKN: It increases the number of rows in newly created RRAs. MKN: Old databases are not affected. Modified Paths: -------------- trunk/monitor-core/gmetad/conf.c trunk/monitor-core/gmetad/gmetad.conf trunk/monitor-core/gmetad/rrd_helpers.c Modified: trunk/monitor-core/gmetad/conf.c =================================================================== --- trunk/monitor-core/gmetad/conf.c 2006-07-20 08:47:30 UTC (rev 666) +++ trunk/monitor-core/gmetad/conf.c 2006-07-20 08:49:41 UTC (rev 667) @@ -269,11 +269,11 @@ config->scalable_mode = 1; config->all_trusted = 0; config->num_RRAs = 5; - config->RRAs[0] = "RRA:AVERAGE:0.5:1:240"; - config->RRAs[1] = "RRA:AVERAGE:0.5:24:240"; - config->RRAs[2] = "RRA:AVERAGE:0.5:168:240"; - config->RRAs[3] = "RRA:AVERAGE:0.5:672:240"; - config->RRAs[4] = "RRA:AVERAGE:0.5:5760:370"; + config->RRAs[0] = "RRA:AVERAGE:0.5:1:244"; + config->RRAs[1] = "RRA:AVERAGE:0.5:24:244"; + config->RRAs[2] = "RRA:AVERAGE:0.5:168:244"; + config->RRAs[3] = "RRA:AVERAGE:0.5:672:244"; + config->RRAs[4] = "RRA:AVERAGE:0.5:5760:374"; } int Modified: trunk/monitor-core/gmetad/gmetad.conf =================================================================== --- trunk/monitor-core/gmetad/gmetad.conf 2006-07-20 08:47:30 UTC (rev 666) +++ trunk/monitor-core/gmetad/gmetad.conf 2006-07-20 08:49:41 UTC (rev 667) @@ -42,8 +42,8 @@ # Round-Robin Archives # You can specify custom Round-Robin archives here (defaults are listed below) # -# RRAs "RRA:AVERAGE:0.5:1:240" "RRA:AVERAGE:0.5:24:240" "RRA:AVERAGE:0.5:168:240" "RRA:AVERAGE:0.5:672:240" \ -# "RRA:AVERAGE:0.5:5760:370" +# RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \ +# "RRA:AVERAGE:0.5:5760:374" # # Modified: trunk/monitor-core/gmetad/rrd_helpers.c =================================================================== --- trunk/monitor-core/gmetad/rrd_helpers.c 2006-07-20 08:47:30 UTC (rev 666) +++ trunk/monitor-core/gmetad/rrd_helpers.c 2006-07-20 08:49:41 UTC (rev 667) @@ -97,6 +97,7 @@ argv[argc++] = gmetad_config.RRAs[i]; } #if 0 + /* Read in or defaulted in conf.c */ argv[argc++] = "RRA:AVERAGE:0.5:1:240"; argv[argc++] = "RRA:AVERAGE:0.5:24:240"; argv[argc++] = "RRA:AVERAGE:0.5:168:240"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bni...@us...> - 2008-03-24 22:30:20
|
Revision: 1105 http://ganglia.svn.sourceforge.net/ganglia/?rev=1105&view=rev Author: bnicholes Date: 2008-03-24 15:28:15 -0700 (Mon, 24 Mar 2008) Log Message: ----------- Read and report all numeric values as doubles for the summary reports. This prevents the rollover problem for filter=summary and type merging problem between 3.1 and 3.0 clusters. Bug: #128 Submitted by: Timothy Witham <timothy d witham intel com> Reviewed by: Brad Nicholes Modified Paths: -------------- trunk/monitor-core/gmetad/gmetad.c trunk/monitor-core/gmetad/gmetad.h trunk/monitor-core/gmetad/process_xml.c trunk/monitor-core/gmetad/server.c Modified: trunk/monitor-core/gmetad/gmetad.c =================================================================== --- trunk/monitor-core/gmetad/gmetad.c 2008-03-24 22:19:09 UTC (rev 1104) +++ trunk/monitor-core/gmetad/gmetad.c 2008-03-24 22:28:15 UTC (rev 1105) @@ -148,16 +148,13 @@ tt = in_type_list(type, strlen(type)); if (!tt) return 0; - /* We do all our sums in double which does not suffer from - wraparound errors: for example memory KB exceeding 4TB. -twitham */ + /* We sum everything in double to properly combine integer sources + (3.0) with float sources (3.1). This also avoids wraparound + errors: for example memory KB exceeding 4TB. */ switch (tt->type) { case INT: - rootmetric->val.d += metric->val.int32; - break; case UINT: - rootmetric->val.d += metric->val.uint32; - break; case FLOAT: rootmetric->val.d += metric->val.d; break; Modified: trunk/monitor-core/gmetad/gmetad.h =================================================================== --- trunk/monitor-core/gmetad/gmetad.h 2008-03-24 22:19:09 UTC (rev 1104) +++ trunk/monitor-core/gmetad/gmetad.h 2008-03-24 22:28:15 UTC (rev 1105) @@ -120,8 +120,6 @@ * metric_t to compute summaries. */ typedef union { - int32_t int32; - uint32_t uint32; double d; int str; } Modified: trunk/monitor-core/gmetad/process_xml.c =================================================================== --- trunk/monitor-core/gmetad/process_xml.c 2008-03-24 22:19:09 UTC (rev 1104) +++ trunk/monitor-core/gmetad/process_xml.c 2008-03-24 22:28:15 UTC (rev 1105) @@ -100,16 +100,10 @@ switch (tt->type) { case INT: - metric->val.int32 = (long) - strtol(metricval, (char**) NULL, 10); - break; case TIMESTAMP: case UINT: - metric->val.uint32 = (unsigned long) - strtoul(metricval, (char**) NULL, 10); - break; case FLOAT: - metric->val.d = (double) + metric->val.d = (double) strtod(metricval, (char**) NULL); p = strrchr(metricval, '.'); if (p) metric->precision = (short int) strlen(p+1); @@ -600,8 +594,8 @@ case TYPE_TAG: type = attr[i+1]; break; - case SLOPE_TAG: - slope = cstr_to_slope(attr[i+1]); + case SLOPE_TAG: + slope = cstr_to_slope(attr[i+1]); default: break; } @@ -629,8 +623,7 @@ xmldata->hostname, name); xmldata->rval = write_data_to_rrd(xmldata->sourcename, xmldata->hostname, name, metricval, NULL, - xmldata->ds->step, xmldata->source.localtime, - slope); + xmldata->ds->step, xmldata->source.localtime, slope); } metric->id = METRIC_NODE; metric->report_start = metric_report_start; @@ -681,15 +674,9 @@ switch (tt->type) { case INT: - metric->val.int32 += (long) - strtol(metricval, (char**) NULL, 10); - break; case UINT: - metric->val.uint32 += (unsigned long) - strtoul(metricval, (char**) NULL, 10); - break; case FLOAT: - metric->val.d += (double) + metric->val.d += (double) strtod(metricval, (char**) NULL); break; default: @@ -868,15 +855,9 @@ switch (tt->type) { case INT: - metric->val.int32 += (long) - strtol(metricval, (char**) NULL, 10); - break; case UINT: - metric->val.uint32 += (unsigned long) - strtoul(metricval, (char**) NULL, 10); - break; case FLOAT: - metric->val.d += (double) + metric->val.d += (double) strtod(metricval, (char**) NULL); break; default: @@ -1017,10 +998,8 @@ switch (tt->type) { case INT: - sprintf(sum, "%d", metric->val.int32); - break; case UINT: - sprintf(sum, "%u", metric->val.uint32); + sprintf(sum, "%.f", metric->val.d); break; case FLOAT: sprintf(sum, "%.*f", (int) metric->precision, metric->val.d); @@ -1032,17 +1011,18 @@ /* Save the data to a round robin database if this data source is * alive. */ - if (!xmldata->ds->dead && !xmldata->rval) { + if (!xmldata->ds->dead && !xmldata->rval) + { - debug_msg("Writing Summary data for source %s, metric %s", - xmldata->sourcename, name); - - xmldata->rval = write_data_to_rrd(xmldata->sourcename, NULL, name, - sum, num, xmldata->ds->step, - xmldata->source.localtime, - cstr_to_slope(getfield(metric->strings, metric->slope))); - } + debug_msg("Writing Summary data for source %s, metric %s", + xmldata->sourcename, name); + xmldata->rval = write_data_to_rrd(xmldata->sourcename, NULL, name, + sum, num, xmldata->ds->step, + xmldata->source.localtime, + cstr_to_slope(getfield(metric->strings, metric->slope))); + } + return xmldata->rval; } Modified: trunk/monitor-core/gmetad/server.c =================================================================== --- trunk/monitor-core/gmetad/server.c 2008-03-24 22:19:09 UTC (rev 1104) +++ trunk/monitor-core/gmetad/server.c 2008-03-24 22:28:15 UTC (rev 1105) @@ -72,13 +72,14 @@ tt = in_type_list(type, strlen(type)); if (!tt) return 0; + /* We sum everything in double to properly combine integer sources + (3.0) with float sources (3.1). This also avoids wraparound + errors: for example memory KB exceeding 4TB. */ switch (tt->type) { case INT: - sprintf(sum, "%d", metric->val.int32); - break; case UINT: - sprintf(sum, "%u", metric->val.uint32); + sprintf(sum, "%.f", metric->val.d); break; case FLOAT: sprintf(sum, "%.*f", (int) metric->precision, metric->val.d); @@ -90,7 +91,7 @@ return xml_print(client, "<METRICS NAME=\"%s\" SUM=\"%s\" NUM=\"%u\" " "TYPE=\"%s\" UNITS=\"%s\" SLOPE=\"%s\" SOURCE=\"%s\"/>\n", name, sum, metric->num, - getfield(metric->strings, metric->type), + "double", /* we always report double sums */ getfield(metric->strings, metric->units), getfield(metric->strings, metric->slope), getfield(metric->strings, metric->source)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2008-03-27 06:47:34
|
Revision: 1130 http://ganglia.svn.sourceforge.net/ganglia/?rev=1130&view=rev Author: carenas Date: 2008-03-26 23:47:32 -0700 (Wed, 26 Mar 2008) Log Message: ----------- gmetad: update cmdline for pid-file and re gengetopt Modified Paths: -------------- trunk/monitor-core/gmetad/cmdline.c trunk/monitor-core/gmetad/cmdline.h trunk/monitor-core/gmetad/cmdline.sh Modified: trunk/monitor-core/gmetad/cmdline.c =================================================================== --- trunk/monitor-core/gmetad/cmdline.c 2008-03-27 05:47:25 UTC (rev 1129) +++ trunk/monitor-core/gmetad/cmdline.c 2008-03-27 06:47:32 UTC (rev 1130) @@ -1,102 +1,456 @@ /* - File autogenerated by gengetopt version 2.7.1 + File autogenerated by gengetopt version 2.22 generated with the following command: - /usr/bin/gengetopt --input cmdline.sh + /usr/local/bin/gengetopt --input ./cmdline.sh The developers of gengetopt consider the fixed text that goes in all gengetopt output files to be in the public domain: we make no copyright claims on it. */ +/* If we use autoconf. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include <stdio.h> #include <stdlib.h> #include <string.h> -/* If we use autoconf. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -/* Check for configure's getopt check result. */ -#ifndef HAVE_GETOPT_LONG + #include "getopt.h" -#else -#include <getopt.h> -#endif -#ifndef HAVE_STRDUP -#define strdup gengetopt_strdup -#endif /* HAVE_STRDUP */ - #include "cmdline.h" +const char *gengetopt_args_info_purpose = "The Ganglia Meta Daemon (gmetad) collects information from\nmultiple gmond or gmetad data sources, saves the information to local\nround-robin databases, and exports XML which is the concatentation of\nall data sources"; +const char *gengetopt_args_info_usage = "Usage: gmetad [OPTIONS]..."; + +const char *gengetopt_args_info_description = ""; + +const char *gengetopt_args_info_help[] = { + " -h, --help Print help and exit", + " -V, --version Print version and exit", + " -c, --conf=STRING Location of gmetad configuration file \n (default=`/etc/ganglia/gmetad.conf')", + " -d, --debug=INT Debug level. If greater than zero, daemon will stay in \n foreground. (default=`0')", + " -p, --pid-file=STRING Write process-id to file", + 0 +}; + +typedef enum {ARG_NO + , ARG_STRING + , ARG_INT +} cmdline_parser_arg_type; + +static +void clear_given (struct gengetopt_args_info *args_info); +static +void clear_args (struct gengetopt_args_info *args_info); + +static int +cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, + struct cmdline_parser_params *params, const char *additional_error); + + +static char * +gengetopt_strdup (const char *s); + +static +void clear_given (struct gengetopt_args_info *args_info) +{ + args_info->help_given = 0 ; + args_info->version_given = 0 ; + args_info->conf_given = 0 ; + args_info->debug_given = 0 ; + args_info->pid_file_given = 0 ; +} + +static +void clear_args (struct gengetopt_args_info *args_info) +{ + args_info->conf_arg = gengetopt_strdup ("/etc/ganglia/gmetad.conf"); + args_info->conf_orig = NULL; + args_info->debug_arg = 0; + args_info->debug_orig = NULL; + args_info->pid_file_arg = NULL; + args_info->pid_file_orig = NULL; + +} + +static +void init_args_info(struct gengetopt_args_info *args_info) +{ + + + args_info->help_help = gengetopt_args_info_help[0] ; + args_info->version_help = gengetopt_args_info_help[1] ; + args_info->conf_help = gengetopt_args_info_help[2] ; + args_info->debug_help = gengetopt_args_info_help[3] ; + args_info->pid_file_help = gengetopt_args_info_help[4] ; + +} + void cmdline_parser_print_version (void) { - printf ("%s %s\n", PACKAGE, VERSION); + printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION); } +static void print_help_common(void) { + cmdline_parser_print_version (); + + if (strlen(gengetopt_args_info_purpose) > 0) + printf("\n%s\n", gengetopt_args_info_purpose); + + if (strlen(gengetopt_args_info_usage) > 0) + printf("\n%s\n", gengetopt_args_info_usage); + + printf("\n"); + + if (strlen(gengetopt_args_info_description) > 0) + printf("%s\n", gengetopt_args_info_description); +} + void cmdline_parser_print_help (void) { - cmdline_parser_print_version (); - printf("\n" - "Purpose:\n" - " The Ganglia Meta Daemon (gmetad) collects information from\n" - " multiple gmond or gmetad data sources, saves the information to local\n" - " round-robin databases, and exports XML which is the concatentation of\n" - " all data sources\n" - "\n" - "Usage: %s [OPTIONS]...\n", PACKAGE); - printf(" -h --help Print help and exit\n"); - printf(" -V --version Print version and exit\n"); - printf(" -cSTRING --conf=STRING Location of gmetad configuration file (default='/etc/ganglia/gmetad.conf')\n"); - printf(" -dINT --debug=INT Debug level. If greater than zero, daemon will stay in foreground. (default=0)\n"); - printf(" -p --pid-file=STRING Write process-id to file\n"); + int i = 0; + print_help_common(); + while (gengetopt_args_info_help[i]) + printf("%s\n", gengetopt_args_info_help[i++]); } +void +cmdline_parser_init (struct gengetopt_args_info *args_info) +{ + clear_given (args_info); + clear_args (args_info); + init_args_info (args_info); +} -#ifndef HAVE_STRDUP -/* gengetopt_strdup(): automatically generated from strdup.c. */ -/* strdup.c replacement of strdup, which is not standard */ -static char * +void +cmdline_parser_params_init(struct cmdline_parser_params *params) +{ + if (params) + { + params->override = 0; + params->initialize = 1; + params->check_required = 1; + params->check_ambiguity = 0; + params->print_errors = 1; + } +} + +struct cmdline_parser_params * +cmdline_parser_params_create(void) +{ + struct cmdline_parser_params *params = + (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params)); + cmdline_parser_params_init(params); + return params; +} + +static void +free_string_field (char **s) +{ + if (*s) + { + free (*s); + *s = 0; + } +} + + +static void +cmdline_parser_release (struct gengetopt_args_info *args_info) +{ + + free_string_field (&(args_info->conf_arg)); + free_string_field (&(args_info->conf_orig)); + free_string_field (&(args_info->debug_orig)); + free_string_field (&(args_info->pid_file_arg)); + free_string_field (&(args_info->pid_file_orig)); + + + + clear_given (args_info); +} + + +static void +write_into_file(FILE *outfile, const char *opt, const char *arg, char *values[]) +{ + if (arg) { + fprintf(outfile, "%s=\"%s\"\n", opt, arg); + } else { + fprintf(outfile, "%s\n", opt); + } +} + + +int +cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) +{ + int i = 0; + + if (!outfile) + { + fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE); + return EXIT_FAILURE; + } + + if (args_info->help_given) + write_into_file(outfile, "help", 0, 0 ); + if (args_info->version_given) + write_into_file(outfile, "version", 0, 0 ); + if (args_info->conf_given) + write_into_file(outfile, "conf", args_info->conf_orig, 0); + if (args_info->debug_given) + write_into_file(outfile, "debug", args_info->debug_orig, 0); + if (args_info->pid_file_given) + write_into_file(outfile, "pid-file", args_info->pid_file_orig, 0); + + + i = EXIT_SUCCESS; + return i; +} + +int +cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info) +{ + FILE *outfile; + int i = 0; + + outfile = fopen(filename, "w"); + + if (!outfile) + { + fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename); + return EXIT_FAILURE; + } + + i = cmdline_parser_dump(outfile, args_info); + fclose (outfile); + + return i; +} + +void +cmdline_parser_free (struct gengetopt_args_info *args_info) +{ + cmdline_parser_release (args_info); +} + +/** @brief replacement of strdup, which is not standard */ +char * gengetopt_strdup (const char *s) { - char *result = (char*)malloc(strlen(s) + 1); + char *result = NULL; + if (!s) + return result; + + result = (char*)malloc(strlen(s) + 1); if (result == (char*)0) return (char*)0; strcpy(result, s); return result; } -#endif /* HAVE_STRDUP */ int cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info) { - int c; /* Character of the parsed option. */ - int missing_required_options = 0; + return cmdline_parser2 (argc, argv, args_info, 0, 1, 1); +} - args_info->help_given = 0 ; - args_info->version_given = 0 ; - args_info->conf_given = 0 ; - args_info->debug_given = 0 ; - args_info->pid_file_given = 0 ; -#define clear_args() { \ - args_info->conf_arg = strdup("/etc/ganglia/gmetad.conf") ;\ - args_info->debug_arg = 0 ;\ - args_info->pid_file_arg = NULL ; \ +int +cmdline_parser_ext (int argc, char * const *argv, struct gengetopt_args_info *args_info, + struct cmdline_parser_params *params) +{ + int result; + result = cmdline_parser_internal (argc, argv, args_info, params, NULL); + + if (result == EXIT_FAILURE) + { + cmdline_parser_free (args_info); + exit (EXIT_FAILURE); + } + + return result; } - clear_args(); +int +cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required) +{ + int result; + struct cmdline_parser_params params; + + params.override = override; + params.initialize = initialize; + params.check_required = check_required; + params.check_ambiguity = 0; + params.print_errors = 1; + result = cmdline_parser_internal (argc, argv, args_info, ¶ms, NULL); + + if (result == EXIT_FAILURE) + { + cmdline_parser_free (args_info); + exit (EXIT_FAILURE); + } + + return result; +} + +int +cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name) +{ + return EXIT_SUCCESS; +} + + +static char *package_name = 0; + +/** + * @brief updates an option + * @param field the generic pointer to the field to update + * @param orig_field the pointer to the orig field + * @param field_given the pointer to the number of occurrence of this option + * @param prev_given the pointer to the number of occurrence already seen + * @param value the argument for this option (if null no arg was specified) + * @param possible_values the possible values for this option (if specified) + * @param default_value the default value (in case the option only accepts fixed values) + * @param arg_type the type of this option + * @param check_ambiguity @see cmdline_parser_params.check_ambiguity + * @param override @see cmdline_parser_params.override + * @param no_free whether to free a possible previous value + * @param multiple_option whether this is a multiple option + * @param long_opt the corresponding long option + * @param short_opt the corresponding short option (or '-' if none) + * @param additional_error possible further error specification + */ +static +int update_arg(void *field, char **orig_field, + unsigned int *field_given, unsigned int *prev_given, + char *value, char *possible_values[], const char *default_value, + cmdline_parser_arg_type arg_type, + int check_ambiguity, int override, + int no_free, int multiple_option, + const char *long_opt, char short_opt, + const char *additional_error) +{ + char *stop_char = 0; + const char *val = value; + int found; + char **string_field; + + stop_char = 0; + found = 0; + + if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given))) + { + if (short_opt != '-') + fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n", + package_name, long_opt, short_opt, + (additional_error ? additional_error : "")); + else + fprintf (stderr, "%s: `--%s' option given more than once%s\n", + package_name, long_opt, + (additional_error ? additional_error : "")); + return 1; /* failure */ + } + + + if (field_given && *field_given && ! override) + return 0; + if (prev_given) + (*prev_given)++; + if (field_given) + (*field_given)++; + if (possible_values) + val = possible_values[found]; + + switch(arg_type) { + case ARG_INT: + if (val) *((int *)field) = strtol (val, &stop_char, 0); + break; + case ARG_STRING: + if (val) { + string_field = (char **)field; + if (!no_free && *string_field) + free (*string_field); /* free previous string */ + *string_field = gengetopt_strdup (val); + } + break; + default: + break; + }; + + /* check numeric conversion */ + switch(arg_type) { + case ARG_INT: + if (val && !(stop_char && *stop_char == '\0')) { + fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val); + return 1; /* failure */ + } + break; + default: + ; + }; + + /* store the original value */ + switch(arg_type) { + case ARG_NO: + break; + default: + if (value && orig_field) { + if (no_free) { + *orig_field = value; + } else { + if (*orig_field) + free (*orig_field); /* free previous string */ + *orig_field = gengetopt_strdup (value); + } + } + }; + + return 0; /* OK */ +} + + +int +cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, + struct cmdline_parser_params *params, const char *additional_error) +{ + int c; /* Character of the parsed option. */ + + int error = 0; + struct gengetopt_args_info local_args_info; + + int override; + int initialize; + int check_required; + int check_ambiguity; + + package_name = argv[0]; + + override = params->override; + initialize = params->initialize; + check_required = params->check_required; + check_ambiguity = params->check_ambiguity; + + if (initialize) + cmdline_parser_init (args_info); + + cmdline_parser_init (&local_args_info); + optarg = 0; - optind = 1; - opterr = 1; + optind = 0; + opterr = params->print_errors; optopt = '?'; while (1) { int option_index = 0; + static struct option long_options[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, @@ -108,68 +462,80 @@ c = getopt_long (argc, argv, "hVc:d:p:", long_options, &option_index); - if (c == -1) break; /* Exit from 'while (1)' loop. */ + if (c == -1) break; /* Exit from `while (1)' loop. */ switch (c) { case 'h': /* Print help and exit. */ - clear_args (); cmdline_parser_print_help (); + cmdline_parser_free (&local_args_info); exit (EXIT_SUCCESS); case 'V': /* Print version and exit. */ - clear_args (); cmdline_parser_print_version (); + cmdline_parser_free (&local_args_info); exit (EXIT_SUCCESS); case 'c': /* Location of gmetad configuration file. */ - if (args_info->conf_given) - { - fprintf (stderr, "%s: '--conf' ('-c') option given more than once\n", PACKAGE); - clear_args (); - exit (EXIT_FAILURE); - } - args_info->conf_given = 1; - args_info->conf_arg = strdup (optarg); + + + if (update_arg( (void *)&(args_info->conf_arg), + &(args_info->conf_orig), &(args_info->conf_given), + &(local_args_info.conf_given), optarg, 0, "/etc/ganglia/gmetad.conf", ARG_STRING, + check_ambiguity, override, 0, 0, + "conf", 'c', + additional_error)) + goto failure; + break; - case 'd': /* Debug level. If greater than zero, daemon will stay in foreground.. */ - if (args_info->debug_given) - { - fprintf (stderr, "%s: '--debug' ('-d') option given more than once\n", PACKAGE); - clear_args (); - exit (EXIT_FAILURE); - } - args_info->debug_given = 1; - args_info->debug_arg = atoi (optarg); + + + if (update_arg( (void *)&(args_info->debug_arg), + &(args_info->debug_orig), &(args_info->debug_given), + &(local_args_info.debug_given), optarg, 0, "0", ARG_INT, + check_ambiguity, override, 0, 0, + "debug", 'd', + additional_error)) + goto failure; + break; + case 'p': /* Write process-id to file. */ + + + if (update_arg( (void *)&(args_info->pid_file_arg), + &(args_info->pid_file_orig), &(args_info->pid_file_given), + &(local_args_info.pid_file_given), optarg, 0, 0, ARG_STRING, + check_ambiguity, override, 0, 0, + "pid-file", 'p', + additional_error)) + goto failure; + + break; - case 'p': /* store this process's pid to a file */ - - if (args_info->pid_file_given) - { - fprintf (stderr, "%s: '--pid-file' ('-p') option given more than once\n", PACKAGE); - clear_args (); - exit (EXIT_FAILURE); - } - args_info->pid_file_given = 1; - args_info->pid_file_arg = strdup (optarg); - break; - case 0: /* Long option with no short option */ - case '?': /* Invalid option. */ - /* 'getopt_long' already printed an error message. */ - exit (EXIT_FAILURE); + /* `getopt_long' already printed an error message. */ + goto failure; default: /* bug: option not considered. */ - fprintf (stderr, "%s: option unknown: %c\n", PACKAGE, c); + fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : "")); abort (); } /* switch */ } /* while */ - if ( missing_required_options ) - exit (EXIT_FAILURE); + + + cmdline_parser_release (&local_args_info); + + if ( error ) + return (EXIT_FAILURE); + return 0; + +failure: + + cmdline_parser_release (&local_args_info); + return (EXIT_FAILURE); } Modified: trunk/monitor-core/gmetad/cmdline.h =================================================================== --- trunk/monitor-core/gmetad/cmdline.h 2008-03-27 05:47:25 UTC (rev 1129) +++ trunk/monitor-core/gmetad/cmdline.h 2008-03-27 06:47:32 UTC (rev 1130) @@ -1,43 +1,178 @@ -/* cmdline.h */ +/** @file cmdline.h + * @brief The header file for the command line option parser + * generated by GNU Gengetopt version 2.22 + * http://www.gnu.org/software/gengetopt. + * DO NOT modify this file, since it can be overwritten + * @author GNU Gengetopt by Lorenzo Bettini */ -/* File autogenerated by gengetopt version 2.7.1 */ +#ifndef CMDLINE_H +#define CMDLINE_H -#ifndef _cmdline_h -#define _cmdline_h +/* If we use autoconf. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include <stdio.h> /* for FILE */ + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -/* Don't define PACKAGE and VERSION if we use automake. */ -#ifndef PACKAGE -#define PACKAGE "gmetad" +#ifndef CMDLINE_PARSER_PACKAGE +/** @brief the program name */ +#define CMDLINE_PARSER_PACKAGE "gmetad" #endif -#ifndef VERSION -#define VERSION "" +#ifndef CMDLINE_PARSER_VERSION +/** @brief the program version */ +#define CMDLINE_PARSER_VERSION VERSION #endif +/** @brief Where the command line options are stored */ struct gengetopt_args_info { - char * conf_arg; /* Location of gmetad configuration file (default='/etc/ganglia/gmetad.conf'). */ - int debug_arg; /* Debug level. If greater than zero, daemon will stay in foreground. (default=0). */ - char * pid_file_arg; /* file to write a pid to */ + const char *help_help; /**< @brief Print help and exit help description. */ + const char *version_help; /**< @brief Print version and exit help description. */ + char * conf_arg; /**< @brief Location of gmetad configuration file (default='/etc/ganglia/gmetad.conf'). */ + char * conf_orig; /**< @brief Location of gmetad configuration file original value given at command line. */ + const char *conf_help; /**< @brief Location of gmetad configuration file help description. */ + int debug_arg; /**< @brief Debug level. If greater than zero, daemon will stay in foreground. (default='0'). */ + char * debug_orig; /**< @brief Debug level. If greater than zero, daemon will stay in foreground. original value given at command line. */ + const char *debug_help; /**< @brief Debug level. If greater than zero, daemon will stay in foreground. help description. */ + char * pid_file_arg; /**< @brief Write process-id to file. */ + char * pid_file_orig; /**< @brief Write process-id to file original value given at command line. */ + const char *pid_file_help; /**< @brief Write process-id to file help description. */ + + unsigned int help_given ; /**< @brief Whether help was given. */ + unsigned int version_given ; /**< @brief Whether version was given. */ + unsigned int conf_given ; /**< @brief Whether conf was given. */ + unsigned int debug_given ; /**< @brief Whether debug was given. */ + unsigned int pid_file_given ; /**< @brief Whether pid-file was given. */ - int help_given ; /* Whether help was given. */ - int version_given ; /* Whether version was given. */ - int conf_given ; /* Whether conf was given. */ - int debug_given ; /* Whether debug was given. */ - int pid_file_given ; /* Whether a file for writing a pid to was given. */ +} ; +/** @brief The additional parameters to pass to parser functions */ +struct cmdline_parser_params +{ + int override; /**< @brief whether to override possibly already present options (default 0) */ + int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */ + int check_required; /**< @brief whether to check that all required options were provided (default 1) */ + int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */ + int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */ } ; -int cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info); +/** @brief the purpose string of the program */ +extern const char *gengetopt_args_info_purpose; +/** @brief the usage string of the program */ +extern const char *gengetopt_args_info_usage; +/** @brief all the lines making the help output */ +extern const char *gengetopt_args_info_help[]; +/** + * The command line parser + * @param argc the number of command line options + * @param argv the command line options + * @param args_info the structure where option information will be stored + * @return 0 if everything went fine, NON 0 if an error took place + */ +int cmdline_parser (int argc, char * const *argv, + struct gengetopt_args_info *args_info); + +/** + * The command line parser (version with additional parameters - deprecated) + * @param argc the number of command line options + * @param argv the command line options + * @param args_info the structure where option information will be stored + * @param override whether to override possibly already present options + * @param initialize whether to initialize the option structure my_args_info + * @param check_required whether to check that all required options were provided + * @return 0 if everything went fine, NON 0 if an error took place + * @deprecated use cmdline_parser_ext() instead + */ +int cmdline_parser2 (int argc, char * const *argv, + struct gengetopt_args_info *args_info, + int override, int initialize, int check_required); + +/** + * The command line parser (version with additional parameters) + * @param argc the number of command line options + * @param argv the command line options + * @param args_info the structure where option information will be stored + * @param params additional parameters for the parser + * @return 0 if everything went fine, NON 0 if an error took place + */ +int cmdline_parser_ext (int argc, char * const *argv, + struct gengetopt_args_info *args_info, + struct cmdline_parser_params *params); + +/** + * Save the contents of the option struct into an already open FILE stream. + * @param outfile the stream where to dump options + * @param args_info the option struct to dump + * @return 0 if everything went fine, NON 0 if an error took place + */ +int cmdline_parser_dump(FILE *outfile, + struct gengetopt_args_info *args_info); + +/** + * Save the contents of the option struct into a (text) file. + * This file can be read by the config file parser (if generated by gengetopt) + * @param filename the file where to save + * @param args_info the option struct to save + * @return 0 if everything went fine, NON 0 if an error took place + */ +int cmdline_parser_file_save(const char *filename, + struct gengetopt_args_info *args_info); + +/** + * Print the help + */ void cmdline_parser_print_help(void); +/** + * Print the version + */ void cmdline_parser_print_version(void); +/** + * Initializes all the fields a cmdline_parser_params structure + * to their default values + * @param params the structure to initialize + */ +void cmdline_parser_params_init(struct cmdline_parser_params *params); + +/** + * Allocates dynamically a cmdline_parser_params structure and initializes + * all its fields to their default values + * @return the created and initialized cmdline_parser_params structure + */ +struct cmdline_parser_params *cmdline_parser_params_create(void); + +/** + * Initializes the passed gengetopt_args_info structure's fields + * (also set default values for options that have a default) + * @param args_info the structure to initialize + */ +void cmdline_parser_init (struct gengetopt_args_info *args_info); +/** + * Deallocates the string fields of the gengetopt_args_info structure + * (but does not deallocate the structure itself) + * @param args_info the structure to deallocate + */ +void cmdline_parser_free (struct gengetopt_args_info *args_info); + +/** + * Checks that all the required options were specified + * @param args_info the structure to check + * @param prog_name the name of the program that will be used to print + * possible errors + * @return + */ +int cmdline_parser_required (struct gengetopt_args_info *args_info, + const char *prog_name); + + #ifdef __cplusplus } #endif /* __cplusplus */ -#endif /* _cmdline_h */ +#endif /* CMDLINE_H */ Modified: trunk/monitor-core/gmetad/cmdline.sh =================================================================== --- trunk/monitor-core/gmetad/cmdline.sh 2008-03-27 05:47:25 UTC (rev 1129) +++ trunk/monitor-core/gmetad/cmdline.sh 2008-03-27 06:47:32 UTC (rev 1130) @@ -9,6 +9,7 @@ option "conf" c "Location of gmetad configuration file" string default="/etc/ganglia/gmetad.conf" no option "debug" d "Debug level. If greater than zero, daemon will stay in foreground." int default="0" no +option "pid-file" p "Write process-id to file" string no #Usage (a little tutorial) # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2008-03-28 04:34:43
|
Revision: 1142 http://ganglia.svn.sourceforge.net/ganglia/?rev=1142&view=rev Author: carenas Date: 2008-03-27 21:34:46 -0700 (Thu, 27 Mar 2008) Log Message: ----------- gmetad: simplify use of sum_finished mutex Modified Paths: -------------- trunk/monitor-core/gmetad/gmetad.c trunk/monitor-core/gmetad/gmetad.h trunk/monitor-core/gmetad/process_xml.c trunk/monitor-core/gmetad/server.c Modified: trunk/monitor-core/gmetad/gmetad.c =================================================================== --- trunk/monitor-core/gmetad/gmetad.c 2008-03-28 04:30:37 UTC (rev 1141) +++ trunk/monitor-core/gmetad/gmetad.c 2008-03-28 04:34:46 UTC (rev 1142) @@ -187,7 +187,7 @@ return 0; /* Need to be sure the source has a complete sum for its metrics. */ - pthread_mutex_lock(source->sum_finished); + pthread_mutex_lock(&source->sum_finished); /* err_msg("Doing root summary for source %s", source->ds->name); */ @@ -198,7 +198,7 @@ root.hosts_up += source->hosts_up; root.hosts_down += source->hosts_down; - pthread_mutex_unlock(source->sum_finished); + pthread_mutex_unlock(&source->sum_finished); return rc; } @@ -381,6 +381,9 @@ } debug_msg("interactive xml listening on port %d", c->interactive_port); + /* initialize summary mutex */ + pthread_mutex_init(&root.sum_finished, NULL); + pthread_attr_init( &attr ); pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED ); Modified: trunk/monitor-core/gmetad/gmetad.h =================================================================== --- trunk/monitor-core/gmetad/gmetad.h 2008-03-28 04:30:37 UTC (rev 1141) +++ trunk/monitor-core/gmetad/gmetad.h 2008-03-28 04:34:46 UTC (rev 1142) @@ -166,7 +166,7 @@ hash_t *authority; /* Null for a grid. */ short int authority_ptr; /* An authority URL. */ hash_t *metric_summary; - pthread_mutex_t *sum_finished; /* A lock held during summarization. */ + pthread_mutex_t sum_finished; /* A lock held during summarization. */ data_source_list_t *ds; uint32_t hosts_up; uint32_t hosts_down; Modified: trunk/monitor-core/gmetad/process_xml.c =================================================================== --- trunk/monitor-core/gmetad/process_xml.c 2008-03-28 04:30:37 UTC (rev 1141) +++ trunk/monitor-core/gmetad/process_xml.c 2008-03-28 04:34:46 UTC (rev 1142) @@ -207,13 +207,11 @@ source->ds = xmldata->ds; /* Initialize the partial sum lock */ - source->sum_finished = (pthread_mutex_t*) - malloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(source->sum_finished, NULL); + pthread_mutex_init(&source->sum_finished, NULL); /* Grab the "partial sum" mutex until we are finished * summarizing. */ - pthread_mutex_lock(source->sum_finished); + pthread_mutex_lock(&source->sum_finished); } else { /* Found Cluster. Put into our Source buffer in xmldata. */ @@ -224,7 +222,7 @@ /* Grab the "partial sum" mutex until we are finished * summarizing. Needs to be done asap.*/ - pthread_mutex_lock(source->sum_finished); + pthread_mutex_lock(&source->sum_finished); hash_foreach(source->metric_summary, zero_out_summary, NULL); } @@ -323,12 +321,10 @@ source->ds = xmldata->ds; /* Initialize the partial sum lock */ - source->sum_finished = (pthread_mutex_t*) - malloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(source->sum_finished, NULL); + pthread_mutex_init(&source->sum_finished, NULL); /* Grab the "partial sum" mutex until we are finished summarizing. */ - pthread_mutex_lock(source->sum_finished); + pthread_mutex_lock(&source->sum_finished); } else { @@ -339,7 +335,7 @@ source->hosts_down = 0; /* We need this lock before zeroing metric sums. */ - pthread_mutex_lock(source->sum_finished); + pthread_mutex_lock(&source->sum_finished); hash_foreach(source->metric_summary, zero_out_summary, NULL); } @@ -1057,7 +1053,7 @@ summary = xmldata->source.metric_summary; /* Release the partial sum mutex */ - pthread_mutex_unlock(source->sum_finished); + pthread_mutex_unlock(&source->sum_finished); /*err_msg("%s releasing lock", xmldata->sourcename);*/ hashkey.data = (void*) xmldata->sourcename; @@ -1069,7 +1065,6 @@ /* We insert here to get an accurate hosts up/down value. */ rdatum = hash_insert( &hashkey, &hashval, xmldata->root); - source->sum_finished = NULL; /* remember that we released the lock */ if (!rdatum) { err_msg("Could not insert source %s", xmldata->sourcename); return 1; @@ -1145,14 +1140,6 @@ xmldata.rval = 1; } - /* Release lock again for good measure (required under certain errors). */ - if (xmldata.source.sum_finished) - { - rval = pthread_mutex_unlock(xmldata.source.sum_finished); - if (rval!=0) - err_msg("Could not release summary lock for %s", d->name); - } - /* Free memory that might have been allocated in xmldata */ if (xmldata.sourcename) free(xmldata.sourcename); Modified: trunk/monitor-core/gmetad/server.c =================================================================== --- trunk/monitor-core/gmetad/server.c 2008-03-28 04:30:37 UTC (rev 1141) +++ trunk/monitor-core/gmetad/server.c 2008-03-28 04:34:46 UTC (rev 1142) @@ -107,7 +107,11 @@ source->hosts_up, source->hosts_down); if (rc) return 1; - return hash_foreach(source->metric_summary, metric_summary, (void*) client); + pthread_mutex_lock(&source->sum_finished); + rc = hash_foreach(source->metric_summary, metric_summary, (void*) client); + pthread_mutex_unlock(&source->sum_finished); + + return rc; } @@ -267,7 +271,6 @@ return 0; } - int applyfilter(client_t *client, Generic_t *node) { @@ -286,16 +289,8 @@ return 0; case SUMMARY: + return source_summary((Source_t*) node, client); -/* use the mutex to avoid reporting incomplete sums -twitham (bug#76) */ - pthread_mutex_lock(((Source_t*)node)->sum_finished); - - int i = source_summary((Source_t*) node, client); - - pthread_mutex_unlock(((Source_t*)node)->sum_finished); - - return i; - default: break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2008-03-29 07:38:02
|
Revision: 1154 http://ganglia.svn.sourceforge.net/ganglia/?rev=1154&view=rev Author: carenas Date: 2008-03-29 00:38:07 -0700 (Sat, 29 Mar 2008) Log Message: ----------- gmetad: complete fix for bug76, including refactoring sum_finished Modified Paths: -------------- trunk/monitor-core/gmetad/gmetad.c trunk/monitor-core/gmetad/gmetad.h trunk/monitor-core/gmetad/process_xml.c trunk/monitor-core/gmetad/server.c Modified: trunk/monitor-core/gmetad/gmetad.c =================================================================== --- trunk/monitor-core/gmetad/gmetad.c 2008-03-29 06:23:15 UTC (rev 1153) +++ trunk/monitor-core/gmetad/gmetad.c 2008-03-29 07:38:07 UTC (rev 1154) @@ -187,7 +187,7 @@ return 0; /* Need to be sure the source has a complete sum for its metrics. */ - pthread_mutex_lock(&source->sum_finished); + pthread_mutex_lock(source->sum_finished); /* We know that all these metrics are numeric. */ rc = hash_foreach(source->metric_summary, sum_metrics, arg); @@ -197,7 +197,7 @@ root.hosts_down += source->hosts_down; /* summary completed for source */ - pthread_mutex_unlock(&source->sum_finished); + pthread_mutex_unlock(source->sum_finished); return rc; } @@ -381,7 +381,9 @@ debug_msg("interactive xml listening on port %d", c->interactive_port); /* initialize summary mutex */ - pthread_mutex_init(&root.sum_finished, NULL); + root.sum_finished = (pthread_mutex_t *) + malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(root.sum_finished, NULL); pthread_attr_init( &attr ); pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED ); @@ -408,7 +410,7 @@ sleep(sleep_time); /* Need to be sure root is locked while doing summary */ - pthread_mutex_lock(&root.sum_finished); + pthread_mutex_lock(root.sum_finished); /* Flush the old values */ hash_foreach(root.metric_summary, zero_out_summary, NULL); @@ -419,7 +421,7 @@ hash_foreach(root.authority, do_root_summary, NULL ); /* summary completed */ - pthread_mutex_unlock(&root.sum_finished); + pthread_mutex_unlock(root.sum_finished); /* Save them to RRD */ hash_foreach(root.metric_summary, write_root_summary, NULL); Modified: trunk/monitor-core/gmetad/gmetad.h =================================================================== --- trunk/monitor-core/gmetad/gmetad.h 2008-03-29 06:23:15 UTC (rev 1153) +++ trunk/monitor-core/gmetad/gmetad.h 2008-03-29 07:38:07 UTC (rev 1154) @@ -166,7 +166,7 @@ hash_t *authority; /* Null for a grid. */ short int authority_ptr; /* An authority URL. */ hash_t *metric_summary; - pthread_mutex_t sum_finished; /* A lock held during summarization. */ + pthread_mutex_t *sum_finished; /* A lock held during summarization. */ data_source_list_t *ds; uint32_t hosts_up; uint32_t hosts_down; Modified: trunk/monitor-core/gmetad/process_xml.c =================================================================== --- trunk/monitor-core/gmetad/process_xml.c 2008-03-29 06:23:15 UTC (rev 1153) +++ trunk/monitor-core/gmetad/process_xml.c 2008-03-29 07:38:07 UTC (rev 1154) @@ -206,23 +206,26 @@ source->ds = xmldata->ds; /* Initialize the partial sum lock */ - pthread_mutex_init(&source->sum_finished, NULL); + source->sum_finished = (pthread_mutex_t *) + malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(source->sum_finished, NULL); /* Grab the "partial sum" mutex until we are finished * summarizing. */ - pthread_mutex_lock(&source->sum_finished); + pthread_mutex_lock(source->sum_finished); } else { /* Found Cluster. Put into our Source buffer in xmldata. */ memcpy(source, hash_datum->data, hash_datum->size); datum_free(hash_datum); - source->hosts_up = 0; - source->hosts_down = 0; /* Grab the "partial sum" mutex until we are finished * summarizing. Needs to be done asap.*/ - pthread_mutex_lock(&source->sum_finished); + pthread_mutex_lock(source->sum_finished); + source->hosts_up = 0; + source->hosts_down = 0; + hash_foreach(source->metric_summary, zero_out_summary, NULL); } @@ -320,22 +323,24 @@ source->ds = xmldata->ds; /* Initialize the partial sum lock */ - pthread_mutex_init(&source->sum_finished, NULL); + source->sum_finished = (pthread_mutex_t *) + malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(source->sum_finished, NULL); /* Grab the "partial sum" mutex until we are finished summarizing. */ - pthread_mutex_lock(&source->sum_finished); + pthread_mutex_lock(source->sum_finished); } else { memcpy(source, hash_datum->data, hash_datum->size); datum_free(hash_datum); + /* We need this lock before zeroing metric sums. */ + pthread_mutex_lock(source->sum_finished); + source->hosts_up = 0; source->hosts_down = 0; - /* We need this lock before zeroing metric sums. */ - pthread_mutex_lock(&source->sum_finished); - hash_foreach(source->metric_summary, zero_out_summary, NULL); } @@ -1026,7 +1031,11 @@ endElement_GRID(void *data, const char *el) { xmldata_t *xmldata = (xmldata_t *) data; + Source_t *source = &xmldata->source; + /*release the partial sum mutex */ + pthread_mutex_unlock(&source->sum_finished); + if (gmetad_config.scalable_mode) { xmldata->grid_depth--; @@ -1052,7 +1061,7 @@ summary = xmldata->source.metric_summary; /* Release the partial sum mutex */ - pthread_mutex_unlock(&source->sum_finished); + pthread_mutex_unlock(source->sum_finished); /*err_msg("%s releasing lock", xmldata->sourcename);*/ hashkey.data = (void*) xmldata->sourcename; Modified: trunk/monitor-core/gmetad/server.c =================================================================== --- trunk/monitor-core/gmetad/server.c 2008-03-29 06:23:15 UTC (rev 1153) +++ trunk/monitor-core/gmetad/server.c 2008-03-29 07:38:07 UTC (rev 1154) @@ -107,9 +107,13 @@ source->hosts_up, source->hosts_down); if (rc) return 1; - pthread_mutex_lock(&source->sum_finished); - rc = hash_foreach(source->metric_summary, metric_summary, (void*) client); - pthread_mutex_unlock(&source->sum_finished); + pthread_mutex_unlock(root.sum_finished); + if (source->ds) { + pthread_mutex_lock(source->sum_finished); + rc = hash_foreach(source->metric_summary, metric_summary, (void*) client); + pthread_mutex_unlock(source->sum_finished); + } + pthread_mutex_unlock(root.sum_finished); return rc; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2008-04-13 07:48:34
|
Revision: 1233 http://ganglia.svn.sourceforge.net/ganglia/?rev=1233&view=rev Author: carenas Date: 2008-04-13 00:48:32 -0700 (Sun, 13 Apr 2008) Log Message: ----------- gmetad: tab cleanup Modified Paths: -------------- trunk/monitor-core/gmetad/cleanup.c trunk/monitor-core/gmetad/data_thread.c trunk/monitor-core/gmetad/gmetad.c trunk/monitor-core/gmetad/process_xml.c trunk/monitor-core/gmetad/rrd_helpers.c trunk/monitor-core/gmetad/rrd_helpers.h trunk/monitor-core/gmetad/server.c Modified: trunk/monitor-core/gmetad/cleanup.c =================================================================== --- trunk/monitor-core/gmetad/cleanup.c 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/cleanup.c 2008-04-13 07:48:32 UTC (rev 1233) @@ -147,8 +147,8 @@ /* Our "authority" is a list of children hash tables, NULL for * a grid. */ if (!source->authority) - return 0; - + return 0; + /* Clean up hosts */ cleanup.tv = tv; cleanup.key = 0; @@ -206,7 +206,7 @@ source = (Source_t *) cleanup.val->data; hash_destroy(source->metric_summary); if (source->authority) - hash_destroy(source->authority); + hash_destroy(source->authority); cleanup.hashval = hashval(cleanup.key, root.authority); rv=hash_delete(cleanup.key, root.authority); Modified: trunk/monitor-core/gmetad/data_thread.c =================================================================== --- trunk/monitor-core/gmetad/data_thread.c 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/data_thread.c 2008-04-13 07:48:32 UTC (rev 1233) @@ -51,14 +51,14 @@ for (;;) { gettimeofday(&start, NULL); - sock = NULL; - - /* If we successfully read from a good data source last time then try the same host again first. */ - if(d->last_good_index >= 0) - sock = g_tcp_socket_new ( d->sources[d->last_good_index] ); + sock = NULL; + + /* If we successfully read from a good data source last time then try the same host again first. */ + if(d->last_good_index >= 0) + sock = g_tcp_socket_new ( d->sources[d->last_good_index] ); - /* If there was no good connection last time or the above connect failed then try each host in the list. */ - if(!sock) + /* If there was no good connection last time or the above connect failed then try each host in the list. */ + if(!sock) { for(i=0; i < d->num_sources; i++) { Modified: trunk/monitor-core/gmetad/gmetad.c =================================================================== --- trunk/monitor-core/gmetad/gmetad.c 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/gmetad.c 2008-04-13 07:48:32 UTC (rev 1233) @@ -90,20 +90,20 @@ int addstring(char *strings, int *edge, const char *s) { - int e = *edge; - int end = e + strlen(s) + 1; + int e = *edge; + int end = e + strlen(s) + 1; - /* I wish C had real exceptions. */ - if (e > GMETAD_FRAMESIZE || end > GMETAD_FRAMESIZE) - { - err_msg("Field is too big!!"); - return -1; - } + /* I wish C had real exceptions. */ + if (e > GMETAD_FRAMESIZE || end > GMETAD_FRAMESIZE) + { + err_msg("Field is too big!!"); + return -1; + } - strcpy(strings + e, s); - *edge = end; + strcpy(strings + e, s); + *edge = end; - return e; + return e; } @@ -422,7 +422,7 @@ /* Sum the new values */ hash_foreach(root.authority, do_root_summary, NULL ); - /* summary completed */ + /* summary completed */ pthread_mutex_unlock(root.sum_finished); /* Save them to RRD */ Modified: trunk/monitor-core/gmetad/process_xml.c =================================================================== --- trunk/monitor-core/gmetad/process_xml.c 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/process_xml.c 2008-04-13 07:48:32 UTC (rev 1233) @@ -987,9 +987,9 @@ rc = startElement_EXTRA_DATA(data, el, attr); break; - case EXTRA_ELEMENT_TAG: - rc = startElement_EXTRA_ELEMENT(data, el, attr); - break; + case EXTRA_ELEMENT_TAG: + rc = startElement_EXTRA_ELEMENT(data, el, attr); + break; default: break; Modified: trunk/monitor-core/gmetad/rrd_helpers.c =================================================================== --- trunk/monitor-core/gmetad/rrd_helpers.c 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/rrd_helpers.c 2008-04-13 07:48:32 UTC (rev 1233) @@ -25,7 +25,7 @@ pthread_mutex_lock( &rrd_mutex ); if ( mkdir ( dir, 0755 ) < 0 && errno != EEXIST) { - pthread_mutex_unlock(&rrd_mutex); + pthread_mutex_unlock(&rrd_mutex); err_sys("Unable to mkdir(%s)",dir); } pthread_mutex_unlock( &rrd_mutex ); @@ -66,8 +66,8 @@ /* Warning: RRD_create will overwrite a RRdb if it already exists */ static int -RRD_create( char *rrd, int summary, unsigned int step, unsigned int process_time, - ganglia_slope_t slope) +RRD_create( char *rrd, int summary, unsigned int step, + unsigned int process_time, ganglia_slope_t slope) { const char *data_source_type = "GAUGE"; char *argv[128]; @@ -103,13 +103,13 @@ sprintf(start, "%u", process_time-1); argv[argc++] = start; sprintf(sum,"DS:sum:%s:%d:U:U", - data_source_type, - heartbeat); + data_source_type, + heartbeat); argv[argc++] = sum; if (summary) { sprintf(num,"DS:num:%s:%d:U:U", - data_source_type, - heartbeat); + data_source_type, + heartbeat); argv[argc++] = num; } @@ -145,9 +145,9 @@ /* A summary RRD has a "num" and a "sum" DS (datasource) whereas the host rrds only have "sum" (since num is always 1) */ static int -push_data_to_rrd( char *rrd, const char *sum, const char *num, - unsigned int step, unsigned int process_time, - ganglia_slope_t slope) +push_data_to_rrd( char *rrd, const char *sum, const char *num, + unsigned int step, unsigned int process_time, + ganglia_slope_t slope) { int rval; int summary; @@ -174,8 +174,8 @@ /* Assumes num argument will be NULL for a host RRD. */ int write_data_to_rrd ( const char *source, const char *host, const char *metric, - const char *sum, const char *num, unsigned int step, - unsigned int process_time, ganglia_slope_t slope) + const char *sum, const char *num, unsigned int step, + unsigned int process_time, ganglia_slope_t slope) { char rrd[ PATHSIZE ]; char *summary_dir = "__SummaryInfo__"; Modified: trunk/monitor-core/gmetad/rrd_helpers.h =================================================================== --- trunk/monitor-core/gmetad/rrd_helpers.h 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/rrd_helpers.h 2008-04-13 07:48:32 UTC (rev 1233) @@ -1,7 +1,6 @@ - #include "ganglia.h" int write_data_to_rrd ( const char *source, const char *host, const char *metric, - const char *sum, const char *num, unsigned int step, - unsigned int process_time, ganglia_slope_t slope); + const char *sum, const char *num, unsigned int step, + unsigned int process_time, ganglia_slope_t slope); Modified: trunk/monitor-core/gmetad/server.c =================================================================== --- trunk/monitor-core/gmetad/server.c 2008-04-11 22:15:40 UTC (rev 1232) +++ trunk/monitor-core/gmetad/server.c 2008-04-13 07:48:32 UTC (rev 1233) @@ -303,7 +303,7 @@ return 0; case SUMMARY: - return source_summary((Source_t*) node, client); + return source_summary((Source_t*) node, client); default: break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2008-04-21 18:31:58
|
Revision: 1272 http://ganglia.svn.sourceforge.net/ganglia/?rev=1272&view=rev Author: carenas Date: 2008-04-21 11:30:54 -0700 (Mon, 21 Apr 2008) Log Message: ----------- gmetad-python: set default for GridName to "unspecified" Modified Paths: -------------- trunk/monitor-core/gmetad/gmetad.conf trunk/monitor-core/gmetad-python/gmetad_config.py Modified: trunk/monitor-core/gmetad/gmetad.conf =================================================================== --- trunk/monitor-core/gmetad/gmetad.conf 2008-04-21 18:12:10 UTC (rev 1271) +++ trunk/monitor-core/gmetad/gmetad.conf 2008-04-21 18:30:54 UTC (rev 1272) @@ -59,7 +59,7 @@ #------------------------------------------------------------------------------- # The name of this Grid. All the data sources above will be wrapped in a GRID # tag with this name. -# default: Unspecified +# default: unspecified # gridname "MyGrid" # #------------------------------------------------------------------------------- Modified: trunk/monitor-core/gmetad-python/gmetad_config.py =================================================================== --- trunk/monitor-core/gmetad-python/gmetad_config.py 2008-04-21 18:12:10 UTC (rev 1271) +++ trunk/monitor-core/gmetad-python/gmetad_config.py 2008-04-21 18:30:54 UTC (rev 1272) @@ -49,7 +49,7 @@ GmetadRRA('AVERAGE:0.5:5760:374') ], SCALABLE : True, - GRIDNAME : '', + GRIDNAME : 'unspecified', AUTHORITY : 'http://%s/ganglia/' % getfqdn(), TRUSTED_HOSTS : [], ALL_TRUSTED : False, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2008-06-30 19:45:45
|
Revision: 1476 http://ganglia.svn.sourceforge.net/ganglia/?rev=1476&view=rev Author: carenas Date: 2008-06-30 12:45:53 -0700 (Mon, 30 Jun 2008) Log Message: ----------- gmetad: normalize build instructions for gperf generated files removes the obsoleted build_*_hash scripts and add instead makefile rules with the right parameters so they can be re-generated as needed Modified Paths: -------------- trunk/monitor-core/gmetad/Makefile.am trunk/monitor-core/gmetad/type_hash.c trunk/monitor-core/gmetad/xml_hash.c Removed Paths: ------------- trunk/monitor-core/gmetad/build_type_hash trunk/monitor-core/gmetad/build_xml_hash Modified: trunk/monitor-core/gmetad/Makefile.am =================================================================== --- trunk/monitor-core/gmetad/Makefile.am 2008-06-30 12:10:43 UTC (rev 1475) +++ trunk/monitor-core/gmetad/Makefile.am 2008-06-30 19:45:53 UTC (rev 1476) @@ -20,3 +20,9 @@ gmetad_LDFLAGS = $(GLDFLAGS) EXTRA_DIST = gmetad.aix.init gmetad.conf gmetad.init gmetad.init.SuSE + +xml_hash.c: xml_hash.gperf + @gperf -l -H xml_hash -t -F ', 0' -N in_xml_list -k '1,$$' -W xml_tags xml_hash.gperf > xml_hash.c + +type_hash.c: type_hash.gperf + @gperf -G -l -H type_hash -t -F ', 0' -N in_type_list -k '1,$$' -W types type_hash.gperf > type_hash.c Deleted: trunk/monitor-core/gmetad/build_type_hash =================================================================== --- trunk/monitor-core/gmetad/build_type_hash 2008-06-30 12:10:43 UTC (rev 1475) +++ trunk/monitor-core/gmetad/build_type_hash 2008-06-30 19:45:53 UTC (rev 1476) @@ -1,2 +0,0 @@ -#!/bin/sh -gperf -G -l -H type_hash -t -F ', 0' -N in_type_list -k 1,$ * -W types ./type_hash.gperf > type_hash.c Deleted: trunk/monitor-core/gmetad/build_xml_hash =================================================================== --- trunk/monitor-core/gmetad/build_xml_hash 2008-06-30 12:10:43 UTC (rev 1475) +++ trunk/monitor-core/gmetad/build_xml_hash 2008-06-30 19:45:53 UTC (rev 1476) @@ -1,2 +0,0 @@ -#!/bin/sh -gperf -l -H xml_hash -t -F ', 0' -N in_xml_list -k 1,$ -W xml_tags ./xml_hash.gperf > xml_hash.c Modified: trunk/monitor-core/gmetad/type_hash.c =================================================================== --- trunk/monitor-core/gmetad/type_hash.c 2008-06-30 12:10:43 UTC (rev 1475) +++ trunk/monitor-core/gmetad/type_hash.c 2008-06-30 19:45:53 UTC (rev 1476) @@ -1,5 +1,5 @@ /* C code produced by gperf version 3.0.3 */ -/* Command-line: gperf -G -l -H type_hash -t -F ', 0' -N in_type_list -k '1,$' -W types ./type_hash.gperf */ +/* Command-line: gperf -G -l -H type_hash -t -F ', 0' -N in_type_list -k '1,$' -W types type_hash.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -28,7 +28,7 @@ error "gperf generated tables don't work with this execution character set. Please report a bug to <bug...@gn...>." #endif -#line 1 "./type_hash.gperf" +#line 1 "type_hash.gperf" /* $Id$ */ /* Recognizes metric types. @@ -36,7 +36,7 @@ * -W types ./type_hash.gperf > type_hash.c */ #include <gmetad.h> -#line 9 "./type_hash.gperf" +#line 9 "type_hash.gperf" struct type_tag; #define TOTAL_KEYWORDS 10 @@ -99,28 +99,28 @@ static struct type_tag types[] = { {"", 0}, {"", 0}, {"", 0}, {"", 0}, -#line 11 "./type_hash.gperf" +#line 11 "type_hash.gperf" {"int8", INT}, -#line 12 "./type_hash.gperf" +#line 12 "type_hash.gperf" {"uint8", UINT}, -#line 20 "./type_hash.gperf" +#line 20 "type_hash.gperf" {"string", STRING}, {"", 0}, {"", 0}, -#line 19 "./type_hash.gperf" +#line 19 "type_hash.gperf" {"timestamp", TIMESTAMP}, -#line 13 "./type_hash.gperf" +#line 13 "type_hash.gperf" {"int16", INT}, -#line 14 "./type_hash.gperf" +#line 14 "type_hash.gperf" {"uint16", UINT}, {"", 0}, {"", 0}, {"", 0}, -#line 15 "./type_hash.gperf" +#line 15 "type_hash.gperf" {"int32", INT}, -#line 16 "./type_hash.gperf" +#line 16 "type_hash.gperf" {"uint32", UINT}, {"", 0}, {"", 0}, {"", 0}, -#line 17 "./type_hash.gperf" +#line 17 "type_hash.gperf" {"float", FLOAT}, -#line 18 "./type_hash.gperf" +#line 18 "type_hash.gperf" {"double", FLOAT} }; Modified: trunk/monitor-core/gmetad/xml_hash.c =================================================================== --- trunk/monitor-core/gmetad/xml_hash.c 2008-06-30 12:10:43 UTC (rev 1475) +++ trunk/monitor-core/gmetad/xml_hash.c 2008-06-30 19:45:53 UTC (rev 1476) @@ -1,5 +1,5 @@ /* C code produced by gperf version 3.0.3 */ -/* Command-line: gperf -l -H xml_hash -t -F ', 0' -N in_xml_list -k '1,$' -W xml_tags ./xml_hash.gperf */ +/* Command-line: gperf -l -H xml_hash -t -F ', 0' -N in_xml_list -k '1,$' -W xml_tags xml_hash.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -28,11 +28,11 @@ error "gperf generated tables don't work with this execution character set. Please report a bug to <bug...@gn...>." #endif -#line 1 "./xml_hash.gperf" +#line 1 "xml_hash.gperf" /* $Id$ */ #include <gmetad.h> -#line 5 "./xml_hash.gperf" +#line 5 "xml_hash.gperf" struct xml_tag; #define TOTAL_KEYWORDS 32 @@ -107,75 +107,75 @@ static struct xml_tag xml_tags[] = { {"", 0}, {"", 0}, {"", 0}, -#line 33 "./xml_hash.gperf" +#line 33 "xml_hash.gperf" {"VAL", VAL_TAG}, -#line 34 "./xml_hash.gperf" +#line 34 "xml_hash.gperf" {"TYPE", TYPE_TAG}, -#line 35 "./xml_hash.gperf" +#line 35 "xml_hash.gperf" {"SLOPE", SLOPE_TAG}, -#line 36 "./xml_hash.gperf" +#line 36 "xml_hash.gperf" {"SOURCE", SOURCE_TAG}, -#line 15 "./xml_hash.gperf" +#line 15 "xml_hash.gperf" {"LATLONG", LATLONG_TAG,}, -#line 16 "./xml_hash.gperf" +#line 16 "xml_hash.gperf" {"URL", URL_TAG,}, -#line 13 "./xml_hash.gperf" +#line 13 "xml_hash.gperf" {"LOCALTIME", LOCALTIME_TAG}, -#line 29 "./xml_hash.gperf" +#line 29 "xml_hash.gperf" {"UNITS", UNITS_TAG}, -#line 7 "./xml_hash.gperf" +#line 7 "xml_hash.gperf" {"GANGLIA_XML", GANGLIA_XML_TAG}, -#line 30 "./xml_hash.gperf" +#line 30 "xml_hash.gperf" {"TN", TN_TAG}, -#line 38 "./xml_hash.gperf" +#line 38 "xml_hash.gperf" {"EXTRA_ELEMENT", EXTRA_ELEMENT_TAG}, -#line 10 "./xml_hash.gperf" +#line 10 "xml_hash.gperf" {"NAME", NAME_TAG}, -#line 37 "./xml_hash.gperf" +#line 37 "xml_hash.gperf" {"EXTRA_DATA", EXTRA_DATA_TAG}, {"", 0}, -#line 8 "./xml_hash.gperf" +#line 8 "xml_hash.gperf" {"VERSION", VERSION_TAG}, -#line 22 "./xml_hash.gperf" +#line 22 "xml_hash.gperf" {"LOCATION", LOCATION_TAG}, -#line 9 "./xml_hash.gperf" +#line 9 "xml_hash.gperf" {"GRID", GRID_TAG}, -#line 14 "./xml_hash.gperf" +#line 14 "xml_hash.gperf" {"OWNER", OWNER_TAG,}, {"", 0}, -#line 12 "./xml_hash.gperf" +#line 12 "xml_hash.gperf" {"CLUSTER", CLUSTER_TAG}, -#line 27 "./xml_hash.gperf" +#line 27 "xml_hash.gperf" {"SUM", SUM_TAG,}, -#line 31 "./xml_hash.gperf" +#line 31 "xml_hash.gperf" {"TMAX", TMAX_TAG}, {"", 0}, -#line 25 "./xml_hash.gperf" +#line 25 "xml_hash.gperf" {"METRIC", METRIC_TAG}, -#line 26 "./xml_hash.gperf" +#line 26 "xml_hash.gperf" {"METRICS", METRICS_TAG}, -#line 24 "./xml_hash.gperf" +#line 24 "xml_hash.gperf" {"GMOND_STARTED", STARTED_TAG}, -#line 20 "./xml_hash.gperf" +#line 20 "xml_hash.gperf" {"DOWN", DOWN_TAG,}, {"", 0}, {"", 0}, -#line 19 "./xml_hash.gperf" +#line 19 "xml_hash.gperf" {"UP", UP_TAG,}, -#line 28 "./xml_hash.gperf" +#line 28 "xml_hash.gperf" {"NUM", NUM_TAG,}, -#line 17 "./xml_hash.gperf" +#line 17 "xml_hash.gperf" {"HOST", HOST_TAG}, -#line 18 "./xml_hash.gperf" +#line 18 "xml_hash.gperf" {"HOSTS", HOSTS_TAG,}, {"", 0}, -#line 21 "./xml_hash.gperf" +#line 21 "xml_hash.gperf" {"IP", IP_TAG}, -#line 23 "./xml_hash.gperf" +#line 23 "xml_hash.gperf" {"REPORTED", REPORTED_TAG}, -#line 32 "./xml_hash.gperf" +#line 32 "xml_hash.gperf" {"DMAX", DMAX_TAG}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, -#line 11 "./xml_hash.gperf" +#line 11 "xml_hash.gperf" {"AUTHORITY", AUTHORITY_TAG} }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |