# # Device Type Snapon # # This snapon adds a field which reports the device type, calculated from the user-agent # device_type = { label = "$lang_admin.snapons.device_type.label" comment = "$lang_admin.snapons.device_type.comment" config_snapon_category = "" version = "3.0" # 2012-??-?? - GMF - 1.0 - Initial creation # 2012-09-11 - GMF - 1.1 - Added reports; fixed bugs when attaching from Config -> Snapons # 2012-11-08 - GMF - 2.0 - Reworked field values to be more "device types" and less operating systems. Added translations of field values. Added detection of spiders based on that uaa_spider field. Added detection of Android phones vs. tablets. # 2013-01-30 - GMF - 3.0 - Removed device_type field; replaced with mobile_device # 2014-01-09 - GMF - 3.0.1 - Added device_category_field_name to the UI parameters = { user_agent_field = { parameter_value = "user_agent" validation_type = "string" form_element_label = "$lang_admin.snapons.device_type.parameters.user_agent_field.form_element_label" form_element_type = "select" select_options_source = "log_fields" description = "" } # user_agent_field spider_field = { parameter_value = "uaa_spider" validation_type = "string" form_element_label = "$lang_admin.snapons.device_type.parameters.spider_field.form_element_label" form_element_type = "select" select_options_source = "log_fields" description = "" } # spider_field device_category_field_name = { parameter_value = "{=capitalize(expand(lang_stats.field_labels.device_category))=}" validation_type = "field_label" validate_field_label_for = { database_fields = true report_fields = true } form_element_label = "$lang_admin.snapons.device_type.parameters.device_category_field_name.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.device_type.parameters.device_category_field_name.description" } # device_category_field_name mobile_device_field_name = { parameter_value = "{=capitalize(expand(lang_stats.field_labels.mobile_device))=}" validation_type = "field_label" validate_field_label_for = { database_fields = true report_fields = true } form_element_label = "$lang_admin.snapons.device_type.parameters.mobile_device_field_name.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.device_type.parameters.mobile_device_field_name.description" } # mobile_device_field_name } # parameters parameters_form = { group_1 = { description = "$lang_admin.snapons.device_type.parameters_form.group_1.description" parameters = { user_agent_field = true spider_field = true mobile_device_field_name = true device_category_field_name = true } # parameters } # group 1 } # parameters_form attach_operations = { # Add log field add_log_fields = { type = "add_log_fields" fields = { device_category = "" mobile_device = "" } # fields } # add_log_fields # Add log filter add_log_filters = { type = "add_log_filters" filters = { compute_device_type = { label = "Compute device type" # LM comment = "This computes the device type" # LM value = ` {= @parameters{'user_agent_field'}{'parameter_value'} =} = replace_all({= @parameters{'user_agent_field'}{'parameter_value'} =}, '+', ' '); if ({= @parameters{'spider_field'}{'parameter_value'} =} ne '{= expand('$lang_stats.item_descriptions.no_spider') =}' ) then ( {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.not_a_mobile_device'); {= @parameters{'device_category_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.spider'); ); else if (matches_regular_expression({= @parameters{'user_agent_field'}{'parameter_value'} =}, '(iP(od|hone|ad))')) then ( {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = $1; {= @parameters{'device_category_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.mobile'); ); else if (matches_regular_expression({= @parameters{'user_agent_field'}{'parameter_value'} =}, 'Android')) then ( if (matches_regular_expression({= @parameters{'user_agent_field'}{'parameter_value'} =}, ' Mobile ')) then {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.android_phone'); else {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.android_tablet'); {= @parameters{'device_category_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.mobile'); ); else if (matches_regular_expression({= @parameters{'user_agent_field'}{'parameter_value'} =}, '(Windows|Windows CE|Macintosh|Mac OS|Linux|SunOS)')) then ( {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.not_a_mobile_device'); {= @parameters{'device_category_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.non_mobile'); ); else if (matches_regular_expression({= @parameters{'user_agent_field'}{'parameter_value'} =}, 'Symbian')) then ( {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.symbian_phone'); {= @parameters{'device_category_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.non_mobile'); ); else ( {= @parameters{'mobile_device_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.not_a_mobile_device'); {= @parameters{'device_category_field_name'}{'final_node_name'} =} = expand('$lang_stats.snapons.device_type.unknown'); ); ` } # compute_device_type } # filters } # add_log_filters # Add database field add_database_fields = { type = "add_database_fields" fields = { device_category = "" mobile_device = "" } # fields } # add_database_fields # Add report fields add_report_fields = { type = "add_report_fields" fields = { device_category = "" mobile_device = "" } # fields } # add_report_fields # When attaching: Add the reports. add_reports = { type = "add_reports" reports = { device_type_snapon_mobile_device = { label = "$lang_admin.snapons.device_type.mobile_device_report_label" report_elements = { device_type_snapon_mobile_device = { label = "$lang_admin.snapons.device_type.mobile_device_report_label" omit_parenthesized_items = true type = "table" sort_by = "MAIN_SORT_FIELD" # Sort this report by the main sort field, whatever that may be columns = { mobile_device.report_field = "mobile_device" # mobile_device.report_field = "{= @parameters{'mobile_device_field_name'}{'final_node_name'} =}" } # columns add_all_aggregating_columns = true graph_main_field = true graphs.graph_type = "pie" } # device_type_snapon_mobile_device } # report_elements } # device_type_snapon_mobile_device device_type_snapon_device_category = { label = "$lang_admin.snapons.device_type.device_category_report_label" report_elements = { device_type_snapon_device_category = { label = "$lang_admin.snapons.device_type.device_category_report_label" type = "table" sort_by = "MAIN_SORT_FIELD" # Sort this report by the main sort field, whatever that may be columns = { device_category.report_field = "device_category" # device_type.report_field = "{= @parameters{'device_type_field_name'}{'final_node_name'} =}" } # columns add_all_aggregating_columns = true graph_main_field = true graphs.graph_type = "pie" } # device_type_snapon_device_category } # report_elements } # device_type_snapon_device_category } # reports reports_menu = { visitor_systems_group = { # label = "{=expand(lang_stats.menu.groups.visitor_systems_group)=}" items = { device_type_snapon_device_category = { label = "$lang_admin.snapons.device_type.device_category_report_label" } # device_type_snapon_device_category device_type_snapon_mobile_device = { label = "$lang_admin.snapons.device_type.mobile_device_report_label" } # device_type_snapon_mobile_device } # items } # content_group } # reports_menu } # add_reports } # attach_operations } # device_type