namespace Monitor.Backend.Application; /// /// 一个节点(Agent 或 Probe)用来展示的信息:系统和架构、国家、运营商,以及它自己上报的构建信息(版本、tag、提交、构建时间)。 /// 不含任何 IP 地址、城市、ASN 或经纬度——这些只在查询的那一刻用到,不留下,也不对外。 /// public sealed record NodeInfo( string NodeId, string Kind, string? Os, string? OsName, string? Arch, string? Country, string? IspKey, string? IspName, string? Version = null, string? Tag = null, string? Commit = null, string? BuiltAt = null); /// /// 存起来的完整记录(只给 Backend 内部用):多了一个「查询用的主机」,用来判断地址变了没有、要不要重新查。 /// 这个字段不会出现在任何对外的接口里。 /// public sealed record NodeMeta(NodeInfo Info, string? GeoHost, long GeoAtMs, long UpdatedAtMs); public static class NodeKinds { public const string Agent = "agent"; public const string Probe = "probe"; } /// IP 归属查询的结果(只取需要的几项)。 public sealed record GeoInfo(string? Country, int? Asn, string? Organization, bool IsPrivate);