You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
canteen/uniCloud-aliyun/cloudfunctions/common/uni-stat/stat/receiver.js

127 lines
2.6 KiB

/**
* @class UniStatReportDataReceiver uni统计上报数据接收器
* @function report 上报数据调度处理函数
*/
const {
parseUrlParams
} = require('../shared')
const SessionLog = require('./mod/sessionLog')
const PageLog = require('./mod/pageLog')
const EventLog = require('./mod/eventLog')
const ErrorLog = require('./mod/errorLog')
const Device = require('./mod/device')
class UniStatReportDataReceiver {
/**
* @description 上报数据调度处理函数
* @param {Object} params 基础上报参数
* @param {Object} context 请求附带的上下文信息
*/
async report(params, context) {
let res = {
code: 0,
msg: 'success'
}
if (!params || !params.requests) {
return {
code: 200,
msg: 'Invild params'
}
}
// JSON参数解析
const requestParam = JSON.parse(params.requests)
if (!requestParam || requestParam.length === 0) {
return {
code: 200,
msg: 'Invild params'
}
}
// 日志填充
const sessionParams = []
const pageParams = []
const eventParams = []
const errorParams = []
const device = new Device()
for (const ri in requestParam) {
//参数解析
const urlParams = parseUrlParams(requestParam[ri], context)
if (!urlParams.ak) {
return {
code: 201,
msg: 'Not found appid'
}
}
if (!urlParams.lt) {
return {
code: 202,
msg: 'Not found this log type'
}
}
switch (parseInt(urlParams.lt)) {
// 会话日志
case 1: {
sessionParams.push(urlParams)
break
}
// 页面日志
case 3:
case 11: {
pageParams.push(urlParams)
break
}
// 事件日志
case 21: {
eventParams.push(urlParams)
break
}
// 错误日志
case 31: {
errorParams.push(urlParams)
break
}
//unipush信息绑定
case 101: {
res = await device.bindPush(urlParams)
break
}
default: {
console.log('Invalid type by param "lt:' + urlParams.lt + '"')
break
}
}
}
//会话日志填充
if (sessionParams.length > 0) {
const sessionLog = new SessionLog()
res = await sessionLog.batchFill(sessionParams)
}
//页面日志填充
if (pageParams.length > 0) {
const pageLog = new PageLog()
res = await pageLog.fill(pageParams)
}
//事件日志填充
if (eventParams.length > 0) {
const eventLog = new EventLog()
res = await eventLog.fill(eventParams)
}
//错误日志填充
if (errorParams.length > 0) {
const errorLog = new ErrorLog()
res = await errorLog.fill(errorParams)
}
return res
}
}
module.exports = UniStatReportDataReceiver