# # aggregating_field snapon # # This snapon adds an aggregating field (e.g., a summing database field) to the profile # aggregating_field = { label = "$lang_admin.snapons.aggregating_field.label" comment = "$lang_admin.snapons.aggregating_field.comment" config_snapon_category = "" version = "2.0.2" # 2012-04-07 - 2.0 - GMF - Added log_field and display_format_type parameters # 2012-07-25 - 2.0.1 - GMF - Defaulted integer_bits for bandwidth fields to 64 # 2014-04-29 - 2.0.2 - GMF - Fixed a bug where attaching this snapon manually results in an error: # Unknown variable 'volatile.new_profile_name' in expression parameters = { field_name = { parameter_value = "get_from_field_labels" validation_type = "field_label" validate_field_label_for = { database_fields = true report_fields = true } form_element_label = "$lang_admin.snapons.aggregating_field.parameters.field_name.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.field_name.description" } # field_name log_filter = { parameter_value = `` form_element_label = "$lang_admin.snapons.aggregating_field.parameters.log_filter.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.log_filter.description" # Display log_filter only when aggregation_operator is not 'unique' or 'max' or 'min' condition = "(aggregation_operator ne 'unique') and (aggregation_operator ne 'max') and (aggregation_operator ne 'min')" } # log_filter log_filter_label = { parameter_value = `` form_element_label = "$lang_admin.snapons.aggregating_field.parameters.log_filter_label.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.log_filter_label.description" # Display log_filter only when aggregation_operator is not 'unique' or 'max' or 'min' condition = "(aggregation_operator ne 'unique') and (aggregation_operator ne 'max') and (aggregation_operator ne 'min')" } # log_filter_label log_filter_comment = { parameter_value = `` form_element_label = "$lang_admin.snapons.aggregating_field.parameters.log_filter_comment.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.log_filter_comment.description" # Display log_filter only when aggregation_operator is not 'unique' or 'max' or 'min' condition = "(aggregation_operator ne 'unique') and (aggregation_operator ne 'max') and (aggregation_operator ne 'min')" } # log_filter_comment entries_field = { parameter_value = `false` form_element_label = "$lang_admin.snapons.aggregating_field.parameters.entries_field.form_element_label" form_element_type = "checkbox" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.entries_field.description" } # entries_field main_field = { parameter_value = `false` form_element_label = "$lang_admin.snapons.aggregating_field.parameters.main_field.form_element_label" form_element_type = "checkbox" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.main_field.description" } # main_field database_filter = { parameter_value = `` form_element_label = "$lang_admin.snapons.aggregating_field.parameters.database_filter.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.aggregating_field.parameters.database_filter.description" # Display log_filter only when aggregation_operator is not 'unique' or 'max' or 'min' condition = "(aggregation_operator ne 'unique') and (aggregation_operator ne 'max') and (aggregation_operator ne 'min')" } # database_filter log_field = { parameter_value = "" validation_type = "string" # Display log_filter only when aggregation_operator is not 'unique' or 'max' or 'min' condition = "(aggregation_operator ne 'unique') and (aggregation_operator ne 'max') and (aggregation_operator ne 'min')" form_element_label = "$lang_admin.snapons.aggregating_field.parameters.log_field.form_element_label" form_element_type = "select" select_options_source = "log_fields" description = "" } # log_field aggregation_operator = { parameter_value = "sum" validation_type = "string" form_element_label = "$lang_admin.snapons.aggregating_field.parameters.aggregation_operator.form_element_label" form_element_type = "select" select_options_source = "custom_fields" select_options = { sum = { option_value = "sum" label = "$lang_admin.snapons.aggregating_field.aggregation_operators.sum" } # sum max = { option_value = "max" label = "$lang_admin.snapons.aggregating_field.aggregation_operators.max" } # max min = { option_value = "min" label = "$lang_admin.snapons.aggregating_field.aggregation_operators.min" } # min unique = { option_value = "unique" label = "$lang_admin.snapons.aggregating_field.aggregation_operators.unique" } # unique } # select_options description = "$lang_admin.snapons.aggregating_field.parameters.aggregation_operator.description" } # aggregation_operator database_field_type = { parameter_value = "int" validation_type = "string" form_element_label = "$lang_admin.snapons.aggregating_field.parameters.database_field_type.form_element_label" form_element_type = "select" select_options_source = "custom_fields" select_options = { int = { option_value = "int" label = "$lang_admin.snapons.aggregating_field.database_field_type.int" } # int floatt = { option_value = "float" label = "$lang_admin.snapons.aggregating_field.database_field_type.float" } # float } # select_options description = "$lang_admin.snapons.aggregating_field.parameters.database_field_type.description" } # database_field_type integer_bits = { parameter_value = "0" validation_type = "string" form_element_label = "$lang_admin.snapons.aggregating_field.parameters.integer_bits.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # integer_bits display_format_type = { parameter_value = "integer" validation_type = "string" form_element_label = "$lang_admin.snapons.aggregating_field.parameters.display_format_type.form_element_label" form_element_type = "select" select_options_source = "custom_fields" select_options = { integer = { option_value = "integer" label = "$lang_admin.snapons.aggregating_field.display_format_type.integer" } # integer bandwidth = { option_value = "bandwidth" label = "$lang_admin.snapons.aggregating_field.display_format_type.bandwidth" } # bandwidth duration_compact = { option_value = "duration_compact" label = "$lang_admin.snapons.aggregating_field.display_format_type.duration_compact" } # duration_compact } # select_options description = "$lang_admin.snapons.aggregating_field.parameters.display_format_type.description" } # display_format_type source_field = { parameter_value = "" validation_type = "string" # Display and validate source_field parameter only when aggregation_operator requires a source field (unique, max, or min) condition = "(aggregation_operator eq 'unique') or (aggregation_operator eq 'max') or (aggregation_operator eq 'min')" form_element_label = "$lang_admin.snapons.aggregating_field.parameters.source_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # source_field } # parameters parameters_form = { group_1 = { description = "$lang_admin.snapons.aggregating_field.parameters_form.group_1.description" parameters = { field_name = true aggregation_operator = true log_filter = true database_filter = true log_field = true source_field = true display_format_type = true integer_bits = true } # parameters } # group 1 } # parameters_form attach_operations = { # When attaching: Add the log field add_log_field = { type = "add_log_fields" fields = { "{= @parameters{'field_name'}{'final_node_name'} =}" = { # Add a log field, if we're using a log filter to compute this add_in_snapon = `{= node profile; if ('volatile'?{'new_profile_name'}) then ( profile = "profiles." . volatile.new_profile_name; ); else ( profile = "profiles." . internal.profile_name; ); bool log_field_exists = profile{"log"}{"fields"}?{ @parameters{'field_name'}{'final_node_name'} }; bool log_filter_exists = @parameters{'log_filter'}{'parameter_value'} ne ''; !log_field_exists and log_filter_exists; =}` # add_in_snapon = `{= @parameters{'log_filter'}{'parameter_value'} ne '' =}` } } # fields } # add_aggregating_field_database_field # When attaching: Add the database field add_database_field = { type = "add_database_fields" fields = { "{= @parameters{'field_name'}{'final_node_name'} =}" = { derivation_method = "{= if (@parameters{'database_filter'}{'parameter_value'} ne '') then 'database_filter' else if (@parameters{'log_field'}{'parameter_value'} ne '') then 'log_field' else '' =}" type = "{= @parameters{'database_field_type'}{'parameter_value'} =}" aggregation_method = "{= @parameters{'aggregation_operator'}{'parameter_value'} =}" integer_bits = "{= if (@parameters{'display_format_type'}{'parameter_value'} eq 'bandwidth') then 64 else 0 =}" entries_field = "{= @parameters{'entries_field'}{'parameter_value'} =}" log_field = "{= if (@parameters{'source_field'}{'parameter_value'} ne '') then @parameters{'source_field'}{'parameter_value'}; else if (@parameters{'log_field'}{'parameter_value'} ne '') then @parameters{'log_field'}{'parameter_value'}; =}" } # aggregating_field } # fields } # add_database_field # When attaching: Add a log filter to set field, if specified add_log_filter = { type = "add_log_filters" filters = { "set_{= @parameters{'field_name'}{'final_node_name'} =}" = { label = `{= @parameters{'log_filter_label'}{'parameter_value'} =}` comment = `{= @parameters{'log_filter_comment'}{'parameter_value'} =}` value = `{= @parameters{'log_filter'}{'parameter_value'} =}` # Only add the log filter if log_filter has a value # add_in_snapon = `{= echo('#' . @parameters{'log_filter'}{'parameter_value'} . '#') =}` add_in_snapon = `{= @parameters{'log_filter'}{'parameter_value'} ne '' =}` } } # filters } # add_log_filter # When attaching: Add a database filter to set field, if specified add_database_filter = { type = "add_database_filters" filters = { "set_{= @parameters{'field_name'}{'final_node_name'} =}" = { label = "Set {= @parameters{'field_name'}{'final_node_name'} =}" expression = `{= @parameters{'database_filter'}{'parameter_value'} =}` # Only add the log filter if log_filter has a value add_in_snapon = `{= @parameters{'database_filter'}{'parameter_value'} ne '' =}` } } # filters } # add_database_filter # When attaching: Add the aggregating_field report field add_aggregating_field_report_field = { type = "add_report_fields" fields = { "{= @parameters{'field_name'}{'final_node_name'} =}" = { label = `{= @parameters{'field_name'}{'parameter_value'} =}` column_label = "" column_info = "" database_field = "{= @parameters{'field_name'}{'final_node_name'} =}" display_format_type = "{= @parameters{'display_format_type'}{'parameter_value'} =}" show_remainder_value = true show_average_value = true show_min_value = true show_max_value = true show_total_value = true percent_calculation = "sum" } # aggregating_field } # fields } # add_aggregating_field_report_field # When attaching: Add the aggregating_field field to all xref groups add_aggregating_field_xref_fields = { type = "add_xref_fields" xref_group = "*" fields = { "{= @parameters{'field_name'}{'final_node_name'} =}" = "aggregating_field" } # fields } # add_aggregating_field_xref_fields # When attaching: Add the aggregating_field column to all report elements add_aggregating_field_report_column = { type = "add_report_element_columns" report = "*" report_element = "*" columns = { "{= @parameters{'field_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'field_name'}{'final_node_name'} =}" show_column = true show_percent_column = "{= @parameters{'main_field'}{'parameter_value'} =}" show_bar_column = "{= @parameters{'main_field'}{'parameter_value'} =}" show_graph = "{= @parameters{'main_field'}{'parameter_value'} =}" } # aggregating_field } # columns } # add_aggregating_field_report_column } # attach_operations } # aggregating_field