Compare commits

...

2 Commits

Author SHA1 Message Date
ad15cf73bf Merge branch 'bugfix' of http://git.legu.cc/qixin/HJ_Server into bugfix 2024-01-03 10:36:35 +08:00
3c380f1e55 数据监控 2024-01-03 10:36:17 +08:00
6 changed files with 143 additions and 4 deletions

View File

@ -1,8 +1,8 @@
import { Db, MongoClient } from "mongodb";
import { Logger } from "tsrpc";
let logDB:Db;
let errorLogDB:Db;
export let logDB:Db;
export let errorLogDB:Db;
/**
* G123的测试服
@ -11,7 +11,7 @@ function isG123stg(){
return G.config.mongodbUrl.indexOf('.stg.')!=-1;
}
async function connGameLogDB() {
export async function connGameLogDB() {
console.log('connect gamelog mongodb ......');
let logDBUrl:string;
if(G.config.isG123){
@ -73,6 +73,28 @@ async function addErrorLog(errData:any){
}
}
export async function addWatchDogLog(data:object[]){
try{
//g123测试版连接不上db不抓取
if(!data)return;
if(isG123stg())return;
let log = {
serverId : G.config.serverId,
pid : process.pid,
cTime : Math.floor(Date.now()/1000)
}
data.map(item=>{
Object.assign(item,log)
})
if(!errorLogDB){
await connGameLogDB();
}
errorLogDB.collection('nodeJsErrorLog').insertMany(data);
}catch(e){
console.error('addWatchDogLog',e);
}
}
/**
*
* @param uid uid

7
src/oss/watchdog.json Normal file
View File

@ -0,0 +1,7 @@
[
{
"key":"task/Open",
"limit":0,
"tips":"任务打开次数超过3次"
}
]

View File

@ -38,6 +38,7 @@ export type schedulerType =
| 'hbzb_zbs_group'
| 'wzry_zuanshi16to8'
| "cross_email_pull"
| "watch_dog"
| "xiaofeijingsai_local_ctor";
export class SchedulerManage {

View File

@ -0,0 +1,107 @@
import { resolve } from "path";
import { PublicShared } from "../../shared/public/public";
import {Scheduler, schedulerType} from "./scheduler";
import { existsSync, readFileSync } from "fs";
import { addWatchDogLog, errorLogDB } from "../../gameLog";
export class WatchDog extends Scheduler {
id: schedulerType = "watch_dog";
time = 420; // 监控频率每x秒一次
name = "数据看门狗"
type = ""
async read() {
await this.ctorStartTime();
this.isReady = false;
this.startTime = this.nextTime;
this.start();
}
async start() {
let confFile = resolve(__dirname, '../../oss/watchdog.json');
if (!existsSync(confFile)) {
//配置文件不存在
await this.ctorStartTime()
return;
}
let conf;
try{
conf = await JSON.parse(readFileSync(confFile, 'utf-8'));
}catch(e){
//配置文件不是json
await this.ctorStartTime()
return;
}
//获取今天0点之后在线的玩家
let users = await G.mongodb.collection("user").find({
lv : {$gt:10},
newonlinetime:{$gt: PublicShared.getToDayZeroTime() }
},{
projection:{
uid:1,
name:1,
lv:1,
vip:1,
sid:1
}
}).toArray();
if(!users.length){
//没有符合的玩家
await this.ctorStartTime()
return;
}
let uids = users.map(i => i.uid);
let uinfo = {};
users.map(i => uinfo[i.uid] = i);
let actionLogs = await G.mongodb.collection("actionLog").find({
type:'day',
uid: {$in: uids},
},{
projection:{
uid:1,
log:1
}
}).toArray();
let warns = [];
for(let j=0;j<conf.length;j++){
for(let i=0;i<actionLogs.length;i++){
let key = conf[j].key;
let myval = actionLogs[i]?.log?.[ key ] || 0
let uid = actionLogs[i].uid
if( myval >= conf[j].limit ){
//触发了警报
warns.push({
type:'watchDog',
uid: uid,
name: uinfo[uid]?.name,
lv: uinfo[uid]?.lv,
vip: uinfo[uid]?.vip,
key: key,
value: myval,
tips: conf[j].tips
})
}
}
}
if(warns.length>0){
addWatchDogLog(warns);
}
await this.ctorStartTime()
}
get nextTime(): number {
return G.time + this.time;
}
async ctorStartTime() {
this.isStart = false;
this.startTime = this.nextTime;
}
}

View File

@ -40,7 +40,7 @@ export class WangZheRongYaofun {
/**获取报名人数 */
static async getBaoMingNum() {
let zkey: string = PublicShared.getToWeek();
let _num = G.mongodb.collection('playerInfo', 'wzry').countDocuments({ isbm: 1 });
let _num = G.mongodb.collection('playerInfo', 'wzry').countDocuments({ type:'wzry', isbm: 1 });
return _num;
}

View File

@ -29,6 +29,7 @@ import { SchedulerManage } from './public/scheduler/scheduler';
import {CrossEmailPull} from "./public/scheduler/scheduler_cross_email_pull";
import {Scheduler_xfjs_Local_Ctor} from "./public/scheduler/scheduler_xiaofeijingsai";
import { RankKfjs_1, RankKfjs_2, RankKfjs_3, RankKfjs_4, RankKfjs_5, RankKfjs_6, RankKfjs_7 } from './public/rank/rank_kfjs';
import { WatchDog } from './public/scheduler/scheduler_watchdog';
export async function startAfter() {
//事件监听和定时器初始化
@ -93,6 +94,7 @@ export async function startAfter() {
// new SchedulerWzrycrossEmail();
new CrossEmailPull().init()
new WatchDog().init();
});
new SchedulerNewDayLocalCtor().init();