using Fleet.Core; using Fleet.Hosting; using Monitor.Probe; TimeProvider time = TimeProvider.System; INodeLog log = new ConsoleNodeLog(time); if (PlatformCheck.VerifyCrypto() is { } problem) { log.Error("startup failed", ("err", problem)); return 1; } string configPath = "/etc/monitor/probe.json"; for (int i = 0; i < args.Length - 1; i++) { if (args[i] == "--config") { configPath = args[i + 1]; } } ProbeFile file; try { file = NodeConfig.Load(configPath, ProbeConfigContext.Default.ProbeFile); if (file.ProbeId.Length == 0 || file.PrivateKey.Length == 0) { throw new InvalidOperationException("probe.json needs probe_id and private_key (download it from the panel: POST /api/admin/probe/identity)"); } } catch (Exception ex) when (ex is IOException or InvalidDataException or InvalidOperationException or System.Text.Json.JsonException) { log.Error("startup failed", ("err", ex.Message)); return 1; } string directory = Path.GetDirectoryName(Path.GetFullPath(configPath))!; try { using var app = new ProbeApp(file, directory, time, log); await ServiceShell.RunAsync(app.RunAsync, log); } catch (Exception ex) when (ex is FormatException or System.Security.Cryptography.CryptographicException) { log.Error("startup failed", ("err", "private_key is not a valid PKCS#8 key: " + ex.Message)); return 1; } return 0;