PlaytimeHistory/Config.cs

81 lines
3.2 KiB
C#

using System.Text.Json.Serialization;
using CounterStrikeSharp.API.Core;
namespace PlaytimeHistory;
// configs/plugins/PlaytimeHistory/PlaytimeHistory.json, which CSS writes with these defaults on first
// load. It holds the database password, so the plugin keeps it at mode 600. Changes need the plugin
// reloaded: css_plugins reload PlaytimeHistory.
public class PlaytimeHistoryConfig : BasePluginConfig
{
[JsonPropertyName("Database")]
public DatabaseConfig Database { get; set; } = new();
// pt_servers.id. Must differ between servers writing to the same database.
[JsonPropertyName("ServerId")]
public int ServerId { get; set; } = 1;
// "host:port" for pt_servers.address. The server can't work out its own public address, so
// nothing is stored when this is empty.
[JsonPropertyName("PublicAddress")]
public string PublicAddress { get; set; } = "";
// Whether time spent spectating or unassigned (team picker) counts toward pt_players.total_seconds.
// It's always recorded in pt_segments and pt_players.spec_seconds either way.
[JsonPropertyName("CountSpectatorTime")]
public bool CountSpectatorTime { get; set; } = false;
// DB-IP's City Lite database, relative to the plugin folder. pre.sh installs it. Without it,
// sessions have no country or city.
[JsonPropertyName("GeoIpDatabase")]
public string GeoIpDatabase { get; set; } = "dbip-city-lite.mmdb";
[JsonPropertyName("PingSampleIntervalSeconds")]
public int PingSampleIntervalSeconds { get; set; } = 30;
// How often players online are counted into pt_online_snapshots. 0 turns snapshots off.
[JsonPropertyName("OnlineSnapshotIntervalSeconds")]
public int OnlineSnapshotIntervalSeconds { get; set; } = 300;
// How often open sessions and segments get heartbeat_at, which is where they're closed after a
// crash. A crash loses at most this much time.
[JsonPropertyName("HeartbeatSeconds")]
public int HeartbeatSeconds { get; set; } = 60;
// Writes kept on disk while the database is unreachable, sent once it's back. Beyond this, new
// writes are dropped (and logged).
[JsonPropertyName("SpoolMaxEntries")]
public int SpoolMaxEntries { get; set; } = 20000;
// css_playtime/css_lastseen about someone else need this; about yourself, nothing.
[JsonPropertyName("OtherPlayersPermission")]
public string OtherPlayersPermission { get; set; } = "@css/generic";
[JsonPropertyName("CommandCooldownSeconds")]
public int CommandCooldownSeconds { get; set; } = 5;
[JsonPropertyName("LastSeenLimit")]
public int LastSeenLimit { get; set; } = 5;
}
public class DatabaseConfig
{
[JsonPropertyName("Host")]
public string Host { get; set; } = "127.0.0.1";
[JsonPropertyName("Port")]
public uint Port { get; set; } = 3306;
[JsonPropertyName("Database")]
public string Database { get; set; } = "playtime_history";
[JsonPropertyName("User")]
public string User { get; set; } = "pt_plugin";
[JsonPropertyName("Password")]
public string Password { get; set; } = "";
// MySqlConnector's SslMode: None, Preferred, Required, VerifyCA or VerifyFull.
[JsonPropertyName("SslMode")]
public string SslMode { get; set; } = "None";
}