mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
feat: 追踪退出
This commit is contained in:
@@ -2,17 +2,25 @@ import https from 'node:https';
|
|||||||
import { napCatVersion } from './version';
|
import { napCatVersion } from './version';
|
||||||
|
|
||||||
export class umamiTrace {
|
export class umamiTrace {
|
||||||
|
static napcatVersion = napCatVersion;
|
||||||
|
static qqversion = '1.0.0';
|
||||||
|
|
||||||
|
static init(qqversion: string) {
|
||||||
|
this.qqversion = qqversion;
|
||||||
|
setInterval(() => {
|
||||||
|
this.trackEvent('heartbeat');
|
||||||
|
}, 5 * 60 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
static trackEvent(eventName: string, info?: string) {
|
static trackEvent(eventName: string, info?: string) {
|
||||||
const StatesData = {
|
const StatesData = {
|
||||||
type: 'event',
|
type: 'event',
|
||||||
payload: {
|
payload: {
|
||||||
'website': '596cbbb2-1740-4373-a807-cf3d0637bfa7',
|
'website': '596cbbb2-1740-4373-a807-cf3d0637bfa7',
|
||||||
'hostname': 'trace.napneko.icu',
|
'hostname': 'trace.napneko.icu',
|
||||||
'language': process.env.LANG || 'en-US',
|
'title': 'NapCat ' + umamiTrace.napcatVersion,
|
||||||
'title': 'NapCat ' + napCatVersion,
|
'url': '/' + umamiTrace.qqversion + '/' + umamiTrace.napcatVersion + '/' + eventName,
|
||||||
'url': '/' + napCatVersion + '/' + eventName,
|
'referrer': 'https://napcat.onebot.napneko.icu/' + umamiTrace.qqversion + '/' + umamiTrace.napcatVersion + '/' + info,
|
||||||
'referrer': 'https://trace.napneko.icu/' + napCatVersion,
|
|
||||||
'info': info
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -24,19 +24,26 @@ export async function NCoreInitFramework(
|
|||||||
) {
|
) {
|
||||||
//在进入本层前是否登录未进行判断
|
//在进入本层前是否登录未进行判断
|
||||||
console.log('NapCat Framework App Loading...');
|
console.log('NapCat Framework App Loading...');
|
||||||
umamiTrace.trackEvent('framework/login');
|
|
||||||
process.on('uncaughtException', (err) => {
|
process.on('uncaughtException', (err) => {
|
||||||
umamiTrace.trackEvent('framework/error', err.message);
|
umamiTrace.trackEvent('framework/error', err.message);
|
||||||
console.log('[NapCat] [Error] Unhandled Exception:', err.message);
|
console.log('[NapCat] [Error] Unhandled Exception:', err.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
process.on('unhandledRejection', (reason, promise) => {
|
process.on('unhandledRejection', (reason, promise) => {
|
||||||
console.log('[NapCat] [Error] unhandledRejection:', reason);
|
console.log('[NapCat] [Error] unhandledRejection:', reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
process.on('exit', (code: number) => {
|
||||||
|
umamiTrace.trackEvent('framework/exit', code.toString());
|
||||||
|
});
|
||||||
|
|
||||||
const pathWrapper = new NapCatPathWrapper();
|
const pathWrapper = new NapCatPathWrapper();
|
||||||
const logger = new LogWrapper(pathWrapper.logsPath);
|
const logger = new LogWrapper(pathWrapper.logsPath);
|
||||||
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
||||||
const wrapper = loadQQWrapper(basicInfoWrapper.getFullQQVesion());
|
const wrapper = loadQQWrapper(basicInfoWrapper.getFullQQVesion());
|
||||||
|
umamiTrace.init(basicInfoWrapper.getFullQQVesion());
|
||||||
|
umamiTrace.trackEvent('framework/login');
|
||||||
//直到登录成功后,执行下一步
|
//直到登录成功后,执行下一步
|
||||||
const selfInfo = await new Promise<SelfInfo>((resolveSelfInfo) => {
|
const selfInfo = await new Promise<SelfInfo>((resolveSelfInfo) => {
|
||||||
const loginListener = new NodeIKernelLoginListener();
|
const loginListener = new NodeIKernelLoginListener();
|
||||||
|
@@ -270,10 +270,13 @@ export async function NCoreInitShell() {
|
|||||||
const pathWrapper = new NapCatPathWrapper();
|
const pathWrapper = new NapCatPathWrapper();
|
||||||
const logger = new LogWrapper(pathWrapper.logsPath);
|
const logger = new LogWrapper(pathWrapper.logsPath);
|
||||||
handleUncaughtExceptions(logger);
|
handleUncaughtExceptions(logger);
|
||||||
umamiTrace.trackEvent('shell/boot');
|
process.on('exit', (code: number) => {
|
||||||
|
umamiTrace.trackEvent('framework/exit', code.toString());
|
||||||
|
});
|
||||||
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
||||||
const wrapper = loadQQWrapper(basicInfoWrapper.getFullQQVesion());
|
const wrapper = loadQQWrapper(basicInfoWrapper.getFullQQVesion());
|
||||||
|
umamiTrace.init(basicInfoWrapper.getFullQQVesion());
|
||||||
|
umamiTrace.trackEvent('shell/boot');
|
||||||
const o3Service = wrapper.NodeIO3MiscService.get();
|
const o3Service = wrapper.NodeIO3MiscService.get();
|
||||||
o3Service.addO3MiscListener(new NodeIO3MiscListener());
|
o3Service.addO3MiscListener(new NodeIO3MiscListener());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user