Compare commits
2 Commits
c839d844ec
...
ad15cf73bf
Author | SHA1 | Date | |
---|---|---|---|
ad15cf73bf | |||
3c380f1e55 |
@ -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
7
src/oss/watchdog.json
Normal file
@ -0,0 +1,7 @@
|
||||
[
|
||||
{
|
||||
"key":"task/Open",
|
||||
"limit":0,
|
||||
"tips":"任务打开次数超过3次"
|
||||
}
|
||||
]
|
@ -38,6 +38,7 @@ export type schedulerType =
|
||||
| 'hbzb_zbs_group'
|
||||
| 'wzry_zuanshi16to8'
|
||||
| "cross_email_pull"
|
||||
| "watch_dog"
|
||||
| "xiaofeijingsai_local_ctor";
|
||||
|
||||
export class SchedulerManage {
|
||||
|
107
src/public/scheduler/scheduler_watchdog.ts
Normal file
107
src/public/scheduler/scheduler_watchdog.ts
Normal 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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user