Lightweight "where is the server heavy" sampler for the WebDataServer.

24Fields
1Constructors
25Methods
1145Lines
Package
com.example.rankingplugin.web
Source
web/ServerLagService.java
Kind
class
Roles
イベント駆動Web / HTTP非同期 / スケジューラ初期化 / ブートストラップサービス層
このクラスにも章立て解説を追加しています。 自動抽出の一覧だけでなく、下の『重点クラスの詳細解説』で読む順番・内部サブシステム・変更時の注意点まで追えます。 全クラス章立てガイドを見る
サブシステム横断ガイドもあります。 このクラスを含む上位の流れは こちらの処理遷移図ページ から読むと把握しやすいです。

クラス説明

Lightweight "where is the server heavy" sampler for the WebDataServer.

Design goals:
- Keep requests fast (serve precomputed snapshots).
- Keep sampling cheap (only scan loaded chunks, top-N selection).
- Provide actionable info: hot chunk coordinates, entity/tile counts, and a few top block-entities.

責務と見どころ

重点クラスの詳細解説

WebDataServer から参照される軽量ラグ解析サービスで、loaded chunk を安価に走査しつつ、原因を人が読める形へ整形して返す役を持っています。小さく見えて設計意図が濃いクラスです。

最初に追う読む順番

  1. ServerLagService
    しきい値やサンプリング幅がどこで決まるかを見ます。
  2. recomputeSync
    定期スナップショット再計算の本体です。
  3. scoreChunk
    chunk 単位の重さをどう点数化するかを把握します。
  4. computeChunkDetailsSync
    詳細ビュー生成の中心です。
  5. buildTopSourcesFlat
    原因候補の整形ロジックです。
  6. handleLagChunks
    一覧 API の入口です。
  7. handleChunkDetails
    詳細 API の入口です。
  8. handleSources
    原因ソース一覧 API です。
  9. recordCommand
    コマンド起因の重さを記録する入口です。

内部サブシステムの地図

代表フロー詳解

定期スナップショット更新

  1. recomputeSync
  2. scoreChunk
  3. buildTopSourcesFlat
  4. chunksSnapshot / sourcesSnapshot 更新

毎リクエストで全チャンクを走査せず、周期更新で結果だけ差し替えるのがこのサービスの設計です。

変更時の注意点

外部接点

外部ルート

このクラス内で直接見つかる主な Web ルート/項目名です。

PUT worldPUT cxPUT czPUT scorePUT baseScorePUT loadMsPUT loadScorePUT entitiesPUT tilesPUT dropsPUT dropAmountPUT hoppers

フィールド

VisibilityTypeName役割
privateJavaPluginpluginプラグイン本体参照です。
privateGsongsongson の状態を保持します。
privateStringserverIdserverId の状態を保持します。
privateintmaxCandidatesmaxCandidates の状態を保持します。
privatelongupdateEveryMsupdateEveryMs の状態を保持します。
privatelongcommandWindowMscommandWindowMs の状態を保持します。
privatedoublewMsptwMspt の状態を保持します。
privatedoublewEntitieswEntities の状態を保持します。
privatedoublewTileEntitieswTileEntities の状態を保持します。
privatedoublewHopperswHoppers の状態を保持します。
privatedoublewSpawnerswSpawners の状態を保持します。
privatedoublewFurnaceswFurnaces の状態を保持します。
privatedoublewChestswChests の状態を保持します。
privatedoublewOtherTileswOtherTiles の状態を保持します。
privatedoublewRedstonewRedstone の状態を保持します。
privateDeque<CmdEvent>cmdEventscmdEvents の状態を保持します。
privateObjectcmdLockcmdLock の状態を保持します。
privateLagChunksSnapshotchunksSnapshotchunksSnapshot の状態を保持します。
privateMap<String, ChunkDetailsSnapshot>detailsByKeydetailsByKey の状態を保持します。
privateSourcesSnapshotsourcesSnapshotsourcesSnapshot の状態を保持します。
privateChunkLoadLagTrackerloadTrackerloadTracker の状態を保持します。
privateThreadserverThreadserverThread の状態を保持します。
privateTickSamplertickSamplertickSampler の状態を保持します。
privateDateTimeFormatterTSTS の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public ServerLagService(JavaPlugin plugin, Gson gson, String serverId)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。requireNonNull → getConfig → getInt → getLong → clampInt → clampLong

メソッド索引

NameVisibilityKind説明
ServerLagServicepublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
handleLagChunkspublicメソッド入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。
handleChunkspublicメソッドCompat alias: earlier patches called this handler as handleChunks().
handleChunkDetailspublicメソッド入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。
handleSourcespublicメソッド入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。
shutdownpublicメソッドWebDataServer 停止時に呼ぶ(バックグラウンドスレッド停止)。
recomputeSyncprivateメソッドrecomputeSync の主要処理を担当します。
scoreChunkprivateメソッドscoreChunk の主要処理を担当します。
computeChunkDetailsSyncprivateメソッドcomputeChunkDetailsSync の主要処理を担当します。
safeEntitiesprivateメソッドsafeEntities の主要処理を担当します。
safeTileEntitiesprivateメソッドsafeTileEntities の主要処理を担当します。
onPlayerCommandpublicイベント処理イベント発生時の分岐と後続処理を担当します。
onServerCommandpublicイベント処理イベント発生時の分岐と後続処理を担当します。
recordCommandprivateメソッドrecordCommand の主要処理を担当します。
purgeOldCmdEventsprivateメソッドpurgeOldCmdEvents の主要処理を担当します。
buildTopSourcesFlatprivateメソッド表示用または出力用のデータを組み立てます。
buildCommandCountsprivateメソッド表示用または出力用のデータを組み立てます。
buildSourcesPayloadprivateメソッド表示用または出力用のデータを組み立てます。
buildSourcesItemsprivateメソッド表示用または出力用のデータを組み立てます。
classifyCommandprivateメソッドclassifyCommand の主要処理を担当します。
parseIntSafeprivateメソッド入力テキストや設定値を解析して内部表現へ変換します。
clampIntprivateメソッドclampInt の主要処理を担当します。
clampLongprivateメソッドclampLong の主要処理を担当します。
buildTopEntitiesprivateメソッド表示用または出力用のデータを組み立てます。
keyprivateメソッドkey の主要処理を担当します。

メソッド詳細

ServerLagService

コンストラクタpublic
public ServerLagService(JavaPlugin plugin, Gson gson, String serverId)

依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。

引数

throws

なし

主要な呼び出し順

requireNonNullgetConfiggetIntgetLongclampIntclampLonggetDoublegetPluginManager

handleLagChunks

メソッドpublic
public String handleLagChunks(Request req, Response res)

入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。

引数

throws

なし

主要な呼び出し順

type

handleChunks

メソッドpublic
public String handleChunks(Request req, Response res)

Compat alias: earlier patches called this handler as handleChunks().

引数

throws

なし

主要な呼び出し順

handleLagChunks

handleChunkDetails

メソッドpublic
public String handleChunkDetails(Request req, Response res)

入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。

引数

throws

なし

主要な呼び出し順

typequeryParamsparseIntSafetoJsonformatnowvalueOfemptyList

handleSources

メソッドpublic
public String handleSources(Request req, Response res)

入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。

引数

throws

なし

主要な呼び出し順

type

shutdown

メソッドpublic
public void shutdown()

WebDataServer 停止時に呼ぶ(バックグラウンドスレッド停止)。

引数

throws

なし

主要な呼び出し順

stop

recomputeSync

メソッドprivate
private void recomputeSync()

recomputeSync の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

isPrimaryThreadcurrentTimeMillisformatofEpochMillipurgeOldCmdEventstoJsonbuildSourcesPayloadgetWorlds

scoreChunk

メソッドprivate
private ChunkCandidate scoreChunk(Chunk c)

scoreChunk の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

getWorldgetNamegetXgetZsafeEntitiesgetTypegetItemStackgetAmount

computeChunkDetailsSync

メソッドprivate
private ChunkDetailsSnapshot computeChunkDetailsSync(String worldName, int cx, int cz)

computeChunkDetailsSync の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

isPrimaryThreademptyformatnowbuildTopSourcesFlatgetWorldisChunkLoadedgetChunkAt

safeEntities

メソッドprivate
private Entity[] safeEntities(Chunk c)

safeEntities の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

getEntities

safeTileEntities

メソッドprivate
private BlockState[] safeTileEntities(Chunk c)

safeTileEntities の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

getTileEntities

onPlayerCommand

イベント処理public
public void onPlayerCommand(PlayerCommandPreprocessEvent e)

イベント発生時の分岐と後続処理を担当します。

引数

throws

なし

主要な呼び出し順

getMessagerecordCommandstartsWithsubstring

onServerCommand

イベント処理public
public void onServerCommand(ServerCommandEvent e)

イベント発生時の分岐と後続処理を担当します。

引数

throws

なし

主要な呼び出し順

getCommandrecordCommand

recordCommand

メソッドprivate
private void recordCommand(String raw)

recordCommand の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

trimisEmptysplittoLowerCasecurrentTimeMillisaddLastsizeremoveFirst

purgeOldCmdEvents

メソッドprivate
private void purgeOldCmdEvents(long now)

purgeOldCmdEvents の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

isEmptypeekFirstremoveFirst

buildTopSourcesFlat

メソッドprivate
private List<Map<String, Object>> buildTopSourcesFlat()

表示用または出力用のデータを組み立てます。

引数

throws

なし

主要な呼び出し順

buildCommandCountsentrySetsortcomparingByValuereversedminsizegetKey

buildCommandCounts

メソッドprivate
private Map<String, Integer> buildCommandCounts()

表示用または出力用のデータを組み立てます。

引数

throws

なし

主要な呼び出し順

merge

buildSourcesPayload

メソッドprivate
private Map<String, Object> buildSourcesPayload(String updatedAt)

表示用または出力用のデータを組み立てます。

引数

throws

なし

主要な呼び出し順

buildSourcesItems

buildSourcesItems

メソッドprivate
private List<Map<String, Object>> buildSourcesItems()

表示用または出力用のデータを組み立てます。

引数

throws

なし

主要な呼び出し順

buildCommandCountsentrySetsortcomparingByValuereversedminsizegetKey

classifyCommand

メソッドprivate
private String classifyCommand(String root)

classifyCommand の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

equalsgetPluginCommandgetPlugingetName

parseIntSafe

メソッドprivatestatic
private static int parseIntSafe(String s, int def)

入力テキストや設定値を解析して内部表現へ変換します。

引数

throws

なし

主要な呼び出し順

parseInt

clampInt

メソッドprivatestatic
private static int clampInt(int v, int min, int max)

clampInt の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

maxmin

clampLong

メソッドprivatestatic
private static long clampLong(long v, long min, long max)

clampLong の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

maxmin

buildTopEntities

メソッドprivatestatic
private static List<String> buildTopEntities(ChunkCandidate c)

表示用または出力用のデータを組み立てます。

引数

throws

なし

主要な呼び出し順

dropssortcomparegetValuesizegetKey

key

メソッドprivatestatic
private static String key(String world, int cx, int cz)

key の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

目立つ内部呼び出しは抽出されませんでした。

代表的な処理フロー

  1. 初期化フロー
    ServerLagService → requireNonNull → getConfig → getInt → getLong → clampInt
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. onPlayerCommand フロー
    onPlayerCommand → getMessage → recordCommand → startsWith → substring
    イベント発生時の分岐と後続処理を担当します。
  3. onServerCommand フロー
    onServerCommand → getCommand → recordCommand
    イベント発生時の分岐と後続処理を担当します。
  4. handleChunkDetails フロー
    handleChunkDetails → type → queryParams → parseIntSafe → toJson → format
    入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。
  5. handleChunks フロー
    handleChunks → handleLagChunks
    Compat alias: earlier patches called this handler as handleChunks().
  6. handleLagChunks フロー
    handleLagChunks → type
    入力やリクエストを受けて、検証・処理・応答までをまとめて担当します。

外部との接点

Web ルート

PUT worldPUT cxPUT czPUT scorePUT baseScorePUT loadMsPUT loadScorePUT entitiesPUT tilesPUT dropsPUT dropAmountPUT hoppersPUT minecartsPUT itemFramesPUT armorStandsPUT xpOrbsPUT topEntitiesPUT spawnersPUT containersPUT blocksPUT updatedAtPUT serverIdPUT itemsPUT tickProfilePUT typePUT countPUT updatedAtPUT worldPUT cxPUT cz

SQL / テーブル

ticka

関連クラス

補足