namespace PrivaPub.Infrastructure.Statistics { public class StatisticsOptions { public bool Enabled { get; set; } = true; public string GeoDirectory { get; set; } = "/var/lib/privapub/geo"; public int PublicCityMinUsers { get; set; } = 10; public CrawlerOptions Crawler { get; set; } = new(); public GeoOptions Geo { get; set; } = new(); } //owner decision (2026-10-04): the server keeps its DB-IP Lite databases current by itself public class GeoOptions { public bool AutoUpdate { get; set; } = true; public string DownloadBase { get; set; } = "https://download.db-ip.com/free"; public long MaxDownloadBytes { get; set; } = 300L * 1024 * 1024; public long MaxDatabaseBytes { get; set; } = 1024L * 1024 * 1024; //this server's place, when locating its own address would be wrong (behind a proxy or a CDN): the owner's call public SelfGeoOptions Self { get; set; } = new(); } public class SelfGeoOptions { public double? Latitude { get; set; } public double? Longitude { get; set; } public string City { get; set; } public string Country { get; set; } } //owner decision: off by default (on in production since 2026-10-04); when on, one server a minute, each at most weekly, at most MaxHosts servers public class CrawlerOptions { public bool Enabled { get; set; } public int MaxHosts { get; set; } = 5000; public int HostsPerHour { get; set; } = 60; public int RevisitDays { get; set; } = 7; public int MaxNewHostsPerCrawl { get; set; } = 500; public List Seeds { get; set; } = new(); } }