Need a special offer?Find out if your project fits.
+
All documentation
  • Introduction
  • Connecting to Data Source
    1. Supported data sources
    2. Connecting to other data sources
  • Browser compatibility
  • Documentation for older versions
  • Configurations reference

    This tutorial describes Flexmonster Data Server configuration. To install the Data Server, refer to Installing Flexmonster Data Server as a Windows/Unix service.

    Available configurations

    Flexmonster Data Server can be configured in the flexmonster-config.json file. It contains the following properties:

    {
      "DataSources": DataSourceConfigObject[],
      "Security": SecurityConfigObject,
      "DataStorageOptions": DataStorageOptionsObject,
      "Port": string,
      "LoggerMinLevel": string,
      "HTTPS": HTTPSConfigObject,
      "ReportSharingOptions": ReportSharingOptionsObject
    }
    Property/TypeDescription
    DataSources
    DataSourceConfigObject[]
    Allows configuring the data sources.
    Security
    SecurityConfigObject
    optional Allows managing the data access security.
    DataStorageOptions
    DataStorageOptionsObject
    optional Allows configuring options for data storage.
    Port
    String
    optional The number of the port Flexmonster Data Server runs on. The port can also be set from the command line.
    Default value: "9500".
    LoggerMinLevel
    String
    optional Defines a minimum log level for the Data Server: "Info""Warn""Error", or "Fatal". Setting "LoggerMinLevel" to "Warn" or a higher level can improve the Data Server’s performance. Learn more about these log levels in the Microsoft documentation.
    "LoggerMinLevel" will not affect info-level logs that appear when the Data Server is started, or the data is reloaded.
    Default value: "Info".
    HTTPS
    HTTPSConfigObject
    optional Allows configuring the HTTPS protocol.
    ReportSharingOptions
    ReportSharingOptionsObject
    optional Allows configuring the report-sharing functionality.

    DataSourceConfigObject

    This object allows configuring a data source. It contains the following properties:

    {
      "Type": string,
      "DatabaseType": string,
      "ConnectionString": string,
      "Indexes": object
    }
    Property/TypeDescription
    Type
    String
    The type of the data source: "json""csv", or "database".
    DatabaseType
    String
    optional The type of the database: "mysql""mariadb", "mssql""postgresql", or "oracle". Only for the "database" data source type.
    ConnectionString
    String
    optional A connection string for the database. Only for the "database" data source type.
    Setting passwords with special characters in the connection string. The Data Server parses passwords with special characters correctly unless the password contains ; or ". These symbols are treated as delimiters, so they should be escaped:
    • If your password contains a semicolon (;), enclose the password in single quotes (e.g., Pwd='123;45').
    • If your password contains a double quote ("), escape this symbol with a backslash (e.g., Pwd=123\"45).
    Indexes
    Object
    Contains a list of datasets. Each dataset is represented by a "key": "value" pair, where "key" is a dataset name, and "value" is an IndexObject.

    IndexObject

    This object describes a dataset. It contains the following properties:

    {
      "Path": string,
      "Query": string,
      "Mapping": ServerSideMappingObject,
      "Delimiter": string,
      "DecimalSeparator": string,
      "ThousandsSeparator": string,
      "Status": string,
      "RefreshTime": number
    }
    Property/TypeDescription
    Path
    String
    optional The path to the file with data. Only for "json" and "csv" data source types.
    Query
    String
    optional The query to execute (e.g., "SELECT * FROM tablename"). It can contain a stored procedure. Only for the "database" data source type.
    Mapping
    ServerSideMappingObject
    optional Defines how the Data Server should process fields from the dataset. Only for "json" and "csv" data source types.
    Delimiter
    String
    optional Defines the specific fields separator to split each CSV row. There is no need to define it if the CSV fields are separated by ,. This property is required only if another character separates fields.
    Default value: ",".
    DecimalSeparator
    String
    optional Defines the specific character used to separate decimal parts of numbers. For example, to import CSV data with commas used to separate decimal parts of numbers (e.g., 3,14), set the "DecimalSeparator" property to ",".
    Default value: ".".
    ThousandsSeparator
    String
    optional Defines the specific character used to separate groups of digits in numbers. For example, to import CSV data with periods used to separate groups of digits in numbers (e.g., 1.000 for one thousand), set the "ThousandsSeparator" property to ".".
    Default value: ",".
    Status
    String
    optional The index status. It can be either "enabled" or "disabled". Disabled indexes are not available from the client.
    The "Status" property is available starting from version 2.9 of the Data Server.
    Default value: "enabled".
    RefreshTime
    Number
    optional Defines how often the Data Server reloads the data for the index.
    The refresh time is specified in minutes. If it is 0, the Data Server will not reload the data.
    "RefreshTime" will override a value set in DataStorageOptions.DataRefreshTime.
    If "RefreshTime" is not specified, the Data Server will use the DataStorageOptions.DataRefreshTime property.
    If both properties are not specified, the data will not be reloaded.
    The "RefreshTime" property is available starting from version 2.9 of the Data Server.

    ServerSideMappingObject

    This object defines how the Data Server should process fields from the dataset. It has the following properties:

    "Mapping": {
      "(uniqueName)": {
        "Type": string
      }
    }
    
    Property/TypeDescription
    (uniqueName)
    Object
    Allows setting the mapping for a specific field from the dataset. "(uniqueName)" is the field’s unique name.
    (uniqueName).Type
    String
    optional The field’s data type. The "Type" can be:
    • "string" — the field stores string data.
    • "number" — the field stores numerical data.
    • "date" — the field stores a date.
    If this property is not specified, the Data Server resolves the data type automatically based on the field’s values in the dataset.

    SecurityConfigObject

    This object allows managing the data access security. It contains the following properties:

    "Security": {
      "Authorization": {
        "Enabled": boolean
      },
      "CORS": {
        "AllowOrigin": string
      },
      "HSTS": {
        "MaxAge": number,
        "IncludeSubDomains": boolean,
        "Preload": boolean
      },
      "Headers": object
    }
    Property/TypeDescription
    Authorization
    Object
    optional Allows configuring the “Basic Authorization”.
    Authorization.Enabled
    Boolean
    Indicates whether the “Basic Authorization” for Flexmonster Data Server is enabled. When set to true, the authorization is enabled.
    Default value: false.
    CORS
    Object
    optional Allows configuring the cross-origin resource sharing for Flexmonster Data Server.
    CORS.AllowOrigin
    String
    The origin from which the server accepts the requests. If "AllowOrigin" is set to "*", requests from all origins are accepted.
    Note that if authorization is enabled ("Enabled": true), "*" cannot be set as the origin. In this case, specific origins must be defined. Several origins must be defined as follows:
    "AllowOrigin": "http://localhost,https://example.com"
    Default value: "*".
    HSTS
    Object
    optional Allows configuring the Strict-Transport-Security (HSTS) response header.
    HSTS.MaxAge
    Number
    Defines how long the browser remembers that the site should be accessed only via HTTPS. The "MaxAge" property is set in seconds.
    HSTS.IncludeSubDomains
    Boolean
    optional Defines whether the Strict-Transport-Security header applies to the site’s subdomains (true) or not (false).
    Default value: false.
    HSTS.Preload
    Boolean
    optional Defines whether the site is in the HSTS preload list (true) or not (false). For details refer to the MDN documentation about HSTS.
    Default value: false.
    Headers
    Object
    Allows adding response headers. This object consists of "key": "value" pairs, where "key" is a header name, and "value" is its value.
    We recommend adding response headers carefully and only if they are required for the project. Specifying an existing header with the wrong value can lead to runtime errors.
    Here is an example of how response headers can be specified:
    "Headers": {
    "Content-Security-Policy": "default-src 'self'",
    "X-Content-Type-Options": "nosniff",
    "X-Frame-Options": "SAMEORIGIN",
    "X-XSS-Protection": "1; mode=block"
    }

    DataStorageOptionsObject

    This object allows configuring options for data storage. It contains the following properties:

    "DataStorageOptions": {
      "DataRefreshTime": number,
      "CacheSizeLimit": number,
      "KeepDataOnRefresh": boolean,
      "RetryAttempts": number,
      "CommandTimeout": number
    }
    Property/TypeDescription
    DataRefreshTime
    Number
    optional Defines how often the data is reloaded from a file or a database. The refresh time is set in minutes. If the "DataRefreshTime" is not specified, the data will not be reloaded.
    CacheSizeLimit
    Number
    optional The maximum number of cached server responses for every index defined in the "DataSources" property. When set to 0, the Data Server does not cache the responses.
    Default value: 100.
    KeepDataOnRefresh
    Boolean
    optional When set to true, the Data Server keeps a copy of index data while the index is being refreshed. As a result, the index is available to Flexmonster Pivot even during index reload. Note that this feature requires more RAM. As soon as the index is refreshed, the Data Server deletes its copy.
    If "KeepDataOnRefresh" is set to false, the index will be unavailable while refreshing.
    Default value: true.
    RetryAttempts
    Number
    optional If some of the indexes are unavailable during the restart, the Data Server will try loading them later. The "RetryAttempts" property specifies how many attempts to load indexes the Data Server should make.
    Default value: 3.
    CommandTimeout
    Number
    optional Defines the wait time before canceling the attempt to execute the Query and generating an error. The wait time is set in seconds. When set to 0, the wait time is unlimited.
    If "CommandTimeout" is not specified, the Data Server will use the timeout value from the SQL driver. Only for the "database" data source type.

    HTTPSConfigObject

    This object allows configuring the HTTPS protocol. It contains the following properties:

    "HTTPS": {
      "Enabled": boolean,
      "Certificate": PFXCertObject | PEMCertObject | SubjectStoreObject,
      "Protocols": string
    }
    Property/TypeDescription
    Enabled
    Boolean
    optional Indicates whether the HTTPS protocol is enabled (true) or not (false).
    Default value: false.
    Certificate
    PFXCertObject | PEMCertObject | SubjectStoreObject
    optional Allows adding a certificate. By default, if the certificate is not specified, the generated development certificate will be used.
    The certificate can be specified as a PFXCertObject, a PEMCertObject, or a SubjectStoreObject.
    Protocols
    String
    optional Establishes the HTTP protocols enabled on a connection endpoint or for the server. It can be one of the following values: "Http1""Http2", and "Http1AndHttp2".
    Default value: "Http1AndHttp2".

    PFXCertObject

    This object allows adding a .pfx certificate. It contains the following properties:

    "Certificate": {
      "Path": string,
      "Password": string
    }
    Property/TypeDescription
    Path
    String
    The URL to the .pfx certificate.
    Password
    String
    optional The password to access the certificate. If the certificate does not require a password, skip this property.

    PEMCertObject

    This object allows adding a .pem certificate. It contains the following properties:

    "Certificate": {
      "Path": string,
      "KeyPath": string
    }
    Property/TypeDescription
    Path
    String
    The URL to the .pem certificate.
    KeyPath
    String
    The URL to a .pem file that contains the private key for the certificate.

    SubjectStoreObject

    This object allows adding a certificate by specifying its subject name and store. It contains the following properties:

    "Certificate": {
      "Subject": string,
      "Store": string,
      "Location": string,
      "AllowInvalid": boolean
    }
    Property/TypeDescription
    Subject
    String
    The certificate subject name.
    Store
    String
    The store from which the certificate is loaded.
    Location
    String
    optional The location of the store from which to load the certificate. It can be either "CurrentUser" or "LocalMachine".
    Default value: "CurrentUser".
    AllowInvalid
    Boolean
    optional Indicates whether to allow using invalid certificates (e.g., self-signed certificates). When set to true, invalid certificates are allowed to use.
    Default value: false.

    ReportSharingOptionsObject

    This object allows configuring the report-sharing functionality. It contains the following properties:

    "ReportSharingOptions": {
      "EndpointEnabled": boolean,
      "PathToFolder": string,
      "ReportExpirationTime": number,
      "MaxSizeOfFolder": number,
      "AutoDeletingEnabled": boolean
    }
    Property/TypeDescription
    EndpointEnabled
    Boolean
    optional Indicates whether the endpoint to share reports is enabled in the Data Server. If set to true, the report-sharing feature will be enabled.
    Default value: false.
    PathToFolder
    String
    optional Defines the folder to which the Data Server saves reports. 
    Default value: "C:/ProgramData/FlexmonsterDataServer/reports/" on Windows, "~/.local/share/FlexmonsterDataServer/reports/" on macOS and Ubuntu/Linux (will resolve to  /home/[current_user]/.local/share/FlexmonsterDataServer/reports/).
    ReportExpirationTime
    Number
    optional Defines how long the saved reports are stored. "ReportExpirationTime" is set in minutes.
    Default value: 0 (reports are stored permanently).
    MaxSizeOfFolder
    Number
    optional The maximum memory size available for report saving (in MB).
    Default value: 0 (unlimited).
    AutoDeletingEnabled
    Boolean
    optional Should be used with the "MaxSizeOfFolder" property. Defines whether to delete older reports when the folder is full. If set to true, older reports will be deleted automatically until there is enough memory for a new report.
    Default value: false (older reports are not deleted).

    Setting configurations dynamically

    To store the connection strings and other configurations more securely, you can set them dynamically as command-line arguments or environment variables.

    Follow a short guide to set dynamic configurations:

    Step 1. Assign the parameter to the needed configuration as follows:

    "DataSources": [{ 
    "Type": "database",
    "DatabaseType": "postgresql",
    "ConnectionString": "${param}",
    "Indexes": {
        "index_database": {
            "Query": "SELECT * FROM ${param2}"
          }
    }
    }],

    param and param2 are the names of your parameters.

    Step 2. Using the parameter's name (e.g., param), pass your value to the Data Server:

    As a command-line argument
    on Windows

    flexmonster-data-server.exe param=connectionString param2=tableName

    As a command-line argument
    on macOS and Ubuntu/Linux

    ./flexmonster-data-server param=connectionString param2=tableName

    As an environment
    variable

    Create an environment variable, where the variable name is your parameter's name (e.g., param), and the variable value is a needed value (e.g., connectionString).

    Setting the port number from the command line

    To define a port for the Data Server from the command line, use the -p parameter:

    On Windows

    flexmonster-data-server.exe -p 7777

    On macOS and Ubuntu/Linux

    ./flexmonster-data-server -p 7777

    Note that if the "Port" property is specified in flexmonster-config.json, the port set from the console will not be applied.

    Specifying a path to the configuration file

    If flexmonster-config.json and the Data Server are located in different folders, you can specify the path to flexmonster-config.json when running the Data Server. It can be done using the -s parameter:

    On Windows

    flexmonster-data-server.exe -s <path_to_config>\flexmonster-config.json

    On macOS and Ubuntu/Linux

    ./flexmonster-data-server -s <path_to_config>/flexmonster-config.json 

    Examples

    Here is an example of configured flexmonster-config.json:

    {
       "DataSources": [
         {
           "Type": "json",
           "Indexes": {
             "index_json": {
               "Path": "./data/data.json"
             }
           }
         },
         {
           "Type": "database",
           "DatabaseType": "mysql",
           "ConnectionString":
     "Server=localhost;Port=3333;Uid=root;Pwd=pwd;Database=TestDB",
           "Indexes": {
             "index_database": {
               "Query": "SELECT * FROM TestTable;"
             }
           }
         }
       ],
       "Security": {
         "Authorization": {
           "Enabled": false
         },
         "CORS": {
           "AllowOrigin": "*"
         }, 
         "HSTS": {
           "MaxAge": 31536000,
           "IncludeSubDomains": true
         },
         "Headers": {
           "Content-Security-Policy": "default-src 'self'",
           "X-Content-Type-Options": "nosniff",
           "X-Frame-Options": "SAMEORIGIN",
           "X-XSS-Protection": "1; mode=block"
         } 
       },
       "DataStorageOptions": {
         "DataRefreshTime": 60,
         "CacheSizeLimit": 150,
         "KeepDataOnRefresh": true
       },
       "Port": "9500",
       "HTTPS": {
         "Enabled": true,
         "Certificate": {
           "Subject": "localhost",
           "Store": "My"
         },
         "Protocols": "Http2"
       },
       "ReportSharingOptions": {
         "EndpointEnabled": true,
         "PathToFolder": "C:/Reports",
         "ReportExpirationTime": 120,
         "MaxSizeOfFolder": 100,
         "AutoDeletingEnabled": true
       }
    }

    What's next?

    You may be interested in the following articles: