




















@@ -12,10 +12,6 @@ type TelegramPollingStall = {
12121313export class TelegramPollingLivenessTracker {
1414 #lastGetUpdatesAt: number;
15- #lastApiActivityAt: number;
16- #nextInFlightApiCallId = 0;
17- #latestInFlightApiStartedAt: number | null = null;
18- #inFlightApiStartedAt = new Map<number, number>();
1915 #lastGetUpdatesStartedAt: number | null = null;
2016 #lastGetUpdatesFinishedAt: number | null = null;
2117 #lastGetUpdatesDurationMs: number | null = null;
@@ -27,37 +23,12 @@ export class TelegramPollingLivenessTracker {
27232824constructor(private readonly options: TelegramPollingLivenessTrackerOptions = {}) {
2925this.#lastGetUpdatesAt = this.#now();
30-this.#lastApiActivityAt = this.#now();
3126}
32273328get inFlightGetUpdates() {
3429return this.#inFlightGetUpdates;
3530}
363137-noteApiCallStarted(): number {
38-const startedAt = this.#now();
39-const callId = this.#nextInFlightApiCallId;
40-this.#nextInFlightApiCallId += 1;
41-this.#inFlightApiStartedAt.set(callId, startedAt);
42-this.#latestInFlightApiStartedAt =
43-this.#latestInFlightApiStartedAt == null
44- ? startedAt
45- : Math.max(this.#latestInFlightApiStartedAt, startedAt);
46-return callId;
47-}
48-49-noteApiCallSuccess(at = this.#now()) {
50-this.#lastApiActivityAt = at;
51-}
52-53-noteApiCallFinished(callId: number) {
54-const startedAt = this.#inFlightApiStartedAt.get(callId);
55-this.#inFlightApiStartedAt.delete(callId);
56-if (startedAt != null && this.#latestInFlightApiStartedAt === startedAt) {
57-this.#latestInFlightApiStartedAt = this.#resolveLatestInFlightApiStartedAt();
58-}
59-}
60-6132noteGetUpdatesStarted(payload: unknown, at = this.#now()) {
6233this.#lastGetUpdatesAt = at;
6334this.#lastGetUpdatesStartedAt = at;
@@ -72,7 +43,6 @@ export class TelegramPollingLivenessTracker {
7243this.#lastGetUpdatesDurationMs =
7344this.#lastGetUpdatesStartedAt == null ? null : at - this.#lastGetUpdatesStartedAt;
7445this.#lastGetUpdatesOutcome = Array.isArray(result) ? `ok:${result.length}` : "ok";
75-this.#lastApiActivityAt = at;
7646this.options.onPollSuccess?.(at);
7747}
7848@@ -82,7 +52,6 @@ export class TelegramPollingLivenessTracker {
8252this.#lastGetUpdatesStartedAt == null ? null : at - this.#lastGetUpdatesStartedAt;
8353this.#lastGetUpdatesOutcome = "error";
8454this.#lastGetUpdatesError = formatErrorMessage(err);
85-this.#lastApiActivityAt = at;
8655}
87568857noteGetUpdatesFinished() {
@@ -100,13 +69,7 @@ export class TelegramPollingLivenessTracker {
10069 ? 0
10170 : now - (this.#lastGetUpdatesFinishedAt ?? this.#lastGetUpdatesAt);
10271const elapsed = this.#inFlightGetUpdates > 0 ? activeElapsed : idleElapsed;
103-const apiLivenessAt =
104-this.#latestInFlightApiStartedAt == null
105- ? this.#lastApiActivityAt
106- : Math.max(this.#lastApiActivityAt, this.#latestInFlightApiStartedAt);
107-const apiElapsed = now - apiLivenessAt;
108-109-if (elapsed <= params.thresholdMs || apiElapsed <= params.thresholdMs) {
72+if (elapsed <= params.thresholdMs) {
11073return null;
11174}
11275if (this.#stallDiagLoggedAt && now - this.#stallDiagLoggedAt < params.thresholdMs / 2) {
@@ -129,15 +92,6 @@ export class TelegramPollingLivenessTracker {
12992return `inFlight=${this.#inFlightGetUpdates} outcome=${this.#lastGetUpdatesOutcome} startedAt=${this.#lastGetUpdatesStartedAt ?? "n/a"} finishedAt=${this.#lastGetUpdatesFinishedAt ?? "n/a"} durationMs=${this.#lastGetUpdatesDurationMs ?? "n/a"} offset=${this.#lastGetUpdatesOffset ?? "n/a"}${error}`;
13093}
13194132- #resolveLatestInFlightApiStartedAt(): number | null {
133-let newestStartedAt: number | null = null;
134-for (const activeStartedAt of this.#inFlightApiStartedAt.values()) {
135-newestStartedAt =
136-newestStartedAt == null ? activeStartedAt : Math.max(newestStartedAt, activeStartedAt);
137-}
138-return newestStartedAt;
139-}
140-14195 #now(): number {
14296return this.options.now?.() ?? Date.now();
14397}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。