Files
SocialPub/PrivaPub/Models/Jobs/RemoteInstance.cs
T
thepraandClaude Opus 5.5 f105d1f7ea
Build / Build (push) Failing after 7m51s
Deploy / privapub.thepra.dev (push) Successful in 7m58s
PieFed and Mbin take reports from the reporter too
Both speak Lemmy's shapes and joined the servers that get reports in that shape only once the pasture showed each keeps
one with its reason. By their source, PieFed dropped the instance actor's report (it makes a user only of a Person or a
Service) and Mbin kept it without the persona's words (it reads the reason from `summary` alone). With them in
`ServiceReportTakers`, each keeps the reports of a thread and of a comment from "Reports from privapub.test" with
alice's words, and none names her (piefed.sh and mbin.sh, 65 checks with the full sweep's 876). A report of a PieFed
account alone, which PieFed would take from the reporter, is not sent yet; INTEROP says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
2026-10-06 19:24:09 +02:00

97 lines
3.9 KiB
C#

using MongoDB.Entities;
namespace PrivaPub.Models.Jobs
{
public class RemoteInstance : Entity
{
public string Host { get; set; }
public int ConsecutiveFailures { get; set; }
public DateTime? UnavailableUntil { get; set; }
public DateTime? LastSuccessAt { get; set; }
public DateTime? LastFailureAt { get; set; }
public string LastError { get; set; }
public string Software { get; set; }//NodeInfo software.name: for display, never for deciding behaviour, but for two
//owner decisions: a first private message to Lemmy before 1.0 or Mbin is a ChatMessage (2026-10-05), and a report
//to a community on Lemmy, PieFed or Mbin leaves from the reporter in Lemmy's shape (2026-10-06,
//ReportService.ServiceReportTakers)
public string SoftwareVersion { get; set; }
public string NodeName { get; set; }
public List<string> Protocols { get; set; } = new();
public bool? OpenRegistrations { get; set; }
public string NodeInfo { get; set; }//the raw document, when small enough
public DateTime? DescribedAt { get; set; }
public string DescriptionError { get; set; }
public string Seen { get; set; }//"touched": we exchanged something with it; "crawled": only its peers list named it
public DateTime? FirstSeenAt { get; set; }
public DateTime? LastSeenAt { get; set; }
public DateTime? LastCrawledAt { get; set; }
public string CrawlError { get; set; }
public bool? RobotsDisallowed { get; set; }
public int? PeersCount { get; set; }
public string NodeInfoVersion { get; set; }
public string NodeDescription { get; set; }
public long? UsersTotal { get; set; }//as the server publishes them in its NodeInfo
public long? UsersActiveMonth { get; set; }
public long? UsersActiveHalfyear { get; set; }
public long? LocalPosts { get; set; }
public long? LocalComments { get; set; }
public string InstanceApi { get; set; }//"mastodon-v2" or "mastodon-v1"
public string InstanceApiRaw { get; set; }//admin only: it names maintainers and contact accounts
public string Title { get; set; }
public List<string> Languages { get; set; }
public string RegistrationMode { get; set; }//open, approval, closed
public int? MaxPostChars { get; set; }
public int? MastodonApiVersion { get; set; }
public string SourceUrl { get; set; }
public InstanceGeo Geo { get; set; }
}
public class InstanceGeo
{
public string Country { get; set; }
public string City { get; set; }
public double? Latitude { get; set; }//rounded to one decimal
public double? Longitude { get; set; }
public int? Asn { get; set; }
public string AsnOrg { get; set; }
public string Cdn { get; set; }//the CDN in front of it, whose edge address says nothing about where it runs
public string CdnDomain { get; set; }//the CDN's own domain, which groups its servers (CdnProvider.Key)
public string CdnSource { get; set; }//how the CDN was found: "ranges", "headers" or "asn"
public bool? Ipv6 { get; set; }
public string Source { get; set; }
public DateTime? LocatedAt { get; set; }
}
public class RemoteInstanceSnapshot : Entity
{
public string Host { get; set; }
public string Week { get; set; }//ISO week, "2026-W40"
public DateTime TakenAt { get; set; }
public string Seen { get; set; }
public bool Reachable { get; set; }
public string Software { get; set; }
public string SoftwareVersion { get; set; }
public long? UsersTotal { get; set; }
public long? UsersActiveMonth { get; set; }
public long? UsersActiveHalfyear { get; set; }
public long? LocalPosts { get; set; }
public bool? OpenRegistrations { get; set; }
public string RegistrationMode { get; set; }
public List<string> Languages { get; set; }
public string Country { get; set; }
public string City { get; set; }
public double? Latitude { get; set; }
public double? Longitude { get; set; }
public int? Asn { get; set; }
public string Cdn { get; set; }
public string CdnDomain { get; set; }
public string CdnSource { get; set; }
public bool? Ipv6 { get; set; }
}
}