






















@@ -100,6 +100,11 @@ type TelegramQaScenarioResult = {
100100title: string;
101101status: "pass" | "fail";
102102details: string;
103+rttMs?: number;
104+requestStartedAt?: string;
105+responseObservedAt?: string;
106+sentMessageId?: number;
107+responseMessageId?: number;
103108};
104109105110type TelegramQaCanaryPhase = "sut_reply_timeout" | "sut_reply_not_threaded" | "sut_reply_empty";
@@ -608,7 +613,7 @@ async function waitForObservedMessage(params: {
608613};
609614params.observedMessages.push(observedMessage);
610615if (matchedScenario) {
611-return { message: observedMessage, nextOffset: offset };
616+return { message: observedMessage, nextOffset: offset, observedAtMs: Date.now() };
612617}
613618}
614619}
@@ -671,6 +676,9 @@ function renderTelegramQaMarkdown(params: {
671676lines.push("");
672677lines.push(`- Status: ${scenario.status}`);
673678lines.push(`- Details: ${scenario.details}`);
679+if (scenario.rttMs !== undefined) {
680+lines.push(`- RTT: ${scenario.rttMs}ms`);
681+}
674682lines.push("");
675683}
676684if (params.cleanupIssues.length > 0) {
@@ -796,11 +804,13 @@ async function runCanary(params: {
796804observedMessages: TelegramObservedMessage[];
797805}) {
798806const offset = await flushTelegramUpdates(params.driverToken);
807+const requestStartedAtMs = Date.now();
799808const driverMessage = await sendGroupMessage(
800809params.driverToken,
801810params.groupId,
802811`/help@${params.sutUsername}`,
803812);
813+const requestStartedAt = new Date(requestStartedAtMs).toISOString();
804814let firstUnthreadedReply:
805815| Pick<TelegramObservedMessage, "messageId" | "replyToMessageId" | "text">
806816| undefined;
@@ -871,6 +881,13 @@ async function runCanary(params: {
871881},
872882);
873883}
884+return {
885+ requestStartedAt,
886+responseObservedAt: new Date(sutObserved.observedAtMs).toISOString(),
887+rttMs: sutObserved.observedAtMs - requestStartedAtMs,
888+sentMessageId: driverMessage.message_id,
889+responseMessageId: sutObserved.message.messageId,
890+};
874891}
875892876893function canaryFailureMessage(params: {
@@ -1045,13 +1062,26 @@ export async function runTelegramQaLive(params: {
10451062assertLeaseHealthy();
10461063try {
10471064writeTelegramQaProgress(progressEnabled, "canary start");
1048-await runCanary({
1065+const canaryTiming = await runCanary({
10491066driverToken: runtimeEnv.driverToken,
10501067groupId: runtimeEnv.groupId,
10511068 sutUsername,
10521069sutBotId: sutIdentity.id,
10531070 observedMessages,
10541071});
1072+scenarioResults.push({
1073+id: "telegram-canary",
1074+title: "Telegram canary",
1075+status: "pass",
1076+details: redactPublicMetadata
1077+ ? `reply matched in ${canaryTiming.rttMs}ms`
1078+ : `reply message ${canaryTiming.responseMessageId} matched in ${canaryTiming.rttMs}ms`,
1079+rttMs: canaryTiming.rttMs,
1080+requestStartedAt: canaryTiming.requestStartedAt,
1081+responseObservedAt: canaryTiming.responseObservedAt,
1082+sentMessageId: redactPublicMetadata ? undefined : canaryTiming.sentMessageId,
1083+responseMessageId: redactPublicMetadata ? undefined : canaryTiming.responseMessageId,
1084+});
10551085writeTelegramQaProgress(progressEnabled, "canary pass");
10561086} catch (error) {
10571087canaryFailure = canaryFailureMessage({
@@ -1087,11 +1117,13 @@ export async function runTelegramQaLive(params: {
10871117assertLeaseHealthy();
10881118const scenarioRun = scenario.buildRun(sutUsername);
10891119try {
1120+const requestStartedAtMs = Date.now();
10901121const sent = await sendGroupMessage(
10911122runtimeEnv.driverToken,
10921123runtimeEnv.groupId,
10931124scenarioRun.input,
10941125);
1126+const requestStartedAt = new Date(requestStartedAtMs).toISOString();
10951127const matched = await waitForObservedMessage({
10961128token: runtimeEnv.driverToken,
10971129initialOffset: driverOffset,
@@ -1116,13 +1148,19 @@ export async function runTelegramQaLive(params: {
11161148expectedTextIncludes: scenarioRun.expectedTextIncludes,
11171149message: matched.message,
11181150});
1151+const rttMs = matched.observedAtMs - requestStartedAtMs;
11191152const result = {
11201153id: scenario.id,
11211154title: scenario.title,
11221155status: "pass",
11231156details: redactPublicMetadata
1124- ? "reply matched"
1125- : `reply message ${matched.message.messageId} matched`,
1157+ ? `reply matched in ${rttMs}ms`
1158+ : `reply message ${matched.message.messageId} matched in ${rttMs}ms`,
1159+ rttMs,
1160+ requestStartedAt,
1161+responseObservedAt: new Date(matched.observedAtMs).toISOString(),
1162+sentMessageId: redactPublicMetadata ? undefined : sent.message_id,
1163+responseMessageId: redactPublicMetadata ? undefined : matched.message.messageId,
11261164} satisfies TelegramQaScenarioResult;
11271165scenarioResults.push(result);
11281166writeTelegramQaProgress(
@@ -1295,4 +1333,5 @@ export const __testing = {
12951333 sanitizeTelegramQaProgressValue,
12961334 shouldLogTelegramQaLiveProgress,
12971335 formatTelegramQaProgressDetails,
1336+ renderTelegramQaMarkdown,
12981337};
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。