{
  "GrpcPort": 50051,
  "ApiKeyConfigFile": "apikeys.json",
  "Subscription": {
    "ChannelCapacity": 1000,
    "ChannelFullMode": "DropOldest"
  },
  "ServiceRecovery": {
    "FirstFailureDelayMinutes": 1,
    "SecondFailureDelayMinutes": 5,
    "SubsequentFailureDelayMinutes": 10,
    "ResetPeriodDays": 1
  },
  "Connection": {
    "MonitorIntervalSeconds": 5,
    "ConnectionTimeoutSeconds": 30,
    "AutoReconnect": true,
    "ReadTimeoutSeconds": 5,
    "WriteTimeoutSeconds": 5,
    "MaxConcurrentOperations": 10
  },
  "PerformanceMetrics": {
    "ReportingIntervalSeconds": 60,
    "Enabled": true,
    "MaxSamplesPerMetric": 1000
  },
  "HealthCheck": {
    "Enabled": true,
    "TestTagAddress": "TestChannel.TestDevice.TestTag",
    "MaxStaleDataMinutes": 5
  },
  "RetryPolicies": {
    "ReadRetryCount": 3,
    "WriteRetryCount": 3,
    "ConnectionRetryCount": 5,
    "CircuitBreakerThreshold": 5,
    "CircuitBreakerDurationSeconds": 30
  },
  "Tls": {
    "Enabled": true,
    "ServerCertificatePath": "certs/server.crt",
    "ServerKeyPath": "certs/server.key",
    "ClientCaCertificatePath": "certs/ca.crt",
    "RequireClientCertificate": false,
    "CheckCertificateRevocation": false
  },
  "WebServer": {
    "Enabled": true,
    "Port": 8080
  },
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning",
        "Grpc": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/lmxproxy-.txt",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 30,
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}"
        }
      }
    ],
    "Enrich": [
      "FromLogContext",
      "WithMachineName",
      "WithThreadId"
    ]
  }
}
