mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
202 lines
6.0 KiB
TypeScript
202 lines
6.0 KiB
TypeScript
import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
|
|
import Route from "../../Types/API/Route";
|
|
import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
|
|
import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
|
|
import AnalyticsTableColumn from "../../Types/AnalyticsDatabase/TableColumn";
|
|
import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
|
|
import { JSONObject } from "../../Types/JSON";
|
|
import ObjectID from "../../Types/ObjectID";
|
|
import Permission from "../../Types/Permission";
|
|
|
|
export default class MonitorLog extends AnalyticsBaseModel {
|
|
public constructor() {
|
|
const projectIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
|
|
key: "projectId",
|
|
title: "Project ID",
|
|
description: "ID of project",
|
|
required: true,
|
|
type: TableColumnType.ObjectID,
|
|
isTenantId: true,
|
|
accessControl: {
|
|
read: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.ReadProjectMonitor,
|
|
],
|
|
create: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.CreateProjectMonitor,
|
|
],
|
|
update: [],
|
|
},
|
|
});
|
|
|
|
const monitorIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
|
|
key: "monitorId",
|
|
title: "Monitor ID",
|
|
description: "ID of the monitor which this logs belongs to",
|
|
required: true,
|
|
type: TableColumnType.ObjectID,
|
|
accessControl: {
|
|
read: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.ReadProjectMonitor,
|
|
],
|
|
create: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.CreateProjectMonitor,
|
|
],
|
|
update: [],
|
|
},
|
|
});
|
|
|
|
const timeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
|
|
key: "time",
|
|
title: "Time",
|
|
description: "When was the log created?",
|
|
required: true,
|
|
type: TableColumnType.DateTime64,
|
|
accessControl: {
|
|
read: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.ReadProjectMonitor,
|
|
],
|
|
create: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.CreateProjectMonitor,
|
|
],
|
|
update: [],
|
|
},
|
|
});
|
|
|
|
const logBodyColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
|
|
key: "logBody",
|
|
title: "Log Body",
|
|
description: "The body of the log",
|
|
required: true,
|
|
defaultValue: {},
|
|
type: TableColumnType.JSON,
|
|
codec: { codec: "ZSTD", level: 3 },
|
|
accessControl: {
|
|
read: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.ReadProjectMonitor,
|
|
],
|
|
create: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.CreateProjectMonitor,
|
|
],
|
|
update: [],
|
|
},
|
|
});
|
|
|
|
const retentionDateColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
|
|
key: "retentionDate",
|
|
title: "Retention Date",
|
|
description:
|
|
"Date after which this row is eligible for TTL deletion, computed at ingest time as time + service.retainTelemetryDataForDays",
|
|
required: true,
|
|
type: TableColumnType.Date,
|
|
defaultValue: undefined,
|
|
});
|
|
|
|
super({
|
|
tableName: AnalyticsTableName.MonitorLog,
|
|
tableEngine: AnalyticsTableEngine.MergeTree,
|
|
singularName: "Monitor Log",
|
|
accessControl: {
|
|
read: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.ReadProjectMonitor,
|
|
],
|
|
create: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.CreateProjectMonitor,
|
|
],
|
|
update: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.EditProjectMonitor,
|
|
],
|
|
delete: [
|
|
Permission.ProjectOwner,
|
|
Permission.ProjectAdmin,
|
|
Permission.ProjectMember,
|
|
Permission.DeleteProjectMonitor,
|
|
],
|
|
},
|
|
pluralName: "Monitor Logs",
|
|
crudApiPath: new Route("/monitor-log"),
|
|
tableColumns: [
|
|
projectIdColumn,
|
|
monitorIdColumn,
|
|
timeColumn,
|
|
logBodyColumn,
|
|
retentionDateColumn,
|
|
],
|
|
projections: [],
|
|
sortKeys: ["projectId", "time", "monitorId"],
|
|
primaryKeys: ["projectId", "time", "monitorId"],
|
|
partitionKey: "sipHash64(projectId) % 16",
|
|
ttlExpression: "retentionDate DELETE",
|
|
});
|
|
}
|
|
|
|
public get projectId(): ObjectID | undefined {
|
|
return this.getColumnValue("projectId") as ObjectID | undefined;
|
|
}
|
|
|
|
public set projectId(v: ObjectID | undefined) {
|
|
this.setColumnValue("projectId", v);
|
|
}
|
|
|
|
public get monitorId(): ObjectID | undefined {
|
|
return this.getColumnValue("monitorId") as ObjectID | undefined;
|
|
}
|
|
|
|
public set monitorId(v: ObjectID | undefined) {
|
|
this.setColumnValue("monitorId", v);
|
|
}
|
|
|
|
public get time(): Date | undefined {
|
|
return this.getColumnValue("time") as Date | undefined;
|
|
}
|
|
public set time(v: Date | undefined) {
|
|
this.setColumnValue("time", v);
|
|
}
|
|
public get logBody(): JSONObject | undefined {
|
|
return this.getColumnValue("logBody") as JSONObject | undefined;
|
|
}
|
|
public set logBody(v: JSONObject | undefined) {
|
|
this.setColumnValue("logBody", v);
|
|
}
|
|
|
|
public get retentionDate(): Date | undefined {
|
|
return this.getColumnValue("retentionDate") as Date | undefined;
|
|
}
|
|
|
|
public set retentionDate(v: Date | undefined) {
|
|
this.setColumnValue("retentionDate", v);
|
|
}
|
|
}
|