数据监控
This commit is contained in:
parent
5750b83dc6
commit
3c380f1e55
@ -1,8 +1,8 @@
|
|||||||
import { Db, MongoClient } from "mongodb";
|
import { Db, MongoClient } from "mongodb";
|
||||||
import { Logger } from "tsrpc";
|
import { Logger } from "tsrpc";
|
||||||
|
|
||||||
let logDB:Db;
|
export let logDB:Db;
|
||||||
let errorLogDB:Db;
|
export let errorLogDB:Db;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否是G123的测试服
|
* 是否是G123的测试服
|
||||||
@ -11,7 +11,7 @@ function isG123stg(){
|
|||||||
return G.config.mongodbUrl.indexOf('.stg.')!=-1;
|
return G.config.mongodbUrl.indexOf('.stg.')!=-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function connGameLogDB() {
|
export async function connGameLogDB() {
|
||||||
console.log('connect gamelog mongodb ......');
|
console.log('connect gamelog mongodb ......');
|
||||||
let logDBUrl:string;
|
let logDBUrl:string;
|
||||||
if(G.config.isG123){
|
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
|
* @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'
|
| 'hbzb_zbs_group'
|
||||||
| 'wzry_zuanshi16to8'
|
| 'wzry_zuanshi16to8'
|
||||||
| "cross_email_pull"
|
| "cross_email_pull"
|
||||||
|
| "watch_dog"
|
||||||
| "xiaofeijingsai_local_ctor";
|
| "xiaofeijingsai_local_ctor";
|
||||||
|
|
||||||
export class SchedulerManage {
|
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() {
|
static async getBaoMingNum() {
|
||||||
let zkey: string = PublicShared.getToWeek();
|
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;
|
return _num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import { SchedulerManage } from './public/scheduler/scheduler';
|
|||||||
import {CrossEmailPull} from "./public/scheduler/scheduler_cross_email_pull";
|
import {CrossEmailPull} from "./public/scheduler/scheduler_cross_email_pull";
|
||||||
import {Scheduler_xfjs_Local_Ctor} from "./public/scheduler/scheduler_xiaofeijingsai";
|
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 { 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() {
|
export async function startAfter() {
|
||||||
|
|
||||||
//事件监听和定时器初始化
|
//事件监听和定时器初始化
|
||||||
@ -93,6 +94,7 @@ export async function startAfter() {
|
|||||||
// new SchedulerWzrycrossEmail();
|
// new SchedulerWzrycrossEmail();
|
||||||
|
|
||||||
new CrossEmailPull().init()
|
new CrossEmailPull().init()
|
||||||
|
new WatchDog().init();
|
||||||
});
|
});
|
||||||
new SchedulerNewDayLocalCtor().init();
|
new SchedulerNewDayLocalCtor().init();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user