41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
|
|
export class RedisIntegration {
|
||
|
|
constructor(client, projectName, apiBaseUrl) {
|
||
|
|
this.client = client;
|
||
|
|
this.projectName = projectName;
|
||
|
|
this.apiBaseUrl = apiBaseUrl;
|
||
|
|
this.heartbeatKey = '项目心跳';
|
||
|
|
this.logKey = `${projectName}_项目控制台`;
|
||
|
|
}
|
||
|
|
|
||
|
|
async info(message, context) {
|
||
|
|
const payload = {
|
||
|
|
timestamp: new Date().toISOString(),
|
||
|
|
level: 'info',
|
||
|
|
message,
|
||
|
|
metadata: context || undefined
|
||
|
|
};
|
||
|
|
await this.client.rPush(this.logKey, JSON.stringify(payload));
|
||
|
|
}
|
||
|
|
|
||
|
|
async error(message, context) {
|
||
|
|
const payload = {
|
||
|
|
timestamp: new Date().toISOString(),
|
||
|
|
level: 'error',
|
||
|
|
message,
|
||
|
|
metadata: context || undefined
|
||
|
|
};
|
||
|
|
await this.client.rPush(this.logKey, JSON.stringify(payload));
|
||
|
|
}
|
||
|
|
|
||
|
|
startHeartbeat() {
|
||
|
|
setInterval(() => {
|
||
|
|
const payload = {
|
||
|
|
projectName: this.projectName,
|
||
|
|
apiBaseUrl: this.apiBaseUrl,
|
||
|
|
lastActiveAt: Date.now()
|
||
|
|
};
|
||
|
|
this.client.rPush(this.heartbeatKey, JSON.stringify(payload));
|
||
|
|
}, 3000);
|
||
|
|
}
|
||
|
|
}
|