From e2d28f8ac3a648eea5597db49ff27aae4de12481 Mon Sep 17 00:00:00 2001 From: zk Date: Mon, 18 May 2026 23:45:04 +0100 Subject: [PATCH] fix: ms --- docker/myt-grpc-probe.sh | 8 +------ .../server/src/scripts/myt-grpc-probe.ts | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/docker/myt-grpc-probe.sh b/docker/myt-grpc-probe.sh index 5d704e73b..43e5b131f 100755 --- a/docker/myt-grpc-probe.sh +++ b/docker/myt-grpc-probe.sh @@ -1,10 +1,5 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh # MYT gRPC probe — run inside the tachi-server container. -# -# kubectl exec -it deploy/tachi-server -- sh /app/docker/myt-grpc-probe.sh \ -# --access-code "YOUR_ACCESS_CODE" --game chunithm -# -# Or paste the block from the bottom of this file if the script is not on the image yet. set -euo pipefail @@ -12,7 +7,6 @@ TACHI_ROOT="${TACHI_ROOT:-/app}" cd "${TACHI_ROOT}/typescript/server" exec bun run src/scripts/myt-grpc-probe.ts -- "$@" -# --- paste into `kubectl exec ... -- sh` if this file is not on the image yet --- # set -euo pipefail # cd /app/typescript/server # bun run src/scripts/myt-grpc-probe.ts -- --access-code "YOUR_ACCESS_CODE" --game chunithm diff --git a/typescript/server/src/scripts/myt-grpc-probe.ts b/typescript/server/src/scripts/myt-grpc-probe.ts index 1093c8aae..94a373433 100644 --- a/typescript/server/src/scripts/myt-grpc-probe.ts +++ b/typescript/server/src/scripts/myt-grpc-probe.ts @@ -133,17 +133,23 @@ async function probeLookup( } } +function sleep(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + async function probeGetPlaylog( transport: Transport, profileApiId: string, game: ProbeGame, maxItems: number, + pauseMs: number, ): Promise { const started = performance.now(); let count = 0; let firstItemMs: number | undefined; - log("stream", `GetPlaylog (max ${maxItems} items) profileApiId=${profileApiId} ...`); + const pauseNote = pauseMs > 0 ? `, pause ${pauseMs}ms/item (import-like)` : ""; + log("stream", `GetPlaylog (max ${maxItems} items${pauseNote}) profileApiId=${profileApiId} ...`); const stream = createPlaylogStream(transport, profileApiId, game); @@ -155,6 +161,10 @@ async function probeGetPlaylog( log("stream", `First item after ${firstItemMs}ms`, { sample: summarizeItem(item) }); } + if (pauseMs > 0) { + await sleep(pauseMs); + } + if (count >= maxItems) { log("stream", `Stopping after ${count} item(s) (--max-items)`); break; @@ -253,6 +263,7 @@ myt-grpc-probe — test MYT unary Lookup vs streaming GetPlaylog --access-code Card access code (runs Lookup first) --game chunithm | maimaidx | ongeki | wacca (default: chunithm) --max-items Stop stream after N items (default: 5) + --pause-ms Sleep after each item (simulate slow score import) --lookup-only Skip GetPlaylog --stream-only Skip Lookup (requires --profile-api-id) -h, --help @@ -262,6 +273,7 @@ Examples (inside container): cd /app/typescript/server bun run src/scripts/myt-grpc-probe.ts -- --access-code "YOUR_CODE" --game chunithm bun run src/scripts/myt-grpc-probe.ts -- --profile-api-id "abc123" --max-items 1 + bun run src/scripts/myt-grpc-probe.ts -- --profile-api-id "abc123" --max-items 500 --pause-ms 50 `); } @@ -272,6 +284,7 @@ async function main(): Promise { "access-code": { type: "string" }, game: { type: "string", default: "chunithm" }, "max-items": { type: "string", default: "5" }, + "pause-ms": { type: "string", default: "0" }, "lookup-only": { type: "boolean", default: false }, "stream-only": { type: "boolean", default: false }, help: { type: "boolean", short: "h", default: false }, @@ -294,6 +307,11 @@ async function main(): Promise { fail("--max-items must be a positive integer"); } + const pauseMs = Number.parseInt(values["pause-ms"] ?? "0", 10); + if (!Number.isFinite(pauseMs) || pauseMs < 0) { + fail("--pause-ms must be a non-negative integer"); + } + printRuntimeInfo(); const transport = createTransport(); @@ -318,7 +336,7 @@ async function main(): Promise { fail("Need --profile-api-id or --access-code for GetPlaylog"); } - await probeGetPlaylog(transport, profileApiId, game, maxItems); + await probeGetPlaylog(transport, profileApiId, game, maxItems, pauseMs); log("done", "All phases OK — exit 0"); }