System Settings

System Settings

System settings are the installation-wide defaults for Logship. They're managed from Administration → System Settings in the frontend and through the /settings API.

If you're trying to configure behavior that should apply across the whole deployment, this is the place to start. These settings currently cover:

  • default outbound email connection details
  • the frontend base URL used in incident notification links
  • search executor concurrency limits

Permissions

Viewing and updating system settings requires global admin access.

Sensitive values

Sensitive settings are redacted on read. You can save a value like an email password, but the UI and GET /settings won't return the stored value later.

Maintenance note

This page is tied directly to the code-defined registry in src/Logship/Service/Services/Configuration/Settings/SystemSettingStore.cs and the code that consumes those settings. Whenever a system setting is added, removed, renamed, retyped, or its behavior changes in code, this documentation must be updated in the same change.

Quick example

A common setup is:

  • configure the default outbound email connection for the whole system
  • configure the frontend base URL so incident notifications can include deep links
POST /settings
Authorization: Bearer <token>
Content-Type: application/json

{
  "settings": [
    {
      "key": "Logship.Communication.Email.Endpoint",
      "value": "mail.domain.com:993"
    },
    {
      "key": "Logship.Communication.Email.UserName",
      "value": "notifications@domain.com"
    },
    {
      "key": "Logship.Communication.Email.Password",
      "value": "<secret>"
    },
    {
      "key": "Logship.Communication.Email.FromAddress",
      "value": "alerts@domain.com"
    },
    {
      "key": "Logship.Application.FrontendUrl",
      "value": "https://app.domain.com"
    }
  ]
}

If you read the settings back later, the password will be redacted.

How system settings work

System settings act as the deployment-wide defaults.

In practice, that means:

  • the messenger service uses the system email settings as its default email configuration
  • account-level email settings can override the matching system email connection values for account-scoped mail
  • Logship.Application.FrontendUrl is used to build incident deep links in notifications
  • the search executor concurrency settings are polled and applied dynamically by UpdateExecutionSemaphoreValuesTask

Setting reference

SettingTypeDefaultSensitiveWhat it does
Logship.Communication.Email.UserNamestringnullNoSystem default email username.
Logship.Communication.Email.EndpointstringnullNoSystem default email endpoint.
Logship.Communication.Email.PasswordstringnullYesSystem default email password.
Logship.Communication.Email.FromAddressstringnullNoFrom address used for email. If left empty, downstream email handling defaults it to the username.
Logship.Communication.Email.Send.IntervalTimeSpan00:00:10NoDefault interval between email send attempts.
Logship.Application.FrontendUrlstringnullNoFrontend base URL used to build incident deep links in notifications.
Logship.Search.Executor.Query.MaxConcurrentint10NoMaximum number of concurrent queries per executor.
Logship.Search.Executor.File.MaxConcurrentReadint10NoMaximum number of concurrent file reads globally.
Logship.Search.Executor.File.Rowgroup.MaxConcurrentReadint100NoMaximum number of concurrent rowgroup reads per executor.

Email defaults

These settings define the system-wide email defaults:

  • Logship.Communication.Email.Endpoint
  • Logship.Communication.Email.UserName
  • Logship.Communication.Email.Password
  • Logship.Communication.Email.FromAddress

This is the right level when most or all accounts should share one mail configuration.

If a specific account needs its own mail connection details, account settings can override the matching values for that account.

Logship.Communication.Email.Send.Interval

Logship.Communication.Email.Send.Interval is also a system setting, but it is different from the connection settings above: it controls the default cadence used by the system when processing outbound email.

Use a standard TimeSpan value such as:

00:00:10
00:01:00
00:05:00

Logship.Application.FrontendUrl is used by IncidentAssignmentNotificationService when building incident deep links.

Example value:

https://app.domain.com

When it's valid, notifications can include links like:

https://app.domain.com/account/<accountId>/incidents/<incidentId>

Important

This setting must be a valid absolute URL.

If it's blank or invalid, Logship skips the deep link instead of generating a broken one.

Search executor concurrency settings

These three settings are operational tuning knobs for the search executor:

  • Logship.Search.Executor.Query.MaxConcurrent
  • Logship.Search.Executor.File.MaxConcurrentRead
  • Logship.Search.Executor.File.Rowgroup.MaxConcurrentRead

UpdateExecutionSemaphoreValuesTask polls these settings and updates the corresponding semaphore limits dynamically. In other words, these aren't just startup values sitting in a config file somewhere — the running service is designed to pick up changes.

If you're tuning throughput, start conservatively, make one change at a time, and observe the effect on query latency and system load.

Common variations

Use one shared email configuration for every account

Set the system email settings and leave the account-level email connection settings unset.

Override email settings for one account only

Keep the system defaults in place, then set account-level email endpoint, username, password, and/or from address for the specific account that needs different behavior.

Set:

  • Logship.Application.FrontendUrl

That's enough for incident links, as long as the value is a valid absolute URL.

Troubleshooting

I saved the email password, but the field looks empty afterward

That's expected.

Sensitive settings are redacted on read, so the stored password is not returned by the API or the frontend.

Check Logship.Application.FrontendUrl.

One common mistake is saving only a hostname or a relative path. Use a full absolute URL such as:

https://app.domain.com

I changed a search concurrency setting and expected it to update right away

These values are applied by a background task that polls and updates semaphores dynamically. If you just changed a value, allow a short delay for the new value to be picked up.

For per-account overrides and account-specific behavior, see Account Settings.