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')=}.
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. 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.
rebuild_database_indices (or rdi): This rebuilds the indices of the main table.
rebuild_database_hierarchies (or rdh): This rebuilds the hierarchy tables of the database.
merge_database (or md): This merges the contents of a database (specified with {=docs_option_link('mdd')=}) into the current database. After it completes, the current profile's database will contain all the information it contained prior to the merge, plus the information in the added database.
generate_all_report_files (or garf): This generates HTML statistics pages for all report, 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')=}. 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 evt): This exports a view 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.
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.
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.
recreate_profile (or rp): This recreates profile (specified with -p profilename). It deletes the profile, and recreates it using the options originally used to created 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!
" } # action build_database = { label = "Build database" } # build_database display_page = { label = "Display page" short_description = "The interface page to display" long_description = "This tells $PRODUCT_NAME which page to display in its HTML interface. This is generally used internally to deliver pages of the user interface to the browser." } # display_page date_filter = { label = "Date filter" short_description = "The date filter to use when generating a report" long_description = "
This specifies the date filters to use when generating a report. It is similar to the {=docs_option_link('f')=} option, but with a few differences:
It is intended only for date filtering (use {=docs_option_link('f')=} for other types of filtering).
It supports a wider range of syntax options (see below).
It is displayed attractively in the \"Date Filter\" section of the report (filter specified with {=docs_option_link('f')=} will appear below that, and will appear as literal filter expressions).
This option is most often used to create easy date or date range filters when generating reports from the command line.
The format of the value is either a date in the format yyyy, mmm/yyyy, d/mmm/yyyy (leading 0 is option on day), or a date range D1-D2 where D1 and D2 use the same format. Examples:
2004 2001-2004 Jan/2004 Jan/2004-April/2005 10/Jan/2004 10/Jan/2004-15/May/2005" } # date_filter date_breakdown = { label = "Date breakdown" short_description = "Zooms to the date which is specified in \"$lang_options.command_line.date_filter.label\"" long_description = "This option is used in combination with the \"$lang_options.command_line.date_filter.label\". If the option is specified then the generated report will be zoomed to the date which is specified in \"$lang_options.command_line.date_filter.label\"." } # date_breakdown filters = { label = "Report filters" short_description = "The filters to use when generating a report" long_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. This can be used in the Report Filter field of a report or a report element, when editing a report, it it can be used from the command line.
The value of this option is an expression using a subset of the {=docs_chapter_link('salang')=} syntax (see examples below). Only a subset of the language is available for this option. Specifically, the option can use:
within: e.g. \"(page within '/directory')\" or \"(date_time within '__/Jan/2004 __:__:__')\"
<, >, <=, >=: for date/time field only, e.g. \"(date_time < '01/Jan/2004 00:00:00')\"
and: between any two expressions to perform the boolean \"and\" of those expressions
or: between any two expressions to perform the boolean \"or\" of those expressions
not: before any expression to perform the boolean \"not\" of that expressions
matches: wildcard matching, e.g. \"(page matches '/index.*')\"
matches_regexp: regular expression matching, e.g. \"(page matches_regexp '^/index\\\\..*\\$')\"
Date/time values are always in the format dd/mmm/yyyy hh:mm:ss; underscores are used as wildcards, to match any value in that position. For instance, '15/Feb/2003 __:__:__' refers to a single day, and '__/Feb/2003 __:__:__' refers to a month, a '__/___/2003 __:__:__' referrs to a year.
NOTE: To use these examples in a command line, or in the Extra Options of the Scheduler, use
where filter is one of the examples below, e.g.,
Use double quotes (\") around the entire filter expression; use single quotes (') within the filter if necessary.
Example: To show only events from February, 2005:
Example: To show only events within the page directory /picts/:
Example: To show only events from February, 2004, and within the page directory /picts/:
Example: To show only events from February 4, 2004 through February 10, 2004:
Example: To show only events in the past 30 days:
Example: To show only events with source port ending with 00:
Example: To show only events with source port ending with 00, or with destination port not ending in 00:
Example: To show only events with server_response 404, and on pages whose names contain three consecutive digits:
This specifies the version number to update to, using the web update feature. This feature is still experimental. When used in conjuction 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 servering 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 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 or 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.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 the 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 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 return_address = { label = "Return address" short_description = "The return address of an email message" 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')=})." } # 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 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 report_email_subject = { label = "Report email subject" short_description = "The email subject to use when sending na 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 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 elbwfpidDslamnNtqQuo
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 respondes 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 expand_paths = { 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 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 ending_row = { label = "Ending row" short_description = "This option controls the ending row of a generated report." long_description = "This option controls the ending row of a generated report. Ending row is a global setting and overrides existing ending row values in every report and report element." } # ending_row } # command_line internal = { active_report = { label = "Active report" short_description = "This option specifies which report is generated" long_description = "This option specifies which report is shown, or which report to generate. It is used internally by $PRODUCT_NAME as you move from report to report, but it can also be set in the profile options interface to control which view $PRODUCT_NAME shows when you first view the statistics, or used from the command line to control which report to generate when sending email or generating HTML report." } # active_report } # internal preferences = { miscellaneous = { language = { label = "Language" short_description = "The language module to use to generate language-specific text" long_description = "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\"). Module 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 implementations. 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 the considerable time required 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 nameserver" 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 security = { 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 *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.
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 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 if 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 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 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 } # 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 log_analysis_info_directory = { label = "LogAnalysisInfo $lang_stats.directory location" short_description = "A $lang_stats.directory where $PRODUCT_NAME can store profiles and other information" long_description = "This specifies a local $lang_stats.directory where $PRODUCT_NAME can store profiles, databases, preferences, and other information. This $lang_stats.directory must exist and be writable by $PRODUCT_NAME, or must be in a $lang_stats.directory which is writable by $PRODUCT_NAME (so $PRODUCT_NAME can create it). If this option is empty, $PRODUCT_NAME assumes that the $lang_stats.directory is named LogAnalysisInfo, and is found in the same $lang_stats.directory as $(PRODUCT_NAME). If a file named LogAnalysisInfoDirLoc exists in the same $lang_stats.directory as $(PRODUCT_NAME), the contents of that file are used as the pathname of this $lang_stats.directory, and this option is ignore. If the environment variable LOGANALYSISINFODIR is set, its value is used instead, and this option is ignored." } # log_analysis_info_directory maximum_cpu_usage_percent = { label = "Maximum CPU usage" unit = "%" short_description = "Percent of CPU time to use while processing log data" long_description = "
This controls how much CPU (processor) time $PRODUCT_NAME uses while it is processing log data. If this is set to 100, $PRODUCT_NAME will use as much CPU time as possible, resulting in highest performance. If this is set to 50, $PRODUCT_NAME will pause for one second every second of processing when possible, resulting in an average CPU usage of 50%; all tasks will take twice as long to complete. Any value from 1 to 100 is allowed, and on most platforms $PRODUCT_NAME will use the requested percentage of the CPU, but on some platforms (especially older platforms), any value other than 100% will cause $PRODUCT_NAME to use 50% of the CPU.
Lower values may be useful in environments where other users or processes need higher priority than $PRODUCT_NAME, and where the operating system's own priority mechanisms are not enough to provide that. In general, you should leave this at 100 unless $PRODUCT_NAME's CPU usage is causing problems, and when possible you should use the operating system's own priority mechanism (e.g. nice
for UNIX style systems, or the Task Manager in Windows) to set the process priority lower, rather than using this option. Process management is best performed by the operating system-- individual processes like $PRODUCT_NAME cannot manage themselves nearly as well as the operating system can manage them.
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:
" is_invalid_number_message = "Please define a valid update time, the number in seconds must be >= 1." } # automatically_update_when_older_than 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 lock_database_when_in_use = { label = "Lock database when in use" } # lock_database_when_in_use 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 MySQL 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 uses 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 MySQL 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 MySQL 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 MySQL 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 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 } # 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\"." 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 affect 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 = { 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 build 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 build 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 affect 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 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 affect 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 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 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 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 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 merge 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 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 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 2G in size; a setting of 1G 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 merge 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 } # 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 6k in size, this field will be \"1k - 10k.\" If a 17k 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 web site 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 computer, 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.
" new_form_title = "New Log Field" edit_form_title = "Edit Log Field" new_button = "New Log Field" derived_log_fields_label = "Derived log fields" confirm_delete_message = "Are you sure you want to delete the log field \"$param1\"?" delete_info = "Deleting log field, please wait." save_info = "Saving log field, please wait." case_sensitive = { label = "Case sensitive" } # case_sensitive dividers = { label = "Dividers" } # index = { label = "Index" is_invalid_number_message = "Please define a valid index, a number >= 0." } # index leading_divider = { label = "Leading divider" } # 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 left_to_right_hierarchy = { label = "Left to right hierarchy" } # left_to_right_hierarchy subindex = { label = "Subindex" is_invalid_number_message = "Please define a valid subindex, a number >= 0." } # subindex type = { label = "Type" } # type } # fields 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." new_form_title = "New Log Filter" edit_form_title = "Edit Log Filter" new_button = "New Log Filter" confirm_delete_message = "Are you sure you want to delete the log filter \"$param1\"?" delete_info = "Deleting log filter, please wait." action = { label = "Action" new_button = "New Action" add_action_info = "Click the \"New Action\" button to add one or more actions." sort_label = "Sort Actions" confirm_delete_message = "Are you sure you want to delete the action?" new_form_title = "New Action" edit_form_title = "Edit Action" } actions = { label = "Actions" option_group = true accept = { label = "Accept log entry" text = "Accept the log entry" } # accept concatenate = { label = "Concatenate" text = "Concatenate $param1 and write result to $param2" plus_label = "plus" value_label = "value" value_of_log_field_label = "value of log field" write_result_label = "Write result to log field" } # concatenate convert_to_lowercase = { label = "Convert to lowercase" text = "Convert $param1 to lowercase" } # convert_to_lowercase convert_to_uppercase = { label = "Convert to uppercase" text = "Convert $param1 to uppercase" } # convert_to_uppercase copy = { label = "Copy" text = "Copy $param1 to $param2" copy_from_label = "Copy log field" copy_to_label = "to log field" } # copy match_regexp_copy = { label = "Match a regular expression and copy parenthesized section(s)" text = "Match in $param1 the regular expression \"$param2\" and copy" text_2 = "$param3 to $param4" match_label = "Match in log field" regexp_label = "the regular expression" copy_to_label = "Copy $param1 to log field" info_1 = "Set the part of the regular expression which has to be copied in parenthesizes ( )." info_2 = "$param1 contains the match result of the 1st parenthesized section, $param2 of the second, etc." } # copy_parenthesized_section_of_regexp find_and_replace = { label = "Find and replace" text = { value = "Find in $param1 \"$param2\" and" replace_all = "replace all matches with \"$param3\"" replace_first = "replace the first match with \"$param3\"" replace_last = "replace the last match with \"$param3\"" } # text find_label = "Find in log field" value_label = "the value" replace_label = "Replace" value_2_label = "with the value" replace_all_label = "all matches" replace_first_label = "first match" replace_last_label = "last match" blank_field_info = "(Leave field blank to omit matched value)" } # find_and_replace reject = { label = "Reject log entry" text = "Reject the log entry and stop filtering" } # reject set = { label = "Set" text = "Set $param1 to \"$param2\"" set_label = "Set log field" value_label = "to value" blank_field_info = "(Leave field blank to set a null value)" } # set } # actions advanced_expression = { is_empty_message = "No filter expression. Please define a filter expression." available_log_fields_info = "Available log fields to be used in the filter expression" } boolean_operator = { any_button = "Meet any condition (OR)" all_button = "Meet all conditions (AND)" custom_button = "Custom" sequence_label = "Boolean operator sequence" sequence_example = "For example: (A or B) and (C or D)" or = "or" and = "and" } comment = { label = "Comment" } conditions = { new_button = "New Condition" sort_label = "Sort Conditions" add_condition_info = "Click the \"New Condition\" button to add one or more conditions." confirm_delete_message = "Are you sure you want to delete the condition?" new_form_title = "New Condition" edit_form_title = "Edit Condition" if_label = "If - condition(s) to be met" if_label_2 = "If" then_label = "Then - action(s) to be taken" then_label_2 = "Then" else_label = "Else - action(s) to be taken if condition is not met" else_label_2 = "Else" else_button = "Add optional action to be taken if condition is not met" } disabled = { label = "Filter active" } # disabled expression = { ids = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" } expression_operator = { eq = "is equal" lt = "is less than" gt = "is greater than" lteq = "is less than or equal" gteq = "is greater than or equal" contains = "contains" starts_with = "starts with" ends_with = "ends with" matches_regular_expression = "matches regular expression" matches = "matches wildcard expression" not_eq = "is NOT equal" not_contains = "NOT contains" not_starts_with = "NOT starts with" not_ends_with = "NOT ends with" not_matches_regular_expression = "NOT matches regular expression" not_matches = "NOT matches wildcard expression" lt_now = "is older than number of days" lt_now_text = "is older than $param1 days" } filter = { label = "Filter" type = { label = "Filter type" option_group = true conditional = { label = "If a condition is met, then perform an action" } action = { label = "Perform an action only" } advanced = { label = "Advanced expression syntax" } } # type } # filter filter_name = { label = "Name" new_log_filter_text = "New log filter" is_empty_message = "Please define a log filter name." is_duplicate_message = "Duplicate log filter name. Please define a different log filter name." } # filter_name general = { log_field_label = "Log field" operator_label = "Operator" value_label = "Value" unknown_log_field_text = "Unknown log field" is_empty_message = "No value defined. Please define a value." concatenate_is_empty_message = "No value defined. Please define a value for the $param1 concatenate field." no_list_item_selected_message = "No item selected. Please select an item in the list." cannot_copy_string_to_numeric_message = "Type mismatch. Cannot copy a log field of type string to a numerical log field." cannot_copy_float_to_int_message = "Type mismatch. Cannot copy a log field of type float to a log field of type integer." cannot_copy_to_same_log_field_message = "Cannot copy to same log field. Please define two different log fields." regexp_is_empty_message = "No regular expression defined. Please define a regular expression." invalid_regexp_message = "Invalid regular expression. Please define a valid regular expression." invalid_number_of_braces_in_match_regexp_copy = "Too less braces in regular expression. Please increase the number of parenthesized sections in the regular expression." duplicate_log_fields_in_match_regexp_copy = "Duplicate log fields in copy section. Please define different log fields." invalid_date_time_message = "Invalid date/time. Please define a valid date/time. I.e.: 01/Jan/2005 00:00:00" invalid_number_message = "Invalid number. Please define an integer or float number." invalid_integer_message = "Invalid number. Please define an integer number." invalid_number_of_days_message = "Invalid number of days. Please define a number greater than 0." no_if_expression_message = "No Condition defined. Please add a Condition." no_then_expression_message = "No Action in the \"Then\" part defined. Please add an Action." no_action_message = "No Action defined. Please add an Action." no_boolean_operator_sequence_message = "No boolean operator sequence defined. Please define a boolean operator sequence." invalid_boolean_operator_sequence_message = "Invalid boolean operator sequence: $param1" invalid_boolean_operator_sequence_ids_message = "Invalid number of identifiers in boolean operator sequence." invalid_braces_order_in_boolean_operator_sequence_message = "Invalid order of braces in boolean operator sequence." invalid_braces_number_in_boolean_operator_sequence_message = "Number of opening and closing braces in the operator sequence do not match." first = "first" second = "second" third = "third" fourth = "fourth" } sort_filters = { label = "Sort Filters" active_log_filter_text = "Active log filter, no name defined" } } # filters 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 line 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 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 line 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 line 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 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" long_description = "This controls the expected format of date fields in the log data. Possible formats are:
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.
mm/dd/yy; example: 04/21/00.
mm/dd/yyyy; example: 04/21/2000
dd/mm/yyyy; example: 21/04/2000
dd/mm/yy; example: 21/04/00.
ddmmmyy; example: 21Apr00.
dd/mmm/yy; example: 21/Apr/00.
dmmmyyyy; example: 21Apr2000, 4Dec1998.
dd/mmm/yyyy; example: 21/Apr/2000.
mmm/dd/yyyy; example: Apr/21/2000.
mmmmm/dd/yyyy; example: April/21/2000, \"December 21, 2002\", \"January 5 2001\" (any dividers allowed).
yyyy/mmm/dd; example: 2000/Apr/21.
m/d/yy; same as mm/dd/yy, but leading zeros in month and day may be omitted; examples: 4/21/00, 12/4/98, 11/23/02.
m/d/y; same as mm/dd/yy, but leading zeros in month, day, and year may be omitted; examples: 4/21/0, 12/4/98, 11/23/2.
d/m/y; same as dd/mm/yy, but leading zeros in month, day, and year may be omitted; examples: 21/4/0, 4/12/98, 23/11/2.
m/d/yyyy; same as mm/dd/yyyy, but leading zeros in month and day may be omitted; examples: 4/21/2000, 12/4/1998, 11/23/2002.
d/m/yyyy; same as dd/mm/yyyy, but leading zeros in month and day may be omitted; examples: 21/4/2000, 4/12/1998, 23/11/2002.
d/m/yy; same as dd/mm/yy, but leading zeros in month and day may be omitted; examples: 21/4/00, 4/12/98, 23/11/02.
mmdd; example: 0421; year is assumed to be 2002.
mm/dd; example: 04/21; year is assumed to be 2002.
mmm dd; example: Apr 21; year is assumed to be 2002.
dd/mmm/yyyy:hh:mm:ss; example: 21/Apr/1998:08:12:45; colon between date and time may be a space instead.
mm/dd/yyyy hh:mm:ss; example: 04/21/1998 08:12:45.
mmm dd hh:mm:ss yyyy; example: Apr 21 08:12:45 1998. Optionally, a time zone can be specified before the year; i.e. Apr 03 15:57:15 PST 2002.
yyyy-mm-dd; example: 1998-04-21.
yyyy/mm/dd; example: 1998/04/21.
yyyy/m/d; example: 1998/4/21.
yyyymmdd; example: 19980421.
yyyymmddhhmmss; example: 19980421081245.
yymmdd-hhmmss; example: 980421-081245.
m/d/yy h:mm; example: 4/21/98 8:12.
seconds_since_jan1_1970; the number of seconds since January 1, 1970, possibly with a decimal point; example: 887395356.086578.
TAI64N; TAI64N format; example @400000003c675d4000fb2ebc.
auto; automatic detection of date. Currently this supports only formats where the year is four digits or is two-digits and comes last, and the month is three-letter English or is numerical and comes before the day.
" } # date_format 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 field_separator = { label = "Log field separator" short_description = "The character or string that separates one log field from the next" long_description = "This specifies the character or string which separates one log field from another in a log entry. For instance, if this is \",\" then log fields are comma-separated; if it is \"==--==\", then the fields are separate from each other by ==--==. This option only affects index/subindex style parsing of log data-- it does not affect parsing if {=docs_option_link('powf')=} is true or if {=docs_option_link('pre')=} is specified." } # field_separator format_label = { label = "Log data format" short_description = "The format of the log data" long_description = "This specifies the name of the log format of the log data. When this appears in a log format description file, it defines the name of the format being described. When this appears in a profile, it has no effect other than providing the name of the log format plug-in used to create the profile. $PRODUCT_NAME sets this option a new profile is create." } # format_label global_date_regular_expression = { label = "Global date regular expression" short_description = "A regular expression which, if matched in the log data, determines the date for all subsequent entries" long_description = "This option is a regular expression (see {=docs_chapter_link('regexp')=}) which is used to extract a \"global date\" from log data. A global date is a date that appears in log data, usually in the header, and specifies the date for all subsequent log entries. Usually, this is used when the log entries do not contain date information at all, but if they do, this overrides them. When this option is not empty, every line of the log file is checked against this regular expression, and if it matches, the parenthesized section is remembered as the \"global date\". From then on, or until another global date line is found, the date field of any accepted log entry is replaced by the global date value. If this option is empty, it is not used." } # global_date_regular_expression global_date_filename_regular_expression = { label = "Global date filename regular expression" short_description = "A regular expression which, if matched in the log filename, determines the date for all entries in that log file" long_description = "This option is a regular expression (see {=docs_chapter_link('regexp')=}) which is used to extract a \"global date\" from the name of the log file. A global date is a date that applies to all log appears in a file. Usually, this is used when the log entries do not contain date information at all, but if they do, this overrides them. When this option is not empty, the filename of every log processed is checked against this regular expression, and if it matches, the parenthesized section is remembered as the \"global date\". From then on, or until another global date filename is found, the date field of any accepted log entry is replaced by the global date value. If this option is empty, it is not used." } # global_date_filename_regular_expression ignore_format_lines = { label = "Ignore format lines" short_description = "Ignore format lines in the log data" long_description = "This controls whether $PRODUCT_NAME ignores format lines in the log data. Format lines are lines starting with #Format, format=, or !!LOG_FORMAT, which appear in the log data, usually in a header, and describe the format of the log data on the following lines. Generally, you want to leave this option off, so $PRODUCT_NAME will understand log format changes if they occur in the middle of the log data. However, if you have defined custom log fields, you need to turn this on, or the field changes will be lost when format lines are encountered." } # ignore_format_lines ignore_quotes = { label = "Ignore quotes" short_description = "Ignore quotes in log data" long_description = "This controls whether quotes (double or single) should be treated specially in log data. If this option is checked (false), quotes are treated the same as any other character. If this option is unchecked, quotes are treated specially; a quoted value containing a field divider will be treated as a single field value-- the quotes will override the field divider, and prevent it from marking the end of the field. See also {=docs_option_link('tbaq')=}." } # ignore_quotes parse_only_with_filters = { label = "Parse log only with log parsing filters" short_description = "Use only the parsing filters to parse the log (and not the log format regexp, index/subindex, etc.)" long_description = "This controls whether the log format regular expression ({=docs_option_link('pre')=}) option and the index/subindex settings of the log fields have any effect. This option is set in the log format plug-in to determine what type of parsing is used, and it should generally not be changed. When this is false, the ({=docs_option_link('pre')=}) option will be used to parse the log, or index/subindex options will be used if the ({=docs_option_link('pre')=}) option is empty. When this is true, only the log parsing filters (log.parsing_filters in the profile) will be used to parse the log data." } # parse_only_with_filters parsing_regular_expression = { label = "Log data format regular expression" short_description = "A regular expression describing the log format" long_description = "This is a regular expression which specifies the log format. You only need to change this option if you are creating your own log file format. It is a regular expression (see {=docs_chapter_link('regexp')=}) which matches an entire log entry (one line of the log), and contains a parenthesized substring for each log field. For each line that matches the regular expressions, the part of the line which matches the first substring will become log field 1, the part of the line matching the second substring will be log field 2, etc. Log lines which do not match this expression will be rejectedFor 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" long_description = "This controls the expected format of time fields in the log data. Possible formats are:
auto; This handles most time formats automatically. Times are assumed to be in H:M:S format, where H is the hours, M is the minutes, and S is the seconds; any of them can be one or two digits. The dividers can be any non-numerical values-- they don't have to be colons. If PM appears after the time, it is assumed to be a 12-hour PM time. This can be used in many cases where the exact date format is not known in advance.
hh:mm:ss; example: 18:04:23.
h:mm:ss; same as hh:mm:ss except that the leading 0 on the hour may be omitted example: 8:12:45.
h:m:s; same as hh:mm:ss except that the leading 0 on the hour, minute, or second may be omitted example: 8:12:45, 12:8:15, 1:5:9.
dd/mmm/yyyy:hh:mm:ss; example: 21/Apr/1998:08:12:45.
mmm dd hh:mm:ss yyyy; example: Apr 21 08:12:45 1998.
h:mm:ss AM/PM; examples: 9:32:45 AM, 12:34:22 PM.
h:mm:ss GMT; examples: 9:32:45 GMT, 18:34:22 GMT.
h:mm; example: 18:04, 9:32.
hhmm; example: 1804.
hhmmss; example: 180423.
yyyymmddhhmmss; example: 19980421081245.
yymmdd-hhmmss; example: 980421-081245.
m/d/yy h:mm; example: 4/21/98 8:12.
seconds_since_jan1_1970; the number of seconds since January 1, 1970, possibly with a decimal point; example: 887395356.086578.
TAI64N; TAI64N format; example @400000003c675d4000fb2ebc.
" } # 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 build or rebuild. 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 format 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 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 = "" long_description = "" } # 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 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 = "" long_description = "" } # skip_most_recent_file 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 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 = "" long_description = "" } # 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 = "" long_description = "" } # 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" } # convert_log_data_from_charset } # processing source = { label = "Log Source(s)" short_description = "The location(s) of the log data to analyze" long_description = "This specifies the log data to analyze. Several different types of log sources are supported, including:
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.
"
new_form_title = "New Log Source"
edit_form_title = "Edit Log Source"
new_button = "New Log Source"
show_matching_files_button = "Show Matching Files"
confirm_delete_message = "Are you sure you want to delete the log source \"$param1\"?"
delete_info = "Deleting log source, please wait."
save_info = "Saving log source, please wait."
type = {
label = "Log source"
local = {
label = "Local disk"
pathname = {
label = "Pathname"
win32_field_sample = "e.g.: C:\\logs\\access.log, C:\\logs\\*.log, \\\\host\\share\\dir\\ex*.log"
unix_field_sample = "e.g.: /var/log/access.log, /home/http/logs/*.log"
is_empty_message = "Please define a pathname."
} # pathname
} # local
ftp = {
label = "FTP server"
hostname = {
label = "Hostname"
field_sample = "e.g.: ftp.mysite.com, mysite.com"
is_empty_message = "Please define a hostname."
} # hostname
username = {
label = "Username"
is_empty_message = "Please define a username."
} # username
password = {
label = "Password"
is_empty_message = "Please define a password."
} # password
pathname = {
label = "Pathname"
field_sample = "e.g.: logs/*.gz, logs/*, logs/access.log"
is_empty_message = "Please define a pathname."
} # pathname
use_passive = {
label = "Use passive mode for transfers"
}
} # ftp
sftp = {
label = "SFTP server"
} # sftp
http = {
label = "HTTP server"
hostname = {
label = "Hostname"
field_sample = "e.g.: www.mysite.com"
is_empty_message = "Please define a hostname."
} # hostname
pathname = {
label = "Pathname"
field_sample = "e.g.: /logs/my.log; wildcards not allowed;
no passwords; use FTP for multiple files or password-protected files"
is_empty_message = "Please define a pathname."
} # pathname
} # http
command = {
label = "Specify by command"
command = {
label = "Command"
field_sample = "e.g.: xunzip -c /logs/access*.xz"
is_empty_message = "Please define a command."
} # command
} # command
} # type
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 use_regular_expressions_for_log_source = { label = "Pattern is a regular expression" short_description = "The pattern specified to choose files for the log source is a regular expression" long_description = "This option controls whether the pattern specified in the filename section of the {=docs_option_link('lsu')=} option is a regular expression or a wildcard pattern. When this option is true, the pattern is treated as a full regular expression, and any regular expression constructions can be used (see {=docs_chapter_link('regexp')=}). When this is false, the pattern 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 {=docs_option_link('lsu')=}, or in a sub$lang_stats.directory of it, and whose names match this regular expression, will be processed." } # use_regular_expressions_for_log_source } # source } # log summary = { label = "Profile Summary" profile = { } # profile } network = { dns_lookup = { label = "DNS Lookup" edit_button = "Edit DNS Lookup" edit_form_title = "Edit DNS Lookup" } # dns_lookup actions_email_address = { label = "Actions email address(es)" 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. If this option 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')=}. Multiple recipients may be specified with commas, e.g. \"user1@mydomain.com,user2@mydomain.com,user3@mydomain.com\". If this option is empty, $PRODUCT_NAME will not send email." } # actions_email_address dns_server = { label = "DNS Server" short_description = "The hostname or IP address of the DNS server to use to look up IP addresses in the log data" long_description = "This specifies the 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 primary DNS server. On all other platforms (including Windows), this option must be set when {=docs_option_link('luin')=} is true." } # dns_server dns_timeout = { label = "DNS timeout (seconds)" short_description = "Amount of time to wait for DNS response before timing out" long_description = "This option controls the amount of time $PRODUCT_NAME waits for a response from a DNS (domain nameserver) when attempting to look up an IP number (see {=docs_option_link('luin')=}) during log processing. The value is in seconds; so a value of 30 means that $PRODUCT_NAME will give up after waiting 30 seconds for a response. Setting this to a low value may speed up your log processing, but fewer of your IP numbers will be resolved successfully." is_invalid_value_message = "Invalid DNS timeout value. Please define a number greater or equal $param1." } # dns_timeout ip_numbers_cache_file = { label = "IP Numbers Cache File" short_description = "The file in which to cache IP numbers after they're looked up" long_description = "This specifies a file where $PRODUCT_NAME should store a database of IP numbers it has looked up in the past (see {=docs_option_link('luin')=}). When $PRODUCT_NAME looks up an IP number, it will look in this cache first, to see if it has already found the hostname for that IP number (or if it has already determined that the hostname cannot be found). If it finds the IP number in the cache stored in this file, it will use that hostname, rather than performing the reverse DNS lookup again. This can greatly improve the speed of converting IP numbers to hostnames, especially when the same log is analyzed again.
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 (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 = " NOTE: As of $PRODUCT_NAME 6.1 (which is when we added our fast asynchronous DNS lookup algorithm), this option has no effect. In a later version, we may add it back. Here's what it used to do:
When this is true (checked), $PRODUCT_NAME performs IP number lookup (reverse DNS) before running the filters (see {=docs_chapter_link('filters')=} and {=docs_option_link('luin')=}). When this is false (unchecked), $PRODUCT_NAME performs IP number lookup after running the filters. Note that this does not determine whether $PRODUCT_NAME performs DNS ({=docs_option_link('luin')=} does that); it determines when. Setting this to true allows filtering based on hostnames, even when the hosts are in IP number format in the log data. Setting this to false saves time, by looking up only those IP numbers which correspond to entries which are accepted by the filters." } # 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, your 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:8987/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" 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 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 address of the $PRODUCT_NAME administrator, who can fix the problems as they occur.
" } # 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 preferably 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 = { 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 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 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 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('v')=}).
The \"progress\" (p) option (see {=docs_option_link('v')=}) 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 (25M/1976k above) are the memory used by the database (25M in this case), and the disk space used by the database (1976k 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" label_2 = "Convert export charset from \"$param1\" to \"$param2\"" short_description = "" long_description = "" } # 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 an rebuild or update the database, using the rebuild/update links in the reports. When this options 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 (0=Sunday, 1=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 0 for Sunday, 1 for Monday, 2 for Tuesday, 3 for Wednesday, 4 for Thursday, 5 for Friday, and 6 for Saturday." } # first_weekday 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 marked_weekday = { label = "Marked weekday" short_description = "The weekday which appears marked in calendar months displays (0=Sunday, 1=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 = 0 will display the \"S\" for Sunday in red color. Use 0 for Sunday, 1 for Monday, 2 for Tuesday, 3 for Wednesday, 4 for Thursday, 5 for Friday, and 6 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 statistics pages" long_description = "This specifies the HTML text to appear at the top of 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 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, $PRODUCT_NAME will generate links, where possible, back to the server; these links will appear as red arrows next to page items in the tables and pie charts 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 show_http_link = { label = "Show page links" short_description = "Shows table items which starts with \"http://\" as a link." long_description = "This option specifies if table items which starts with \"http://\" should be shown as a link. If this option is enabled all table items which starts 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 a