using System.Diagnostics; using System.Net.Http.Headers; using Nexus.Api.Data; namespace Nexus.Api.Integrations; public sealed class OpenClawRuntime(HttpClient client, IConfiguration configuration) : IAgentRuntime { public string Name => "OpenClaw"; public async Task GetStatusAsync(CancellationToken cancellationToken) { var stopwatch = Stopwatch.StartNew(); try { using var request = new HttpRequestMessage(HttpMethod.Get, "/"); ApplyAuthorization(request); using var response = await client.SendAsync(request, cancellationToken); stopwatch.Stop(); var status = response.IsSuccessStatusCode ? OperationalStatus.Online : OperationalStatus.Degraded; return new(Name, status, stopwatch.Elapsed, $"HTTP {(int)response.StatusCode}"); } catch (Exception exception) { stopwatch.Stop(); return new(Name, OperationalStatus.Offline, stopwatch.Elapsed, exception.Message); } } private void ApplyAuthorization(HttpRequestMessage request) { var credential = configuration["Integrations:OpenClaw:Password"] ?? configuration["Integrations:OpenClaw:Token"]; if (!string.IsNullOrWhiteSpace(credential)) request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", credential); } }