Skip to content

v0.9.2 - 47a4a13

Latest

Choose a tag to compare

@Shvquu Shvquu released this 21 Jun 09:02
2c4e0a3

ServerDoctor v0.9.2

Two new analysis scanners — plugin compatibility assessment and historical performance
regression
detection — both running automatically on Paper/Folia, Velocity and BungeeCord.

✨ Added

Compatibility scanner

  • New CompatibilityScanner (core) that assesses each plugin against the running server and
    aggregates the signals into a transparent 0–100 risk score.
  • Runtime signals (no network): declared api-version vs. the server's Minecraft version
    (Paper/Folia), whether Folia support can be confirmed, and enabled state.
  • Optional external metadata feed (compatibility.metadata, off by default) adds release
    age, a Folia yes/no flag and known incompatibilities — honest by design: this data comes from
    a feed you/the community maintain, never fabricated.
  • Score → severity: <15 OK · 15–39 LOW · 40–69 MEDIUM · 70–89 HIGH · ≥90 CRITICAL.
  • Runs on all platforms; on proxies the Minecraft-version/Folia signals are skipped.
  • PluginInfo gained an apiVersion field (populated by the Paper adapter from plugin.yml).

Historical regression detection

  • New RegressionScanner (core) that compares the older half of stored performance snapshots
    against the newer half to detect gradual regressions in TPS, MSPT and RAM — catching
    slow decline over days/weeks, not just spikes.
  • Uses only data already persisted, via an injected PerformanceHistory
    (limit -> storage.performance().recent(limit)).
  • Runs on all platforms; on proxies TPS/MSPT (NaN) are skipped while RAM is still compared.
  • Thresholds: TPS drop ≥8 %, MSPT rise ≥25 %, RAM rise ≥30 % (with HIGH/CRITICAL tiers);
    needs ≥8 stored samples. Example finding:
    Performance regression vs baseline: TPS 19.8 -> 18.4 (-7%); MSPT 14.0ms -> 23.0ms (+64%).

Both scanners surface in /serverdoctor report, the GUI, the REST /report endpoint and
webhooks (which fire on state change, so a persisting issue isn't spammed).

🔧 Changed

  • ServerDoctorCore.bootstrap now accepts a single ScannerSources object bundling the optional
    advisory, compatibility and performance-history sources. The previous overloads
    (bootstrap(platform), …, AdvisorySource, …, AdvisorySource, CompatibilityMetadataSource)
    are kept and delegate to it — no caller is forced to change.
  • PluginInfo gained a 7th component apiVersion; the prior 6-argument constructor is retained
    (delegates with an empty api-version), so existing adapters, tests and the REST serializer
    compile unchanged.

📦 Setup (new optional config)

compatibility:
  metadata:
    enabled: false
    feed-url: ""        # HTTPS feed (see compatibility.sample.txt)
    refresh-minutes: 1440

Regression detection needs no config — it works once PerformanceHistory is wired into
bootstrap (one line per platform; storage must be opened before bootstrap). Both scanners are
registered automatically; unwired optional sources simply stay quiet.

Full Changelog: v0.9.0...v0.9.2