/** * @class ShareLog 分享日志模型 */ const BaseMod = require('./base') const Platform = require('./platform') const Channel = require('./channel') const SessionLog = require('./sessionLog') const { DateTime } = require('../lib') module.exports = class ShareLog extends BaseMod { constructor() { super() this.tableName = 'share-logs' } /** * 分析日志填充 * @param {Object} reportParams 上报参数 * @param {Object} sessionLogData 会话日志数据,此参数传递可减少数据库查询 */ async fill(reportParams, sessionLogData) { let params, sessionLogInfo, sessionKey; const fillParams = [] const sessionLog = new SessionLog() 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 (!sessionLogData[sessionKey]) { // 会话日志 sessionLogInfo = await sessionLog.getSession(params) if (sessionLogInfo.code) { return sessionLogInfo } if (this.debug) { console.log('sessionLogInfo', JSON.stringify(sessionLogInfo)) } sessionLogData[sessionKey] = sessionLogInfo } else { sessionLogInfo = sessionLogData[sessionKey] } // 填充数据 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, create_time: dateTime.getTime() }) } if (fillParams.length === 0) { return { code: 200, msg: 'Invild param' } } const res = await this.insert(this.tableName, fillParams) if (res && res.inserted) { 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 share 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 share log:', res) } return res } }