log inbound activity duration

This commit is contained in:
Hazelnoot 2024-11-18 01:18:45 -05:00
parent 07cd01ec34
commit e35e92beb9
3 changed files with 35 additions and 4 deletions

View file

@ -0,0 +1,19 @@
/*
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
export class ActivityLogTiming1731909785724 {
name = 'ActivityLogTiming1731909785724'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "activity_log" ADD "duration" double precision NOT NULL DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE "activity_log" ALTER COLUMN "result" DROP NOT NULL`);
}
async down(queryRunner) {
await queryRunner.query(`UPDATE "activity_log" SET "result" = 'not processed' WHERE "result" IS NULL`);
await queryRunner.query(`ALTER TABLE "activity_log" ALTER COLUMN "result" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "activity_log" DROP COLUMN "duration"`);
}
}

View file

@ -20,6 +20,12 @@ export class SkActivityLog {
@Column('timestamptz') @Column('timestamptz')
public at: Date; public at: Date;
/**
* Processing duration in milliseconds
*/
@Column('double precision', { default: 0 })
public duration = 0;
@Column({ @Column({
type: 'text', type: 'text',
name: 'key_id', name: 'key_id',
@ -36,8 +42,8 @@ export class SkActivityLog {
@Column('boolean') @Column('boolean')
public accepted: boolean; public accepted: boolean;
@Column('text') @Column('text', { nullable: true })
public result: string; public result: string | null = null;
@Column('jsonb') @Column('jsonb')
// https://github.com/typeorm/typeorm/issues/8559 // https://github.com/typeorm/typeorm/issues/8559

View file

@ -98,9 +98,16 @@ export class InboxProcessorService implements OnApplicationShutdown {
} }
try { try {
const startTime = process.hrtime.bigint();
const result = await this._process(job, log); const result = await this._process(job, log);
const endTime = process.hrtime.bigint();
// Truncate nanoseconds to microseconds, then scale to milliseconds.
// 123,456,789 ns -> 123,456 us -> 123.456 ms
const duration = Number((endTime - startTime) / 1000n) / 1000;
log.accepted = result.startsWith('ok'); log.accepted = result.startsWith('ok');
log.duration = duration;
log.result = result; log.result = result;
return result; return result;
@ -249,7 +256,7 @@ export class InboxProcessorService implements OnApplicationShutdown {
delete activity.id; delete activity.id;
} }
// Attach log to verified user // Record verified user in log
if (log) { if (log) {
log.verified = true; log.verified = true;
log.authUser = authUser.user; log.authUser = authUser.user;
@ -361,7 +368,6 @@ export class InboxProcessorService implements OnApplicationShutdown {
at: new Date(), at: new Date(),
verified: false, verified: false,
accepted: false, accepted: false,
result: 'not processed',
activity, activity,
keyId, keyId,
host, host,