Mods / Pulse

Tags:
Author:
Pixnop
Side:
Server
Created:
Sep 1st at 7:36 PM
Last modified:
Sep 1st at 9:06 PM
Downloads:
52
Recommended download (for Vintage Story 1.22.0 - 1.22.7):
pulse_0.1.0.zip  1-click install

PULSE

v0.1.0 VS 1.22.x SERVER SIDE OPEN SOURCE ZERO DEPENDENCIES

 

  admin@vs-server: ~
$ curl 127.0.0.1:9464/metrics
pulse_server_ticks_total 92183
pulse_server_tick_seconds_bucket{le="0.0334"} 91847
pulse_server_tick_busy_seconds 0.004
pulse_players_online 14
pulse_entities_by_code{code="chicken-rooster"} 213
pulse_server_suspend_seconds_total 8.42
pulse_engine_warnings_total{kind="overload"} 0
dotnet_gc_pause_time_total 41.2
$ ▊
Real output, one zip, no agent, no database, no account. Drop pulse_x.x.x.zip into Mods/, start the server, scrape.

 

> what_you_get_to_graph

Tick health. Rate, time as a histogram (p95 and p99 are yours), the budget to read saturation against, and the engine's own busy time: the /stats number, showing load climb long before TPS drops.

Players and world. Online count, ping, deaths; entities with a top-ten by type; chunks, worldgen queue, columns generated.

Network and pauses. TCP and UDP rates and totals; autosave suspends counted and timed, the freeze players actually feel.

Log health and runtime. Warning, error and fatal counters, four engine warnings worth alerting on, and the .NET runtime GC, heap, CPU and thread pool.

126
unit tests
20
scenarios on a real headless server
31/31
mutations killed, every release, in CI

 

[1] scrape

Point a Prometheus at it. The repo ships a provisioned Grafana dashboard (contrib/grafana, two docker commands) and ready-made alert rules (contrib/alerts).

[2] panel

Game panels skip Prometheus and read /metrics directly. The first panel integration was built that way in an afternoon, no help needed from the mod side.

[3] push

The optional pulseotlp mod (Files tab) pushes everything over OTLP: otel-collector, Grafana Cloud, Datadog. Its dependencies ride in its own zip.

 

Loopback bind by default: a game server is a public host, and widening the bind is a decision, not an accident. One dll, nothing bundled, nothing to collide with other mods. World state is never touched off the main thread. A failed bind, an unreachable backend or a game update hitting the deep-metrics probe all degrade cleanly; nothing here can take a server down. Built from a survey of the 1.22 internals, MIT licensed, and it runs on vanilla, Stratum and Lithos alike.

 

source_on_github  ·  issues_and_ideas  ·  stratum_discord  ·  support_stratum
There is no spoon. Only metrics.
ツ オ 1 リ ア ホ テ 9 マ ケ メ エ カ 4 キ ム ラ ハ ミ ウ 7 シ ナ モ 0 ニ サ ワ セ

Mod Version Mod IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
0.1.0 pulse
1.22.0 - 1.22.7
33 Sep 1st at 9:06 PM pulse_0.1.0.zip 1-click install

First stable release.

  • Prometheus /metrics endpoint on 127.0.0.1:9464 (port and bind configurable in ModConfig/pulse.json), loopback-only by default.
  • Tick rate, tick time histogram (p95/p99), tick budget and the engine's own busy time.
  • Players online, ping, deaths, entities with a top-ten by type, chunks, worldgen queue, autosave suspend windows.
  • TCP/UDP network rates, log warning/error/fatal counters, four engine warnings worth alerting on, full .NET runtime metrics (GC, heap, CPU, thread pool).
  • Ships with a provisioned Grafana dashboard and ready-made alert rules in the repo (contrib/).
  • Single dll, zero dependencies, nothing bundled. Server side only.
  • Optional OTLP push exporter available as a separate mod (pulseotlp) on GitHub releases.
0.1.0 pulseotlp
1.22.0 - 1.22.7
19 Sep 1st at 9:05 PM pulseotlp_0.1.0.zip 1-click install

First stable release of the optional OTLP exporter.

  • Pushes every metric Pulse instruments (runtime families included) to any OTLP backend: OpenTelemetry collector, Grafana Cloud, Datadog, VictoriaMetrics and the rest.
  • Configured in ModConfig/pulse-otlp.json: endpoint (default http://localhost:4318), http/protobuf or grpc, headers for auth tokens, export interval (60 s default).
  • Requires the Pulse base mod. The OpenTelemetry dependencies ship inside this zip, so the base mod stays dependency-free.
  • A wrong endpoint or an unreachable collector logs an error and never touches the game server.

2 Comments (oldest first | newest first) (threaded | flat)

Omikronlex, Sep 1st at 9:28 PM

Really nice designed modpage 👍

Pixnop , Sep 1st at 9:41 PM (modified Sep 1st at 9:41 PM)
@Omikronlex: Really nice designed modpage 👍

Thanks! It only took me 2 hours 🙃