初始提交
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
/**
|
||||
* @class EventLog 事件日志模型
|
||||
*/
|
||||
const BaseMod = require('./base')
|
||||
const Platform = require('./platform')
|
||||
const Channel = require('./channel')
|
||||
const StatEvent = require('./event')
|
||||
const SessionLog = require('./sessionLog')
|
||||
const ShareLog = require('./shareLog')
|
||||
const {
|
||||
DateTime
|
||||
} = require('../lib')
|
||||
module.exports = class EventLog extends BaseMod {
|
||||
constructor() {
|
||||
super()
|
||||
this.tableName = 'event-logs'
|
||||
this.sessionLogInfo = []
|
||||
}
|
||||
|
||||
/**
|
||||
* 事件日志填充
|
||||
* @param {Object} reportParams 上报参数
|
||||
*/
|
||||
async fill(reportParams) {
|
||||
let params;
|
||||
let sessionKey, sessionLogKey;
|
||||
let sessionLogInfo;
|
||||
const sessionData = []
|
||||
const fillParams = []
|
||||
const shareParams = []
|
||||
const sessionLog = new SessionLog()
|
||||
const event = new StatEvent()
|
||||
const platform = new Platform()
|
||||
const dateTime = new DateTime()
|
||||
const channel = new Channel()
|
||||
for (const rk in reportParams) {
|
||||
params = reportParams[rk]
|
||||
|
||||
//暂存下会话数据,减少读库
|
||||
sessionKey = params.ak + params.did + params.p
|
||||
if (!this.sessionLogInfo[sessionKey]) {
|
||||
// 会话日志
|
||||
sessionLogInfo = await sessionLog.getSession(params)
|
||||
if (sessionLogInfo.code) {
|
||||
return sessionLogInfo
|
||||
}
|
||||
if (this.debug) {
|
||||
console.log('sessionLogInfo', JSON.stringify(sessionLogInfo))
|
||||
}
|
||||
this.sessionLogInfo[sessionKey] = sessionLogInfo
|
||||
} else {
|
||||
sessionLogInfo = this.sessionLogInfo[sessionKey]
|
||||
}
|
||||
|
||||
// 会话数据
|
||||
sessionLogKey = sessionLogInfo.data.sessionLogId.toString()
|
||||
if (!sessionData[sessionLogKey]) {
|
||||
sessionData[sessionLogKey] = {
|
||||
eventCount: sessionLogInfo.data.eventCount + 1,
|
||||
addEventCount: 1,
|
||||
uid: sessionLogInfo.data.uid,
|
||||
createTime: sessionLogInfo.data.createTime
|
||||
}
|
||||
} else {
|
||||
sessionData[sessionLogKey].eventCount++
|
||||
sessionData[sessionLogKey].addEventCount++
|
||||
}
|
||||
|
||||
// 事件
|
||||
const eventInfo = await event.getEventAndCreate(params.ak, params.e_n)
|
||||
|
||||
// 填充数据
|
||||
fillParams.push({
|
||||
appid: params.ak,
|
||||
version: params.v ? params.v : '',
|
||||
platform: platform.getPlatformCode(params.ut, params.p),
|
||||
channel: channel.getChannelCode(params),
|
||||
device_id: params.did,
|
||||
uid: params.uid ? params.uid : '',
|
||||
session_id: sessionLogInfo.data.sessionLogId,
|
||||
page_id: sessionLogInfo.data.pageId,
|
||||
event_key: eventInfo.event_key,
|
||||
param: params.e_v ? params.e_v : '',
|
||||
// 版本
|
||||
sdk_version: params.mpsdk ? params.mpsdk : '',
|
||||
platform_version: params.mpv ? params.mpv : '',
|
||||
// 设备相关
|
||||
device_os_name: params.on ? params.on : platform.getOsName(params.p),
|
||||
device_os_version: params.sv ? params.sv : '',
|
||||
device_vendor: params.brand ? params.brand : '',
|
||||
device_model: params.md ? params.md : '',
|
||||
device_language: params.lang ? params.lang : '',
|
||||
device_pixel_ratio: params.pr ? params.pr : '',
|
||||
device_window_width: params.ww ? params.ww : '',
|
||||
device_window_height: params.wh ? params.wh : '',
|
||||
device_screen_width: params.sw ? params.sw : '',
|
||||
device_screen_height: params.sh ? params.sh : '',
|
||||
create_time: dateTime.getTime()
|
||||
})
|
||||
// 分享数据
|
||||
if (eventInfo.event_key === 'share') {
|
||||
shareParams.push(params)
|
||||
}
|
||||
}
|
||||
|
||||
if (fillParams.length === 0) {
|
||||
return {
|
||||
code: 200,
|
||||
msg: 'Invild param'
|
||||
}
|
||||
}
|
||||
|
||||
if (shareParams.length > 0) {
|
||||
const shareLog = new ShareLog()
|
||||
await shareLog.fill(shareParams, this.sessionLogInfo)
|
||||
}
|
||||
|
||||
const res = await this.insert(this.tableName, fillParams)
|
||||
if (res && res.inserted) {
|
||||
for (const sid in sessionData) {
|
||||
await sessionLog.updateSession(sid, sessionData[sid])
|
||||
}
|
||||
return {
|
||||
code: 0,
|
||||
msg: 'success'
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
code: 500,
|
||||
msg: 'Filled error'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 事件日志清理
|
||||
* @param {Number} days 保留天数
|
||||
*/
|
||||
async clean(days) {
|
||||
days = Math.max(parseInt(days), 1)
|
||||
console.log('clean event logs - day:', days)
|
||||
|
||||
const dateTime = new DateTime()
|
||||
//删除过期数据
|
||||
const res = await this.delete(this.tableName, {
|
||||
create_time: {
|
||||
$lt: dateTime.getTimeBySetDays(0 - days)
|
||||
}
|
||||
})
|
||||
|
||||
if (!res.code) {
|
||||
console.log('clean event log:', res)
|
||||
}
|
||||
return res
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user