# Copyright (c) 2010 Flowerfire, Inc. All Rights Reserved. vbrick_ethernetv_portal_server = { plugin_version = "1.0" info.1.manufacturer = "VBrick" info.1.device = "EtherneTV Portal Server" info.1.version = "" # 2007-08-06 - 1.0 - KBB - Initial creation # The name of the log format log.format.format_label = "VBrick EtherneTV Portal Server Log Format" log.miscellaneous.log_data_type = "generic_w3c" log.miscellaneous.log_format_type = "media_server" # The log is in this format if any of the first ten lines match this regular expression log.format.autodetect_regular_expression = "^#Fields: cs-username c-ip cs-uri-stem x-ip x-port c-max-bandwidth x-type s-ip time date x-duration c-os c-osversion" log.format.autodetect_lines = "20" # The format of dates and times in this log log.format.date_format = "yyyy-mm-dd" log.format.time_format = "hh:mm:ss" # Don't truncate long fields statistics.sizes.table_cell.maximum_text_length = 0 # Don't time out session, discard them for being long, or remove reloads statistics.miscellaneous = { maximum_session_duration = "0" session_timeout = "0" remove_reloads_from_sessions = "false" } # statistics.miscellaneous log.filter_initialization = ` int login_date_time_epoc; int logout_date_time_epoc; string logout_date_time; string session_id; int session_id_counter = 0; int date_offset_seconds = log.processing.date_offset * (60*60); ` log.parsing_filters.copy_cs_url = { value = ` if (cs_uri_stem eq '(empty)' and cs_url ne '(empty)') then ( cs_uri_stem = cs_url; ); ` } # Is this needed here? - KBB # Due to a bug in MSS, c-max-bandwidth sometimes appears as 4294967295; set it to 0 when that happens log.parsing_filters.fix_maximum_bandwidth = { value = `if (c_max_bandwidth > 100000000) then c_max_bandwidth = 0` requires_fields = { c_max_bandwidth = true } } # This filter adds a "login" event at the logged time, so sessions can be calculated based # on connection time. The "normal" event will be added normally, but this also adds the # duration from the date and time, so it logs the event at the time it *disconnected*, and # the login at the time it *connected*. log.parsing_filters.add_login_event = { value = ` # Compute the session id session_id = cs_username . '_' . c_ip . '_' . session_id_counter; #session_id = c_ip . '_' . session_id_counter; #session_id = cs_username . '_' . c_ip; session_id_counter++; # Add the login event. set_collected_field('', 'date', date); set_collected_field('', 'time', time); set_collected_field('', 'session_event_type', 'login'); set_collected_field('', 'session_id', session_id); set_collected_field('', 'session_events', 1); set_collected_field('', 'events', 0); accept_collected_entry('', false); # Compute the date_time of the logout event. # Note that we need to add date_offset_seconds to apply the date_offset value. login_date_time_epoc = date_time_to_epoc(normalize_date(date, 'auto') . ' ' . time); login_date_time_epoc += date_offset_seconds; logout_date_time_epoc = login_date_time_epoc + x_duration; logout_date_time = epoc_to_date_time(logout_date_time_epoc); # Set up to make the next event a logout session_event_type = '(logout)'; session_events = 1; events = 1; ` requires_fields = { date = true time = true c_ip = true x_duration = true } } # add_login_event log.parsing_filters.set_logout_date_time = ` if (session_event_type eq '(logout)') then ( #date_time = logout_date_time; # must do these separately, since this will be re-derived if (matches_regular_expression(logout_date_time, '^([^ ]+) ([^ ]+)$')) then ( date = $1; time = $2; ); ); ` log.parsing_filters.calculate_bytes_transferred = { value = ` # 0.0 needed in both places to force floating point arithmatic bytes_transferred = ((0.0 + c_max_bandwidth) / 8) * (0.0 + x_duration); ` requires_fields = { c_max_bandwidth = true x_duration = true } } # calculate_bytes_transferred # Log Filters log.filters = { # last_url_elements = { # label = "$lang_admin.log_filters.last_url_elements_label" # comment = "$lang_admin.log_filters.last_url_elements_comment" # value = ` ##v.match = 'www.mydomain.com|mydirectory1|mydirectory2'; # Example ##v.N = "5"; # Example - up to six elements, including last ##v.N = ""; # Example - use with a pattern to include everything after the pattern #v.match = ""; #v.N = "0"; #if (matches_regular_expression(cs_uri_stem, '(' . v.match . ')[^/]*/(([^/]*/){0,' . v.N . '}[^/]*)$')) then ( # cs_uri_stem = $2; #); #` # disabled = "true" # } # last_url_elements # # remove_query = { # label = "$lang_admin.log_filters.remove_query_label" # comment = "$lang_admin.log_filters.remove_query_comment" # value = "if (contains(cs_uri_stem, '?')) then cs_uri_stem = substr(cs_uri_stem, 0, index(cs_uri_stem, '?') + 1) . '(parameters)';" # requires_fields = { # cs_uri_stem = true # } # } # remove_query } # log.filters log.fields = { session_event_type = "" events = "" bytes_transferred = "" # One or the other of these might exist, so create fields explicitly cs_uri_stem.type = "page" cs_url.type = "flat" } # log.fields log.field_options = { sessions_page_field = "session_event_type" sessions_visitor_id_field = "session_id" sessions_event_field = "session_events" } # log.field_options database.fields = { session_event_type = "" session_id = "" cs_uri_stem.suppress_bottom = "20" } # database.fields database.numerical_fields = { events = { default = true requires_log_field = false entries_field = true } # events visitors = { default = false requires_log_field = true log_field = "c_ip" type = "unique" display_format_type = "integer" } # visitors x_duration = { default = false requires_log_field = false type = "int" integer_bits = 64 display_format_type = "duration_compact" } x_duration_per_visitor = { default = false type = "int" integer_bits = 64 display_format_type = "duration_compact" log_field = "x_duration" aggregation_method = "average" average_denominator_field = "visitors" } bytes_transferred = { type = "int" integer_bits = 64 display_format_type = "bandwidth" } c_max_bandwidth = { requires_log_field = false type = "int" integer_bits = 64 display_format_type = "bandwidth" aggregation_method = "max" } session_events = { default = true requires_log_field = false entries_field = true } # session_events } # database.numerical_fields create_profile_wizard_options = { # How the reports should be grouped in the report menu report_groups = { date_time_group = "" content_group = { cs_uri_stem = true file_type = true x_type = true } visitor_demographics_group = { c_ip = true location = true cs_username = true } visitor_systems_group = { c_os = true c_osversion = true } other_group = { x_ip = true x_port = true s_ip = true } } # report_groups final_step = ` include "templates.admin.profiles.setup_reports_util"; string profile = "profiles." . volatile.new_profile_name; string reports = profile . ".statistics.reports"; string summary = profile . ".statistics.reports.single_page_summary.report_elements"; string menu = profile . ".statistics.reports_menu"; # Create the standard reports add_standard_reports(profile); # Remove unneeded reports # derived fields delete_node(reports . ".screen_dimensions"); delete_node(summary . ".screen_dimensions"); delete_node(menu . ".screen_dimensions"); delete_node(reports . ".screen_depth"); delete_node(summary . ".screen_depth"); delete_node(menu . ".screen_depth"); delete_node(reports . ".isp"); delete_node(summary . ".isp"); delete_node(menu . ".isp"); delete_node(reports . ".domain"); delete_node(summary . ".domain"); delete_node(menu . ".domain"); delete_node(reports . ".organization"); delete_node(summary . ".organization"); delete_node(menu . ".organization"); delete_node(reports . ".domain_description"); delete_node(summary . ".domain_description"); delete_node(menu . ".domain_description"); delete_node(reports . ".worm"); delete_node(summary . ".worm"); delete_node(menu . ".worm"); # fields not meaningful with special sessions reporting delete_node(reports . ".entry_pages"); delete_node(summary . ".entry_pages"); delete_node(menu . ".sessions_group.items.entry_pages"); delete_node(reports . ".exit_pages"); delete_node(summary . ".exit_pages"); delete_node(menu . ".sessions_group.items.exit_pages"); delete_node(reports . ".session_pages"); delete_node(summary . ".session_pages"); delete_node(menu . ".sessions_group.items.session_pages"); delete_node(reports . ".session_page_paths"); delete_node(summary . ".session_page_paths"); delete_node(menu . ".sessions_group.items.session_page_paths"); delete_node(reports . ".session_paths"); delete_node(summary . ".session_paths"); delete_node(menu . ".sessions_group.items.session_paths"); # fields used for special sessions reporting delete_node(reports . ".session_event_type"); # always login or (logout) delete_node(summary . ".session_event_type"); delete_node(menu . ".session_event_type"); delete_node(reports . ".session_id"); delete_node(summary . ".session_id"); delete_node(menu . ".session_id"); #echo("end of final step"); ` } # create_profile_wizard_options } # vbrick_ethernetv_portal_server