using MongoDB.Entities; namespace PrivaPub.Models.Statistics { public class InteractionEvent : Entity { public static readonly TimeSpan Retention = TimeSpan.FromDays(90); public DateTime At { get; set; } = DateTime.UtcNow; public string Host { get; set; }//the remote server, lowercase; "-" when unverified and unknown public string Channel { get; set; }//recv | in | out | http | preview | crawl public string Activity { get; set; }//Create, Follow, ...; "other" when it is no plain type name public string Object { get; set; }//Note, Article, Person, ... public string Purpose { get; set; }//http and crawl: actor, key, object, context, webfinger, nodeinfo, ... public string Trigger { get; set; }//http: what caused the request (inbox, deliver, describe, request, ...) public string Outcome { get; set; }//queued, refused, accepted, dropped, ok, failed, deferred, retry, dead public string Reason { get; set; } public int? Status { get; set; } public int? LatencyMs { get; set; } public int? WaitMs { get; set; }//in: since it reached the inbox; out: since it was queued public long? Bytes { get; set; } public int? Attempt { get; set; } public int? Redirects { get; set; } public string Audience { get; set; }//public | unlisted | private | none public string LocalKind { get; set; }//person | group | application, only on public and unlisted traffic public string Inbox { get; set; }//shared | personal public string Signature { get; set; }//"cavage:rsa-sha256", "none" public string ActorHash { get; set; }//keyed with that day's salt, never reversible, never linkable across days public List Features { get; set; } public long? AgeSeconds { get; set; }//Update and Delete: how old the object was public bool Crawl { get; set; } } }