Server Stats is the built-in Arma Reforger dashboard on LoafHosts that turns the lines your server already writes to its logs into something you can actually read: a live graph of connected players, CPU and memory, a performance panel with FPS and frame-time health bands, a per-match killfeed, a K/D leaderboard, and a list of who joined this session. It is Reforger-only — the panel reads it straight out of the server’s own console and script logs — and it can also push the killfeed and server alerts to Discord. This guide explains exactly what each part shows, where the numbers come from, and how to set up the killfeed source and Discord webhooks, so you know what you are looking at and what it can and cannot tell you.
What Server Stats Is
Server Stats is a read-only dashboard on your Reforger server in the panel at hub.loafhosts.com. It does not change anything on the server; it parses the logs Reforger already produces and presents them. Because everything is read from the current log session, the dashboard always shows this match — the boot you are currently running — rather than a lifetime total. When the server restarts, Reforger opens a fresh timestamped log folder, and Server Stats follows it into a clean new session.
The feature only exists for Arma Reforger. On any other game the Server Stats section reports no data and hides itself, because there is no Reforger console to read.
Note: Server Stats is read-only — it parses logs, it never edits your server
Note: Every panel is scoped to the current log session, so a restart starts the stats fresh
Note: The dashboard is available on Arma Reforger servers only
How the Data Is Collected
Server Stats rides on the same background worker that powers the live player counter, and that worker is viewer-gated. In plain terms: while you have the Server Stats dashboard open, the panel keeps scraping your server roughly every 15 seconds, which is what makes the graph and killfeed fill in live in front of you. Close the page and there is no viewer, so the live sampling pauses until someone opens it again. The Discord killfeed and alert webhooks are the exception — once a webhook is enabled it is fed by its own background worker that runs whether or not anyone is watching the dashboard.
When you first open the dashboard the players graph is not empty. The panel backfills it from the timestamped player-count lines already in the current session’s console log — both the join lines (“Players connected”) and the leave lines (“Total number of players”) — so you immediately see the shape of the match rather than waiting for points to accrue one every 15 seconds. CPU and memory cannot be backfilled — there is no history for them in the log — so those two lines start filling from the moment you open the page.
Tip: Keep the dashboard open during an event to watch the live graph and killfeed update
Tip: The players line is backfilled from the log, so it looks populated the instant you open it
Note: CPU and memory are live-only — they have no log history to backfill from
The Live Graph: Players, CPU and Memory
The main time-series shows three things sampled together about every 15 seconds while the dashboard is open: the number of connected players, CPU usage, and memory usage. The connected count comes from Reforger’s own console lines — it logs the live count on every join (“Players connected”) and every leave (“Total number of players”) — and the panel always takes the most recent of the two so the figure tracks both events. CPU and memory come from the live resource reading for your container.
The graph defaults to a 24-hour window. Because the data is per-session, the practical history you see is the length of the current boot — if the server restarted an hour ago, you have an hour of graph, not yesterday’s match.
Tip: A players line that drops to zero and the graph restarting usually means the server was restarted
Note: The second number Reforger prints in “Players connected: 94 / 537” is the session’s unique-player tally, not your slot limit
The Performance Panel: FPS, Frame Time and Health Bands
Reforger periodically writes a detailed performance line to its log — by default about every ten minutes — and Server Stats reads each one into a sparse performance series. Each performance row carries the server FPS, the average, minimum and maximum frame time in milliseconds, the engine’s memory figure, and the in-engine player and AI counts at that moment. These are richer, lower-frequency snapshots that sit alongside the dense 15-second player/CPU/memory samples.
From that data the panel computes simple health bands over the window so you do not have to interpret raw numbers:
| Metric | How it is judged | Notes |
|---|---|---|
| FPS | Average FPS compared against your server’s frame-rate cap (the MAX_FPS startup variable, default 165) plus an absolute floor | A low band means the server is struggling to hit its target tick rate |
| Frame time | Average frame time in milliseconds; flags a stutter when the worst frame is very high | Lower is better; the stutter flag catches spikes a healthy average can hide |
| CPU | Average CPU usage relative to your allocated cores, when the core count is known | On plans with no fixed core ceiling the panel shows the raw usage with no band, to avoid a false “critical” |
| Memory | Average used memory as a percentage of the container limit | A low band means you are running close to your memory allocation; a high band means you have comfortable headroom |
Player count and AI count are shown for context as load — how busy the match was when those FPS numbers were recorded — and deliberately carry no health band of their own.
Tip: Read FPS and frame time together — a fine average with a flagged stutter still means players felt hitching
Tip: If CPU shows usage but no band, your plan has no fixed core ceiling; judge it by FPS and frame time instead
Note: Performance rows land roughly every ten minutes, so they are sparse compared with the player graph
The Killfeed
The killfeed lists kills from the current match, newest first. Each entry records the kill type, the victim and killer (with their factions when known), and, where the log provides it, the weapon or damage type, the hit zone, and the engagement distance in metres. The default view covers the last 24 hours of the current session.
Reforger classifies deaths into a handful of types, and Server Stats keeps the same categories:
| Kill type | Meaning |
|---|---|
ENEMY | A normal kill against an opponent |
TK | A team kill (friendly fire) |
SUICIDE | A player killed themselves |
GM | A Game Master kill |
OTHER_DEATH | A death attributed to AI or the environment rather than another player |
Tip: Distance and hit zone appear when the log includes them, so some entries are more detailed than others
Note: The killfeed is scoped to the current session — it shows this match’s kills, not an all-time log
The K/D Leaderboard
The leaderboard aggregates the killfeed for the match into a per-player scoreboard, grouped by each player’s Bohemia identity (falling back to their name when no identity is attached to the event). It defaults to a 24-hour window over the current session. For each player it tallies:
- Kills —
ENEMYandGMkills credited to them. - Deaths — every event where they were the victim except suicides: being killed by an enemy or teammate, a Game Master kill, and AI or environmental deaths. Suicides are not added here — they are tracked separately.
- Team kills —
TKevents credited to them. These are shown so you can spot problem players, but they are not counted as kills. - Suicides —
SUICIDEevents for that player, counted in their own column rather than folded into the death total.
Because the board is built from the killfeed, it is only as complete as the killfeed source you have configured (see below) and only covers the current match.
Tip: Team kills are listed separately, so a high TK count next to low kills is an easy way to spot griefers
Note: Kills and team kills are tracked apart — a team kill never inflates a player’s kill total
Player Sessions
The sessions panel lists the players seen this match, each with their Reforger identity, in-game name, and the first and last time they were seen in the session. It is read from the “Authenticated player” lines Reforger writes when someone connects, and it defaults to the last seven days (in practice, the length of the current session). It is a quick way to confirm who was on without scrolling the raw console.
Tip: Use the sessions list to grab a player’s identity for your admin or ban workflow without opening the log files
Choosing Your Killfeed Source
The graphs, player counts and sessions always work from Reforger’s base console. The killfeed and leaderboard, though, depend on a kill log, and Server Stats can read that from one of two sources. You pick the source from the Server Stats configuration.
| Source | What it reads | Requirements |
|---|---|---|
| Server Admin Tools (default) | The kill lines in the server’s script.log | The Server Admin Tools mod |
| WCS_Commands | The WCS_Commands event log, which carries more detailed combat data | The WCS_Commands mod and the -WCSTest startup parameter, which is what makes the mod write its event log |
The configuration screen shows, for each source, whether its mod is currently installed on your server (it reads your config.json mod list to tell you), along with a link to the workshop page. To save you a trip to the workshop, there is an install action that adds the chosen source’s mod to your server’s mod list directly. For WCS_Commands it also appends the -WCSTest startup parameter for you, because that source produces nothing without it. In both cases Reforger downloads the mod on the next boot, so you need to restart the server after installing.
Warning: WCS_Commands only generates its event log with the
-WCSTeststartup parameter — the install action adds it automatically, but if you add the mod by hand you must add-WCSTestyourselfTip: After installing a killfeed source, restart the server so Reforger downloads the mod before you expect kills to appear
Note: Server Admin Tools is the default and is enough for a standard killfeed and K/D board
Sending the Killfeed and Alerts to Discord
Server Stats can post to Discord through per-server webhooks, and you can add up to five of them, each with its own URL and its own set of events. When you add a webhook you choose which of these event types it delivers:
| Event | Posts when |
|---|---|
KILLFEED | A kill is recorded (Reforger only) |
PLAYER_CONNECT | A player joins (Reforger only) |
PLAYER_DISCONNECT | A player leaves (Reforger only) |
SERVER_STATE | The server goes down, comes up, or restarts |
PERF_THRESHOLD | A performance threshold you set is crossed (Reforger only) |
Each webhook also has its own filters so you can keep the channel useful instead of noisy:
- Kill types — limit a killfeed webhook to specific kill types (for example, only team kills, or exclude suicides).
- Minimum distance — only post kills over a set distance in metres, handy for a long-range or sniper-only feed.
- Performance thresholds — set a CPU percentage, a minimum FPS, or a memory percentage that triggers a
PERF_THRESHOLDalert. - Discord thread ID — post into a specific thread or forum post by supplying its numeric ID, instead of straight into the channel.
There is a test action that sends a sample message so you can confirm the webhook lands in the right channel before you rely on it. The panel masks the webhook URL after you save it, checks that what you paste is genuinely a Discord webhook, and will not let you enable a webhook that has no URL on file.
Tip: Use separate webhooks for separate channels — a killfeed feed in one channel and
SERVER_STATEup/down alerts in your admin channelTip: Set a minimum distance on a killfeed webhook to build a long-range highlights feed
Note:
SERVER_STATEalerts work on any game, butKILLFEED, connect, disconnect and performance alerts only have a data source on Reforger
Who Can See and Change It
Anyone with access to the server — the owner, or a sub-user who can open the server — can view the Server Stats dashboard. Changing the configuration is more restricted: choosing the killfeed source, installing a source mod, and adding, editing, testing or deleting Discord webhooks all require the Startup permission. If you are setting this up for a sub-user, grant them the Startup permission so they can manage the source and webhooks rather than only view the graphs.
Note: Viewing stats needs only server access; changing the source or webhooks needs the Startup permission
Frequently Asked Questions
Is Server Stats available for games other than Arma Reforger?
No. The dashboard is Reforger-only. It works by parsing Reforger’s console and script logs, so on other games it reports no data and hides itself. The Discord SERVER_STATE up/down/restart alert is the one game-agnostic piece, but the killfeed, leaderboard, player and performance panels are Reforger-specific.
Why does my graph reset after a restart?
Because Server Stats is scoped to the current log session. Reforger writes a new timestamped log folder on every boot, and the dashboard follows that new session, so a restart deliberately starts the stats fresh for the new match rather than carrying the old one forward.
Why is the killfeed or leaderboard empty?
The killfeed and leaderboard need a kill-log source. With the default Server Admin Tools source you need the Server Admin Tools mod installed; with WCS_Commands you need that mod and the -WCSTest startup parameter. Install the source from the Server Stats configuration and restart so Reforger downloads the mod, then play a round to generate kills.
Do I need to keep the page open for stats to update?
For the live graph and killfeed on the dashboard, yes — the live sampling runs while the dashboard is being viewed and pauses when no one is watching. Discord webhooks are different: once a webhook is enabled it is driven by its own background worker, so killfeed and alerts post to Discord whether or not anyone has the dashboard open.
What does the FPS health band actually compare against?
Your server’s average FPS over the window is judged against your frame-rate cap — the MAX_FPS startup variable, which defaults to 165 if it is not set — plus an absolute floor. A high band means the server is comfortably near its target tick rate; a low band means it is struggling, and you should check frame time and player/AI load on the performance panel.
Why does CPU show usage but no health band?
On plans with no fixed core ceiling the panel cannot meaningfully band CPU against a single core without producing a false “critical”, so it shows the raw usage figure with no band. Judge those servers by FPS and frame time, which reflect real in-game performance regardless of how cores are allocated.
Can I send team kills to their own Discord channel?
Yes. Add a webhook with the KILLFEED event and set its kill-type filter to team kills only, pointed at the channel (or thread) you want. You can run up to five webhooks per server, each with its own events and filters, so a dedicated team-kill or long-range feed is just another webhook.