This tutorial describes Flexmonster Data Server configuration. To install the Data Server, refer to Installing Flexmonster Data Server as a Windows/Unix service.
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/Type | Description |
---|---|
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. |
This object allows configuring a data source. It contains the following properties:
{
Type: string,
DatabaseType: string,
ConnectionString: string,
Indexes: object
}
Property/Type | Description |
---|---|
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:
|
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. |
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/Type | Description |
---|---|
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 and is measured from the moment the Data Server starts up. If the RefreshTime is specified, it overrides the DataStorageOptions.DataRefreshTime property.When the RefreshTime is set to 0 , the Data Server will not reload the data.If the RefreshTime is not specified, the Data Server will use the value set in the DataStorageOptions.DataRefreshTime property.The RefreshTime property is available starting from version 2.9 of the Data Server. |
This object defines how the Data Server should process fields from the dataset. It has the following properties:
Mapping: {
<uniqueName>: {
Type: string
}
}
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/Type | Description |
---|---|
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": { |
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/Type | Description |
---|---|
DataRefreshTime Number | optional Defines how often the Data Server reloads the data from the data source. The refresh time is specified in minutes and is measured from the moment the Data Server starts up. The Indexes.<indexName>.RefreshTime property overrides the DataRefreshTime .By default, the DataRefreshTime is 0 , which means the Data Server will not reload the data. |
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. |
This object allows configuring the HTTPS protocol. It contains the following properties:
HTTPS: {
Enabled: boolean,
Certificate: PFXCertObject | PEMCertObject | SubjectStoreObject,
Protocols: string
}
Property/Type | Description |
---|---|
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" . |
This object allows adding a .pfx
certificate. It contains the following properties:
Certificate: {
Path: string,
Password: string
}
Property/Type | Description |
---|---|
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. |
This object allows adding a .pem
certificate. It contains the following properties:
Certificate: {
Path: string,
KeyPath: string
}
Property/Type | Description |
---|---|
Path String | The URL to the .pem certificate. |
KeyPath String | The URL to a .pem file that contains the private key for the certificate. |
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
}
This object allows configuring the report-sharing functionality. It contains the following properties:
ReportSharingOptions: {
EndpointEnabled: boolean,
PathToFolder: string,
ReportExpirationTime: number,
MaxSizeOfFolder: number,
AutoDeletingEnabled: boolean
}
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:
flexmonster-data-server.exe param=connectionString param2=tableName
./flexmonster-data-server param=connectionString param2=tableName
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
).
To define a port for the Data Server from the command line, use the -p
parameter:
flexmonster-data-server.exe -p 7777
./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.
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:
flexmonster-data-server.exe -s <path_to_config>\flexmonster-config.json
./flexmonster-data-server -s <path_to_config>/flexmonster-config.json
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 } }
You may be interested in the following articles: