# Copyright (c) 2010 Flowerfire, Inc. All Rights Reserved. lang_options = { command_line = { action = { label = "Action" short_description = "The command-line action to perform" long_description = "This specifies the command-line action to perform with the specified profile. The HTML interface takes care of setting this option for you as necessary, but you will need to set it manually when using the command line interface. Possible modes are:
build_database (or bd): This builds or rebuilds the database from the log data, erasing any data already in the database.
update_database (or ud): This adds the log data to the database, while also leaving any existing data in the database.
process_logs (or pl): This processes all the log data in the log source, and generates comma-separated output for each line accepted by the filters. It does not modify or create a database. This is useful for converting log data to CSV.
remove_database_data (or rdd): This expires all data from the database which is in the filter set specified by {=docs_option_link('f')=}. (Note: the {=docs_option_link('df')=} option will not work with this action; use {=docs_option_link('f')=} instead).
rebuild_database_filters (or rdf): This rebuilds the database filters for all rows of data. This is useful after modifying cross-references, indices, or database filters, which can be rebuild using this action (and -fr t), without doing a full database rebuild.
update_database_filters (or udf): This updates the database filters for all rows of data which have been added since the last database filter update. This action is seldom used, because it happens automatically after database updates..
rebuild_cross_reference_tables (or rcrt): This rebuilds the cross-reference tables of the database from the main table (without processing any log data). It is much faster than rebuilding the database, and somewhat faster than rebuilding the database filters (because it doesn't rebuild the indices, or rerun any other database filters). It can be useful if you have modified the cross-reference table settings and want to update the cross-reference tables to reflect the new settings, but don't want to rebuild the database. To rebuild just one cross-reference table, add \"-crt N\" where N is 0 for the first xref table, 1 for the second, etc.
rebuild_database_indices (or rdi): This rebuilds the indices of the main table.
rebuild_database_hierarchies (or rdh): This rebuilds the hierarchy table of the database field specified with -fn option.
update_database_hierarchy_tables (or udht): This updates the hierarchy table for the database field specified by {=docs_option_link('f')=}.
export_database (or ed): This exports the contents of a database to the $lang_stats.directory specified by (specified with {=docs_option_link('d')=}).
import_database (or id): This imports the contents of a database from the directory specified by (specified with {=docs_option_link('d')=}). The $lang_stats.directory must have been created with an export_database action.
clean_up_database (or cud): This cleans unused temporary tables from the database. Under normal circumstances, these tables are dropped by the task which creates them, but if the task terminates abnormally, it can leave tables behind, which are never deleted. Examples include tables with names starting with '_select_result', 'filtertmp_', 'datege_', and 'rows_'. This action drops any such files from the database, provided they are not actively in use (if the process that created them is still running, they will not be deleted).
generate_all_report_files (or garf): This generates HTML statistics pages for all reports, and the associated images, into the $lang_stats.directory specified by {=docs_option_link('ghtd')=}. The files and images are linked properly, so the HTML can be browsed directly from the resulting $(lang_stats.directory). This allows statistics to be browsed \"off-line,\" without having to run $PRODUCT_NAME to generate each page.
generate_report_files (or grf): This generates HTML statistics pages for a particular report (specified by {=docs_option_link('rn')=}), and the associated images, into the $lang_stats.directory specified by {=docs_option_link('ghtd')=} (for HTML export) or the pathname specified by {=docs_option_link('of')=} (for PDF export). The format of the export is specified by {=docs_option_link('oft')=}. The files and images are linked properly, so the HTML can be browsed directly from the resulting $(lang_stats.directory). This allows one report to be browsed \"off-line,\" without having to run $PRODUCT_NAME to generate each page.
send_report_by_email (or srbe): This sends a statistical report using HTML email. The report is sent to {=docs_option_link('rca')=} with return address {=docs_option_link('rna')=} using {=docs_option_link('ss')=}. The report to send is specified by {=docs_option_link('rn')=}.
export_csv_table (or ect): This exports a report table as CSV text. The report to export is specified by {=docs_option_link('rn')=}, and is written to the standard output stream, so this is useful only in command-line mode. See also {=docs_option_link('of')=}, {=docs_option_link('er')=}, {=docs_option_link('et')=}, {=docs_option_link('emax')=}, {=docs_option_link('emin')=}, {=docs_option_link('ea')=}, {=docs_option_link('eol')=}, {=docs_option_link('sb')=}, and {=docs_option_link('sd')=}.
dump_main_table (or dmt): This dumps a tab-separated version of the \"main\" database table, to the standard output stream. It is affected by the {=docs_option_link('f')=} option: if no filter is specified, it will dump the entire main table; otherwise, it will dump only those rows matching the filter. This is much faster and more memory-efficient than exporting the Log Detail report.
print_values (or pv): This displays (to the command line console) the numerical field values for a particular filter set.
print_subitems (or ps): This displays (to the command line console) the subitem hierarchy for the database field specified with -fn option.
print_items (or pi): This displays (to the command line console) all item values for the database field specified with -fn option.
list_profiles (or lp): This displays (to the command line console) a list of the internal names of all profiles. These names can be used for command-line options that call for profile names.
list_reports (or lr): This displays (to the command line console) a list of the report in the specified profile (specified with -p profilename). These names can be used for command-line options that call for report names (like -rn).
list_log_fields (or llf): This displays (to the command line console) a list of the internal names of the log fields in the specified profile (specified with -p profilename). These names can be used for log filters.
list_database_fields (or ldf): This displays (to the command line console) a list of the internal names of the database fields in the specified profile (specified with -p profilename). These names can be used for report filters.
print_database_statistics (or pds): This displays statistics on the database for a profile (specified with -p profilename). It is useful for tuning and debugging memory and disk usage.
execute_sql_query (or esq): This executes a SQL query against the database of the current profile (specified with -p profilename). The query is specified with {=docs_option_link('sq')=}. The resulting table, if any, is displayed to console.
convert_70_database (or c70d): This updates an existing MySQL database created by $PRODUCT_NAME 7.0 to use the new layout used by version 7.1. This is required if you want to continue to use your existing MySQL database after upgrading to $PRODUCT_NAME 7.1 or later. It applies only to MySQL databases; no conversion is required for internal databases.
convert_database_7_to_8 (or cd7t8): This converts the current database from version 7 format to version 8. The location of the version 7 database is specified with {=docs_option_link('d')=}.
recreate_profile (or rp): This recreates profile (specified with -p profilename). It deletes the profile, and recreates it using the options originally used to create it. This destroys any changes to the profile which have been made since it was created; e.g., if new log filters were added manually, they will be deleted. This rewinds the profile to the state it was in just after it was created. This also incorporates any change to the log format plug-in into the profile, so this is very useful during log format plug-in authoring, to repeatedly create the profile until the plug-in is working, without having to go through the web interface each time.
update_to_version (or utv): This updates the $PRODUCT_NAME installation to a newer version (version number is specified with {=docs_option_link('utv')=}. This is new and highly experimental. For maximum safety, use the existing downloads page to download new versions instead of using this feature. If you do use this, back up your LogAnalysisInfo folder first!
start_parsing_server (or sps): This starts a parsing server, to handle distributed parsing requests, listening on IP {=docs_option_link('psh')=} and port {=docs_option_link('psp')=}. See {=docs_chapter_link('distributed_parsing')=}.
The following actions are also available, and are defined through plug-ins in the \"actions\" $lang_stats.directory of LogAnalysisInfo.
'; '' . node_name(action) . ''; if (action?{'shortcut'}) then ' (or ' . @action{'shortcut'} . ')'; if (action?{'label'}) then ( ' (' . @action{'label'} . ')'; ); if (action?{'description'}) then ( '. ' . expand(@action{'description'}); ); if (action?{'parameters'}) then ( node parameters = action{'parameters'}; if (num_subnodes(parameters) > 0) then ( '. Parameters:'; node parameter; '
'; if (parameter?{'label'}) then ( @parameter{'label'}; ' (' . node_name(parameter) . ')'; ); else node_name(parameter); ' (-' . @parameter{'shortcut'} . ')'; ': ' . @parameter{'description'}; '
This specifies the filters to use when generating a report; i.e., it filters out all data not matching this expression, so only part of the data is reported.
The value of this option is an expression using a subset of the {=docs_chapter_link('salang')=} syntax. View report filters (ToDo, add report filters link).
" } # filters update_to_version = { label = "Update to version" short_description = "The version to update to, using web update" long_description = "This specifies the version number to update to, using the web update feature. This feature is still experimental. When used in conjunction with -a ui, this provides a command-line method of updating an existing $PRODUCT_NAME installation to a newer version.
" } # update_to_version generate_html_to_directory = { label = "Generate HTML report files to $lang_stats.directory" short_description = "Generate HTML report files into a $lang_stats.directory" long_description = "This option is used when {=docs_option_link('a')=} is generate_report_files or generate_all_report_files (in command line usage). $PRODUCT_NAME generates statistics pages into this $(lang_stats.directory). This option determines what $lang_stats.directory the files are generated in." } # generate_html_to_directory generate_pdf_friendly_files = { label = "Generate PDF friendly files" short_description = "Generate HTML report files in a PDF friendly format" long_description = "This option is used when {=docs_option_link('a')=} is generate_report_files or generate_all_report_files (in command line usage). $PRODUCT_NAME generates statistics pages in a PDF friendly format by omitting the frameset, adding a table of contents page and by modifying specific style parameters." } # generate_pdf_friendly_files generate_report = { label = "Generate report" short_description = "Generate a report" long_description = "This generates a report, given the report ID. This is used internally to handle the generation of HTML reports." } # generate_report generate_all_report_files = { label = "Generate all report files" } # generate_all_report_files generate_report_files = { label = "Generate report files" } # generate_report_files master_process_id = { label = "Master process ID" short_description = "Process ID of the master web server thread (used internally)" long_description = "This is the process ID (pid) of the main web server process. This is used internally to recognize when the main process exits, so the subordinate process knows to exit too." } # master_process_id merge_database_directory = { label = "Merge database directory" short_description = "Directory of database to merge into this one" long_description = "This specifies the database directory for a database to merge into the current database. This is used together with \"-a md\" to add the contents of a second database to the current database. The second database must have the exact same structure as the first-- the easiest way to ensure that is to use the same profile file to build both." } # merge_database_directory directory = { label = "Directory" short_description = "Directory to import a database from, or export a database to" long_description = "This specifies the directory which holds a database export. It is used when exporting to specify the destination of the export, and when importing to specify the source of the import." } # directory destination_directory = { label = "Destination directory" short_description = "Directory to convert imported database to" long_description = "This specifies the destination directory of a database conversion (version 7 to 8)." } # destination_directory password = { label = "Statistics viewing password" short_description = "The password required to view the statistics for this profile, passed on the command line" long_description = "This option lets you use a direct URL to your statistics even if they are password-protected. Just include this option in the URL (clp+password) and $PRODUCT_NAME will treat it as if you had entered the password in the prompt field, and will bypass the prompt field and take you to the statistics." } # password profile = { label = "Profile to use" short_description = "The name of the profile to use for this command." long_description = "This specifies a profile which is to be used for the current command-line command. This is typically the first option on any command line that deals with a particular profile, e.g., you might use '-p myconfig -a bd' to rebuild a database for profile myconfig. More generally, this can be used in conjunction with {=docs_option_link('a')=} and other options to build, update or expire databases from the command line, or to generate HTML files. In CGI or web server mode, this is used internally to manage profiles, and should generally not be changed.
In addition to listing a single profile name explicitly, you can also use wildcards for this option, to perform the action for multiple profiles, one after another. To do this use pattern:
followed by a wildcard expression, as the value of this (-p) option. For instance, this:
sawmill -p \"pattern:xyz*\" -a bd
will rebuild the databases of all profiles whose internal names (not labels) start with xyz
. You can get
a list of all internal names using the \"-a lp\" command line option.
If this option is a full pathname of an existing file, that file is read as a profile file; otherwise, $PRODUCT_NAME treats it as the name of a profile in the profiles sub$lang_stats.directory of the LogAnalysisInfo $(lang_stats.directory). If that doesn't exist either, $PRODUCT_NAME scans all profiles in that directory to see if the label of any profile matches the specified value, and uses that profile if it matches. See {=docs_chapter_link('configfiles')=}.
" } # profile remove_database_data = { label = "Remove database data" } # remove_database_data report_name = { label = "Report name" short_description = "The name of the report to generate" long_description = "This specifies the name of a report to generate. This is used as a parameter in various command-line actions, including export_csv_table, email_report, and generate_report_files (see {=docs_option_link('a')=})." } # report_name language = { label = "Language" short_description = "The language to use for report generation" long_description = "This specifies the language to use to generate the report, e.g., english. Available languages the names of the subdirectories of the languages $lang_stats.directory of the LogAnalysisInfo $lang_stats.directory." } # language field_name = { label = "Field name" short_description = "The name of a database field" long_description = "This specifies the name of a database field. It is used in a variety of command-line contexts where a database field name is required, including print_values, print_subitems, and print_items (see {=docs_option_link('a')=})." } # field_name cross_reference_table = { label = "Cross-reference table" short_description = "The cross-reference table number" long_description = "This specifies a cross-reference table number, or \"all\" for all cross-reference tables. It is used in a variety of command-line contexts where a cross-reference table is specified, including update_cross_reference_table (see {=docs_option_link('a')=})." } # field_name force_rebuild = { label = "Force rebuild" short_description = "Whether to force a rebuild" long_description = "This option is used on the command line in conjunction with the update_cross_reference_table action (see {=docs_option_link('a')=}). When the value of this option is true, the table is rebuild from scratch; when it is false, it is updated incrementally from whatever is new in the database since last update." } # force_rebuild send_report_by_email = { label = "Send report by email" } # send_report_by_email session_id = { label = "Session ID" short_description = "Internal option used to track sessions in the graphical interface" long_description = "This is an internal option used to track sessions in the graphical interface." } # session_id verbose = { label = "Command-line output types" short_description = "The types of command-line output to generate" long_description = "This controls the types of debugging output generated during a command-line action. This option is a sequence of letters, each representing a particular type of command-line output. If the letter corresponding to a type is present in the sequence, that type of output will be generated; if it is not present, that type of output will not be generated. The types, and their corresponding letters, are:
For instance, a value of ew
will show only error messages and basic web server output. A value of \"*\" will show all possible output.
In CGI mode or web server mode, the output will be sent to a file in the Output $lang_stats.directory of the LogAnalysisInfo $lang_stats.directory; the file will be named Output-profilename, where profilename is the name of the profile. In command line mode (on UNIX and Windows), the output will be sent to the standard output stream.
" } # verbose web_server = { label = "Start web server" short_description = "This option controls whether $PRODUCT_NAME starts its built-in web server when it starts (whether it runs in web server mode)" long_description = "This controls whether $PRODUCT_NAME starts its built-in web server. When this option is checked (true), $PRODUCT_NAME starts a web server on the IP address specified by {=docs_option_link('sh')=}, and port specified by {=docs_option_link('wsp')=}, unless it detects that it is running as a CGI program under another web server, in which case it responds as a CGI program instead, and does not start the server. When this option is unchecked (false), $PRODUCT_NAME never starts the web server, unless it is run from the command line with no parameters, or it is run as a GUI program under MacOS or Windows." } # web_server # label = "Expand session paths" # short_description = "This option controls whether session paths should be expanded while generating a session paths report" # long_description = "This option controls whether session paths should be expanded while generating a session paths report. If this option is true, then all path segments with more than {=docs_option_link('epgt')=} will be expanded. If this option is false, only those segments which have been clicked will be expanded." # } # expand_paths return_address = { label = "Return address" short_description = "The return address of an email message" long_description = "" } # return_address recipient_address = { label = "Recipient address" short_description = "The recipient address of an email message" long_description = "This specifies the recipient address for an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=})." } # recipient_address cc_address = { label = "Cc address" short_description = "The carbon copy address of an email message" long_description = "" } # cc_address bcc_address = { label = "Bcc address" short_description = "The blind carbon copy address of an email message" long_description = "" } # bcc_address report_email_subject = { label = "Report email subject" short_description = "The email subject to use when sending a report by email" long_description = "This specifies the email subject to use when sending a report in an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=})." } # report_email_subject update_database = { label = "Update database" } # update_database # zoom_value = { # label = "Zoom value" # short_description = "The zoom value to zoom into a hierarchical report." # long_description = "This option is used to specify the zoom value to zoom into a hierarchical report, i.e., -rn location -zv \"United States/\" will zoom the report location to \"United States\"." # } # zoom_value starting_row = { label = "Starting row" short_description = "This option controls the starting row of a generated or exported report." long_description = "This option controls the starting row of a generated or exported report. Startting row is a global setting and overrides existing starting row values in every report and report element." } # starting_row ending_row = { label = "Ending row" short_description = "This option controls the ending row of a generated or exported report." long_description = "This option controls the ending row of a generated or exported report. Ending row is a global setting and overrides existing ending row values in every report and report element.This option specifies the language module to use. Language modules contain rules for translating from $PRODUCT_NAME's internal text variables to what actually appears in generated HTML pages and other output. Language modules are contained in the languages sub$lang_stats.directory of the LogAnalysisInfo $lang_stats.directory, in a $lang_stats.directory named after the language (for instance, English modules are in a $lang_stats.directory called \"english\"). Modules are in several pieces:
lang_stats.cfg: The text of statistics pages
lang_options.cfg: The text of the option names and descriptions.
lang_admin.cfg: The text of the administrative pages.
lang_messages.cfg: The text of error messages and other messages.
The module is split into pieces to allow for partial implementation. For instance, by implementing only the small lang_stats module, you can provide support for a particular language for statistics browsing, without having to spend a considerable amount of time to fully translate the entire $PRODUCT_NAME interface.
" } # language charset = { label = "Charset" short_description = "The HTML charset to use when displaying pages" long_description = "This option specifies the HTML charset, e.g. UTF-8, to use when displaying pages in the web interface.
" } # charset logout_url = { label = "Logout URL" short_description = "The URL to go to on logout; if empty, goes to login screen" long_description = "This specifies the URL that $PRODUCT_NAME sends you to when you log out of $PRODUCT_NAME. If this option is blank, it will send you to the $PRODUCT_NAME login screen." } # logout_url never_look_up_ip_numbers = { label = "Never look up IP numbers using domain name server" short_description = "Whether to ever try to look up hostnames of IP-numbered hosts" long_description = "When this is true (checked), $PRODUCT_NAME will never attempt to look up hostnames from IP numbers; it will use IP numbers for everything. When this is false (unchecked), it will attempt to look up the local hostname when it starts a web server, and it will attempt to look up the hostname of any host which accesses it by HTTP, and it will look up the hostname of any host it encounters in the logs (if {=docs_option_link('luin')=} is true). This option is useful if there is no local Domain Name Server (for instance, if the computer running $PRODUCT_NAME is not connected to a network and is not itself running a DNS)." } # never_look_up_ip_numbers only_look_up_log_ip_numbers = { label = "Only look up IP numbers for log entries" short_description = "Look up IP numbers only when they appear in logs, not for local server or remote browsing computer" long_description = "When this is true (checked), $PRODUCT_NAME will look up the hostnames of IP numbers using DNS only when they appear in a log file and {=docs_option_link('luin')=} is on. When this is false (unchecked), $PRODUCT_NAME will still look up numbers in log files, but will also look up the hostname of the computer $PRODUCT_NAME is running on, and the hostnames of computers using $PRODUCT_NAME through web browsers. This option is useful because when it is true, $PRODUCT_NAME will never do any network access, so it can be run on a computer with a dial-up connection without having to be dialed in. When this option is false, $PRODUCT_NAME will perform a DNS lookup when it first starts and when other computers access it, so it will have to be permanently connected to the Internet (or using a DNS server on your local network)." } # only_look_up_log_ip_numbers temporary_files_lifespan = { label = "Temporary files lifespan" unit = "seconds" short_description = "Amount of time to keep temporary files before deleting them (in seconds)" long_description = "This option controls the amount of time, in seconds, $PRODUCT_NAME keeps temporary files before deleting them. Temporary files include temporary profiles (used to browse statistics) and temporary images (used to embed images in statistics pages). Setting this to a high number will ensure that temporary images are around as long as they are needed, but will use more disk space." is_invalid_int_min_message = "The value of field \"$lang_options.preferences.miscellaneous.temporary_files_lifespan.label\" must be of type integer and greater or equal $option_info.preferences.miscellaneous.temporary_files_lifespan.minimum_value." } # temporary_files_lifespan # enable_enterprise_for_trial = { # label = "Enable Enterprise features when using trial licensing" # short_description = "Whether to enable Enterprise features when using a trial license key" # long_description = "This option controls whether Enterprise features are available when trial licensing is in use. This is useful for trying out both Enterprise and Professional feature sets when making a purchase decision." # } # enable_enterprise_for_trial prompt_for_trial_tier = { label = "Prompt for trial tier" short_description = "Whether to prompt for Professional/Enterprise switch during trial period" long_description = "This option controls whether the Professional/Enterprise switch is shown during the trial period. This is useful for hiding the Professional/Enterprise switch if only the Professional or Enterprise features are available during the trial period." } # prompt_for_trial_tier talkback = { label = "Enable feedback agent" short_description = "Whether to send information about devices analyzed to Flowerfire" long_description = "This option controls whether $PRODUCT_NAME sends information to Flowerfire (maker of $PRODUCT_NAME) about the log formats being used. When this option is enabled, $PRODUCT_NAME sends information to Flowerfire (via a port 80 connection to www.sawmill.net). The information sent is only the name of the log format plug-in used in the profile; it does not send your log data, or any other information other than the name of the log format. We will use this information to help us focus our development on the most commonly-used log formats. If this option is off, $PRODUCT_NAME will never send any information to Flowerfire." } } # miscellaneous email = { smtp_server = { label = "SMTP server" short_description = "The SMTP server to use to send email" long_description = "This specifies the SMTP server to use to send an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=})." } # smtp_server smtp_username = { label = "SMTP username" short_description = "The SMTP username to use to send email" long_description = "This specifies the SMTP username to use when authenticating with the SMTP server to send an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=})." } # smtp_username smtp_password = { label = "SMTP password" short_description = "The SMTP password to use to send email" long_description = "This specifies the SMTP password to use when authenticating with the SMTP server to send an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=})." } # smtp_password return_address = { label = "Return address" short_description = "The default return address of an email message when sending a report by email from the command line" long_description = "" # long_description = "This specifies the return address of an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=}) from the command line." } # return_address recipient_address = { label = "Recipient address" short_description = "The default recipient address of an email message when sending a report by email from the command line" long_description = "" # long_description = "This specifies the recipient address for an email message. It is used when sending a report by email with send_report_by_email (see {=docs_option_link('a')=}) from the command line." } # recipient_address cc_address = { label = "Cc address" short_description = "The default carbon copy address of an email message when sending a report by email from the command line" long_description = "" } # cc_address bcc_address = { label = "Bcc address" short_description = "The default blind carbon copy address of an email message when sending a report by email from the command line" long_description = "" } # bcc_address report_email_subject = { label = "Report email subject" short_description = "The default email subject to use when sending a report by email from the command line" long_description = "" } # report_email_subject support_email_address = { label = "Support email address" short_description = "The email address where bug and error reports should be sent" long_description = "
This option specifies the email address where bug reports should be sent when a $PRODUCT_NAME user clicks the \"Report It\" button on an error message.
If this option is blank, it will go to the software vendor's support address ($SUPPORT_EMAIL). That's fine for some situations, especially if the reporting user is the $PRODUCT_NAME administrator, but for ISPs and other multi-client and multi-user installations, most of the errors will be configuration issues that the software vendor can't do anything about, and that the reporting user can't fix (because they don't have administrative access). For multi-client licensing setups, this should be set to the email address of the $PRODUCT_NAME administrator, who can fix the problems as they occur.
" } # support_email_address global_actions_email_address = { label = "Global actions email address" short_description = "The address(es) that $PRODUCT_NAME should send email to whenever an action completes; e.g., the database is built" long_description = "
This specifies the address or addresses $PRODUCT_NAME should send email to whenever an action occurs, for instance when the database finishes rebuilding, updating, expiring, or when HTML files are done being generated.
The global actions email address applies to actions of all profiles. It is also possible to define separate actions email addresses per profile in Config/Miscellaneous. An actions email address defined per profile overrides this actions email address.
If this option or the per profile actions email address is non-empty, $PRODUCT_NAME will send a brief description of what it just finished doing, using the SMTP server specified by {=docs_option_link('ss')=}.
If this option and the per profile actions email address is empty, $PRODUCT_NAME will not send email.
Multiple recipients may be specified with commas, e.g., \"user1@mydomain.com,user2@mydomain.com,user3@mydomain.com\".
" } # global_actions_email_address global_actions_return_address = { label = "Global actions return address" short_description = "The return address when email is send upon actions" long_description = "The return address when email is send by {=docs_option_link('gaea')=} or {=docs_option_link('aea')=}.
The global actions return address applies to all profiles. It is also possible to define an action return address per profile in Config/Miscellaneous. If no actions return address is defined then $PRODUCT_NAME uses the actions email address as return address.
" } # global_actions_return_address } # email security = { server_session_timeout = { label = "Session timeout" unit = "seconds" short_description = "The number of seconds a $PRODUCT_NAME web session can be active before it is automatically logged out" long_description = "This option specifies the number of seconds a $PRODUCT_NAME web access session (i.e., a session by someone accessing $PRODUCT_NAME, e.g., viewing reports or administrating $PRODUCT_NAME) can be inactive before it is timed out. When a page is loaded in the $PRODUCT_NAME web interface, it checks when the past access occurred, and if it was more than this amount of time, it considers the session to have timed out, deletes all information about the session, and requires a new login. This is a security feature, intended to prevent sessions from being available for arbitrary amounts of time on shared or otherwise insecure computers. Setting this to 0 turns this off, and sessions will never time out." is_invalid_int_min_message = "The value of field \"$lang_options.preferences.security.server_session_timeout.label\" must be of type integer and greater or equal 0." } # server_session_timeout administrative_remote_user = { label = "Administrative REMOTE_USER" short_description = "The value of REMOTE_USER which marks that user as administrator" long_description = "This option specifies the username which, when present in the REMOTE_USER environment variable in CGI mode, marks that user as the administrator. This can be used to easily integrate web server authentication with the authentication used by $PRODUCT_NAME, so $PRODUCT_NAME uses information passed in the REMOTE_USER environment variable to determine which user is logged in. See {=docs_option_link('sorup')=}." is_empty_message = "Please define a value for field \"$lang_options.preferences.security.administrative_remote_user.label\"." } # administrative_remote_user authentication_command_line = { label = "Authentication command line" short_description = "The command line to run to authenticate users" long_description = "This specifies a command line that $PRODUCT_NAME will run when it authenticates users. The command line program must accept two parameters: the username and the entered password. The command line must print the names of the profiles that the user is permitted to access, one name per line. A printed value of *ROLE*:N means that the user should be part of the RBAC role whose internal name is N (e.g., \"role_1\" as a non-root administrator, as specified in roles_enterprise.cfg in LogAnalysisInfo); if no *ROLE* lines are specified, the user will be added to role \"role_2\" (Statistics Viewer). A printed value of *ADMIN* means that the user is an administrator, and may access any profile, as well as accessing the administrative interface (any other response, and the administrative interface will not be available). A printed value of *FAILED* means that the username/password authentication failed.For example, the ldapauth.pl file, which is in the Extras folder of a standard $PRODUCT_NAME installation, is a perl script which, with slight configuration, can use an LDAP server to perform authentication. If the full pathname of ldapauth.pl is entered for this option, and the script ldapauth.pl is edited to point to an LDAP server and specify the appropriate parameters, $PRODUCT_NAME will, via the script, contact the LDAP server any time authentication is required, and will use the server's response to validate the username and password, and to get the list of accessible profiles for that user.
If this option is blank, $PRODUCT_NAME will use the users.cfg file (in LogAnalysisInfo) to authenticate users. " } # authentication_command_line database_directory_permissions = { label = "Database $lang_stats.directory permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a $lang_stats.directory as part of a database" long_description = "This specifies the file permissions to use when creating a $lang_stats.directory as part of a database. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # database_directory_permissions database_file_permissions = { label = "Database file permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a file as part of a database" long_description = "This specifies the file permissions to use when creating files as part of a database. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # database_file_permissions default_permissions = { label = "Default permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a file or $lang_stats.directory (chmod-style)" long_description = "This specifies the file permissions to use when creating files and $lang_stats.directories which do not fall into any other permissions category. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # default_permissions default_profile_permissions = { label = "Default profile file permissions" short_description = "The permissions $PRODUCT_NAME uses when creating the default profile file" long_description = "This specifies the file permissions to use when creating the default profile file. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # default_profile_permissions image_directory_permissions = { label = "Image $lang_stats.directory permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a $lang_stats.directory containing image files" long_description = "This specifies the file permissions to use when creating a $lang_stats.directory containing image files. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # image_directory_permissions image_file_permissions = { label = "Image file permissions" short_description = "The permissions $PRODUCT_NAME uses when creating an image file" long_description = "This specifies the file permissions to use when creating an image file. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # image_file_permissions log_analysis_info_directory_permissions = { label = "LogAnalysisInfo $lang_stats.directory permissions" short_description = "The permissions $PRODUCT_NAME uses when creating the LogAnalysisInfo $lang_stats.directory" long_description = "This specifies the file permissions to use when creating the LogAnalysisInfo $(lang_stats.directory). This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # log_analysis_info_directory_permissions password_file_permissions = { label = "Password file permissions" short_description = "The permissions $PRODUCT_NAME uses when creating the password file" long_description = "This specifies the file permissions to use when creating the password file. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # password_file_permissions profiles_directory_permissions = { label = "Profile $lang_stats.directory permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a $lang_stats.directory containing profile files" long_description = "This specifies the file permissions to use when creating a $lang_stats.directory containing profile files. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # profile_directory_permissions profile_permissions = { label = "Profile file permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a profile file" long_description = "This specifies the file permissions to use when creating a profile file. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # profile_file_permissions # KHP 25/Jul/2011 - Disabled because security_mode is not used #security_mode = { # label = "Security Mode" # short_description = "The level of security to use" # long_description = "$PRODUCT_NAME provides a number of security features to prevent unauthorized access to your profiles, or to your system. The Security Mode is one of these; see also {=docs_chapter_link('security')=}.
The security mode cannot be set from the web GUI-- it can only be set by modifying the $PRODUCT_NAME preferences.cfg file (in the LogAnalysisInfo folder) with a text editor. The security mode may be one of the following:
browse_and_modify
. This is the default. This mode allows web users to create new profiles, and modify existing profiles. It provides the full power of the $PRODUCT_NAME web interface from any web browser. It relies on the $PRODUCT_NAME password for security; users who have the password can create profiles, and modify existing profiles. Users who do not have the password can make temporary modifications, during browsing, to existing profiles, but they cannot modify the secure options. Secure options are those which cause files on the server to be read or written in any way; examples include {=docs_option_link('phf')=}.
browse_only
. This mode adds an additional layer of security beyond what is provided by the password, by preventing users from creating or modifying profiles, even if they know the password. It allows the user to browse existing profiles, and nothing more. In this mode, profile options can be modified by directly modifying the {=docs_chapter_link('configfiles')=}, or by running another installation of $PRODUCT_NAME in Browse and Modify mode, and copying the profile.
Either of the options are secure enough to protect your system from malicious users, because all require the password before any profiles may be created or modified, and before any secure options may be changed (changes to the non-secure options cannot harm your system). If you are highly concerned about security, you may want to set the security mode to Browse Only, to prevent even password-equipped users from doing any damage.
" # browse_and_modify = "Browse and modify" # browse_only = "Browse only" # } # security_mode server_directory_permissions = { label = "Server $lang_stats.directory permissions" short_description = "The permissions $PRODUCT_NAME uses when creating the server $lang_stats.directory" long_description = "This specifies the file permissions to use when creating the server $(lang_stats.directory). This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # server_directory_permissions show_docs_links_in_stats = { label = "Show documentation links in statistics pages" short_description = "Whether to include links to the online documentation in statistics pages" long_description = "This specifies whether links to the online documentation should appear in statistics pages, where appropriate. If this option is true (checked) links to the documentation will appear. If this option is false (unchecked) documentation links will not appear. This option is useful if you wish to hide the online documentation from your statistics-browsing users." } # show_docs_links_in_stats show_full_operating_system_details_in_errors = { label = "Show full operating system details in errors" short_description = "Show full operating system version details in the text of error messages" long_description = "This controls whether $PRODUCT_NAME displays the full operating system version details in error message. It is useful for $PRODUCT_NAME to do this because this helps to debug problems when they are reported. However, full operating system details could be of use to someone attempting to gain unauthorized access to your server, since it would allow them to determine if you are running a vulnerable version of the operating system. This should not be an issue if you keep your operating system up to date, but if you'd rather that this information not be public, you should turn this option off. " } # show_full_operating_system_details_in_errors show_only_remote_user_profiles = { label = "Show only the profiles matching REMOTE_USER" short_description = "Whether to show only the profiles whose names start with the value of REMOTE_USER" long_description = "When this is true (checked), the main profile list will show only the profile, if any, whose names start with the value of REMOTE_USER followed by a dash (-). For instance, if REMOTE_USER is \"tom,\" the Main Menu will show profiles named \"tom-access,\" \"tom-referrer,\" or \"tom-stats,\" but will not show \"bob-access,\" \"tom access,\" or \"tom.\" When this is false (unchecked), or if REMOTE_USER is empty (undefined), or if REMOTE_USER is equal to the value of {=docs_option_link('aru')=}, then all profiles will appear in the Main Menu. REMOTE_USER is a web server CGI variable which contains the username of the user who logged in through an authentication screen; e.g., htaccess or realms authentication. This option provides a simple mechanism for hiding users' profiles from each other, provided $PRODUCT_NAME is run in a section of the site protected by username/password authentication. For instance, you can run $PRODUCT_NAME in CGI mode, protect the $PRODUCT_NAME directory using authentication, turn on this option, and send the CGI URL to your users, so they will be able to log in to $PRODUCT_NAME with web server authentication, and they will only be able to see their own profiles. This option is only useful in CGI mode, and should not be turned on in web server mode (if it is turned on, it will make all profiles invisible), unless you are also running in CGI mode. " } # show_only_remote_user_profiles temporary_profile_permissions = { label = "Temporary profile file permissions" short_description = "The permissions $PRODUCT_NAME uses when creating a temporary profile file" long_description = "This specifies the file permissions to use when creating a temporary profile file. This is a UNIX-style chmod value, a 3- or 4-digit octal number (see {=docs_chapter_link('permissions')=})." } # temporary_profile_permissions # KHP 11/Aug/2009 - trusted_hosts are no longer valid # trusted_hosts = { # label = "Trusted hosts" # short_description = "The hostnames of computers which are \"trusted,\" and do not need to enter passwords" # long_description = "This is a list of the hostnames of computers which are trusted. Hostnames should be separated from each other by spaces. Any browsing host which contains any of the listed hostnames as part of its hostname will be trusted, so entire subdomains can be trusted by entering the domain. Example:If you are connecting from a trusted host, it may be difficult to remove that trusted host using the web interface, because $PRODUCT_NAME will refuse to allow you administrative access to change the trusted host, because your host will no longer be trusted. One solution to this is to modify the preferences.cfg file (in the LogAnalysisInfo $lang_stats.directory) manually, with a text editor, to remove the trusted host. Another solution is to connect from another system, log in normally, and remove the trusted host that way." # } # trusted_hosts ldap_server_hostname = { label = "LDAP server hostname" short_description = "The hostname to be used for LDAP authentication (LDAP login plug-in required)" long_description = `This option specifies the hostname of the LDAP server. This is only used when using the LDAP plug-in. See Using The LDAP Plug-in.` } # ldap_server_hostname ldap_administrator_dn = { label = "LDAP administrator DN" short_description = "" long_description = `This option specifies the full DN of an LDAP account used for querying the directory when authenticating with the LDAP plug-in, e.g., 'CN=Some Guy,DN=somewhere,DN=com'. See Using The LDAP Plug-in.` } # ldap_administrator_dn ldap_administrator_password = { label = "LDAP administrator password" short_description = "" long_description = `This option specifies the password of the LDAP account used for querying the directory when authenticating with the LDAP plug-in, whose DN is specified in {=docs_option_link('preferences.security.ldap_administrator_dn')=}. See Using The LDAP Plug-in.` } # ldap_administrator_password ldap_administrator_dn = { label = "LDAP administrator DN" short_description = "" long_description = `This option specifies the full DN of an LDAP account used for querying the directory when authenticating with the LDAP plug-in, e.g., 'CN=Some Guy,DN=somewhere,DN=com'. See Using The LDAP Plug-in.` } # ldap_administrator_dn ldap_administrator_password = { label = "LDAP administrator password" short_description = "" long_description = `This option specifies the password of the LDAP account used for querying the directory when authenticating with the LDAP plug-in, whose CN is specified in {=docs_option_link('preferences.security.ldap_administrator_dn')=}. See Using The LDAP Plug-in.` } # ldap_administrator_password use_ssl_for_ldap = { label = "Use SSL for LDAP" short_description = "Whether to use SSL to encrypt connections to the LDAP server" long_description = `This option specifies whether to use SSL for LDAP server connections. This is only used when using the LDAP plug-in (see Using The LDAP Plug-in).` } # use_ssl_for_ldap ldap_base = { label = "LDAP Users base DN" short_description = "The base DN to use for LDAP authentication" long_description = `This specifies the base DN to use for LDAP authentication. This is the DN containing all the users who may log in to $PRODUCT_NAME. This is only used when using the LDAP plug-in (see Using The LDAP Plug-in).` } # ldap_base ldap_username_label = { label = "LDAP Username attribute name" short_description = "The attribute (e.g., CN or sAMAccountName) containing the login username for LDAP" long_description = `This specifies the attribute (e.g., CN or sAMAccountName) which is used when building an LDAP DN for binding to the LDAP server. I.e., this is the name of the attribute that holds the username that is going to be entered in the Username field, when logging into $PRODUCT_NAME. This is only used when using the LDAP plug-in (see Using The LDAP Plug-in).` } # ldap_username_label } # security server = { cgi_directory = { label = "CGI $lang_stats.directory" short_description = "The $lang_stats.directory containing $PRODUCT_NAME, relative to the server root" long_description = "This is the $lang_stats.directory containing the $PRODUCT_NAME CGI program, relative to the root of the web server. This should be as it appears in a URL; forward slashes (/) should separate sub$lang_stats.directories. It should begin and end with a forward slash (/), unless it is empty (i.e. $PRODUCT_NAME is in the root $lang_stats.directory). For instance, if the $PRODUCT_NAME CGI program is inside the \"$PRODUCT_EXECUTABLE_DOCS\" $lang_stats.directory, which is inside the \"scripts\" $lang_stats.directory of your web server, then this should be /scripts/$PRODUCT_EXECUTABLE_DOCS/. This is used in the rare cases when $PRODUCT_NAME needs to build a full (non-relative) URL for itself, ex.
$PRODUCT_NAME can automatically compute all parts of the URL except the CGI $lang_stats.directory part (\"/cgi-bin/\" above); this option specifies that part." is_empty_message = "Please define a value for field \"$lang_options.preferences.server.cgi_directory.label\"." } # cgi_directory maximum_number_of_threads = { label = "Maximum simultaneous connections" short_description = "Maximum number of simultaneous connections that $PRODUCT_NAME will accept on its web server" long_description = "This specifies the maximum number of simultaneous tasks (threads of execution) that $PRODUCT_NAME will perform at a time, in web server mode. When a user attempts to use the built-in web server, $PRODUCT_NAME will check if there are already this many threads or connections actively in use. If there are, $PRODUCT_NAME will respond with a \"too busy\" page. Otherwise, the connection will be allowed. This prevents $PRODUCT_NAME from becoming overloaded if too many people try to use it at the same time, or if one user works it too hard (for instance, by rapidly and repeatedly clicking on a view button in the statistics)." is_invalid_int_min_message = "The value of field \"$lang_options.preferences.server.maximum_number_of_threads.label\" must be of type integer and greater or equal $option_info.preferences.server.maximum_number_of_threads.minimum_value." } # maximum_number_of_threads server_hostname = { label = "Web server IP address" short_description = "The IP address to run $PRODUCT_NAME's web server on" long_description = "This specifies the IP address $PRODUCT_NAME should run its web server on. $PRODUCT_NAME uses all available IPs by default, but if you want to have $PRODUCT_NAME's web server bind only to a specific IP, you can set this option. $PRODUCT_NAME uses the IP address you specify here as the IP address the server runs on." } # server_hostname cookie_domain = { label = "Cookie domain" short_description = "The domain to use in cookies sent to the browser" long_description = "This specifies domain to use in cookies sent to the browser" } # cookie_domain server_root = { label = "Root URL of log data server" } temporary_directory_pathname = { label = "Temporary $lang_stats.directory" short_description = "A $lang_stats.directory on the web server running $PRODUCT_NAME as a CGI program, from which images can be served" long_description = " This specifies a $lang_stats.directory on the web server which is running $PRODUCT_NAME as a CGI program. This $lang_stats.directory will be used to serve the images which will be embedded in $PRODUCT_NAME's HTML pages. This $lang_stats.directory must be accessible to $PRODUCT_NAME as a local $lang_stats.directory on the machine running $PRODUCT_NAME, and must also be accessible through a web browser by connecting to the web server running $(PRODUCT_NAME). In other words, it must be inside the root $lang_stats.directory of the web server running $(PRODUCT_NAME). The $lang_stats.directory specified by this option must match the URL specified by {=docs_option_link('tdu')=}. In other words, the value specified here, which is a pathname local to the machine running $PRODUCT_NAME (see {=docs_chapter_link('pathnames')=}), must refer to the same $lang_stats.directory which is specified by the URL in {=docs_option_link('tdu')=}. It may be specified either as a full pathname, or as a pathname relative to the $lang_stats.directory containing $PRODUCT_NAME (e.g. ../html/$PRODUCT_EXECUTABLE_DOCS, if your server is UNIX and your site's root directory is called html and is next to cgi-bin). See {=docs_chapter_link('sdinfo')=}." } # temporary_directory_pathname temporary_directory_url = { label = "Temporary $lang_stats.directory URL" short_description = "The URL of a $lang_stats.directory on the web server running $PRODUCT_NAME as a CGI program, from which images can be served" long_description = "This specifies the URL of a $lang_stats.directory on the web server which is running $PRODUCT_NAME as a CGI program. This $lang_stats.directory will be used to serve the images which will be embedded in $PRODUCT_NAME's HTML pages. This $lang_stats.directory must be accessible to $PRODUCT_NAME as a local $lang_stats.directory on the machine running $PRODUCT_NAME, and must also be accessible through a web browser by connecting to the web server running $(PRODUCT_NAME). Therefore, it must be inside the root $lang_stats.directory of the web server running $(PRODUCT_NAME). The URL specified by this option must match the $lang_stats.directory specified by {=docs_option_link('tdp')=}. In other words, the value specified here, which is specified by URL, must refer to the same $lang_stats.directory which is specified by local pathname in {=docs_option_link('tdp')=}. See {=docs_chapter_link('sdinfo')=}." } # temporary_directory_url web_server_port = { label = "Web server port" short_description = "The port to listen on as a web server" long_description = "This specifies the port $PRODUCT_NAME should listen on when it runs as a web server. See {=docs_option_link('ws')=}." is_invalid_int_min_max_message = "The value of field \"$lang_options.preferences.server.web_server_port.label\" must be of type integer between $option_info.preferences.server.web_server_port.minimum_value and $option_info.preferences.server.web_server_port.maximum_value." } # web_server_port https = { label = "Use HTTPS" short_description = "This option specifies whether the web server uses HTTPS" long_description = "This option specifies whether the built-in web server uses a Secure Socket Layer (SSL) on top of its HTTP server, to create an HTTPS server. When this option is checked (true), the server will use HTTPS, using the certificate file server.crt and the public key file server.key, both in the LogAnalysisInfo $lang_stats.directory. When this option is unchecked (false), the server will use HTTP. HTTPS is more secure, as communications between the web browser and $PRODUCT_NAME (like the password login) cannot be intercepted; but it adds some additional complexity, slowing down the web browser, and also requires that the SSL library be present on the system, and that a certificate and public key (as generated by the OpenSSL command line tools, for instance) be present." } # https maximum_memory_usage_type = { label = "Maximum memory usage type" short_description = "The type of memory management to use" long_description = "This specifies the type of memory management to use. Options are auto_dedicated, auto_shared, and custom. auto_dedicated tells $PRODUCT_NAME that it may allocate memory as though it were the main program running on a dedicated server. This gives highest performance to $(PRODUCT_NAME) on a dedicated server; but if other programs on the system use much RAM, it can slow performance. auto_shared tells $PRODUCT_NAME that it should use only a small portion of the total system memory. This setting it appropriate if $PRODUCT_NAME is only one of several major programs running on the server; it leaves most of the resources for other programs to use. custom tells $PRODUCT_NAME that it should use no more than the amount of memory specified in {=docs_option_link('preferences.server.maximum_memory_usage_size')=}." } # maximum_memory_usage_type maximum_memory_usage_size = { label = "Maximum memory usage size" short_description = "The maximum memory to use, when custom memory management is used." long_description = "This specifies the maximum memory to use, when {=docs_option_link('preferences.server.maximum_memory_usage_type')=} is set to custom." } # maximum_memory_usage_size } # server password = { password_expires = { label = "Password expires" short_description = "True if passwords expire after a specific amount of time" long_description = "This specifies whether passwords expire after a time. When this option is true, users will be prompted to change their password a fixed number of days ({=docs_option_link('preferences.password.days_until_password_expiration')=}) after their previous password change. When this option is false, users will never be required to change their password." } # password_expires days_until_password_expiration = { label = "Days until password expiration" short_description = "The number of days before passwords expire" long_description = "This specifies the number of days before passwords expire. When {=docs_option_link('preferences.password.password_expires')=} is true, users will be prompted to change their password this many days after their previous password change" } # days_until_password_expiration minimum_length = { label = "Minimum length" short_description = "The minimum number of characters in a password" long_description = "This specifies the minimum number of characters in a password (the length of the password, in characters) for it to be accepted as a valid new password." } # minimum_length prevent_use_of_previous_passwords = { label = "Prevent use of previous passwords" short_description = "Whether to prevent a users' previous passwords from being reused by that user" long_description = "This specifies whether passwords can be re-used during a password change. If this option is true, previous password for the user will be checked against the new password, and the password change will only be allowed if none of the past few passwords ({=docs_option_link('preferences.password.number_of_previous_passwords_to_check')=}) matches the new one. When this option is false, passwords will not be checked against past passwords, so passwords may be re-used (even the immediately previous password)." } # prevent_use_of_previous_passwords number_of_previous_passwords_to_check = { label = "Number of previous passwords to check" short_description = "The number of passwords to check when looking for password reuse" long_description = "This specifies the number of previous passwords to check when looking for re-used passwords during a password change. This option is used when {=docs_option_link('preferences.password.prevent_use_of_previous_passwords')=} is true, to determine how many historical passwords to examine." } # number_of_previous_passwords_to_check requires_letter = { label = "Require letter" short_description = "Whether to require a letter (alphabetic character) in passwords" long_description = "This specifies whether new passwords must include a letter (alphabetic character A-Z or a-z). When this option is true, new passwords must contain a letter, and will be rejected during a password change if they do not." } # requires_letter requires_mixed_case = { label = "Require mixed case" short_description = "Whether to require both uppercase and lowercase letters in passwords" long_description = "This specifies whether new passwords must include both an uppercase letter (A-Z) and a lowercase letter (a-z). When this option is true, new passwords must contain both cases, and will be rejected during a password change if they do not." } # requires_mixed_case requires_digit = { label = "Require digit" short_description = "Whether to require a digit in passwords" long_description = "This specifies whether new passwords must include a digit (0-9). When this option is true, new passwords must contain a digit, and will be rejected during a password change if they do not." } # requires_digit requires_symbol = { label = "Require symbol" short_description = "Whether to require a symbol in passwords" long_description = "This specifies whether new passwords must include a symbol (any non-alphanumerical character, i.e., any character not in the range A-Z, a-z, or 0-9). When this option is true, new passwords must contain a symbol, and will be rejected during a password change if they do not." } # requires_symbol } # password } # preferences profile = { label = "Profile name" database = { cross_reference_groups = { # ToDo, short_description and long_description of cross_reference_groups belong probably to docs # label = "Cross-reference Groups" # short_description = "Cross-referencing group information" # long_description = "This option specifies the cross-referencing groups used in the database. It controls which fields can be cross-referenced against each other, or in another way of looking at it, it controls which fields can be simultaneously filtered quickly (it is always possible to use any combination of filters, but if the combination selected is not precomputed in a cross-reference group, it will be much slower to view statistics with that filter set active). For an overview of cross-referencing and simultaneous filters, see {=docs_chapter_link('xref')=}." use_flat_table = { label = "Use flat table" short_description = "Use a flat (non-hierarchical) structure in this cross-reference table" long_description = "This option specifies whether to use a flat structure, or a hierarchical, for this cross-reference table. If the structure is flat, hierarchical fields like \"page\" fields will have values cached only for the bottom-level items (individual files, in the case of page fields); if the structure is hierarchical, hierarchical fields will also have values cached in this table for internal levels of the hierarchy (directories or folders, in the case of page fields). Flat tables are faster to build, which speeds database builds and updates; but the bottom-level items must be aggregated when generating reports, which slows reporting speed. See {=docs_chapter_link('hierarchies')=} for more information on field hierarchies." } # use_flat_table } # cross_reference_groups fields = { label = "Database Fields" short_description = "The type and structure of the fields of the database" long_description = "
This specifies the type and structure of the fields of the database. See {=docs_chapter_link('hierarchies')=} for information on the different fields.
Each field in the database represents one way that the log data is broken down. For instance, if the database has two fields, a page field and a host field, then it will be possible to view the log data broken down by page, or by host, or in combinations of page and host.
There are four options which can be set for each field:
This defines of how to aggregate database field values when processing the database. Use \"None\" for non-numerical fields and \"Sum\", \"Min\", \"Max\", \"Count\" or \"Unique\" for numerical fields.
Note, the aggregation method in database fields does not define how to aggregate totals!
" } # aggregation_method index = { label = "Index" short_description = "Index this database field" long_description = "This option specifies whether this database field should be indexed, or not. If this option is true (checked), $PRODUCT_NAME will build an index for this field in the database, during database build, and will update the index during database update. This takes some time, and will slow database builds and updates; however, an indexed field can be filtered on much more efficiently with a report filter, especially if the set of rows selected by the filter is small. So this option speeds up report, especially deep drill-downs, but slows database builds." } # index always_include_bottom_level_items = { label = "Always include bottom level items" short_description = "Specifies whether bottom-level items should be included in the field hierarchy" long_description = "This controls whether the bottom-level \"leaf\" subitems should always be included in the database, regardless of the suppress/collapse settings. When this value is true, the bottom-most level is always included in the database, even if it would normally be suppressed. For instance, in a page field, all pages (but not all directories) would be included in the database, regardless of how far down they are. In a host field, the machine name would be included even if the domains containing it have been suppressed. When this value is false, the suppress option determines whether bottom-level items are included in the database." } # always_include_bottom_level_items # average_denominator_field = { # label = "Average denominator field" # short_description = "" # long_description = "" # } # average_denominator_field log_field = { label = "Log field" short_description = "" long_description = "" } # log_field # session_field = { # label = "Session field" # short_description = "" # long_description = "" # } # session_field suppress_bottom = { label = "Suppress levels below" short_description = "Specifies the level number, below which items should be suppressed in the field hierarchy" long_description = "This controls the number of levels to suppress at the bottom of the hierarchy for this field. If this is set to 0, no levels will be suppressed at the bottom. For other values, all items more than that number of levels deep will be suppressed. For instance, if it is set to 2 for the page field, the first-level items (/mydir/, /index.html) and second-level items (/mydir/mysubdir/, /mydir/index.html) will be included, but third-level items like /mydir/mysubdir/dir2/will not be included in the statistics (the events associated with the items will still be shown on the higher-level directories, but they themselves will not be available for zooming in). This can be useful if you have a very large hierarchy and you don't need all the information at the bottom; setting this to a low value will reduce the size and increase the speed of your database." } # suppress_bottom suppress_top = { label = "Suppress levels above" short_description = "Specifies the level number, above which items should be suppressed in the field hierarchy" long_description = "This controls the number of levels to suppress at the top of the hierarchy for this field. If this is set to 0, no levels will be suppressed at the top. For instance, for a page field, a value of 0 will show top-level directories and files (e.g. /mydir/, /index.html) in the top view; a value of 1 will show second-level directories and files (e.g. /mydir/mysubdir/, /mydir/index.html) as well as top-level directories. This option is usually best left at 0, but it can be useful in some cases if you want to see several levels at once in a single report. See also {=docs_chapter_link('hierarchies')=}." } # suppress_top type = { label = "Type" short_description = "" long_description = "" } # type category = { label = "Category" short_description = "" long_description = "" } # category itemnums_hash_function = { label = "Itemnums hash function" short_description = "This specifies the hash function used for this database field's itemnums hash table" long_description = "This specifies the hash function used when inserting or looking up items in this database field's itemnums hash table. The itemnums hash table is part of the normalization structure used internally to convert values of the field to integers. It is not usually necessary to change this value, but in some cases, the default hash function will be slow for certain fields, and this option can improve performance. Possible values are mult_sum_c_i, mult_sum_c_i_8, shift_sum, rand_sum, and rand_sum_shift." } sql_field_length = { label = "Field length" short_description = "The maximum length of the field, in characters, in the SQL database" long_description = "This specifies the maximum length of the field, in character, in the SQL database (including the internal database). Setting this to a lower value may save some space in the SQL database, but causes all values to be truncated to the number of characters specified. Setting it to a higher value allows more characters to be tracked in the database." } # sql_field_length # KHP 09/April/2012 - integer_bits are depreccated # integer_bits = { # label = "Integer bits" # short_description = "" # long_description = "This determines the number of bits used in the database to represent the integer values in a database field (including itemnum fields). Setting integer bits to \"Auto\" means that it will use the maximum efficient machine word size, e.g., 32 bits on a 32-bit system, or 64 bits on a 64-bit system." # } # integer_bits single_value_integer_bits = { label = "Single value integer bits" short_description = "" long_description = "This determines the number of bits used in the database to represent the integer values in a database field (including itemnum fields), when they appear non-aggregated, as in the main_table. A value of 0 (Auto) intelligently chooses the number of bits, generally using as many as can reasonable be expected to be required by the specific field. Single value integer bits is used for all fields which are represented by integers in the database, which is anything that isn't a floating point number." } # single_value_integer_bits aggregated_value_integer_bits = { label = "Aggregated value integer bits" short_description = "" long_description = "This determines the number of bits used in the database to represent the integer values in a database field (including itemnum fields), when they appear aggregated, as in the cross-reference tables. A value of 0 (Auto) intelligently chooses the number of bits, generally using as many as can reasonable be expected to be required by the specific field. Aggregated value integer bits is used for all fields which are represented by integers in the database, which is anything that isn't a floating point number." } # aggregated_value_integer_bits } # fields options = { label = "Database Options" # edit_button = "Edit Database Options" # edit_form_title = "Edit Database Options" option_group = true server_not_found_message = "SQL server not found." automatically_update_when_older_than = { label = "Automatically update database when older than" label_2 = "seconds" short_description = "Automatically update the database when the statistics are viewed and the database has not been updated in this many seconds" long_description = "This controls whether $PRODUCT_NAME automatically updates the database when the statistics are viewed. When this option is disabled, $PRODUCT_NAME never updates or creates the database unless you manually tell it to. When this option is enabled, it specifies the number of seconds old a database can be before it is automatically updated when the statistics are viewed. For instance, if the value is 3600, $PRODUCT_NAME will automatically update the database when the statistics are viewed if it has not updated the database in the past hour (3600 seconds = 1 hour). If this value is 86400, $PRODUCT_NAME will only update if the database has not been updated in the past day (86400 seconds = 1 day). Regardless of the setting of this option, $PRODUCT_NAME will build the database from scratch when the statistics are viewed if the database has never been built before.
" is_invalid_number_message = "Please define a valid update time, the number in seconds must be >= 1." } # automatically_update_when_older_than # 09/Dec/2008 - KHP - prompt_before_erasing_database is not anymore valid because we always prompt # prompt_before_erasing_database = { # label = "Prompt before erasing database" # short_description = "True if $PRODUCT_NAME should prompt before erasing a non-empty database" # long_description = "This controls whether $PRODUCT_NAME will prompt for verification before erasing an existing disk-based database. If this option is true, and Rebuild Database is clicked, $PRODUCT_NAME will ask if you really want to destroy all data in the database. If this option is false, $PRODUCT_NAME will erase the database without asking, and rebuild it from the log data." # } # prompt_before_erasing_database # 06/Nov/2007 - KHP - Deprecated # # database_directory = { # label = "Database $lang_stats.directory" # short_description = "The location of the database" # long_description = "This is the pathname of a database on disk. If this option is blank, $PRODUCT_NAME will store the database in a $lang_stats.directory with the same name as the profile, in the Databases $lang_stats.directory in the LogAnalysisInfo $(lang_stats.directory).
Information from log files is stored in this database, and when reports are generated, they are generated using the information in the database. See {=docs_chapter_link('database')=}." # is_empty_message = "Please define a database $lang_stats.directory." # } # database_directory # database_type = { # label = "Database type" # internal = { # label = "Internal" # } # internal # mysql = { # label = "MySQL" # } # mysql # } # database_type # 2007-06-04 - GMF - Deprecated # lock_database_when_in_use = { # label = "Lock database when in use" # } # lock_database_when_in_use # 06/Nov/2007 - KHP - Deprecated # mysql_server_hostname = { # label = "Hostname" # short_description = "The hostname of the MySQL server" # long_description = "This specifies the hostname or IP of the MySQL server used as the back-end database" # is_empty_message = "Please define a hostname." # } # mysql_server_hostname # mysql_server_password = { # label = "Password" # short_description = "The password of the MySQL server" # long_description = "This specifies the password to use to access the MySQL server used as the back-end database" # } # mysql_server_password # mysql_server_username = { # label = "Username" # short_description = "The username of the MySQL server" # long_description = "This specifies the username to use to access the MySQL server uses as the back-end database" # is_empty_message = "Please define a username." # } # mysql_server_username # mysql_database_name = { # label = "Database name" # short_description = "The name of the MySQL database" # long_description = "This specifies the name of the database on the MySQL server uses as the back-end database" # is_empty_message = "Please define a database name." # is_invalid_name_message = "Invalid characters in database name. Please use only alphanumeric characters and underscores without any spaces in the database name." # leave_blank_to_use_profile_name_info = "(leave blank to use the profile name)" # field_info = "The database name is the name of the target database where $PRODUCT_NAME will store the processed data." # field_info_2 = "The database name should be unique for this profile; you cannot point two profiles to the same database. This should also be used only by $PRODUCT_NAME; you should not point $PRODUCT_NAME to an existing database which is being used for some other purpose. $PRODUCT_NAME will create the database if it does not exist." # field_info_3 = "Leave the database name field blank to use the profile name as the database name." # } # mysql_database_name # mysql_server_socket = { # label = "MySQL socket" # short_description = "The socket file to use to access MySQL" # long_description = "This specifies the socket to use to access MySQL, if a socket is used instead of TCP/IP. If this option is blank, the default socket is used." # } # mysql_server_socket server = { type = { label = "Database server type" short_description = "" long_description = "" } # type dsn = { label = "DSN" short_description = "" long_description = "" } # dsn hostname = { label = "Hostname" short_description = "The hostname of the MySQL server." long_description = "This specifies the hostname or IP of the MySQL server used as the back-end database." is_empty_message = "Please define a hostname." } username = { label = "Username" short_description = "" long_description = "" is_empty_message = "Please define a username." } # username password = { label = "Password" short_description = "" long_description = "" } # password database_name = { label = "Database name" short_description = "The name of the target SQL database where $PRODUCT_NAME will store the processed data." long_description = "This specifies the name of the database on the SQL server used as the back-end database.
The database name should be unique for this profile; you should not point two profiles to the same database unless you want to share the database among two or more profiles. This should also be used only by Sawmill; you should not point Sawmill to an existing database which is being used for some other purpose. Sawmill will create the database if it does not exist.
Sharing a database among two or more profiles should only be used when these profiles point to the same log source, respectively use exactly the same log data. Sharing a database is useful when requiring different profiles with different access rights. I.e., a marketing manager could access a profile with different reports than an administrator.
" is_empty_message = "Please define a database name." is_invalid_name_message = "Invalid characters in database name. Please use only alphanumeric characters and underscores without any spaces in the database name. " leave_blank_to_use_profile_name_info = "(leave blank to use the profile name)" # field_info = "The database name is the name of the target database where $PRODUCT_NAME will store the processed data." # field_info_2 = "The database name should be unique for this profile; you cannot point two profiles to the same database. This should also be used only by $PRODUCT_NAME; you should not point $PRODUCT_NAME to an existing database which is being used for some other purpose. $PRODUCT_NAME will create the database if it does not exist." # field_info_3 = "Leave the database name field blank to use the profile name as the database name." } # database_name sql_table_name_prefix = { label = "SQL table name prefix" short_description = "A prefix to add to the beginning of every SQL table name" long_description = `This specifies a prefix to add to the beginning of every table name in the database. This can be used to share a single database between multiple profiles, by separating them into "namespaces" using a different prefix for each profile.` } # sql_table_name_prefix sql_table_name_suffix = { label = "SQL table name suffix" short_description = "A suffix to add to the end of every SQL table name" long_description = `This specifies a suffix to add to the end of every table name in the database. This can be used to share a single database between multiple profiles, by separating them into "namespaces" using a different suffix for each profile.` } # sql_table_table_suffix database_directory = { label = "Database $lang_stats.directory" short_description = "The location of the internal database" long_description = "This is the pathname of an internal database on disk. If this option is blank, $PRODUCT_NAME will store the database in a $lang_stats.directory with the same name as the profile, in the Databases $lang_stats.directory in the LogAnalysisInfo $(lang_stats.directory).Information from log files is stored in this database, and when reports are generated, they are generated using the information in the database. See {=docs_chapter_link('database')=}." } # database_directory server_socket = { label = "Server socket" short_description = "The socket file to use to access MySQL" long_description = "This specifies the socket to use to access MySQL, if a socket is used instead of TCP/IP. If this option is blank, the default socket is used." } # server_socket bulk_import_method = { label = "Bulk import method" short_description = "The method used to import data in bulk into databases" long_description = `
This specifies the method used to import data in bulk into databases, during database builds and updates.
With a Microsoft SQL Server profile, the choices are "ODBC" and "bulk_insert". ODBC will work in all cases, but is slower (sometimes much slower). bulk_insert is usually faster, but requires the use of a temporary directory specified ({=docs_option_link('database.options.server.load_data_directory')=} and {=docs_option_link('database.options.server.load_data_directory_on_server')=}) which must be accessible to both the SQL Server and to $PRODUCT_NAME. One way to do this (the fastest way) is to have both installed on the same server; if that's not possible, then there must be a share mapped to both servers, and the temporary directory must be a UNC path to that share.
With an Oracle profile, the choices for are "ODBC" and "sqlldr". ODBC will work in all cases, but is slower; sqlldr is much faster, but requires $PRODUCT_NAME to be running as a user with access to the sqlldr program (which must also be in the executable path) to load data into the database.
With a MySQL profile, the choices are "load_data_local_infile" or "load_data_server_infile"; with the first option, data loads are done with a LOAD DATA LOCAL INFILE query, which works whether MYSQL is local or not, but is not permitted in some configurations of MySQL; with the second option, data loads are done with LOAD DATA INFILE, putting temporary files in the location specified by {=docs_option_link('database.options.server.load_data_directory')=}, which requires the MySQL server to be running locally, or at least have access to the disk where $PRODUCT_NAME is running.
With other databases, this option has no effect.
` } # bulk_import_method load_data_directory = { label = "Load data directory" short_description = "The directory used to store files for loading into the database" long_description = `This option is used in MySQL and Microsoft SQL Server profiles when the {=docs_option_link('database.options.server.bulk_import_method')=} option is set to load_data_server_infile or bulk_insert. It specifies the temporary directory where $PRODUCT_NAME should store intermediate files for upload into MySQL, while building or updating a database. If using MySQL, it must be a directory which is accessible, by the same pathname, to both the SQL server, and $PRODUCT_NAME; if using MS SQL, it must be accessible to $PRODUCT_NAME, and the server must be able to reach it from the location specified by {=docs_option_link('database.options.server.load_data_directory_on_server')=}.
` } # load_data_directory load_data_directory_on_server = { label = "Load data directory on database server" short_description = "The directory used by the database server to read temporary files for loading into the database" long_description = `This option is used in Microsoft SQL Server profiles when the {=docs_option_link('database.options.server.bulk_import_method')=} option is set to bulk_insert. It specifies the temporary directory where the server should read intermediate files for upload into the database, while building or updating a database. $PRODUCT_NAME will write these files to {=docs_option_link('database.options.server.load_data_directory')=}, and the server will read them from this location, which must point to the same directory. For instance, this could be a physical disk on the server, mapped to the $PRODUCT_NAME system, referred to in this option by its physical name and referred in {=docs_option_link('database.options.server.load_data_directory')=} by its network share path.
` } # load_data_directory_on_server } # server } # options tuning = { label = "Database Tuning" option_group = true edit_button = "Edit Database Tuning" edit_form_title = "Edit Database Tuning" is_invalid_byte_number_message = "Please define a valid number for \"$param1\"." split_queries = { method = { label = "Method for splitting SSQL queries" short_description = "Specifies the method for splitting SSQL queries" long_description = `This option specifies the method used to split large SSQL queries across multiple threads, to improve performance. If this option is "auto", SSQL queries are split into as many threads as there are processing cores (usually a good default); so for instance, on a 4-processor system with four cores per processor, large SSQL queries would be split into 16 subqueries, which will run them much faster than a single processing core. If this option is "custom", then the number of threads is specified by the {=docs_option_link('database.tuning.split_queries.number_of_threads')=} option. If this option is "none", then query splitting does not occur, and all queries are run in the main thread. Splitting queries can significantly speed the performance of long queries on large datasets. SSQL queries are used to generate table reports, compute session information, build cross-reference tables, and more, so this option affects the performance of many operations. Because of the overhead of re-joining the results of each thread, query splitting is only done for large queries; small queries are always run with one thread.` } # method number_of_threads = { label = "Number of threads for splitting SSQL queries" short_description = "Specifies the number of threads for splitting SSQL queries" long_description = `This option specifies the number of threads used to split large SSQL queries across multiple threads, to improve performance. This option is used when the {=docs_option_link('database.tuning.split_queries.method')=} option is "custom"; otherwise, it has no effect.` } # number_of_threads } # split_queries # update_xrefs_on_update = { KHP 20/Dec/2011 - deprecated # label = "Update/build xref tables after updating/building database" # short_description = "Update or build all xref tables automatically, after completing a database build or update" # long_description = "This option specifies whether cross-reference tables should automatically be kept up to date with the main table of the database. If this is true, it rebuilds or updates all cross-reference tables immediately after building or updating the main table of the database. This extra step takes additional time, so it slows the database build or update. However, if a cross-reference table is not up to date when a report which depends on it is generated, the cross-reference table will have to be built at that time, before the report can be displayed, which can slow down the display of that report significantly. Turn this option on for better report generation performance; turn it off for better database build/update performnace." # } # update_xrefs_on_update build_all_indices_simultaneously = { label = "Build all indices simultaneously" short_description = "Build all indices simultaneously after processing log data, for better performance" long_description = "This option affects the stage of log processing when indices are rebuilt. This option only has an effect if {=docs_option_link('bidlp')=} is false. If this option is true, $PRODUCT_NAME will scan through the main database table just once during the index rebuilding stage, building all indices simultaneously. If this option is false, $PRODUCT_NAME will build each index separately, scanning through the main table once per index. Turning this option on can greatly speed up index building by combining all the table scans into one, but will use much more memory, since all indices will need to be in memory at the same time. See also {=docs_option_link('bxtais')=}." } # build_all_indices_simultaneously build_all_xref_tables_simultaneously = { label = "Build all cross-reference tables simultaneously" short_description = "Build all cross-reference tables simultaneously after processing log data, for better performance" long_description = "This option affects the stage of log processing when cross-reference tables are rebuilt. This option only has an effect if {=docs_option_link('bxtdlp')=} is false. If this option is true, $PRODUCT_NAME will scan through the main database table just once during the cross-reference rebuilding stage, building all cross-reference tables simultaneously. If this option is false, $PRODUCT_NAME will build each cross-reference table separately, scanning through the main table once per cross-reference table. Turning this option on can greatly speed up cross-reference building by combining all the table scans into one, but will use much more memory, since all cross-reference tables will need to be in memory at the same time. See also {=docs_option_link('bxtais')=}." } # build_all_xref_tables_simultaneously # build_xref_tables_in_threads = { KHP 20/Dec/2011 - deprecated # label = "Build cross-reference tables in threads" # short_description = "Build cross-reference tables in threads, and merge them at the end" # long_description = "This option affects multi-processor database builds. When this option is true, each thread (processor) builds the cross-reference tables for its part of the database separately, and they are merged in a final stage to create the cross-reference tables for the main database. When this option is false, threads do not build cross-reference tables; the cross-reference tables are built in the final stage from the main table (which is merged from the threads' main tables). If your system has fast disk I/O, it is generally best to leave this on, to spend as much time as possible using all processors. But if disk I/O is slow, the I/O contention between processes may slow both threads down to the point that using multiple processors is actually slower than using one." # } # build_xref_tables_in_threads build_indices_in_threads = { label = "Build indices in threads" short_description = "Build indices in threads, and merge them at the end" long_description = "This option affects multi-processor database builds. When this option is true, each thread (processor) builds the indices for its part of the database separately, and they are merged in a final stage to create the indices for the main database. When this option is false, threads do not build indices; the indices are built in the final stage from the main table (which is merged from the threads' main tables). If your system has fast disk I/O, it is generally best to leave this on, to spend as much time as possible using all processors. But if disk I/O is slow, the I/O contention between processes may slow both threads down to the point that using multiple processors is actually slower than using one." } # build_indices_in_threads build_indices_in_memory = { label = "Build indices in memory" short_description = "Build indices in memory, rather than using memory-mapped files on disk" long_description = "When this option is true, database indices are held completely in memory during database builds. When this option is false, database indices are mapped to files on the disk. Keeping the indices in memory can increase the performance of the index building part of database builds, sometimes by a factor of 3x or more, but requires enough memory to hold the indices (which can exceed 1G in some cases)." } # build_indices_in_threads build_indices_during_log_processing = { label = "Build indices during log processing" short_description = "Build indices on the fly while log data is read, rather than in a separate stage" long_description = "This option affects the stages of log processing when indices are built. When this option is true, indices are kept in memory during log processing, and are incrementally updated on the fly as new log lines are processed. When this option is false, indices are updated in a single stage after all log data has been processed. Turning this option on can speed database building because it eliminates the need to re-read the main database table after processing log data, but can require much more memory, because all indices must be kept in memory while log data is processed." } # build_indices_during_log_processing keep_itemnums_in_memory = { label = "Keep itemnums in memory" short_description = "Keep the itemnum tables in memory, rather than keeping them on disk" long_description = "When this option is true, database itemnum tables (internal tables which convert from database field values to numbers, and back) are held completely in memory. When this option is false, itemnum tables are kept on disk. Turning this on makes most operations, especially database builds, much faster, but can require huge amounts of memory if huge itemnum tables are required." } # keep_itemnums_in_memory segment_xrefs = { label = "Segment cross-reference Tables" short_description = "Split large cross-reference tables into segments, to keep memory usage down, at a cost in performance" long_description = "When this option is true, cross-reference tables will be split into segments during database building, and then merged into a final single table, to keep their memory usage from growing too high. This makes database builds slower, but allows larger databases to be built without running out of memory." } # segment_xrefs # KHP 20/Sep/2011 - disabled #itemnums_cache_size = { # label = "Itemnums cache size" # short_description = "The size of the cache in memory for itemnums, which is used to speed up access to itemnums tables on disk" # long_description = "This specifies the amount of memory to use for the itemnums cache. This is used, when {=docs_option_link('kiim')=} is false, to speed up access to the itemnums tables on disk. When {=docs_option_link('kiim')=} is true, this has no effect." #} # itemnums_cache_size # KHP 20/Sep/2011 - disabled #xref_tables_cache_size = { # label = "Cross-reference tables cache size" # short_description = "The size of the cache in memory for cross-reference, which is used to speed up access to cross-reference tables on disk" # long_description = "This specifies the amount of memory to use for the cross-reference tables cache. This is used to speed up access to the itemnums tables on disk; the more memory available for the cache, the faster cross-reference table access will be (especially during database builds and updates)." #} # xref_tables_cache_size build_xref_tables_and_indices_simultaneously = { label = "Build cross-reference tables and indices simultaneously" short_description = "Build cross-reference tables and indices simultaneously after processing log data, for better performance" long_description = "This option affects the stages of log processing when cross-reference tables indices are rebuilt. This option only has an effect if {=docs_option_link('bidlp')=} and {=docs_option_link('bxtdlp')=} are false. If this option is true, $PRODUCT_NAME will combine the index-building and cross-reference table building stages of log processing into one, scanning through the main database table once and building both indices and cross-reference tables. If this option is false, $PRODUCT_NAME will build indices and cross-reference tables separately, scanning through the main table twice. Turning this option on can speed up index and cross-reference table building by combining the two table scans into one, but will use more memory, since both the cross-reference tables and the indices will need to be in memory at the same time." } # build_xref_tables_and_indices_simultaneously build_xref_tables_during_log_processing = { label = "Build cross-reference tables during log processing" short_description = "Build cross-reference tables on the fly while log data is read, rather than in a separate stage" long_description = "This option affects the stages of log processing when cross-reference tables are built. When this option is true, cross-reference tables are kept in memory during log processing, and are incrementally updated on the fly as new log lines are processed. When this option is false, cross-reference tables are updated in a single stage after all log data has been processed. Turning this option on can speed database building because it eliminates the need to re-read the main database table after processing log data, but can require much more memory, because all cross-reference tables must be kept in memory while log data is processed." } # build_xref_tables_during_log_processing # KHP 21/July/2010 - - disabled # hash_table_expansion_factor = { # label = "Expansion factor for database table" # short_description = "Factor by which a hash table expands when necessary" # long_description = "This controls the factor by which the database hash table, an internal table used to store information in the database, expands when necessary. A factor of 2 means that the database table will double in size when it needs more space, while 10 means that the database table size will increase by a factor of 10. Setting this to a higher value will eliminate the need for some internal data shuffling, and will speed processing a bit; however, it will also use more memory and disk space." # } # hash_table_expansion_factor # KHP 21/July/2010 - - disabled # hash_table_starting_size = { # label = "Initial size of database table" # short_description = "Initial size of a database hash table" # long_description = "This controls the initial size of the database hash table, an internal table used to store information in the database. Setting this to a higher value will eliminate the need for some internal data shuffling, and will speed processing a bit; however, it will also use a bit more memory." # } # hash_table_starting_size # KHP 21/July/2010 - - disabled # hash_table_surplus_factor = { # label = "Surplus factor for database table" # short_description = "Number of times larger a hash table is than its contents" # long_description = "This controls the amount of surplus space maintained in the database hash table, an internal table used to store information in the database. Setting this to a higher value will increase database access speed, but will use more memory. This value represents the proportion of space in the table that should remain free; when that space fills up, the table is expanded by {=docs_option_link('htef')=}. A value of 1 means that at least 10% of the table will always be free, a value of 2 means that at least 20% is free, and so on, up to a value of 9, where at least 90% of the table is kept free at all times. With a value of 1, the same table size will hold 9 times more data than with a value of 9, so the data section of your database (which is often the largest part) will be one-ninth the size with a value of 1 than it would be with a value of 9. However, lower values slow down database building and accessing slightly." # } # hash_table_surplus_factor list_cache_size = { label = "List cache size" short_description = "Maximum memory used by the list cache" long_description = "This option specifies the maximum memory used by the list cache. The list cache is used when tracking unique item lists (e.g. visitors) or database indices, to improve performance when lists get very large. Normally, lists are stored in a form that uses minimal memory, but does not allow items to be added quickly to the list in some situations. When a list appears to be slow, it is moved to the list cache, and expanded into a high-memory-usage, high-performance format. At the end of the operation, it is compacted into the low-memory-usage format again. When the cache is full, the least-used cached lists are compacted. Setting this option higher will use more memory during database cross-reference group building and index building, but will allow more lists to be kept in the fast-access format -- this usually improves performance, sometimes dramatically." } # list_cache_size # KHP 20/Sep/2011 - disabled #maximum_main_table_segment_merge_size = { # label = "Maximum main table segment size to merge" # short_description = "Maximum size of main table segment to merge; larger segments will be copied" # long_description = "This option specifies the maximum size of a main table segment that will be merged while merging databases. If a segment is smaller than this, the merge will be done by adding each entry to the existing final segment of the main database table; if there are more than this number of entries, the merge will be done by copying the entire table and indices to the main database, creating a new segment. Copying is faster, but since it creates a new segment it fragments the database, slowing queries slightly. Therefore, setting this to a high value will improve the query performance of the final database, at a cost in log processing performance." #} # maximum_main_table_segment_merge_size # KHP 08/Dec/2010 - disabled # maximum_main_table_segment_size = { # label = "Maximum main table segment size" # short_description = "The maximum size of one segment of main database table" # long_description = "This determines the maximum size of one segment of the main database table. Segments are files stored in the database directory; $PRODUCT_NAME prefers to leave the entire table in a single file, but operating system limitations sometimes make that impossible. So when the table exceeds this size, it is split into multiple files, each smaller than this size. This reduces performance somewhat, but allows arbitrarily large datasets to be represented in a database. If you set this higher than the operating system allows, you will get errors when processing very large datasets (10 million lines of log data corresponds roughly to 1GB of main table, depending on the database structure and other factors)." # } # maximum_main_table_segment_size # KHP 20/Sep/2011 - disabled #maximum_xref_table_segment_size = { # label = "Maximum cross-reference table segment size" # short_description = "The maximum size of one segment of a cross-reference database table" # long_description = "This determines the maximum size of one segment of a cross-reference database table. Segments are files stored in the database directory; $PRODUCT_NAME prefers to leave the entire table in a single file, but operating system limitations sometimes make that impossible. So when the table exceeds this size, it is split into multiple files, each smaller than this size. This reduces performance significantly, but allows arbitrarily large datasets to be represented in a database. If you set this higher than the operating system allows, you will get errors when processing very large datasets. Most operating systems can handle files up to 2 GB in size; a setting of 1 GB should be safe in most cases, and should prevent segmentation for all but the largest datasets." #} # maximum_xref_table_segment_size maximum_xref_segment_merge_size = { label = "Maximum xref segment size to merge" short_description = "Maximum size of a cross-reference table segment to merge; large segments will be copied" long_description = "This option specifies the maximum size of a cross-reference table segment which will be merged during a database merge operation; e.g., at the end of a multiprocessor database build. Segments large than this will be copied to the main database, and will form their own segments; segments smaller than this will be merged into the main database. Copies can be much faster than merges, but result in a more segmented main database, making queries slower. Therefore, setting this to a high value will improve the query performance of the final database, at a cost in log processing performance." } # maximum_xref_segment_merge_size # KHP 20/Sep/2011 - disabled #maximum_paging_caching_buffer_memory_usage = { # label = "Maximum caching buffer memory usage" # short_description = "This specifies the maximum memory to be used by a paging caching buffer" # long_description = "This specifies the maximum memory to be allocated for use by each paging caching buffer. Each active table in the database (each table currently in use by the active process) hasa paging caching buffer associated with it, which keeps some parts of that table in memory for faster access. The larger this number is, the more of each table can be kept in memory, and the faster database operations will be; however, the larger this number is, the more memory will be used." #} # maximum_paging_caching_buffer_memory_usage maximum_paging_caching_buffer_full_load = { label = "Maximum caching buffer memory full load" short_description = "This specifies the maximum size of a file to be loaded fully into memory" long_description = "This specifies the maximum size of a file, for instance a database table, to be loaded fully into memory. When this option is set higher, more files will be loaded fully into memory, which generally improves performance; however, when this option is set higher, database operations will use more memory." } # maximum_paging_caching_buffer_full_load load_data_rows_per_block = { label = "Number of rows of data to load per block" short_description = "The number of rows of data to load in each block, when importing data into a database table" long_description = `This specifies the number of rows of data to load at a time, in each block, when importing data into the database in bulk (most significantly, when loading log data into the main table during a database build or update).
` } # load_data_rows_per_block } # tuning } # database log = { fields = { label = "Log Fields" short_description = "Information about a particular field in the log" long_description = "This describes a single field in the log data. You will generally not need to use this option unless you are creating your own log format description file.A log field may be either an actual field which is present in each log entry of the file (for instance, the \"page\" field, or the \"hostname\" field), or a derived field which is not present in log entries, but is derived from the entries which are present, and from other information. Derived fields include fields like \"domain description,\" which is a textual description of the host domain (e.g. \"France\" for .fr), and is derived from the hostname field, or the \"day of week\" field, which is derived from the date/time field, or the \"operating system\" field, which is derived from the agent field. Derived fields cannot be deleted or edited, though they will disappear if the field they are derived from is deleted. See below for more information about specific derived fields.
For fields which are not derived, you can specify a number of parameters. The values of the parameters are as follows:
page (page
): The \"page hit\" field of a web log, or the \"URL hits\" field of a proxy log, or any other field in a /-divided pathname format; e.g. /mypages/dir/file.html. This also acts like a \"hierarchical\" field.
host (host
): The browsing hostname, or any field in hostname format; e.g. my.host.com. This field will be used to derive the domain description field. This also acts like a \"hierarchical\" field.
URL (url
): Any field in URL format (e.g. http://hostname/page.html). The search phrase field is derived from this field.
date_time (date/time
): A combined date/time field. The format of this field depends on the setting of {=docs_option_link('df')=} and {=docs_option_link('tf')=}. If this field is not present in the log, but date and time are, this field will be derived from those fields. The day of week, hour of day, week of year, and day of year fields are derived from this field.
date (date
): A date; year, month, and day. The format of this field depends on the setting of {=docs_option_link('df')=}.
time (time
): A time of day; hour, minute, and second. The format of this field depends on the setting of {=docs_option_link('tf')=}.
agent (agent
): A user agent field. The browser OS, browser type, and browser version fields are derived from this field.
size (size
): The size (bytes transferred) field. This field will be used to compute bandwidth information. The size range field is derived from this field.
integer (integer
): Any field whose value is an integer (e.g. 67).
response (response
): The \"server response\" field, containing the numeric HTTP server response code (e.g. 200, 404).
hierarchical (hierarchical
): Any field which is multi-level hierarchical. The hierarchy divider and other parameters can be specified below. See {=docs_chapter_link('hierarchies')=}.
flat (flat
): Any other field which is hierarchical flat; all fields are directly below the root of the hierarchy. See {=docs_chapter_link('hierarchies')=}.
Index: This specifies the index of this log field in the log data. For instance, if this is the first log field in the entry, this should be 1. If this is the fifth log field in the line, it should be 5. This can be left 0 if the log field is being filled in by {=docs_option_link('pre')=} or by parsing filters.
Subindex: This specifies the subindex of this log field in the log data. This can usually be left at 0. A subindex is required only when the log field is contained inside another quoted field. In that case, the position of the quoted field is specified using the index, and the subindex indicates the position within the quoted field, by space-separated subfield. This can be left 0 if the log field is being filled in by {=docs_option_link('pre')=} or by parsing filters.
Hierarchy dividers: This specifies the character(s) which divide hierarchy levels in this field (if this field is hierarchical). Up to three characters may be specified. For instance, in a standard \"page\" field (e.g. /one/sample/page.html), the divider would be / or /?, or /?& (include the ? if you want the page field to be split on the URL parameters divider; include the & if you want it split between parameters). See {=docs_chapter_link('hierarchies')=}.
Left-to-right hierarchy: This specified whether the hierarchy is left-to-right (i.e. with the higher hierarchy levels at the left, like /one/sample/page.html), or right-to-left (i.e. with the higher hierarchy level at the right, like some.hostname.com). See {=docs_chapter_link('hierarchies')=}.
Leading hierarchy divider: This specifies whether the field has a hierarchy divider at its highest end (e.g. /one/sample/page.html, which starts with /), or not (e.g. one/sample/page.html or some.hostname.com, which have hierarchy dividers only inside the field).
Case sensitive: This controls whether the field is case-sensitive. When this is false, $PRODUCT_NAME treats items as the same if they differ only in the case (uppercase/lowercase); for instance, index.html and Index.html are treated as the same page. The case of the item as it appears in statistics is determined by the case of the first item $PRODUCT_NAME sees while processing the log data, so if the first hit is on index.html and the second is on Index.html, it will appear in the statistics as two hits on index.html. When this option is true, $PRODUCT_NAME treats differently-cased items as different items, so in the example above, the statistics would list one hit on index.html, and one hit on Index.html.
domain description. This field is derived from the hostname field. It is a textual description of the top-level domain of the hostname. For instance, the host myhost.fr has a domain description of \"France (.fr),\" and myhost.edu has a domain description of \"Educational (.edu).\"
referrer domain. This field is derived from the referrer field. It is a textual description of top-level domain of the referrer. For instance, the referrer http://www.myhost.fr/index.html has a domain description of \"France (.fr),\" and http://myhost.edu/ has a domain description of \"Educational (.edu).\"
location. This field is derived from the host field. It is the country, region, and city of the location of the IP address in the host field, as computed using the GeoIP database. It is a hierarchical field so you can zoom in to countries, to see regions and into regions, to see cities.
size range. This field is derived from the size field. It is the power-of-ten range into which the size of the transferred object falls. For instance if an HTML page is transferred which is 6 KB in size, this field will be \"1k - 10k.\" If a 17 KB page is transferred, this will be \"10k - 100k.\"
operating system. This field is derived from the agent field. This is the operating system used by the browsing user, e.g. \"Windows ME.\"
web browser. This field is derived from the agent field. This is the web browser type and version used by the visitor. For instance, if the visitor browsed your website with Netscape 5.0, this will be \"Netscape 5.0.\" This field is hierarchical, so the top level will show just \"Netscape\", and clicking it will show the version and minor version numbers.
search engine. This field is derived from the referrer field. It shows the search engine used by the visitor to find your site. For instance, if the user searched in Google for \"noodle recipes,\" and found your site, the value of this field will be \"Google.\" Most hits are not the direct result of clicking in a web search engine's list page, so for most hits, this field will be empty.
$PRODUCT_NAME determines which search engine contributes which hit by comparing the referrer field with the values listed in the LogAnalysisInfo/SearchEngines file, so you can modify that file if you want to add support for new search engines.search phrase. This field is derived from the referrer field. It shows the search phrase used in web search engines by the visitor who contributed to this hit. For instance, if the user searched in Google for \"noodle recipes,\" and found your site, the value of this field will be \"noodle recipes.\" Most hits are not the direct result of clicking in a web search engine's list page, so for most hits, this field will be empty.
date/time. This is the only field which may be either a real (non-derived) log field or a derived log field. In some log formats, the date and time are specified together in a single field (see {=docs_option_link('df')=} and {=docs_option_link('tf')=}); in those log formats, the date/time field is a single non-derived log field. In other log formats, the date and time fields are separate; in those formats, the date/time field is derived from the date and time fields. In a database, you should use the date/time field, rather than the separate date or time fields, to take full advantage of the date/time hierarchy.
day of week. This field is derived from the date/time field (which may in turn be derived from the date and time fields). It is the day of week corresponding to the date/time. For instance, a date/time of \"03/Mar/1999 09:34:56\" would have a day of week of \"Monday.\"
hour of day. This field is derived from the date/time field (which may in turn be derived from the date and time fields). It is the hour of day corresponding to the date/time. For instance, a date/time of \"03/Mar/1999 09:34:56\" would have a day of week of \"9:00 AM - 10:00 AM.\"
day of year. This field is derived from the date/time field (which may in turn be derived from the date and time fields). It is the number of the day of the year. For instance, January 1 is \"1\", January 20 is \"20\", and February 10 is \"41\".
week of year. This field is derived from the date/time field (which may in turn be derived from the date and time fields). It is the number of the week of the year. For instance, for hits on the first seven days of the year (January 1 - 7, inclusive) this field will be \"1\". For hits one the second week of the year (January 8 - 14) this field will be \"2\", and so on.
worm. This field is derived from the page field. It shows the name of the worm for each hit, or \"(not a worm)\" if the hit was not a worm hit (worms are programs that attempt to infect other computers, usually through exploiting vulnerable versions of servers like web servers). Worms are detected using the LogAnalysisInfo/Worms file, so you can edit this file if you want to add detection of additional worms.
spider. This field is derived from the agent field. It shows the name of the spider for each hit, or \"(not a spider)\" if the hit was not a spider hit. Spiders are programs that \"walk\" from page to page on the Internet, reading each page and doing something with it; for instance, search engines use spiders to build their databases of Internet pages. Spiders are detected using the LogAnalysisInfo/Spiders file, so you can edit this file if you want to add detection of additional spiders.
Most users will edit the log fields from the web GUI, but power users may wish to edit them by editing the profile file using a text editor. In the profile file, the format is \"log_field_info\", followed by \"standard\", followed by a list of log fields, followed by \"field_end\". Each field in the list contains the options in the order listed above; i.e., field name, field type, index, subindex, dividers, left-to-right, leading divider, case sensitive, followed by an extra unused option which should be left blank. See any log format description file for a good example of this format.
" case_sensitive = { label = "Case sensitive" short_description = "Log field case sensitive" long_description = "This controls whether the field is case-sensitive. When this is false, $PRODUCT_NAME treats items as the same if they differ only in the case (uppercase/lowercase); for instance, index.html and Index.html are treated as the same page. The case of the item as it appears in statistics is determined by the case of the first item $PRODUCT_NAME sees while processing the log data, so if the first hit is on index.html and the second is on Index.html, it will appear in the statistics as two hits on index.html. When this option is true, $PRODUCT_NAME treats differently-cased items as different items, so in the example above, the statistics would list one hit on index.html, and one hit on Index.html." } # case_sensitive derived_from_1 = { label = "Derived from" short_description = "" long_description = "" } derived_from_2 = { label = "Derived from 2" short_description = "" long_description = "" } dividers = { label = "Dividers" short_description = "" long_description = "" } # dividers hierarchy_dividers = { label = "Hierarchy dividers" short_description = "Log field hierarchy divider" long_description = "This specifies the character(s) which divide hierarchy levels in this field (if this field is hierarchical). Up to three characters may be specified. For instance, in a standard \"page\" field (e.g. /one/sample/page.html), the divider would be / or /?, or /?& (include the ? if you want the page field to be split on the URL parameters divider; include the & if you want it split between parameters). See {=docs_chapter_link('hierarchies')=}." } # hierarchy_dividers index = { label = "Index" short_description = "Log field index" long_description = "This specifies the index of this log field in the log data. For instance, if this is the first log field in the entry, this should be 1. If this is the fifth log field in the line, it should be 5. This can be left 0 if the log field is being filled in by {=docs_option_link('pre')=} or by parsing filters." is_invalid_number_message = "Please define a valid index, a number >= 0." } # index leading_divider = { label = "Leading divider" short_description = "Leading hierarchy divider" long_description = "This specifies whether the field has a hierarchy divider at its highest end (e.g. /one/sample/page.html, which starts with /), or not (e.g. one/sample/page.html or some.hostname.com, which have hierarchy dividers only inside the field)." } # leading_divider label = { label = "Log field name" is_empty_message = "Please define a log field name." is_duplicate_message = "Duplicate log field name. Please define a different log field name." } left_to_right = { label = "Left to right" short_description = "Log field left-to-right hierarchy" long_description = "This specified whether the hierarchy is left-to-right (i.e. with the higher hierarchy levels at the left, like /one/sample/page.html), or right-to-left (i.e. with the higher hierarchy level at the right, like some.hostname.com). See {=docs_chapter_link('hierarchies')=}." } # left_to_right left_to_right_hierarchy = { label = "Left to right hierarchy" short_description = "" long_description = "" } # left_to_right_hierarchy subindex = { label = "Subindex" short_description = "Log field subindex" long_description = "This specifies the subindex of this log field in the log data. This can usually be left at 0. A subindex is required only when the log field is contained inside another quoted field. In that case, the position of the quoted field is specified using the index, and the subindex indicates the position within the quoted field, by space-separated subfield. This can be left 0 if the log field is being filled in by {=docs_option_link('pre')=} or by parsing filters." is_invalid_number_message = "Please define a valid subindex, a number >= 0." } # subindex type = { label = "Type" } # type } # fields filter_initialization = { label = "Filter initialization" short_description = "" long_description = "" } # filter_initialization filter_finalization = { label = "Filter finalization" short_description = "" long_description = "" } # filter_finalization filters = { label = "Log Filters" short_description = "Specifies one filter to accept or reject log entries" long_description = "$PRODUCT_NAME accepts or rejects entries in the log data based on a collection of filters. These filters can be used to display only part of the log data, for instance if you're interested only in the hits on a particular $lang_stats.directory, or on a particular day; or they can be used to perform conversions, for instance to replace an IP address with the name of the user of that computer. The filters are very powerful; you can use them to prune or convert the data in almost any imaginable way. The log.filters node contains one subnode for each log filter; each is a statement written in {=docs_chapter_link('salang')=}. See {=docs_chapter_link('filters')=} for more information." } # filters field_options = { sessions_id_field = { label = "Sessions ID field" short_description = "The field used to distinguish sessions." long_description = "This field is used to distinguish one session from another. When this field is not specified, sessions are distinguished from each other by comparing the Sessions User field, together with the session timeout. When this field is specified, it directly determine the session ID of each event, so events are grouped into the same session if and only if their session ID field value matches." } # sessions_id_field sessions_visitor_id_field = { label = "Sessions user field" short_description = "The field used to distinguish session users." long_description = "This field is used, when computing session reports and other session information, to distinguish one session user from another. This refers to a log field; if the value of that log field is the same for two events, they are considered to be events from the same user. This is often an IP, hostname, cookie, or device ID field." } # sessions_visitor_id_field sessions_event_field = { label = "Sessions event field" short_description = "The field used to determine when an event is a session event." long_description = `This field is used, when computing session reports and other session information, to determine when an event is a session event. An event is a session event if the value of this field is 1; it is not a session event if the value of the field is 0 (or if it is not a number). For instance, in a web log, this might be the "page views" field, which is 1 for session events, and 0 for non-session events (non-page-view hits).` } # sessions_event_field sessions_page_field = { label = "Sessions page field" short_description = `The field used to determine which "page" was hit in a session event.` long_description = `This field is used, when computing session reports and other session information, to determine which "page" was hit. In web logs, this is typically the "page" field, or the "URL" field. In other logs, it can be any field which somehow answers the question, "what was accessed?" or "what happened?"` } # sessions_page_field } # field_options format = { allow_newlines_inside_quotes = { label = "Allow newlines inside quotes" short_description = "Allow newlines (return or line feed) inside quotes, in log lines" long_description = "This controls whether newline characters, returns or line feeds, are permitted inside quotes in log data. When this option is true, and a log line starts a quoted section but does not close it $PRODUCT_NAME will continue with the next line, looking for the closing quote there (or on a later line). The resulting \"line\" of log data will be two or more lines long, and some field values may have returns or linefeeds in them. When this option is false (unchecked), $PRODUCT_NAME will assume that unclosed quotes in a line are errors or formatting problems, and will treat the final (unclosed) quoted section as though there were a closing quote at the end of the line. This option should generally be left off, since turning it makes it possible that a small log data corruption can render the entire rest of the file unprocessed. But if your log data does contain entries with newlines inside quotes (as some CSV data does), then you will need to turn this option on." } # allow_newlines_inside_quotes allow_spaces_in_listed_field_values = { label = "Allow spaces in listed field values" short_description = "Allow spaces in listed field values, when using \"collect listed\" functions in log parsing filters" long_description = "This specifies if spaces should be allowed in the value of fields extracted using \"collect listed\" function in log parsing filter. When this option is checked (true), values may contain spaces; when it is false, values may not contain spaces. In some cases, disallowing spaces makes it possible to parse lines which otherwise cannot be parsed (for instance, lines where field names contain spaces)." } # allow_spaces_in_listed_field_values apache_description_string = { label = "Apache log format description string" short_description = "A string which describes the log format, Apache-style" long_description = "This option describes the log format, in Apache log format description string style. This is intended for use as a quick way of using a custom Apache format--you can copy the format string from an Apache configuration file (or another file that uses Apache style format strings), and $PRODUCT_NAME will set up the log fields and format regular expressions for you. This option overrides {=docs_option_link('pre')=}." } # apache_log_format_description_string autodetect_lines = { label = "Autodetect lines" short_description = "Number of lines to examine for this log format while auto-detecting" long_description = "This specified the number of lines to compare using {=docs_option_link('are')=} while autodetecting this log format (this option is used in log format plug-ins). For instance, if this is 10, only the first 10 lines will be checked against the regular expression; if it is 100, the first 100 lines will be checked. If any line matches, the format will be considered a match." } # autodetect_lines autodetect_regular_expression = { label = "Autodetect regular expression" short_description = "A regular expression used to auto-detect the log format" long_description = "This is a regular expression which is used to auto-detect the log format. This option appears in the log format plug-in for a supported log format (plug-ins are in the log_formats $lang_stats.directory of LogAnalysisInfo). A log file matches the format if any of the first few lines of the log file (the number of lines is specified by {=docs_option_link('al')=}) match this regular expression. See also {=docs_option_link('pre')=}, which is a similar option serving a different purpose. {=docs_option_link('pre')=} is used during log reading to separate out log fields, and does not affect auto-detection; this option is used only during format auto-detection, and does not affect log reading. See also {=docs_option_link('ae')=}." } # autodetect_regular_expression autodetect_expression = { label = "Autodetect expression" short_description = "An expression used to auto-detect the log format" long_description = "This is an expression (written in the internal language) which is used to auto-detect the log format. This option appears in the log format plug-in for a supported log format (plug-ins are in the log_formats $lang_stats.directory of LogAnalysisInfo). A log file matches the format if any of the first few lines of the log file (the number of lines is specified by {=docs_option_link('al')=}) result in a value of true for this expression (the log line is in volatile.log_data_line). See also {=docs_option_link('pre')=}, which is a similar option serving a different purpose. {=docs_option_link('pre')=} is used during log reading to separate out log fields, and does not affect auto-detection; this option is used only during format auto-detection, and does not affect log reading. See also {=docs_option_link('are')=}." } # autodetect_regular_expression blue_coat_description_string = { label = "Blue Coat log format description string" short_description = "A string which describes the log format, Blue Coat style" long_description = "This option describes the log format, in Blue Coat custom log format description string style. This is intended for use as a quick way of using a custom Blue Coat format--you can copy the format string from the Blue Coat configuration interface, and $PRODUCT_NAME will set up the log fields and format regular expressions for you. This option overrides {=docs_option_link('pre')=}." } # log_format_description_string collected_entry_lifespan = { label = "Collected entry lifespan" short_description = "Number of lines of log data a collected entry may be idle before it is cleaned from memory." long_description = "This specifies the number of lines that a collected entry (as extracted using the collect/accept method of parsing filtering) will remain in memory without being referenced, before it is cleaned up and removed from memory. When this option is 0, collected entries are never removed from memory, which can result in very high memory usage for log formats or plug-ins which do not explicitly \"close\" keys. Setting it to non-zero prevents arbitrarily large memory usage in these cases. A value of 10000 is usually sufficient to ensure that an entry will not be removed from memory while it is still in use, but some formats (which have very large numbers of lines between uses of keys) may require a higher value. When a collected entry is removed from memory, it will either be accepted immediately, or discarded, depending on the value of {=docs_option_link('log.format.discard_expired_entries')=}." } # collected_entry_lifespan common_log_format = { label = "Format is Common Log Format" short_description = "Log format is similar to Common Log Format" long_description = "This option should be set when the log format is a Common Log Format (CLF), one of a collection of similar log formats which, among other attributes, have the date/time field in brackets, and the user field right before the bracketed date/time field. This option turns on a special work-around which is necessary for certain CLF files where the usernames contain spaces. Because CLF does not quote the username field, spaces in the username field can cause the rest of the fields to be offset, causing strange results. This option causes the field before the date/time field to be combined with any apparently separate fields, until a left-square-bracket ([) is found. This effectively allows the username field to contain spaces in CLF format. This option should be left off for any non-CLF log formats." } # common_log_format date_format = { label = "Date format" short_description = "Format of dates in the log data" # KHP 21/June/2010 - there were two instances of auto, disabled the first one #auto: This handles a range of date formats automatically. Four-digit integers are treated as years, and one-or-two digit integers are treated as months or days (months are assumed to preceded days). This can be used in many cases where the exact date format is not known in advance. However, it does not support day-before-month dates.
# KHP 21/June/2010 - reordered the list so that it matches the order as defined in the GUI. # KHP 21/June/2010 - disabled the following line because it looks like that it belongs to a specific option value # The divider between items does not need to be a slash--it can be any single character; for instance if your log format uses 04-21-2000 as its date, you can choose mm/dd/yyyy and it will work. long_description = "This controls the expected format of date fields in the log data. Possible formats are:For example, consider the following regular expression:
^(\[^ ]*) (\[^ ]*) (\[^ ]*) (\[^ ]*)\\$Each parenthesized part matches any sequence not containing a space, and the four parts must be separated by spaces. The leading ^ and trailing \\$ ensure that the whole line must be matched. This expression matches a line which contains four fields, separated by spaces, where the fields do not contain spaces. The first field will be put into the first log field, the second into the second log field, the third into the third log field, and the fourth into the fourth log field.
Some log formats cannot be processed using a single regular expression, either because they have peculiar field layout, or because their fields span several lines, or for some other reason. Usually it is still possible to process the log files with $PRODUCT_NAME, but the log format description file will need to include log parsing filters with more complicated parsing logic. For one example of that, see the Raptor file in the log_formats sub$lang_stats.directory of the LogAnalysisInfo $(lang_stats.directory)."
} # parsing_regular_expression
time_format = {
label = "Time format"
short_description = "Format of times in the log data"
# KHP 21/June/2010 - reordered the list so that it matches the order as defined in the GUI.
long_description = "This controls the expected format of time fields in the log data. Possible formats are:
" } # parsing_filters processing = { label = "Log Processing" edit_button = "Edit Log Processing" edit_form_title = "Edit Log Processing" option_group = true allow_empty_log_source = { label = "Allow empty log source" short_description = "True if $PRODUCT_NAME should allow databases to be created from log sources which contain no data" long_description = "This option controls whether $PRODUCT_NAME complains if the log source is empty when the database is built or rebuilt. If this option is false, $PRODUCT_NAME will generate an error if there is no data in the log source during a (re)build. If this is true, $PRODUCT_NAME will not complain, but will just create a database containing no data. An empty log source is often a sign of an error in the log source, so it is usually best to leave this option off. But in a multi-user environment, some sites may have no log data at all, and in that case, this can be turned on to allow for error-free rebuilds of all databases. $PRODUCT_NAME never generates an error if there is no (new) log data during a database update; this affects only \"from scratch\" (re)builds." } # allow_empty_log_source date_offset = { label = "Date offset" unit_label = "hours" invalid_number_message = "Invalid date offset value. Please define a number (float) between -23 and 23 or between -23.9 and 23.9 hours." short_description = "The number of hours to add to each date in the log file" long_description = "This specifies the number of hours to add to the dates in the log file. A positive value causes that many hours to be added to every date in the log as it is read, and a negative value causes hours to be subtracted. For instance, if your log data is in GMT (as some formats are, including some W3C-based formats) but your time zone is GMT-8 (i.e. Pacific Standard Time), then you should enter -8 here. A value of zero leaves the dates unchanged. Fractional hours are allowed; e.g., 9.5." } # date_offset default_log_date_year = { label = "Default log date year" short_description = "The year to use, e.g., 2004, if the date format in the log data has no year information" long_description = "This option is used if the log date format ({=docs_option_link('df')=}) is one of the few formats which does not include year information. $PRODUCT_NAME will use this option's value as the year. For instance, if the date in the log is \"May 7\" and this option's value is 2004, then $PRODUCT_NAME will assume that the log entry is for May 7, 2004. The value of this option should be a four-digit integer between 1970 and 2030, or 'thisyear' --if the value of this option is 'thisyear' (without quotes), $PRODUCT_NAME will fill in the current year, the year the log data is processed in, as the year." } # default_log_date_year # KHP 30/Dec/2010 - log_entry_pool_size is no longer used # log_entry_pool_size = { # label = "Log entry pool size" # invalid_number_message = "Invalid log entry pool size value. Please define a number (integer) greater or equal $param1." # short_description = "The number of log entries $PRODUCT_NAME can work on simultaneously" # long_description = "This controls the number of log entries $PRODUCT_NAME can work on at a time. Increasing this value may improve performance of DNS lookup. However, it will also use more memory." # } # log_entry_pool_size look_up_location_with_geoip = { label = "Look up location with GeoIP" short_description = "Look up geographic locations, from IP addresses, with GeoIP database" long_description = "When this option is checked, $PRODUCT_NAME uses the built-in GeoIP database to look up the geographic locations of IP addresses. These will appear in the Countries, Regions, and Cities reports as the names of the countries, regions, and cities where the IP address is physically located." } # look_up_location_with_geoip read_block_size = { label = "Log reading block size" invalid_number_message = "Invalid log reading block size value. Please define a number (integer) greater or equal $param1." short_description = "Size in bytes of the blocks which are read from the log" long_description = "This controls the size in bytes of the blocks which are read from the log data. $PRODUCT_NAME reads the log data in chunks, processing each chunk completely before continuing to the next. Larger settings will reduce the number of disk accesses, potentially speeding processing time, but will also require the specified number of bytes of memory." } # read_block_size maximum_read_block_size = { label = "Maximum log reading block size" invalid_number_message = "Invalid maximum log reading block size value. Please define a number (integer) greater or equal $param1." short_description = "Size in bytes of the maximum size of blocks which are read from the log" long_description = "This controls the maximum size in bytes of the blocks which are read from the log data. $PRODUCT_NAME initially reads data in chunks specified by {=docs_option_link('log.processing.read_block_size')=}, but if it encounters a line longer than that, it will expand its reading buffer to attempt to read the whole line into memory. It will not expand it larger than this value, however; if a line is larger than the value specified here, it will be discarded. This can be set as high as desired, but corrupt log data (e.g., a file of all NULL characters) may cause the buffers to expand to this value, so it should not be set higher than the size of physical memory." } # maximum_read_block_size skip_previously_seen_data_on_update = { label = "Skip previously seen data on update (using data checksums)" short_description = "Skip data which has already been imported into the database (judging by a checksum of the data), during a database update operation" long_description = "This controls whether $PRODUCT_NAME skips previously-seen data using a checksum when it does a databaes update. Typically, once data has been imported into the database using a database build or update operation, further updates should skip that data, so it doesn't get added to the database twice. The default of this option (checked / true) does that, and compares each log data block it reads to all previously-read data blocks for that profile and database (by checksumming the first few KB of the block), and skips past it during the update if it has already seen it. But in rare cases, it may be useful to set the to false (unchecked), so that a database update will add all data in the log source, to the database. This is particular useful for re-processing a portion of the data which has already been processed; a 'remove database data' operation can be used to remove the data from the database, then the log source can be pointed to only that log data, and finally a database update can be run with this option false (unchecked), to re-import that data into the database." } # skip_previously_seen_data_on_update skip_processed_filenames_on_update = { label = "Skip processed files on update (by pathname)" short_description = "Skip files which have already been processed (judging by their pathnames) during a database update or add operation" long_description = "This controls whether $PRODUCT_NAME uses the pathname of log files to determine if the files have already been added to the database. If this option is checked (true), then $PRODUCT_NAME will skip over any log files in the log source if it has already added a file with that name to the database. This can speed processing, especially when using FTP, because $PRODUCT_NAME does not have to download or process the file data and use its more sophisticated checking mechanism to see if the data has been processed. However, it will not work properly if you have log files in your log source which are growing from update to update, or if you have log files with the same name which contain different data. If this option is off, $PRODUCT_NAME will handle those situations correctly, but it will have to download and examine the log data of all files to do it." } # skip_processed_filenames_on_update skip_most_recent_file = { label = "Skip most recent file" short_description = "Whether to skip the most recent log file in the log source, or process it" long_description = "This option specifies whether $PRODUCT_NAME skips the most recent file in the log source, or processes it. When this option is true (checked), $PRODUCT_NAME will ignore the most recent file (based on modification date of the file) in the local file log source, during database build or update; it will act as though the file was not present, and will not process any lines of the file. When this option is false (unchecked), $PRODUCT_NAME will process all files, including the most recent one. This option is useful in environments with log rotation; the most recent file is the one which is being written, so skipping it ensures that all files processed are complete files, which will have no more data added later. This then allows the {=docs_option_link('spfod')=} option to be used to do faster skipping during updates, even when the most recent file is growing. With this option off, $PRODUCT_NAME will add the events from the latest (growing) file to the database, and the rest of the events (added to the log file later) will never be added to the database; with this option on, $PRODUCT_NAME will skip the growing file, and will wait until the file has stopped growing (when it has been rotated, because then a new file will be growing, and will be the most recent file), and then add the entire file. This option works only with a local file source--it will not work, for instance, with an FTP log source." } # skip_most_recent_file ignore_regexp_for_skip_checksum = { label = "Ignore regular expression for skip checksum" short_description = "When checksumming log data for skipping, ignore anything matching this regular expression" long_description = `If this regular expression is specified (not empty), $PRODUCT_NAME will ignore anything matching it, when computing checksums for skipping. This is useful in cases where the server modifies a line of the log data (e.g., an "end time" line) after the data has been processed by $PRODUCT_NAME. By skipping that line for checksumming purposes, $PRODUCT_NAME will still recognize the data as previously-seen, and will not reprocess it.` } # ignore_regexp_for_skip_checksum threads = { label = "Log processing threads" invalid_number_message = "Invalid log processing threads value. Please define a number (integer) greater or equal $param1." short_description = "The number of simultaneous threads to use to process log data" long_description = "THIS OPTION IS DEPRECATED, AND NO LONGER HAS ANY EFFECT. This specifies the number of threads of execution to use to process log data. The threads will execute simultaneously, each processing a portion of the log data, and at the end of processing, their results will be merged into the main database. On systems with multiple processors, using one thread per processor can result in a significant speedup of using a single thread." } # threads thread_data_block_size = { label = "Thread data block size" invalid_number_message = "Invalid thread data block size value. Please define a number (integer) greater or equal $param1." short_description = "The size of data chunks to feed to log processing threads, during a multiprocessor build or update" long_description = "This specifies the amount of data in each chunk sent to each thread during multiprocessor log processing (data build or update. Larger values reduce the overhead of transmitting large numbers of packages between the main thread and the child threads, and may speed up processing once it gets going; however, larger values also increase the chance that a thread will have to wait until a chunk has been assembled, possibly slowing the processing. The default is a reasonable value." } # thread_data_block_size convert_log_data_charset = { label = "Convert log data charset" label_2 = "Convert log data charset from \"$param1\" to \"$param2\"" short_description = "Whether to convert log data into a different charset while processing it" long_description = "When this option is checked, $PRODUCT_NAME will convert the log data from the charset specified by {=docs_option_link('cldfc')=} to the one specified by {=docs_option_link('cldtc')=}. This is useful if the log data is in a different charset than the one desired for display or report generation." } # convert_log_data_charset convert_log_data_from_charset = { label = "Convert log data from charset" short_description = "The charset to convert from, when converting input log data" long_description = "If this option is not empty, it will be used together with {=docs_option_link('cldtc')=} to convert the log data from the log source to a different charset from the one it is currently in. This option specifies the charset the log data is in to begin with; {=docs_option_link('cetc')=} specifies the charset that the log data will be in after conversion; e.g., the charset that will be seen by log filters and in the database." } # convert_log_data_from_charset convert_log_data_to_charset = { label = "Convert log data to charset" short_description = "The charset to convert to, when converting input log data" long_description = "If this option is not empty, it will be used together with {=docs_option_link('cldfc')=} to convert the log data from the log source to a different charset from the one it is currently in. {=docs_option_link('cldfc')=} specifies the charset the log data is in to begin with; this option specifies the charset that the log data will be in after conversion; e.g., the charset that will be seen by log filters and in the database. Usually, this should be set to UTF-8." } # convert_log_data_to_charset real_time = { label = "Real-time (allow viewing of reports during log processing)" short_description = "Use real-time processing mode to allow viewing of report during log processing" long_description = "When this option is checked, it is possible to view or generate reports during database builds or updates. When a report is requested, log processing will pause, the database will be brought into an internally consistent state (xrefs and indices will be updated with the latest data), the report will be generated, and log processing will resume. When this option is not checked, attempts to view a report during log processing will fail with an error that the database is building, or will show progress of the database build." } # real_time distributed = { label = "Distributed Log Processing" option_group = true method = { label = "Parsing server distribution method" short_description = "Method for connecting to and/or spawning parsing servers" long_description = "This specifies the method $PRODUCT_NAME uses to spawn or connect to parsing servers. Parsing servers provide log parsing services to the main $PRODUCT_NAME log parsing process; use of multiple parsing servers allows log processing to go faster than it would with a single process.
One processor
If this option is \"one_processor\" (or \"1\"), $PRODUCT_NAME does not use parsing servers, but performs all parsing in the main process, using a single processor.
Some processors
If this option is \"some_processors\", $PRODUCT_NAME automatically creates the number of local parsing servers specified by {=docs_option_link('log.processing.distributed.number_of_servers')=}, and terminates them when log processing is complete.
All processor
If this option is \"all_processors\", $PRODUCT_NAME automatically creates a local parsing server for each processing core, connects to them during log processing, and terminates them when log processing is complete.
Listed servers
If this option is \"listed_servers\", $PRODUCT_NAME uses the parsing server information specified in the log.parsing.distributed.servers node of the profile to spawn (if specified) the parsing servers, and connect to them (listed allows $PRODUCT_NAME to use parsing servers running on other systems, for higher performance). When using \"listed\", the log.parsing.distributed.servers node in the profile contains one subnode per parsing server; each server subnode contains three subnodes: hostname, port, and spawn. \"hostname\" is the hostname and port that $PRODUCT_NAME should contact with the SPS protocol (the protocol used to communicate with parsing servers), to farm out parsing; spawn is true if the server should spawn the parsing server locally, or false if the server is already running (probably on another system), so $PRODUCT_NAME should just connect to it.
You can specify multiple log sources by listing one log source (for instance, one pathname, or URL, or one of the other types of log sources listed above) in separate subnodes of log.source. $PRODUCT_NAME will process the log sources in the order they are listed in log.source.
" # KHP, 13/Nov/2007 - DEPRICATED, use process_subdirectories # process_log_source_subdirectories = { # label = "Process sub$lang_stats.directories (local $lang_stats.directories only)" # short_description = "Whether to process log files in sub$lang_stats.directories of the specified log source $lang_stats.directory" # long_description = "This controls whether $PRODUCT_NAME scans local sub$lang_stats.directories while processing a log source. If this option is false, only files directly inside the specified $lang_stats.directory will be processed; files in sub$lang_stats.directories will not be processed. If this option is true, all files in the $lang_stats.directory will be processed, even if they are contained in $lang_stats.directories of the specified $lang_stats.directory, or in $lang_stats.directories of those, etc.
IMPORTANT: This option only works with local $lang_stats.directories-- it does not work with FTP URLs. If you need to process several $lang_stats.directories on an FTP server, you need to enter each $lang_stats.directory separately, as a separate URL." # } # process_log_source_subdirectories file_mask = { label = "File mask" short_description = "" long_description = " This specifies the log files to be processed. Specifying a file mask will process all files which match the given wildacrad pattern or regular expression. The file mask will be treated as a wildcard pattern (*, ?) or a as regular expression if the \"File mask is a regular expression\" option is checked. " } # file_mask pattern_is_regular_expression = { label = "File mask is a regular expression" short_description = "The file mask specified to choose files for the log source is a regular expression." long_description = "This option controls whether the file mask is a regular expression or a wildcard pattern. When this option is checked, the file mask is treated as a full regular expression, and any regular expression constructions can be used (see {=docs_chapter_link('regexp')=}). When unchecked, the file mask is treated as a wildcard expression, only the * and ? wildcards may be used. Only log files which are in the $lang_stats.directory specified by the pathname, or in a sub$lang_stats.directory of it, and whose names match this regular expression or wildcard pattern, will be processed." } # pattern_is_regular_expression process_subdirectories = { label = "Process sub$lang_stats.directories" short_description = "Whether to process log files in sub$lang_stats.directories of the specified log source $lang_stats.directory." long_description = "This controls whether $PRODUCT_NAME scans sub$lang_stats.directories while processing a log source. This applies to local, FTP, and SFTP log sources. If this option is unchecked, only files directly inside the specified $lang_stats.directory will be processed; files in sub$lang_stats.directories will not be processed. If this option is checked, all files in the $lang_stats.directory will be processed, even if they are contained in $lang_stats.directories of the specified $lang_stats.directory, or in $lang_stats.directories of those, etc." } # process_subdirectories command = { label = "Command" short_description = "" long_description = "This specifies the pathname of a command-line program. $PRODUCT_NAME will read the log data from the output of the command (the standard output stream). Examples:
/bin/bunzip2 -c /logs/*.bz2(UNIX; to bunzip the log files on the fly; assumes installation of bunzip2 in /bin),
/bin/lynx -d http://mysite.com/my.log(UNIX; to fetch my.log by http; assumes installation of lynx in /bin)
type /server1/logs/* /server2/logs/* /server3/logs/*(Windows combines log files from three folders).
This option can be either a full pathname of a file, in which case that file will be used, or a single filename, in which case the file will be created inside the LogAnalysisInfo $(lang_stats.directory)." is_empty_message = "Please define an IP Numbers Cache File or use the default setting." } # ip_numbers_cache_file look_up_ip_numbers = { label = "Look up IP numbers using domain nameserver (DNS)" short_description = "Whether to look up IP numbers using a domain nameserver (DNS), to try to compute their hostnames" long_description = "When this is true or checked, $PRODUCT_NAME attempts to look up the full domain name of IPs which appear in the log as IP numbers (\"reverse DNS lookup\"), using the DNS server specified by the {=docs_option_link('ds')=} and {=docs_option_link('sds')=} options. The lookup is performed as the log data is read, so if you change this option, you will need to rebuild the database to see the effects. Looking up the IP numbers provides a more human-readable format for the IP hosts, but requires a network access as frequently as once per line, so it can take much longer than leaving them as IP numbers. There are several ways to improve the performance of DNS lookup. The most important is to make sure $PRODUCT_NAME has a fast network connection to your DNS server; you can usually do this by running $PRODUCT_NAME on your web server (as a CGI program, if necessary), rather than on your desktop system. It may also be faster to configure the logging server to perform the domain name lookups, rather than having $PRODUCT_NAME do it. See also {=docs_option_link('nluin')=} and {=docs_option_link('luinbf')=}." } # look_up_ip_numbers look_up_ip_numbers_before_filtering = { label = "Look up IP numbers before filtering" short_description = "Whether to look up IP numbers before filtering (rather than after)." long_description = "When this option is true, $PRODUCT_NAME does the DNS lookup (if required by {=docs_option_link('luin')=}) before running the log filters on a log entry. When this option is false, $PRODUCT_NAME does the DNS lookup after running the log filters on a log entry. It is faster to look up DNS after filtering (because filters sometimes reject entries, eliminating the need to look that one up), but if your log filters need to examine the resolved IP address, this option must be on." } # look_up_ip_numbers_before_filtering maximum_simultaneous_dns_lookups = { label = "Maximum simultaneous DNS lookups" short_description = "The maximum number of IP addresses that $PRODUCT_NAME will attempt to lookup at the same time" long_description = "This specifies the maximum number of IP addresses that will be looked up simultaneously. Setting this to a high value may increase DNS lookup performance, but if you set it too high, you may exceed operating system limitations, and the log processing may fail." is_invalid_value_message = "Invalid Maximum Simultaneous DNS Lookups value. Please define a number between $param1 and $param2." } # maximum_simultaneous_dns_lookups # report_email_address = { # label = "Report email address(es)" # short_description = "The address(es) that $PRODUCT_NAME should send statistics reports to" # long_description = "This specifies the address(es) $PRODUCT_NAME should send email statistics reports to, when the reports are emailed from the web interface, or the Scheduler sends a report, or when a report is sent using the command line. Multiple recipients may be specified with commas, e.g. \"user1@mydomain.com,user2@mydomain.com,user3@mydomain.com\". One report will be emailed, with HTML formatting and embedded images, to the specified address." # } # report_email_address # report_email_subject = { # label = "Report email subject" # short_description = "The subject of the report email that is sent" # long_description = "This specifies the subject of the report email (see {=docs_option_link('vea')=})." # } # report_email_subject # report_to_email = { # label = "Report to email" # short_description = "The name of the report that $PRODUCT_NAME should send by email" # long_description = "This specifies the name of the report $PRODUCT_NAME should send when it sends a report by email. See {=docs_option_link('vea')=}." # } # report_to_email # return_address = { # label = "Return email address" # short_description = "The return email address that $PRODUCT_NAME should use when sending email" # long_description = "This specifies the return address $PRODUCT_NAME should specify when sending email. Unless a valid address is specified here, replies to $PRODUCT_NAME's automatically generated emails will bounce. See also {=docs_option_link('ssh')=}." # } # return_address running_statistics_url = { label = "Running $PRODUCT_NAME URL" short_description = "The URL of a running version of $PRODUCT_NAME, used to insert live links into HTML email" long_description = "This specifies the URL of a running copy of $PRODUCT_NAME. The URL may be something like http://www.flowerfire.com:8988/if $PRODUCT_NAME is running in web server mode, or it may be http://www.domainname.com/cgi-bin/$PRODUCT_EXECUTABLE_DOCS if $PRODUCT_NAME is running in CGI mode. The URL is used to embed \"live\" links in HTML email; for instance, it allows your HTML email to include tables of items which, when clicked, open a web browser and display more information on that item (as they would if the table were in a normal live $PRODUCT_NAME report). If this option is empty, links will not appear in HTML email." } # running_statistics_url secondary_dns_server = { label = "Secondary DNS server" short_description = "The hostname or IP address of the DNS server to use to look up IP addresses in the log data, if the primary DNS server fails" long_description = "This specifies a secondary DNS server to use when looking up IP addresses in the log data (when {=docs_option_link('luin')=} is true). This can be either a hostname or an IP address of the DNS server. If this option is empty, and $PRODUCT_NAME is running on a UNIX-type operating system, it will use the system's default secondary DNS server. On all other platforms (including Windows), this option must be set when {=docs_option_link('luin')=} is true. This is used only if the primary DNS server ({=docs_option_link('ds')=}) does not respond." } # secondary_dns_server # smtp_server_hostname = { # label = "SMTP Server Hostname" # short_description = "The hostname of an SMTP (sendmail) server $PRODUCT_NAME should use when sending email" # long_description = "This specifies the hostname of an SMTP server $PRODUCT_NAME should use when sending email. This can either be just the hostname, in which case the default SMTP port of 25 is used, or it can be \"hostname:port\" (i.e. the hostname, followed by a colon, followed by the port number), in which case hostname is used as the SMTP hostname, and port is used as the SMTP port." # } # smtp_server_hostname # support_email_address = { # label = "Support email address" # short_description = "The email address where bug and error reports should be sent. This option overrides {=docs_option_link('gsea')=}." # long_description = "" # } # support_email_address use_tcp_for_dns = { label = "Use TCP to communicate with DNS servers" short_description = "True if $PRODUCT_NAME should use TCP (rather than the more standard UDP) to communicate with DNS servers" long_description = "This specifies whether $PRODUCT_NAME should use the TCP protocol when communicating with DNS servers. DNS servers more commonly communicate using UDP, and UDP is generally faster, but in some cases it may be preferable to use TCP instead. For instance, if your DNS server is accessible only by TCP due to its configuration or network location." } # use_tcp_for_dns } # network output = { # KHP 10-Nov-2010, moved number_thousands_divider to users # number_thousands_divider = { # label = "Number thousands divider" # short_description = "A divider to separate thousands in displayed numbers" # long_description = `This option specifies the value to separate thousands in the displayed number. For instance, if this option is empty, a number may be displayed as 123456789. If the value of this option is a comma (,), the number will be 123,456,789. If it's a period (.), the number will be 123,456,789. If it's a space, the number will be 123 456 789. This can be used to localize number divisions. If this option is empty or \"none\" the value of lang_stats.number.thousands_divider will be used; i.e., leave this value empty to use the current language's default divider.` # } # number_thousands_divider # KHP 10-Nov-2010, moved number_thousands_divider to users # number_decimal_divider = { # label = "Number decimal divider" # short_description = "A divider to separate the integer part from the decimal (fractional) part in displayed numbers" # long_description = "This option specifies the value to separate the integer part from the decimal (fraction) part in displayed number. E.g. this specifies the \"decimal point\". For instance, if this option is \".\" (and the thousands divider is a comma), a number may be displayed as 1,234,567.89. If the value of this option is a comma (,) (and the thousands divider is a dot), the number will be 1.234.567,89. This can be used to localize numbers. If this option is empty the value of lang_stats.number.decimal_divider will be used; i.e. leave this value empty to use the current language's default divider. See also {=docs_option_link('ntd')=}." # } # number_decimal_divider use_base_ten_for_byte_display = { label = "Use base 10 for byte displays" short_description = "Use base 10 (multiples of 1000, e.g., megabytes) for byte displays, rather than base 2 (multiples of 1024, e.g., mebibytes)" long_description = `
This controls whether to use base 10 (multiples of 1000) when displaying bytes numbers, or base 2 (multiples of 1024). When this option is on, $PRODUCT_NAME will display all byte values using base-10 calculations (e.g., megabytes); when it is off, it will display all byte values using base-2 calculations (e.g., mebibytes). For instance, 2000 bytes would be displayed as "2.000 k" (two kilobytes) if this option is on, or it would be displayed as "1.953 k" (1.953 kibibytes) if this option is off.
` } # use_base_ten_for_byte_display progress_page_interval = { label = "Number of seconds between progress pages" short_description = "The number of seconds between progress pages" long_description = "This controls the number of seconds which elapse between the progress pages or command-line progress indicators, which appear when the progress display is enabled (see {=docs_option_link('verbose')=}).
The \"progress\" (p) option (see {=docs_option_link('verbose')=}) controls whether a progress indicator will appear during long operations (like reading a large log file). When $PRODUCT_NAME is used from the command line, this option causes it to show a single-line text progress indicator. There isn't enough room on a single 80-character line to show all the information that's shown on a graphical progress page, but $PRODUCT_NAME shows the most important parts:
G:[@@@@@@@@@@ ]47% 643779e E00:20:42 R00:20:01 25M/1976k
The first character (G in this case) is the first letter of the full description of the current operation, as it would appear in the graphical view. For instance, in this case the G stands for \"Getting data by FTP.\" Other common operations are \"(R)eading data\" (from a local file or command) and \"(E)rasing database.\"
The section in brackets is a progress meter, which gradually fills as the task progresses, and is completely full at the end. The percentage after it is the percentage of to task that is now complete. If $PRODUCT_NAME cannot determine the length of the task (for instance, if it's processing gzipped log data, or bzipped log data, or log data from a command), then it will not show anything in the bar area, and it will show ??% as the percentage.
The next section (643779e above) is the number of log entries that $PRODUCT_NAME has processed.
The next section (E00:20:42 above) is the time elapsed since processing began, in hours:minutes:seconds format. That is followed by the estimated time remaining, (R00:20:01 above), in the same format. If $PRODUCT_NAME cannot determine the length of the task, the time remaining will be R??:??:??.
The last two numbers (25 MB/1976 KB above) are the memory used by the database (25 MB in this case), and the disk space used by the database (1976 KB in this case). Note that this is just the memory used by this database; $PRODUCT_NAME itself will be using additional memory for other purposes, so the total $PRODUCT_NAME memory usage will be higher than this number.
" } # progress_page_interval convert_export_charset = { label = "Convert export charset" short_description = "Whether to perform charset conversion when exporting CSV data" long_description = "This specifies whether charset conversion should occur, when exporting reports to CSV format. If this option is unchecked, charset conversion will not occur, and the output data will be in the UTF-8 charset. If this option is checked, then {=docs_option_link('output.convert_export_from_charset')=} and {=docs_option_link('output.convert_export_to_charset')=} options can be used to convert from UTF-8 to whatever charset is required in the output file." } # convert_export_charset convert_export_from_charset = { label = "Convert export from charset" short_description = "The charset to convert from, when converting a final exported CSV file" long_description = "If this option is not empty, it will be used together with {=docs_option_link('cetc')=} to convert the result of a CSV export to a different charset. This option specifies the charset the export is in to begin with; {=docs_option_link('cetc')=} specifies the charset that the export text will be in when it is displayed" } # convert_export_from_charset convert_export_to_charset = { label = "Convert export to charset" short_description = "The charset to convert to, when converting a final exported CSV file" long_description = "If this option is not empty, it will be used together with {=docs_option_link('cefc')=} to convert the result of a CSV export to a different charset. {=docs_option_link('cefc')=} specifies the charset the export is in to begin with; this option specifies the charset that the export text will be in when it is displayed." } # convert_export_to_charset } # output security = { allow_viewers_to_rebuild = { label = "Allow viewers to rebuild/update database" short_description = "Allow all statistics viewers to rebuild/update the database" long_description = "When this option is checked (true), anyone viewing the statistics for the profile and rebuild or update the database, using the rebuild/update links in the reports. When this option is unchecked (false), only administrators will be able to use those links-- the links will not be visible for non-administrative viewers." } # allow_viewers_to_rebuild } # security statistics = { miscellaneous = { cache_reports = { label = "Cache reports" short_description = "True if reports should be cached for faster repeat display" long_description = "This controls whether reports are cached on disk. When this option is true, reports are saved on the disk, so if the exact same report is requested again later, it can be quickly generated without requiring database access or report generation. When this option is false, reports are regenerated every time they are viewed. Caching uses additional disk space, so it may be useful to turn this off if disk space is at a premium." } # cache_reports entry_name = { label = "Log entry name" short_description = "The word to use to describe a log entry" long_description = "This option specifies the word used to refer to a single log entry. For web log, for instance, this may be \"hit\", or for email logs it may be \"message\". This option is set in the log format plug-in, and generally does not need to be changed unless you are creating a new plug-in. This will appear in various places in statistics pages." } # entry_name first_weekday = { label = "First weekday" short_description = "The first weekday of the week (1=Sunday, 2=Monday, ...)" long_description = "This controls the weekday that is considered the first day of the week. The first weekday will be the first column in calendar months and it will be the first row in weekday tables. Use 1 for Sunday, 2 for Monday, 3 for Tuesday, 4 for Wednesday, 5 for Thursday, 6 for Friday, and 7 for Saturday." } # first_weekday csv_delimiter = { label = "CSV delimiter" short_description = "The delimiter to use between fields in a CSV export" long_description = "This specifies the delimiter to use between fields in a CSV export. CSV is comma-separated-values, so typically this would be a comma, but this can be set to any other character to make the \"CSV\" output actually separated by tabs (use \\t), pipes, or any other string." } # csv_delimiter hidden_views_url = { label = "Hidden views URL" short_description = "The URL to link view buttons to when the views are not visible" long_description = "This controls the page that view buttons link to when the associated view is hidden. If this option is empty, the view button itself will also be hidden. Otherwise, this view button will be dimmed, and clicking the button will take you to the URL specified by this option." } # hidden_views_url enable_calendar_in_reports_menu = { label = "Enable calendar in reports menu" short_description = "" long_description = "This controls if the calendar is shown in the dynamic reports menu. A calendar menu item is added on top of the reports menu if this option is checked and if the the log format supports date time." } # enable_calendar_in_reports_menu # show_calendar_as_default_report = { # label = "Show calendar as default report" # short_description = "" # long_description = "This controls if the calendar is shown as default report in dynamic reports. If this option is checked it will show the calendar as default report." # } # show_calendar_as_default_report marked_weekday = { label = "Marked weekday" short_description = "The weekday which appears marked in calendar months displays (1=Sunday, 2=Monday, ...)" long_description = "This controls the weekday which appears in a different color in calendar months displays. The marked weekday will be displayed in a different color than the other weekdays, i.e. weekday = 1 will display the \"S\" for Sunday in red color. Use 1 for Sunday, 2 for Monday, 3 for Tuesday, 4 for Wednesday, 5 for Thursday, 6 for Friday, and 7 for Saturday." } # marked_weekday # maximum_session_duration = { # label = "Maximum session duration (seconds)" # short_description = "The maximum duration of a session; longer sessions are discarded from the session information" # long_description = "This controls the maximum length of a session in the session information. This affects the display of session-based statistics reports like the \"sessions overview\", and the entry/exit page views. Sessions longer than the value specified will be ignored, and will not appear in the session information. This option is useful because some large ISPs (e.g. AOL) and other large companies use web caches that effectively make all hits from their customers to appear to be coming from one or just a few computers. When many people are using these caches at the same time, this can result in the intermixing of several true sessions in a single apparent session, resulting in incorrect session information. By discarding long sessions, which are probably the result of these caches, this problem is reduced. Also, long visits are often the result of spider visits, which are usually not useful in session reporting. The problem with caches can be eliminated entirely by configuring your web server to track \"true\" sessions using cookies, and then configuring $PRODUCT_NAME to use the cookie value (rather than the hostname field) as the visitor id. Setting this option to 0 removes any limit on session duration, so all sessions will be included." # } # maximum_session_duration page_footer = { label = "Footer text" short_description = "HTML code to place at the bottom of statistics pages" long_description = "This specifies the HTML text to appear at the bottom of statistics pages. If both this and {=docs_option_link('pff')=} are specified, both will appear, and this will appear second. See also {=docs_option_link('pff')=}, {=docs_option_link('ph')=}, {=docs_option_link('phf')=}, and {=docs_option_link('pfc')=}." } # page_footer page_footer_file = { label = "Footer file" short_description = "An HTML file whose contents go at the bottom of statistics pages" long_description = "This specifies a file containing HTML text to appear at the bottom of statistics pages. If both this and {=docs_option_link('pf')=} are specified, both will appear, and this will appear first. See also {=docs_option_link('pf')=}, {=docs_option_link('ph')=}, {=docs_option_link('phf')=}, and {=docs_option_link('pfc')=}." } # page_footer_file page_frame_command = { label = "Page frame command" short_description = "A command which is executed to generate HTML to frame $PRODUCT_NAME's statistics" long_description = "This option specifies a command-line program to run (UNIX and Windows only) to generate an HTML \"frame\" into which $PRODUCT_NAME's statistics page output should be inserted. This is useful for integrating $PRODUCT_NAME's output with the look and feel of a web site. The program should generate this HTML to its standard output stream. The frame should be a complete HTML document, starting with <HTML> and ending with </HTML>. Somewhere in the document, the text [[[[STATISTICS]]]] should appear. $PRODUCT_NAME will generate statistics pages by replacing that text with the statistics information, and leaving the rest of the page unchanged. See also {=docs_option_link('pf')=}, {=docs_option_link('ph')=}, {=docs_option_link('pff')=}, and {=docs_option_link('phf')=}." } # page_frame_command page_header = { label = "Header text" short_description = "HTML code to place at the top of the statistics pages" long_description = "This specifies the HTML text to appear at the top of the statistics pages. If both this and {=docs_option_link('phf')=} are specified, both will appear, and this will appear first. See also {=docs_option_link('phf')=}, {=docs_option_link('pf')=}, {=docs_option_link('pff')=}, and {=docs_option_link('pfc')=}." } # page_header page_header_file = { label = "Header file" short_description = "An HTML file whose contents go at the top of the statistics pages" long_description = "This specifies a file containing HTML text to appear at the top of statistics pages. If both this and {=docs_option_link('ph')=} are specified, both will appear, and this will appear second. See also {=docs_option_link('ph')=}, {=docs_option_link('pf')=}, {=docs_option_link('pff')=}, and {=docs_option_link('pfc')=}." } # page_header_file server_root = { label = "Root URL of log data server" short_description = "The root URL of the server being analyzed" long_description = "This specifies the root URL (e.g. http://www.myserver.com/) of the web server which generated the log data. If a server root is specified and \"$lang_options.profile.statistics.miscellaneous.show_http_link.label\" is enabled, $PRODUCT_NAME will generate links, where possible, back to the server; these links will appear in the tables in reports. If the server root is not specified, these linked icons will not appear." } # server_root session_timeout = { label = "Session timeout (seconds)" short_description = "The interval after which events from the same user are considered to be part of a new session" long_description = "This controls the amount of time a session can be idle before it is considered complete. This affects the display of session-based statistics reports like the \"sessions overview\", and the entry/exit page views. Sessions are considered ended when a user has not contributed an event in the number of seconds specified here. For instance, if this interval is 3600 (one hour), then if a user does not contribute an event for an hour, the previous events are considered to be a single session, and any subsequent events are considered to be a new session." } # session_timeout remove_reloads_from_sessions = { label = "Remove reloads from sessions" short_description = "Specifies whether sequential session events on the same page should be combined into one" long_description = "This option specifies whether repeated session events (e.g., page views) on the same page should be combined into a single session event. For instance, in web server log analysis, if a visitor hits index.html, and if the next hit is also index.html, these will be combined into a single hit on index.html if this option is true (checked). If this option is false (unchecked), the two events will be reported as they occurred, as two separate hits on a page. This option is useful for removing repeated reloads caused by automatic web browser reloads, manual web browser user reloads, or other reloads which are typically not really separate events in the session." } # remove_reloads_from_sessions show_http_link = { label = "Show page links" short_description = "Shows table items which start with \"http://\" as a link." long_description = "This option specifies if table items which start with \"http://\" should be shown as a link. If this option is enabled all table items which start with \"http://\" will be shown as a link and will open the page as specified by the table item URL." } # show_http_link user_agent_for_emails = { label = "User agent for email" short_description = "Specifies the target user agent when sending emails." long_description = "This option specifies the target user agent (web browser) when sending emails. Setting the user agent allows $PRODUCT_NAME to optimally handle line breaking for the target web browser. The user agent can be set to \"msie\" for Microsoft Internet Explorer, \"safari\" for Safari, \"netscape\" for Netscape and Mozilla and \"unknown\" if the user agent (web browser) is not known. Setting the user agent to \"unknown\" will break lines by spaces and by inserting aThis synchronizes the x-axis of a chronological graph with the date range of a relative date filter. The start date and end date of the x-axis will be adjusted to the relative date so that it is independend of the available dates in the log data.
I.e., a relative date filter of \"recent 3 months\" would show a x-axis for the recent 3 months, regardless of the available start date and end date of the log data. The log data may start on the 15th and end on the 20th, yet the graph x-axis will span for the entire 3 months, from the first day of the first month until the last day of last month.
This option is useful for reports with multiple report elements where the graphs of each report element should show an equal date range for easier comparison. This could be i.e. exactly one month for all report elements or the 1st quarter for the first report element, the second quarter for the second report element, etc. See also {=docs_chapter_link('date_filter')=}.
" } # sync_graph_axis_with_relative_date report_elements = { report_element = { description = { label = "Description" short_description = "" long_description = "" } # description header = { label = "Header" short_description = "" long_description = "" } # header footer = { label = "Footer" short_description = "" long_description = "" } # footer omit_parenthesized_items = { label = "Omit parenthesized items" short_description = "" long_description = "This omits parenthesized table items that starts with \"(\" and ends with \")\", i.e. \"(no search engine)\", \"(no search phrase)\" or \"(no referrer)\". In some cases it may be usful to show parenthesized table items, in others to omit them.
Please note that omitting parenthesized items may increase the time it takes to generate a report element, so the option should only be checked if parenthesized items exist and should be omitted.
" } # omit_parenthesized_items use_overview_for_totals = { label = "Use overview for totals" short_description = "" long_description = `This controls whether the numbers from the Overview should be used to compute the Total rows of table reports. When this option is checked, a specialized Overview report is generated, to generate the Totals row of each table report. When this option is unchecked, the Total row is computed by summing each column of the table. Totals rows derived from an Overview have the advantage of showing true unique numbers for columns which compute unique values (like "visitors" in web logs). However, the calculation involved can be much slower than a simple sum, especially if the report element omits parenthesized items (which is default for most reports). The performance cost can be as little as 2x slowdown, but in extreme cases involving very complex fields, it can be much more, hundreds of times slower. Therefore, this option should be set to false unless the unique visitors total is really needed.` } # use_overview_for_totals date_filter = { label = "Date filter" short_description = "" long_description = "This specifies a build in date filter which applies to this report element only. This date filter overrides any other given date filter, i.e. the selected date filter by calendar or the date picker or a date filter given in the URL or command line. See {=docs_chapter_link('date_filter')=} for more details." } # date_filter filter = { expression = { label = "Report filter expression" short_description = "" long_description = "" } # expression } # filter table_filter_expression = { label = "Table filter expression" short_description = "" long_description = "" } # table_filter_expression session_user_field = { label = "Session user field" short_description = "" long_description = "" } session_date_time_field = { label = "Session date/time field" short_description = "" long_description = "" } session_id_field = { label = "Session Id field" short_description = "" long_description = "" } session_duration_field = { label = "Session duration field" short_description = "" long_description = "" } session_events_field = { label = "Session events field" short_description = "" long_description = "" } session_entrances_field = { label = "Session entrance field" short_description = "" long_description = "" } session_exits_field = { label = "Session exists field" short_description = "" long_description = "" } session_sequence_number_field = { label = "Session sequence number field" short_description = "" long_description = "" } session_page_field = { label = "Session page field" short_description = "" long_description = "" } } # report_element } # report_elements } # report } # reports report_fields = { label = "Report fields" column_label = { label = "Column label" short_description = "" long_description = "This specifies an alternative label for report table columns. If a column label is specified $PRODUCT_NAME displays it in table columns, otherwise it displays the default report field name." } # column_label column_info = { label = "Column Info" short_description = "" long_description = "This specifies a text to be displayed as column info in reports. Tables in reports will show an info icon on the left in table headers if a column info is defined and if the column is visible." } # column_info # database_field = { # label = "Database field" # } # database_field display_format_type = { label = "Display format" short_description = "" long_description = "This specifies the format to be displayed in reports. There are a number of default formats and a \"Custom\" format which supporst printf formatting." } # display_format_type custom_display_format_type = { label = "Custom display format type" short_description = "" long_description = "This formats a value in printf formatting style, i.e:
\"\$ %0.4f\" formats the value \"2.345678\" as \"$ 2.3457\"
\"%0.2f\" formats the value \"2.345678\" as \"2.35\"
" } # custom_display_format_type column_alignment = { label = "Column Alignment" short_description = "" long_description = "This specifies the column alignment in table columns.Auto aligns non-numerical values on the left and numerical values on the right.
Left or Right aligns the values independent of its type.
" } # column_alignment subitems_level = { label = "Subitems level" short_description = "" long_description = "The subitems level defines of how to display hierarchical database field items such as date time, location or page. Report fields allow to display different variations of hierarchical database fields by defining specific subitem levels.
Bottom level (equal -1) This displays table items at the bottom level, which means that they are expanded up to the last item, i.e. dir1/subdir/page.html
Hierarchical level (equal 0) This displays table items hierarchically by displaying only the root items first. If a root item or subitem contains subitems then it is possible to expand that item to display the subitems. Items with subitems are displayed as a link, clicking on it will show the subitems.
Specific level (equal -2 or >= 1) This displays table items at the specified subitems level, i.e. \"dir1/subdir/\". Note, -2 defines a source item field (i.e. date_time timestamp in case for date_time database field in log_detail report)
" } # subitems_level expression = { label = "Expression" short_description = "" long_description = "" } # expression sort_type = { label = "Sort type" short_description = "" long_description = "" } # sort_type category = { label = "Category" short_description = "" long_description = "" } # category show_remainder_value = { label = "Show remainder value" short_description = "" long_description = "" } # show_remainder_value show_average_value = { label = "Show average value" short_description = "" long_description = "" } # show_average_value show_min_value = { label = "Show min value" short_description = "" long_description = "" } # show_min_value show_max_value = { label = "Show max value" short_description = "" long_description = "" } # show_max_value show_total_value = { label = "Show total value" short_description = "" long_description = "" } # show_total_value skip_escaping = { label = "Skip escaping" short_description = "" long_description = "This skips HTML escaping, Salang escaping and text truncation of the column value. HTML markup will be displayed as HTML. Skip escaping should only be used for values where you are sure that it doesn't contain and malicious HTML markup or Salang code." } # skip_escaping } # report_fields } # statistics } # profile } # lang_options