90 lines
2.6 KiB
C#
90 lines
2.6 KiB
C#
namespace Bts.DataStreamWebApp.Server;
|
|
|
|
using Bts.PubSub;
|
|
|
|
using CommandLine;
|
|
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
class DataStreamWebAppServerConfig {
|
|
/// <summary>
|
|
/// The login user for sparkd
|
|
/// </summary>
|
|
[JsonPropertyName("user")]
|
|
[Option("user", HelpText = "The sparkd login user")]
|
|
public string? User { get; set; }
|
|
|
|
/// <summary>
|
|
/// The login password for sparkd
|
|
/// </summary>
|
|
[JsonPropertyName("password")]
|
|
[Option("pass", HelpText = "The sparkd login password")]
|
|
public string? Password { get; set; }
|
|
|
|
/// <summary>
|
|
/// The config server url for sparkd
|
|
/// </summary>
|
|
[JsonPropertyName("sparkd")]
|
|
[Option("sparkd", HelpText = "The sparkd config server")]
|
|
public string? Sparkd { get; set; }
|
|
|
|
[JsonPropertyName("pubsub")]
|
|
public PubSubConfig? PubSub { get; set; }
|
|
|
|
[Option("content-root-path")]
|
|
[JsonPropertyName("content_root_path")]
|
|
public string? ContentRootPath { get; set; }
|
|
|
|
[Option("web-root-path")]
|
|
[JsonPropertyName("web_root_path")]
|
|
public string? WebRootPath { get; set; }
|
|
|
|
[Option("environment-name")]
|
|
[JsonPropertyName("environment_name")]
|
|
public string? EnvironmentName { get; set; }
|
|
|
|
public DirectoryBrowserOptions? DirectoryBrowser { get; set; }
|
|
|
|
[Option(
|
|
"config",
|
|
MetaValue = "PATH",
|
|
HelpText = "Path to json file representing these options (DataStreamPublisherConfig)")]
|
|
[JsonIgnore]
|
|
public string? ConfigFile { get; set; }
|
|
|
|
public static DataStreamWebAppServerConfig Default() =>
|
|
new() {
|
|
User = "bts",
|
|
PubSub = PubSubConfig.Default(),
|
|
};
|
|
|
|
public void MergeWith(DataStreamWebAppServerConfig other) {
|
|
User ??= other.User;
|
|
Password ??= other.Password;
|
|
PubSub ??= other.PubSub;
|
|
Sparkd ??= other.Sparkd;
|
|
ContentRootPath ??= other.ContentRootPath;
|
|
WebRootPath ??= other.WebRootPath;
|
|
ConfigFile ??= other.ConfigFile;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Merges options with those defined in `ConfigFile` (does not overwrite
|
|
/// non-null existing values).
|
|
/// </summary>
|
|
/// <exception cref="InvalidOperationException">
|
|
/// JsonSerializer.Deserialize returns null
|
|
/// </exception>
|
|
public void MergeWithConfigFile() {
|
|
if (ConfigFile is null) {
|
|
return;
|
|
}
|
|
var cfgString = File.ReadAllText(ConfigFile);
|
|
var parsedCfg = JsonSerializer.Deserialize<DataStreamWebAppServerConfig>(cfgString) ??
|
|
throw new InvalidOperationException($"Failed to parse json from {ConfigFile}");
|
|
MergeWith(parsedCfg);
|
|
ConfigFile = null;
|
|
}
|
|
}
|