Skip to content
Architecture > Configuration Guide

Web Properties

This document contains a list of configurable properties for the Web component and their uses.

For other components, please see these pages:

  • Common (properties applicable across all AMI applications)
  • Center (properties specific to the Center component)
  • Relay (properties specific to the Relay component)
  • WebBalancer and WebManager (properties for managing connections to 3forge Web)

General Web Properties

Note

Property default values that are prefixed with a # are optional or must be configured by the user before use.

To run the Web, you must make sure that the web option is included in the ami.components property in local.properties:

ami.components=center,web,relay
By default, all three components are running. To run just the Web component:

ami.components=web

License

The following properties correspond to correctly configuring the license of your 3forge application(s).

ami.license.file

Default:
ami.license.file=./f1license.txt

Description:
  • The file containing the 3forge license for this machine

Note

This is not where 3forge will check for a license file on startup, it is only used by the license wizard for updating the license file.

ami.web.disable.license.wizard

Default:
ami.web.disable.license.wizard=false

Description:
  • Whether to hide the Help -> Enter/Update License menu item, even when not in developer mode

ami.web.license.auth.url

Default:
ami.web.license.auth.url=https://3forge.com

Description:
  • The URL for generating license keys via Help -> Enter/Update License

f1.license.warning.days

Default:
f1.license.warning.days=30

Description:
  • The number of days prior to a valid license expiring that a warning message will start appearing on the login page

HTTP/HTTPS Connection

The following properties configure HTTP or HTTPS connectivity to 3forge applications.

You will need to have the HTTP port configured to access the Web via the local machine. By default this is:

http.port=33332

Otherwise, the minimum configuration for a HTTP connection is the following:

1
2
3
http.port=<port>
http.port.bindaddr=<network_interface>
http.port.whitelist=<options>

The full list of properties and descriptions are below.

HTTP

http.port

Default:
http.port=33332

Description:
  • Sets the access port that web browsers use to connect to the Web

http.port.bindaddr

Default:
# http.port.bindaddr=<network_interface>

Description:
  • Specifies the network interface that the http.port server port will be bound to

http.port.whitelist

Default:
# http.port.whitelist=<options>

Description:
  • Provides either a list of permitted hostname patterns, or a plugin for blocking/granting access based on foreign network address
  • Options syntax:

    1. file: file:<file_containing_a_hostname_patterns_per_line\>
    2. text: text:<newline_delimited_list_of_hostname_patterns>
    3. plugin: plugin:<class_name_implementing_com.f1.ami.amicommon.AmiServerSocketEntitlementsPlugin\>

HTTPS

https.port

Default:
# https.port=33333

Description:
  • Sets the access port that web browsers use to connect securely to the Web

https.port.bindaddr

Default:
# https.port.bindaddr=<network_interface>

Description:
  • Specifies the network interface that the https.port server port will be bound to

https.port.whitelist

Default:
# https.port.whitelist=<options>

Description:
  • Provides either a list of permitted hostname patterns, or a plugin for blocking/granting access based on foreign network address
  • Options syntax:

    1. file: file:<file_containing_a_hostname_patterns_per_line\>
    2. text: text:<newline_delimited_list_of_hostname_patterns>
    3. plugin: plugin:<class_name_implementing_com.f1.ami.amicommon.AmiServerSocketEntitlementsPlugin\>

https.keystore.file

Default:
# https.keystore.file=/path/to/keystore/created/by/java/keytool

Description:
  • Path to the keystore file (using Oracle keytool)
  • Use with the https.keystore.password property

https.keystore.password

Default:
# https.keystore.password=changeme

Description:
  • Password associated to the keystore file in https.keystore.file

Connection Settings

ami.web.http.connections.max

Default:
ami.web.http.connections.max=100

Description:
  • The maximum number of concurrent HTTP connections (for preventing DOS attacks)

ami.web.http.debug

Default:
ami.web.http.debug=off

Description:
  • Debug options for the Web:

    1. off
    2. on
    3. verbose

ami.web.http.debug.max.bytes

Default:
ami.web.http.debug.max.bytes=10240

Description:
  • Max number of bytes to store debug data if using ami.web.http.debug=verbose

Web to Center Connection

These properties determine how the Web connects to 3forge Centers.

The Web can connect to an arbitrary number of Centers, provided the below options are configured.

ami.centers

Default:
# ami.centers=

Description:
  • A comma-delimited list of Centers that the Web can connect to
  • Each Center can be prefixed with an alias that the Web will use to reference that Center in the format alias=host:port, e.g:

    1. ami.centers=myprimary=localhost:3270,othercenter=some.host:3270

    Note

    The first supplied URL is considered the primary Center.

    If the 3forge application is running both Web and Center, this Center will be the primary Center.

ami.center.<center_alias>.keystore.file

Default:
# ami.center.<center_alias>.keystore.file=/path/to/keystore/created/by/java/keytool

Description:
  • Must be supplied if the Center is using an SSL connection
  • Path to the Center's keystore file (using Oracle keytool)
  • center_alias is the Center name as it appears in ami.centers property
  • Use with the ami.center.<center_alias>.keystore.password property

ami.center.<center_alias>.keystore.password

Default:
# ami.center.<center_alias>.keystore.password=keystore_password

Description:
  • Password associated with the keystore file in ami.center.<center_alias>.keystore.file

ami.center.<center_alias>.keystore.contents.base64

Default:
# ami.center.<center_alias>.keystore.contents.base64=base64_key 

Description:
  • Alternative to supplying a keystore file if the Center is using an SSL connection
  • The contents of the keystore should be base64
  • center_alias is the Center name as it appears in ami.centers property

Session Options

These properties configure session-specific behavior for users, e.g: number of users, web resources, and other visual markers.

See this document for more information on users and sessions in Web.

ami.session.cookiename

Default:
ami.session.cookiename=F1SESSION

Description:
  • Name of the cookie to store in the web browser for each sessions (corresponds to the __SESSIONID variable)
  • If multiple 3forge instances are sharing a host, then each instance must have a unique cookie name

ami.web.default.MAXSESSIONS

Default:
ami.web.default.MAXSESSIONS=1

Description:
  • Maximum number of sessions allowed per cookie
  • Each Web instance will have one cookie that is shared across different sessions in the same browser, unless incognito mode is used or supplied a different cookie file

ami.web.resources.dir

Default:
ami.web.resources.dir=web_resources

Description:
  • Path to the directory for Web hosted resources
  • Accessed via the front end in Dashboard -> Resource Manager

ami.web.resource.cache.ttl

Default:
ami.web.resource.cache.ttl=60 SECONDS

Description:
  • Time in seconds that a resource is valid for in the cache before expiring

ami.session.check.period.seconds

Default:
ami.session.check.period.seconds=60

Description:
  • Time in seconds before 3forge checks and removes expired sessions (disconnects, closed browsers, etc.)

ami.session.timeout.seconds

Default:
ami.session.timeout.seconds=300

Description:
  • Time in seconds that must pass before a session is considered expired (and logs the user out)
  • Starts from when the browser tab or session is no longer visible (closing the tab, session chooser, etc)

ami.allow.site.framed

Default:
ami.allow.site.framed=true

Description:
  • Whether to allow the application to be framed inside an iFrame
  • If set to false, then X-Frame-Options and SameSite options should be included in header

ami.allow.same.site

Default:
ami.allow.same.site=None

Description:
  • Sets the level of cookie security
  • Accepted options are:
    • None
    • Strict

amiscript.variable.<var_name>

Default:
# amiscript.variable.<var_name>=var_value

Description:
  • Declare a readonly session variable available in the Web
  • See this section for more information on formatting variables

ami.web.http.slow.response.warn.ms

Default:
ami.web.http.slow.response.warn.ms=5000

Description:
  • Logs a warning if a full round-trip HTTP(S) request and response is greater than the specified duration in milliseconds

ami.web.show.wait.icon.after.duration

Default:
ami.web.show.wait.icon.after.duration=2000

Description:
  • Duration in milliseconds before displaying the loading/waiting icon

ami.slow.amiscript.warn.ms

Default:
ami.slow.amiscript.warn.ms=1000

Description:
  • Logs a warning if an AmiScript block can not be executed within the specified duration in milliseconds

ami.web.portal.dialog.header.title

Default:
# ami.web.portal.dialog.header.title=

Description:
  • Title on the portal dialog header (i.e. loading and error dialogs)

Developer Options

These properties configure behavior when in developer mode for a Web instance.

ami.autosave.dir

Default:
ami.autosave.dir=data/autosave

Description:
  • Directory where autosaved versions of a layout are saved

ami.autosave.count

Default:
ami.autosave.count=100

Description:
  • The minimum number of backup revisions of layouts that should be saved per user

ami.autosave.layout.frequency

Default:
ami.autosave.layout.frequency=15 MINUTES

Description:
  • How often in minutes layouts should be automatically saved to the backup file

ami.messages.max.info

Default:
ami.messages.max.info=100

Description:
  • Maximum number of debug/info messages to store for debugging purposes in edit mode

ami.messages.max.warn

Default:
ami.messages.max.warn=100

Description:
  • Maximum number of warming messages to store for debugging purposes in edit mode

ami.web.disable.functions

Default:
ami.web.disable.functions=readBinaryFile,writeBinaryFile

Description:
  • Comma-delimited list of AmiScript functions to disable in Web
  • Leave blank to enable all functions

Note

If using WebManager, readBinaryFile and writeBinaryFile should be disabled as they use the local Web directory to read and write files, not the WebManager. Use a FileSystem object instead.

Login and Display Options

These properties configure how the login page for a 3forge application should behave.

ami.login.page.animated

Default:
ami.login.page.animated=true

Description:
  • Whether the login page should display background animations
  • We recommend to set this to false if used on remote desktops

ami.login.page.terms.and.conditions.file

Default:
# ami.login.page.terms.and.conditions.file=/path/to/tc/file

Description:
  • (Optional) File to include in the login page, requiring the user to acknowledge terms and conditions before logging in

ami.login.default.user

Default:
ami.login.default.user=demo

Description:
  • Default username for logging into 3forge

ami.login.default.pass

Default:
ami.login.default.pass=demo123

Description:
  • Default password for logging into 3forge

ami.login.autocomplete

Default:
ami.login.autocomplete=true

Description:
  • Whether to autocomplete the default username

ami.login.page.logo.file

Default:
# ami.login.page.logo.file=/path/to/logo/file

Description:
  • Path to file containing image to be displayed on the login screen
  • Image will be scaled to a pixel width and height of 350x200

ami.web.message.license.expires

Default:
ami.web.message.license.expires=WARNING: License Expires soon: ${LICENSE_EXPIRES_DATE}

Description:
  • Message shown if no license file is given

ami.web.message.max.sessions

Default:
ami.web.message.max.sessions=Session limit reached, please choose a current session below

Description:
  • Message displayed if the maximum number of sessions is exceeded

ami.login.page.title

Default:
# ami.login.page.title=

Description:
  • Title of the login page tab in the browser with the prefix "3forge -"

web.title

Default:
web.title=3forge Website

Description:
  • Name of the 3forge tab in the browser after login

web.favicon

Default:
web.favicon=rsc/favicon.ico

Description:
  • The icon to put in the tab (by default this is the 3forge logo)
  • To replace, set the property to the following:

    web.favicon=/resources/<your_icon>.ico
    

Note

The icon must be a .ico file and be in your Web resources directory (default is amione/web_resources).

ami.web.splashscreen.animation.file

Default:
# ami.web.splashscreen.animation.file=./web_resources/<filename>.gif

Description:
  • (Optional) Allows users to provide their own loading animation on login instead of the default 3forge loading animation
  • The default file is a 81x81 .gif

Note

We strongly recommend storing this in the web_resources directory of your 3forge installation and providing only .gif files as other file types may cause unexpected behavior.

ami.web.splashscreen.info.html

Default:
# ami.web.splashscreen.info.html=

Description:
  • Information to show on the splashscreen (rendered as html)

web.logged.out.url

Default:
web.logged.out.url=/3forge_goodbye

Description:
  • URL address of the logout page

Plugins

These are a list of properties for external plugins that can be used in Web.

Entitlements

A custom entitlements plugin that is used to configure user access permissions to a 3forge Web instance. More information can be found here.

ami.web.auth.plugin.class

Default:
# ami.web.auth.plugin.class=<fully_qualified_classname_of_plugin>

Description:
  • Optional entitlements plugin
  • Class name of the custom entitlements plugin
  • Must implement the AmiAuthenticatorPlugin interface and be included in the plugin directory (amione/lib)

ami.auth.timeout.ms

Default:
ami.auth.timeout.ms=5000

Description:
  • Amount of time in milliseconds before 3forge assumes the authentication plugin has timed out

ami.auth.concurrent.max.wait.ms

Default:
# ami.auth.concurrent.max.wait.ms= 

Description:
  • (Optional) Amount of time in milliseconds 3forge will wait before allowing another authentication request to be sent

Data Filter

Property for configuring the data filter, an optional external plugin for controlling visibility of data in 3forge based on some entitlements.

More information can be found here.

ami.web.data.filter.plugin.class

Default:
# ami.web.data.filter.plugin.class=fully_qualified_classname_of_plugin

Description:
  • Class name of custom data filter used to restrict data access
  • Must implement the AmiWebDataFilterPlugin interface and be included in the plugin directory (amione/lib)

AmiScript

For user-written custom AmiScript classes, use this property to make them accessible in Web. See the custom class documentation for more details on implementation.

ami.web.amiscript.custom.classes

Default:
# ami.web.amiscript.custom.classes=<fully_qualified_classname_of_custom_class>

Description:
  • A comma-delimited list of classes to include for access within AmiScript

Dashboard Style

Custom dashboard style (colors, etc) files can be supplied for greater customizability options in 3forge.

ami.style.files

Default:
ami.style.files=data/styles/*.amistyle.json

Description:
  • Comma-delimited list of files (wildcards supported) which contain 3forge styles
  • See style sheets in Menu -> Dashboard -> Style Manager within 3forge

Custom Web Panels

3forge supports integration of external panel types and visualizations. More information on custom panels can be found here.

ami.web.panels

Default:
ami.web.panels=mapbox

Description:
  • Comma-delimited list of names of custom panel type configurations
  • Use with the prefix property ami.web.panel.<panel_name.class> to correctly load an external panel plugin
  • The default value adds the "Map" visualization panel for datamodels

ami.web.panel.<panel_name>.class

Default:
ami.web.panel.mapbox.class=com.f1.ami.plugins.mapbox.AmiWebMapboxPlugin

Description:
  • Declares a custom panel's name (to be referenced in ami.web.panels) and loads its plugin
  • Must be set to the fully qualified class name of the plugin
  • The default value is the class of the "Map" visualization panel for datamodels

Custom JavaScript

JavaScript can be invoked in Web via AmiScript using the AmiWebGuiServicePlugin interface. See more information on implementation here.

ami.guiservice.plugins

Default:
# ami.guiservice.plugins=<fully_qualified_classname_of_plugin>

Description:
  • A comma-delimited list of class names implementing the AmiWebGuiServicePlugin interface

Accepted Web Origins

Please refer to the Mozilla documentation on CORS

ami.web.permitted.cors.origins

Default:
ami.web.permitted.cors.origins=*

Description:
  • Control which origins are accepted in AMI Remote Procedure Calling (RPC)

Default Authentication Access File

By default, AMI launches with a configurable text file access.txt located in the installation's amione/data directory. This file defines the following:

  • Usernames
  • Passwords
  • Default layouts
  • User permission level (dev, admin, etc)

It comes preloaded with the following access permission line:

demo|demo123|ISADMIN=true|ISDEV=true|

This is the default username and password that AMI launches with for easy testing purposes.

Warning

We strongly recommend using an authentication plugin for increased security. We suggest only using access.txt for testing and non-production cases.

To make access.txt more secure, please follow these steps.

Access Rule Structure

For each user, you can supply a pipe-delimited (|) line with the following structure:

username|password|additional_parameters|
For example, the following user:

user|user123|
has the following attributes:

  • Username: user
  • Password: user123
  • Permissions: Neither an admin or dev

Any additional parameters are supplied in the format key=value after the pipe, e.g: ISDEV=true.

To make user a dev:
user|user123|ISDEV=true|

See the table below for a list of accepted parameters.

Additional User Parameters

Key Value Example Description
ISDEV
  • true
  • false
ISDEV=true Whether this user has developer rights and can make edits (green toggle button)
ISADMIN
  • true
  • false
ISADMIN=true Whether this user (must also have ISDEV=true or there is no effect) can shutdown 3forge from within the GUI via File -> Shutdown
amiscript.variable.<varname>=value String or numeric (type is inferred by AMI) amiscript.variable.region="NY" Defines a session variable for this user. Type inference is done by AMI, e.g: amiscript.variable.myvar=123 will be of type int, but amiscript.variable.myvar=123L will be of type long
developer_ami_editor_keyboard
  • vi
  • default
developer_ami_editor_keyboard=vi For developer mode, should the editor use plain text or vi mode
LAYOUTS Regular expression or a comma-delimited list of layout files LAYOUTS=* The layouts (in data/cloud) that are available to this user. This is equivalent to the property ami.web.default.LAYOUTS
ami_layout_current Name of current layout ami_layout_current=untitled.ami Current layout for this user

Note

There a number of other user settings not listed here, however we generally recommend these are set outside of access.txt.

More information can be found here.

Deprecated

These parameters have been deprecated:

Key Description Alternative
ami_layout_shared=default Default layout to load. The deprecated property ami.shared.layouts.dir must also be configured Use LAYOUTS instead
amivar.<varname>=value Defines a string session variable for this user Use amiscript.variable.<varname>=value instead

Example Configuration File

1
2
3
4
jdoe|jdoe123|ami_layout_shared=ACME.ami|amivar_group=ops
csmith|password1234
exampleusername|pass24|amiscript.variable.region="asia"
exampleusername|pass24|LAYOUTS=overview.ami,report.ami,*rfp.ami

Layouts and User Files

These properties are useful for controlling different levels of user access to layouts and where files are located.

For specific user settings, please refer to the guide on this page, or see the user settings properties below.

ami.amiscript.default.limit

Default:
ami.amiscript.default.limit=10000 

Description:
  • The default limit for a response to a query in AmiScript

ami.amiscript.default.timeout

Default:
ami.amiscript.default.timeout=60 seconds

Description:
  • Controls how long to wait for AmiScript to execute before timing out, e.g: when a layout is executed
  • Allowed time values are:
    • nanoseconds
    • microseconds
    • milliseconds
    • seconds
    • minutes
    • hours

users.access.file

Default:
users.access.file=./data/access.txt

Description:
  • Location of the default authentication file access.txt used for configuring access to 3forge
  • More information in this section

users.access.file.encrypt.mode

Default:
users.access.file.encrypt.mode=off

Description:
  • Whether access.txt is encrypted, off indicates the file is plain text
  • Set to password to indicate that the password variable must be encrypted

Note

See the strEncrypt(...) function for encrypting passwords.

users.access.file.for.entitlements

Default:
users.access.file.for.entitlements=off

Description:
  • Whether to use access.txt for user entitlements when other authentication methods are being used
  • Valid options are:

  • off: access.txt not used for user attributes

  • on: access.txt used if found
  • force: access.txt used if found, overrides user attributes defined in other authentication responses
  • required: access.txt required, returns null if a user isn't found
  • required_force: access.txt required and overrides user attributes defined in other authentication responses

users.path

Default:
users.path=data/users

Description:
  • Directory containing the .ami_settings user files and user preference files

ami.cloud.dir

Default:
ami.cloud.dir=data/cloud

Description:
  • Base directory of the Web installation's cloud directory
  • Layouts and user settings saved to the cloud will be stored in this directory

ami.font.files

Default:
ami.font.files=./data/fonts/*.ttf

Description:
  • A list of true type font files (.ttf) to load which will be available for use in dashboards
  • May include wildcards, e.g: my/fonts/*.ttf

ami.fonts.in.browser

Default:
ami.fonts.in.browser=Arial,Courier,Georgia,Impact,Lucida,Times New Roman,Verdana,Segoe UI

Description:
  • A list of font family names that are assumed to be available in the browser
  • To supply your own .ttf file of an existing font, you need remove to remove the font family from the property

Web to WebManager Connection

User layouts and preferences can be stored in a separately hosted WebManager, a specialized 3forge component for file management. More information on the WebManager can be found here.

If connecting to a WebManager, you will need to provide the following:

ami.webmanager.host=<WebManager_host>
ami.webmanager.port=<WebManager_port>

Descriptions are listed below.

ami.webmanager.host

Default:
# ami.webmanager.host=localhost

Description:
  • Location of WebManager host if using WebManager to load files
  • If not specified, the local file system is used

ami.webmanager.port

Default:
# ami.webmanager.port=3260

Description:
  • Port number of the WebManager

Default Layout

The default layout refers to the layout loaded when a given user logs in. There are several ways to set the default layout for a user, either via a property in local.properties or as a variable in access.txt.

If multiple options are supplied, then priority is determined from highest to lowest where 0 is the highest:

Property Priority Level
ami.web.default.DEFAULT_LAYOUT PRIORITY 0
ami.web.default.layout PRIORITY 1 (deprecated)
ami_layout_shared in access.txt file PRIORITY 2 (deprecated)
ami.web.default.layout.shared PRIORITY 3 (deprecated)

E.g: ami.web.default.DEFAULT_LAYOUT has a priority of 0, so all other properties will be ignored.

Properties

To set the default layout, use the following properties.

We strongly recommend using these properties to configure the default layout(s). To fine-tune user access, either use access.txt or an entitlements plugin.

ami.web.default.DEFAULT_LAYOUT

Default:
# ami.web.default.DEFAULT_LAYOUT=<layout_file>.ami

Description:
  • The default layout loaded on login
  • Stored in the cloud directory of the Web installation (default is data/cloud)
  • If otherwise specified, the file must be supplied as either ABSOLUTE, LOCAL, or CLOUD:
    • e.g: ABSOLUTE:path/to/default_layout.ami

ami.web.default.LAYOUTS

Default:
# ami.web.default.LAYOUTS=<layout1_file>.ami,<layout2_file>.ami

Description:
  • A comma-delimited list of layouts that are accessible for all users (non-dev and non-admin)
  • Stored in the cloud directory of the Web installation (default is data/cloud)
  • If otherwise specified, the file must be supplied as either ABSOLUTE, LOCAL, or CLOUD:
    • e.g: ABSOLUTE:path/to/layout1.ami,ABSOLUTE:...

We strongly discourage users from using these properties as the shared directory is no longer supported. We recommend users use the cloud directory instead.

ami.shared.layouts.dir

Default:
# ami.shared.layouts.dir=config//../data/shared

Description:
  • Base directory of where shared layouts are stored (layouts available to end non-dev users)
  • Required for using other deprecated layout properties

ami.web.default.layout

Default:
# ami.web.default.layout=<layout_file>.ami

Description:
  • Use ami.web.default.DEFAULT_LAYOUT instead
  • Name of the layout's file name, supplied as SHARED:<layout_file>.ami
  • Any user that logs in will be automatically assigned this layout

ami.web.default.layout.shared

Default:
# ami.web.default.layout.shared=<layout_file>.ami

Description:
  • Same as ami.web.default.layout

Note

Using ami.web.default.layout.shared together with ami.shared.layouts.dir=path/to/dir will load a specific layout to every user who logs in.

User-Specific Default Layout

The properties above will apply for all users.

To set user-specific default layout(s), supply the DEFAULT_LAYOUT variable in access.txt, for example:
user1|123456|ISADMIN=true|ISDEV=true|DEFAULT_LAYOUT=user1_defaultLayout.ami
user2|123456|ISADMIN=true|ISDEV=true|DEFAULT_LAYOUT=user2_defaultLayout.ami
  • user1's default layout is the file user1_defaultLayout.ami.
  • user2's default layout is user2_defaultLayout.ami.

Note

This is equivalent to setting the property ami.web.default.DEFAULT_LAYOUT in local.properties. By default, the layouts will be taken from the cloud directory (default is data/cloud).

Deprecated

This method is deprecated as we no longer support the shared directory. To use, you will need to configure the ami.shared.layouts property.

You can also supply the ami_layout_shared variable in access.txt with the following format:

user|password|ami_layout_shared=<some_layout.ami>

Note

Using either the DEFAULT_LAYOUT variable or ami.web.default.DEFAULT_LAYOUT will override this.

End User Behavior

User Settings

All default user-specific settings can be configured programmatically using ami.default.user.<user_setting> in local.properties.

As an example:
ami.default.user.timeZone=UTC

This sets the default user settings for timezone to be in UTC.

There are several properties that can be set which are listed in the table below.

Note

This sets the default behavior for any user in 3forge.

To set individual preferences, this can be done directly in a user settings file. See this page for more details.

Property Description Value Example
dateFormat
  • String
  • Format of date
  • Default is M/dd/yyyy
[yyyy/MM/dd, MM/dd/yy,...] ami.default.user.dateFormat=yyyy/MM/dd
timeFormat
  • String
  • Format of time
  • Default is H:mm
[hh:mm a, h:mm, HH:mm, h:mm a]
E.g, if time is 13:30:
  • H:mm-> 3:30
  • h:mm-> 1:30 PM
  • HH:mm-> 13:30
  • hh:mm a-> 01:30 PM
ami.default.user.timeFormat=HH:mm
timeZone
  • String
  • Java-accepted timezone
  • Default is EST5EDT
[EST5EDT, GMT, ACT, ...] ami.default.user.timeZone=EST5EDT
numberSeparator
  • String
  • Determines how the number should be separated
  • Default is 1,234,567,890.123
[1,234,567,890; 1,234,567,890.123; 1'234'567'890; 1234567890,123; ...] ami.default.user.numberSeparator=1,234,567,890
numberDecimalPrecision
  • Integer
  • Number from 0-10
  • Default is 2
Integer number from 0-10 ami.default.user.numberDecimalPrecision=4
sciNotDigitsLeft
  • Integer
  • Number from 1-20
  • Default is 1
Integer number from 1-20 ami.default.user.sciNotDigitsLeft=4
sciNotDigitsRight
  • Integer
  • Number from 1-20
  • Default is 3
Integer number from 1-20 ami.default.user.sciNotDigitsRight=5
numberNegativeFormat
  • String
  • Format of negative numbers
  • Either sign or parentheses
  • Default is sign
[sign,parentheses] ami.default.user.numberNegativeFormat=parentheses
spreadSheetFormatOption
  • String
  • Spreadsheet formatting
  • Either always or never
  • Default is always
[always,never] ami.default.user.spreadSheetFormatOption=never
autoApplyUserPrefs
  • String
  • Whether to automatically apply user preferences
  • Either always, never or ask
  • Default is ask
[always, never, ask] ami.default.user.autoApplyUserPrefs=always
defaultFileBrowserPath
  • String
  • The path to files that are loaded into AMI
path/to/files ami.default.user.defaultFileBrowserPath=C:/mypc/ami/amione

General End User Behavior

ami.show.menu.option.datastatistics

Default:
ami.show.menu.option.datastatistics=always

Description:
  • Determines when and which users can view data statistics (under Menu Bar -> Help -> Data Statistics)
  • Options are: always, never, dev, admin
  • dev means only available in dev mode
  • admin means only available in admin mode

ami.show.menu.option.fullscreen

Default:
ami.show.menu.option.fullscreen=always

Description:
  • Determines when and which users can set the fullscreen menu option (under Menu Bar -> Windows -> Full Screen)
  • Options are: always, never, dev, admin
  • dev means only available in dev mode
  • admin means only available in admin mode

ami.frames.per.second

Default:
ami.frames.per.second=15.0

Description:
  • The rate that the web browser is updated with new data
  • This is used to tune the performance of 3forge and the user experience
  • We do not recommend a refresh rate of higher than 20 frames per second

ami.web.default.cmd.timeout.ms

Default:
ami.web.default.cmd.timeout.ms=30000

Description:
  • The number of milliseconds to wait for a response when sending a command to the backend

ami.request.timeout.seconds

Default:
ami.request.timeout.seconds=180

Description:
  • The amount of time in seconds before a user is prompted that their request could not be serviced

ami.web.default.ISADMIN

Default:
ami.web.default.ISADMIN=false

Description:
  • Assumes that a user is not an admin if not specified in access.txt
  • Set to true to give users admin permissions by default

ami.web.default.ISDEV

Default:
ami.web.default.ISDEV=false

Description:
  • Assumes that a user is not a dev if not specified in access.txt
  • Set to true to give users dev permissions by default

ami.web.url.always.include.layout

Default:
ami.web.url.always.include.layout=false

Description:
  • Determines whether the current layout appears in the URL parameters

general.error.message

Default:
general.error.message="Frontend encountered unhandled condition"

Description:
  • Generic error message displayed to users when an exception is not caught by 3forge

general.error.emailTo

Default:
general.error.emailTo=<support@3forge.com> 

Description:
  • The email address to send error reports to when a user clicks to report an error

general.error.emailSubject

Default:
general.error.emailSubject="Support Issue"

Description:
  • The default subject of the error report email

general.error.emailBody

Default:
general.error.emailBody="Please find details below:"

Description:
  • The introductory sentence for the error report email

ami.web.filter.dialog.max.options

Default:
# ami.web.filter.dialog.max.options=

Description:
  • (Optional) Maximum number of options to show in the table filter dialog when right-clicking on a column

web.loadingbar.styles

Default:

# web.loadingbar.styles=...
See the full list of style options here:

Loading bar style options list
1
2
3
4
5
6
7
8
9
dialogBgColor=<background_color>,\
headerBgColor=<header_color>,\
btnBgColor=<button_color>,\
btnFontColor=<button_font_color>,\
bodyFontColor=<body_text_color>,\
headerFontColor=<header_text_color>\
stripeColor1=<stripe1_color>,\
stripeColor2=<stripe2_color>,\
stripeColor3=<stripe3_color>

Description:
  • (Optional) Color styling for the different loading bar popups
  • Takes a comma-delimited list of key-value pairs of the property and color value in hex, e.g:
    • dialogBgColor=#234567,headerBgColor=#123456
  • See below for where colors are applied to popups

The second window is the expanded ticket from clicking "More"

Web Activity Tracking

This property allows for actions that happen in the Web, such as callback execution or interacting with a window (closing it, hiding it, etc) to be logged.

ami.web.activity.logging

Default:
ami.web.activity.logging=off

Description:
  • Options: on, off, verbose

If on or verbose, then activity is logged only when the Web session is in user mode. So either when:

  • The "Editor/Dev" button in the Web toggled off
  • A non-dev user accesses the Web and ami.web.default.ISDEV=false

Example Outputs

Activity logging is disabled. No actions will be logged.

Logs are generated in the AmiOne.log for key actions such as opening or minimizing a window and executing callback scripts.

INF 20240910-23:07:00.971 EST5EDT [http3] com.f1.ami.web.AmiWebActivityLogger::logPanel: demo|rUmlCRX8GCYdh67viPklDTyjea|PANEL_VISIBLE|PANEL:Html1
INF 20240910-23:06:23.424 EST5EDT [http3] com.f1.ami.web.AmiWebActivityLogger::logScript: demo|rUmlCRX8GCYdh67viPklDTyjea|CALLBACK|PANEL:b1|onScroll

More detailed log entries are created for each action, including additional contextual data.

INF 20240910-23:04:26.558 EST5EDT [http1] com.f1.ami.web.AmiWebActivityLogger::logPanel: demo|9c8qpHqau1rdfCBjiE6c58UZSX|PANEL_VISIBLE|PANEL:Html1
INF 20240910-22:38:25.009 EST5EDT [http0] com.f1.ami.web.AmiWebActivityLogger::logScript: demo|9c8qpHqau1rdfCBjiE6c58UZSX|CALLBACK|PANEL:b1|onScroll|{viewTop=569, contentWidth=944, viewHeight=416, contentHeight=2160}

Performance

These properties allow for configuration of computational elements for performance fine-tuning.

The default values provided are recommended baselines, but please do not hesitate to reach out to us at support@3forge.com for additional help.

ami.web.precached.tables

Default:
# ami.web.precached.tables=

Description:
  • A comma-delimited list of tables (types) to automatically cache real-time inside the WebServer
  • Any types that a layout references that are not explicitly listed in this property will require a snapshot request from the Center

ami.chart.threading.suggestedPointsPerThread

Default:
ami.chart.threading.suggestedPointsPerThread=100000

Description:
  • Determines the number of threads to use for a chart, based on the number of points to render

ami.chart.threading.maxThreadsPerLayer

Default:
ami.chart.threading.maxThreadsPerLayer=10

Description:
  • Provides a ceiling on total threads that can be used per chart

ami.chart.threading.threadPoolSize

Default:
ami.chart.threading.threadPoolSize=100

Description:
  • The total number of threads (across all users) to allocate for chart image processing

ami.chart.threading.antialiasCutoff

Default:
ami.chart.threading.antialiasCutoff=100000

Description:
  • The number of points before anti-aliasing should be turned off
  • For faster rendering of high density charts

ami.chart.compressionLevel

Default:
ami.chart.compressionLevel=2

Description:
  • PNG compression level for images that are transferred to the front end
  • Ranges from 0-10 where 0 = off and 10 = full compression

ami.frames.per.second

Default:
ami.frames.per.second=15.0

Description:
  • The rate that the web browser is updated with new data
  • We do not recommend a refresh rate of higher than 20 frames per second

JavaScript

For security purposes, JavaScript code is inherently removed from all HTML panels to prevent Cross-Site Scripting (XSS) attacks.

To allow JavaScript code to be recognized and ran from within an HTML panel, you will need the following property enabled:

ami.web.allow.javascript.embedded.in.html

Default:
ami.web.allow.javascript.embedded.in.html=false

Description:
  • Indicates if JavaScript is enabled for HTML panels
  • Set to true to enable JavaScript within an HTML panel