# # Concurrent Streams (Wowza) snapon # # This snapon calculates the number of concurrent streams in a Wowza log file # concurrent_streams_wowza = { version = "1.2" # 2012-06-11 - GMF - 1.0 - Initial creation # 2012-06-12 - GMF - 1.1 - Added per-resource tracking # 2013-05-06 - GMF - 1.2 - Grouped parameters UI into two pages; added pre-resource fields to UI. label = "$lang_admin.snapons.concurrent_streams_wowza.label" comment = "$lang_admin.snapons.concurrent_streams_wowza.comment" config_snapon_category = "" parameters = { date_time_field = { parameter_value = "date_time" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.date_time_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # date_time_field x_category_field = { parameter_value = "x_category" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_category_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # x_category_field x_event_field = { parameter_value = "x_event" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_event_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # x_event_field x_category_start_value = { parameter_value = "stream" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_category_start_value.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # x_category_start_value x_category_end_value = { parameter_value = "stream" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_category_end_value.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # x_category_end_value x_category_end_value = { parameter_value = "stream" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_category_end_value.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # x_category_end_value x_event_start_value = { parameter_value = "create" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_event_start_value.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # x_event_start_value x_event_end_value = { parameter_value = "destroy" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_event_end_value.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # x_event_end_value x_event_end_value2 = { parameter_value = "destroy" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.x_event_end_value2.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # x_event_end_value2 concurrent_streams_name = { parameter_value = "Concurrent streams" # LM final_node_name = "session_entrances" validation_type = "field_label" validate_field_label_for = { database_fields = true report_fields = true } form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.concurrent_streams_name.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # concurrent_streams_name track_per_resource = { parameter_value = "false" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.track_per_resource.form_element_label" form_element_type = "checkbox" description = "" } # track_per_resource resource_field = { parameter_value = "page" validation_type = "string" form_element_label = "$lang_admin.snapons.concurrent_streams_wowza.parameters.resource_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # resource_field } # parameters parameters_form = { group_1 = { description = "$lang_admin.snapons.concurrent_streams_wowza.parameters_form.group_1.description" parameters = { date_time_field = true concurrent_streams_name = true track_per_resource = true resource_field = true } # parameters } # group 1 group_2 = { description = "$lang_admin.snapons.concurrent_streams_wowza.parameters_form.group_2.description" parameters = { x_category_field = true x_event_field = true x_category_start_value = true x_category_end_value = true x_event_start_value = true x_event_end_value = true x_event_end_value2 = true } # parameters } # group 2 } # parameters_form attach_operations = { # When attaching: Add the concurrent events database fields add_database_field = { type = "add_database_fields" fields = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { label = "{= @parameters{'concurrent_streams_name'}{'parameter_value'} =}" type = "int" derivation_method = "database_filter" aggregation_method = "max" category = "" index = "true" suppress_top = "0" suppress_bottom = "2" integer_bits = "0" } # concurrent_streams_name } # fields } # add_database_field # When attaching: add the database filter to calculate the field add_database_filter = { type = "add_database_filters" filters = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { conditions = { # Sort chronologically sort = { type = "sort" fields = { date_time = { column_name = "{= @parameters{'date_time_field'}{'parameter_value'} =}" } } # fields } # sort # This is the top-level node for concurrent streams for each resource. If we're not using resources, we use this node directly. current_streams_all_resources = { type = "variable" variable_name = "current_streams_all_resources" variable_type = "node" initial_value = "" } # current_streams_all_resources # The current_streams variable keeps track of how many events there are right now, for the current resource current_streams = { type = "variable" variable_name = "current_streams" variable_type = "node" initial_value = "" } # current_streams } # conditions # The follow expression is the code which implements the filter action expression = ` {= # Set current_streams to current_streams_all_resources for global analysis, or to a subnode of it for per-resource analysis. if (@parameters{'track_per_resource'}{'parameter_value'}) then ( 'current_streams = current_streams_all_resources{' . @parameters{'resource_field'}{'parameter_value'} . '};\n'; ); else ( 'current_streams = current_streams_all_resources;\n'; ); =} if (({= @parameters{'x_category_field'}{'parameter_value'} =} eq "{= @parameters{'x_category_start_value'}{'parameter_value'} =}") and ({= @parameters{'x_event_field'}{'parameter_value'} =} eq "{= @parameters{'x_event_start_value'}{'parameter_value'} =}")) then ( #echo("resource=" . {= @parameters{'resource_field'}{'parameter_value'} =} . "; {= @parameters{'x_category_field'}{'parameter_value'} =}=" . {= @parameters{'x_category_field'}{'parameter_value'} =} . "; {= @parameters{'x_event_field'}{'parameter_value'} =}=" . {= @parameters{'x_event_field'}{'parameter_value'} =}); @current_streams++; ); else if (({= @parameters{'x_category_field'}{'parameter_value'} =} eq "{= @parameters{'x_category_end_value'}{'parameter_value'} =}") and (({= @parameters{'x_event_field'}{'parameter_value'} =} eq "{= @parameters{'x_event_end_value'}{'parameter_value'} =}") or ({= @parameters{'x_event_field'}{'parameter_value'} =} eq "{= @parameters{'x_event_end_value2'}{'parameter_value'} =}"))) then ( @current_streams--; ); if ((@current_streams > 0) and (@current_streams < 1000000000)) then {= @parameters{'concurrent_streams_name'}{'final_node_name'} =} = @current_streams; else {= @parameters{'concurrent_streams_name'}{'final_node_name'} =} = 0; #if ({= @parameters{'track_per_resource'}{'parameter_value'} =}) then # echo("At " . {= @parameters{'date_time_field'}{'parameter_value'} =} . ", resource " . {= @parameters{'resource_field'}{'parameter_value'} =} . ", {= @parameters{'concurrent_streams_name'}{'final_node_name'} =}=" . {= @parameters{'concurrent_streams_name'}{'final_node_name'} =}); #else # echo("At " . {= @parameters{'date_time_field'}{'parameter_value'} =} . ", {= @parameters{'concurrent_streams_name'}{'final_node_name'} =}=" . {= @parameters{'concurrent_streams_name'}{'final_node_name'} =}); ` } # concurrent_streams_name } # filters } # add_sessions_database_filter # When attaching: Add the report field add_report_field = { type = "add_report_fields" fields = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { label = "{= @parameters{'concurrent_streams_name'}{'parameter_value'} =}" column_label = "" column_info = "" database_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" display_format_type = "integer" show_remainder_value = true show_average_value = true show_min_value = true show_max_value = true show_total_value = true percent_calculation = "sum" } # concurrent_streams_name } # fields } # add_report_field # When attaching: Add the report field to all xref groups add_xref_field = { type = "add_xref_fields" xref_group = "*" fields = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = "" } # fields } # add_xref_field # When attaching: Add the column to overview add_report_column_overview = { type = "add_report_element_columns" report = "overview" report_element = "overview" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns # When attaching: Add the column to the media Dashboard overview add_report_column_dashboard_overview = { type = "add_report_element_columns" report = "dashboard" report_element = "overview" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns # When attaching: Add the column to day add_report_column_day = { type = "add_report_element_columns" report = "day" report_element = "day" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns_day # When attaching: Add the column to month add_report_column_month = { type = "add_report_element_columns" report = "month" report_element = "month" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns_month # When attaching: Add the column to year add_report_column_year = { type = "add_report_element_columns" report = "year" report_element = "year" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns_year # When attaching: Add the column to hour_of_day add_report_column_hour_of_day = { type = "add_report_element_columns" report = "hour_of_day" report_element = "hour_of_day" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns_hour_of_day # When attaching: Add the column to day_of_week add_report_column_day_of_week = { type = "add_report_element_columns" report = "day_of_week" report_element = "day_of_week" columns = { "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" = { report_field = "{= @parameters{'concurrent_streams_name'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = false } # concurrent_streams_name } # columns } # add_report_columns_day_of_week } # attach_operations } # concurrent_streams_wowza