import BaseAlgorithm from '../core/BaseAlgorithm' import DateUtil from '../util/DateUtil' import Window from '../core/Window' export default class MinerConnectRateAlgorithm extends BaseAlgorithm { compute(content: any, window: Window): void { let result = window.getResult() // 暂时先只计算finished的连接 if (content["finished"] != "true") { return } let { pkgName, appVersion, channelName, platform, countryZh, createTimeStamp, remoteInput, remoteOutput, localInput, localOutput, connEstablished, closeReason, localErrorMsg, remoteErrorMsg } = content let date = DateUtil.getDate(createTimeStamp) let hour = DateUtil.getHour(createTimeStamp) let key = `${date}|||${hour}|||${pkgName}|||${appVersion}|||${channelName}|||${platform}|||${countryZh}` let conns = result[key] if (!conns) { conns = { "total": 0, "success": 0, "haveReturnDataCount": 0, } } conns["total"]++ let success = connEstablished == "1" || (localInput + localOutput > 0 && remoteInput + remoteOutput > 0) if (success) { conns["success"]++ } let havaReturnData = (connEstablished == "1" || (remoteInput + remoteOutput > 0)) && remoteInput > 0 if (havaReturnData) { conns["haveReturnDataCount"]++ } if (!havaReturnData) { let errors = conns["errors"] if (!errors) { errors = {} } if (remoteErrorMsg) { if (errors[remoteErrorMsg]) { errors[remoteErrorMsg]++ } else { errors[remoteErrorMsg] = 1 } } if (localErrorMsg) { if (errors[localErrorMsg]) { errors[localErrorMsg]++ } else { errors[localErrorMsg] = 1 } } if (!remoteErrorMsg && !localErrorMsg) { if (errors[closeReason]) { errors[closeReason]++ } else { errors[closeReason] = 1 } } conns["errors"] = errors } result[key] = conns window.setResult(result) } }