blob: aa4f013484c643b4ea91a963d9b2fe504e784fb7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
namespace marlin.agents.shell;
using System.Net.Http.Json;
using core.models;
public class MarlinApiClient
{
private readonly HttpClient _http;
public MarlinApiClient(string baseUrl, Guid agentId, string agentToken)
{
_http = new HttpClient { BaseAddress = new Uri(baseUrl) };
_http.DefaultRequestHeaders.Add("Agent", $"{agentId} {agentToken}");
}
public static MarlinApiClient FromEnvironment()
{
var baseUrl = RequireEnv("MARLIN_API_BASE_URL");
var agentId = RequireEnv("MARLIN_AGENT_ID");
var agentToken = RequireEnv("MARLIN_AGENT_TOKEN");
return new MarlinApiClient(baseUrl, Guid.Parse(agentId), agentToken);
}
private static string RequireEnv(string name) =>
Environment.GetEnvironmentVariable(name)
?? throw new InvalidOperationException($"Missing required environment variable: {name}");
public async Task<AgentConfiguration> Handshake(AgentStatus status, CancellationToken ct = default)
{
var response = await _http.PostAsJsonAsync("api/dispatch/handshake", status, ct);
response.EnsureSuccessStatusCode();
return (await response.Content.ReadFromJsonAsync<AgentConfiguration>(ct))!;
}
public async Task<DispatchJob?> QueueNextJob(CancellationToken ct = default)
=> await _http.GetFromJsonAsync<DispatchJob?>("api/dispatch/queue", ct);
}
|