Skip to content

AppConfig Reference#

The VPS is configured via a single JSON file — AppConfig.json. This page documents every section and setting.

File Location#

By default, the service looks for the config file at:

Configs/AppConfig.json

This path is relative to the executable or working directory. Override it using:

  • Command-line argument: -c /path/to/AppConfig.json
  • Environment variable: CONFIG_FILE_PATH=/path/to/AppConfig.json

Full Example#

{
  "StreamApiConfig": {
    "StreamCreationStrategy": 2,
    "BrokerUrl": "192.168.0.6:9094",
    "PartitionMappings": [{}],
    "IntegrateSessionManagement": true,
    "IntegrateDataFormatManagement": true,
    "UseRemoteKeyGenerator": false,
    "RemoteKeyGeneratorServiceAddress": "",
    "BatchingResponses": false,
    "StreamApiPort": 13579
  },
  "VirtualParameterServiceConfig": {
    "DataSource": "Default",
    "BufferingWindowLengthInMs": "3000",
    "SlidingWindowPercentage": 5,
    "SessionTypesToProcess": [ "Session", "VTS" ],
    "MetricPort": 10010,
    "CalculationMode": "Default",
    "MaxWriteBatchSizeInKb": 100
  },
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Console",
      "Serilog.Sinks.File"
    ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "C:/logs/vps-svc-log.txt"
        }
      }
    ]
  }
}

VirtualParameterServiceConfig#

Controls the core behaviour of the virtual parameter calculation engine.

Setting Type Default Description
DataSource string "Default" The data source name to listen for. Only one data source is supported per service instance. Must match the data source configured in ADS.
BufferingWindowLengthInMs uint 3000 The time window (in milliseconds) over which incoming sample data is buffered before processing begins. Increasing this value allows more data to accumulate before calculation, which can improve accuracy at the cost of latency.
SlidingWindowPercentage byte 5 The percentage of the buffering window that controls how frequently computed data is emitted. For example, with a 3000 ms window and 5%, results are emitted approximately every 150 ms.
SessionTypesToProcess string[] ["Session", "VTS"] The ATLAS session types the service processes. Historical sessions and the service's own virtual-session output are filtered out automatically regardless of this setting.
MetricPort int 10010 The port the Prometheus metrics endpoint listens on.
CalculationMode string (Default or Snapshot) Default Selects the virtual parameter calculation strategy. See Calculation Modes below.
MaxWriteBatchSizeInKb uint 100 Only used when CalculationMode is Snapshot. Caps the size of each packet written for a virtual — once a virtual's pending samples reach this limit within a batch, they're flushed immediately and accumulation restarts, so no single packet exceeds the limit. Set it to match the Kafka message.max.bytes setting.

Single data source

The VPS only supports a single DataSource per instance. To process multiple data sources, deploy separate VPS instances.

Calculation Modes#

CalculationMode controls how the VPS decides when to recalculate a virtual parameter, and what happens when a source parameter is slow, quiet, or delivers samples out of order.

Waits until every source parameter has data covering a given timestamp before calculating, so a virtual's output timestamp is only produced once all of its inputs are aligned. Timestamps that can't yet be aligned are deferred to a later buffering window.

Use Default when a virtual must never be computed from an input that doesn't actually cover its output timestamp — for example, processing recorded or replayed sessions, or sources that can redeliver samples out of order.

Keeps only the latest known value per source parameter. Any time a source changes, the virtual recalculates immediately using that change together with the latest known value of its other sources (forward-filling the ones that haven't changed). Nested virtuals that depend on the result cascade in the same pass.

Use Snapshot for live streaming: memory use stays flat regardless of session length, and a virtual keeps producing values even while one of its sources ticks slowly. The trade-off is in the warning below.

Snapshot mode never accepts out-of-order data

If a sample's timestamp is older than the latest value Snapshot has already recorded for that parameter, the sample is rejected rather than retroactively applied. Use Default mode for sources that can deliver historical or out-of-order samples.

Default Snapshot
Recalculates when Every source for a timestamp has arrived Any one source changes
Memory use Grows with source lag over the life of a session Flat, independent of session length or sample rate
Slow or quiet sources Virtual stalls until the slow source catches up Keeps producing, using the last known value
Out-of-order samples Tolerated within the buffering window Rejected
AppConfig.json — enabling Snapshot mode
1
2
3
4
"VirtualParameterServiceConfig": {
    "CalculationMode": "Snapshot",
    "MaxWriteBatchSizeInKb": 100
}

Add or update — don't replace the whole file

Add these two settings to your existing VirtualParameterServiceConfig section.

Serilog#

Controls application logging. Standard Serilog configuration is supported.

Precedence

The Serilog section in AppConfig.json takes precedence over command-line arguments (-l) and environment variables (LOG_FILE_PATH) for log file paths.

Common Settings#

Setting Description
MinimumLevel Log level: Verbose, Debug, Information, Warning, Error, Fatal
Using Serilog sink packages to load
WriteTo Array of configured sinks

Example: Console + File (Debug Level)#

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Console",
      "Serilog.Sinks.File"
    ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "C:/logs/vps-svc-log.txt"
        }
      }
    ]
  }
}

Example: File Only (Information Level)#

{
  "Serilog": {
    "Using": ["Serilog.Sinks.File"],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "/logs/vps-svc-log.txt"
        }
      }
    ]
  }
}