add inbound activity logger for debugging
This commit is contained in:
parent
2d7918a9b7
commit
b65b4ecadc
16 changed files with 414 additions and 10 deletions
|
|
@ -80,7 +80,9 @@ import {
|
|||
MiUserPublickey,
|
||||
MiUserSecurityKey,
|
||||
MiWebhook,
|
||||
NoteEdit
|
||||
NoteEdit,
|
||||
SkActivityContext,
|
||||
SkActivityLog,
|
||||
} from './_.js';
|
||||
import type { DataSource } from 'typeorm';
|
||||
|
||||
|
|
@ -126,6 +128,18 @@ const $latestNotesRepository: Provider = {
|
|||
inject: [DI.db],
|
||||
};
|
||||
|
||||
const $activityContextRepository: Provider = {
|
||||
provide: DI.activityContextRepository,
|
||||
useFactory: (db: DataSource) => db.getRepository(SkActivityContext).extend(miRepository as MiRepository<SkActivityContext>),
|
||||
inject: [DI.db],
|
||||
};
|
||||
|
||||
const $activityLogsRepository: Provider = {
|
||||
provide: DI.activityLogsRepository,
|
||||
useFactory: (db: DataSource) => db.getRepository(SkActivityLog).extend(miRepository as MiRepository<SkActivityLog>),
|
||||
inject: [DI.db],
|
||||
};
|
||||
|
||||
const $noteFavoritesRepository: Provider = {
|
||||
provide: DI.noteFavoritesRepository,
|
||||
useFactory: (db: DataSource) => db.getRepository(MiNoteFavorite).extend(miRepository as MiRepository<MiNoteFavorite>),
|
||||
|
|
@ -526,6 +540,8 @@ const $noteScheduleRepository: Provider = {
|
|||
$appsRepository,
|
||||
$avatarDecorationsRepository,
|
||||
$latestNotesRepository,
|
||||
$activityContextRepository,
|
||||
$activityLogsRepository,
|
||||
$noteFavoritesRepository,
|
||||
$noteThreadMutingsRepository,
|
||||
$noteReactionsRepository,
|
||||
|
|
@ -600,6 +616,8 @@ const $noteScheduleRepository: Provider = {
|
|||
$appsRepository,
|
||||
$avatarDecorationsRepository,
|
||||
$latestNotesRepository,
|
||||
$activityContextRepository,
|
||||
$activityLogsRepository,
|
||||
$noteFavoritesRepository,
|
||||
$noteThreadMutingsRepository,
|
||||
$noteReactionsRepository,
|
||||
|
|
|
|||
24
packages/backend/src/models/SkActivityContext.ts
Normal file
24
packages/backend/src/models/SkActivityContext.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { Column, PrimaryColumn, Entity, Index } from 'typeorm';
|
||||
|
||||
@Entity('activity_context')
|
||||
export class SkActivityContext {
|
||||
@PrimaryColumn('text')
|
||||
@Index()
|
||||
public md5: string;
|
||||
|
||||
@Column('jsonb')
|
||||
// https://github.com/typeorm/typeorm/issues/8559
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
public json: any;
|
||||
|
||||
constructor(data?: Partial<SkActivityContext>) {
|
||||
if (data) {
|
||||
Object.assign(this, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
82
packages/backend/src/models/SkActivityLog.ts
Normal file
82
packages/backend/src/models/SkActivityLog.ts
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
|
||||
import { SkActivityContext } from '@/models/SkActivityContext.js';
|
||||
import { MiUser } from '@/models/_.js';
|
||||
import { id } from './util/id.js';
|
||||
|
||||
@Entity('activity_log')
|
||||
export class SkActivityLog {
|
||||
@PrimaryColumn(id())
|
||||
public id: string;
|
||||
|
||||
@Index()
|
||||
@Column('timestamptz')
|
||||
public at: Date;
|
||||
|
||||
@Column({
|
||||
type: 'text',
|
||||
name: 'key_id',
|
||||
})
|
||||
public keyId: string;
|
||||
|
||||
@Index()
|
||||
@Column('text')
|
||||
public host: string;
|
||||
|
||||
@Column('boolean')
|
||||
public verified: boolean;
|
||||
|
||||
@Column('boolean')
|
||||
public accepted: boolean;
|
||||
|
||||
@Column('text')
|
||||
public result: string;
|
||||
|
||||
@Column('jsonb')
|
||||
// https://github.com/typeorm/typeorm/issues/8559
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
public activity: any;
|
||||
|
||||
@Column({
|
||||
type: 'text',
|
||||
name: 'context_hash',
|
||||
nullable: true,
|
||||
})
|
||||
public contextHash: string | null;
|
||||
|
||||
@ManyToOne(() => SkActivityContext, {
|
||||
onDelete: 'CASCADE',
|
||||
nullable: true,
|
||||
})
|
||||
@JoinColumn({
|
||||
name: 'context_hash',
|
||||
})
|
||||
public context: SkActivityContext | null;
|
||||
|
||||
@Column({
|
||||
type: 'varchar' as const,
|
||||
length: 32,
|
||||
name: 'auth_user_id',
|
||||
nullable: true,
|
||||
})
|
||||
public authUserId: string | null;
|
||||
|
||||
@ManyToOne(() => MiUser, {
|
||||
onDelete: 'CASCADE',
|
||||
nullable: true,
|
||||
})
|
||||
@JoinColumn({
|
||||
name: 'auth_user_id',
|
||||
})
|
||||
public authUser: MiUser | null;
|
||||
|
||||
constructor(data?: Partial<SkActivityLog>) {
|
||||
if (data) {
|
||||
Object.assign(this, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -82,6 +82,8 @@ import { NoteEdit } from '@/models/NoteEdit.js';
|
|||
import { MiBubbleGameRecord } from '@/models/BubbleGameRecord.js';
|
||||
import { MiReversiGame } from '@/models/ReversiGame.js';
|
||||
import { MiNoteSchedule } from '@/models/NoteSchedule.js';
|
||||
import { SkActivityLog } from '@/models/SkActivityLog.js';
|
||||
import { SkActivityContext } from './SkActivityContext.js';
|
||||
import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js';
|
||||
|
||||
export interface MiRepository<T extends ObjectLiteral> {
|
||||
|
|
@ -129,6 +131,8 @@ export const miRepository = {
|
|||
|
||||
export {
|
||||
SkLatestNote,
|
||||
SkActivityContext,
|
||||
SkActivityLog,
|
||||
MiAbuseUserReport,
|
||||
MiAbuseReportNotificationRecipient,
|
||||
MiAccessToken,
|
||||
|
|
@ -229,6 +233,8 @@ export type HashtagsRepository = Repository<MiHashtag> & MiRepository<MiHashtag>
|
|||
export type InstancesRepository = Repository<MiInstance> & MiRepository<MiInstance>;
|
||||
export type MetasRepository = Repository<MiMeta> & MiRepository<MiMeta>;
|
||||
export type LatestNotesRepository = Repository<SkLatestNote> & MiRepository<SkLatestNote>;
|
||||
export type ActivityContextRepository = Repository<SkActivityContext> & MiRepository<SkActivityContext>;
|
||||
export type ActivityLogsRepository = Repository<SkActivityLog> & MiRepository<SkActivityLog>;
|
||||
export type ModerationLogsRepository = Repository<MiModerationLog> & MiRepository<MiModerationLog>;
|
||||
export type MutingsRepository = Repository<MiMuting> & MiRepository<MiMuting>;
|
||||
export type RenoteMutingsRepository = Repository<MiRenoteMuting> & MiRepository<MiRenoteMuting>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue