import BaseAlgorithm from '../core/BaseAlgorithm' import DateUtil from '../util/DateUtil' import Window from '../core/Window' const ALLOC = "sfox-cli-alloc" const ESTABLISHED = "sfox-cli-established" export default class ConnectUserCountAlgorithm extends BaseAlgorithm { compute(content: any, window: Window): void { let result = window.getResult() let { id, pkgName, appVersion, channelName, platform, countryZh, createTimeStamp, established, userName, state, disableReason, errstr, syncErrMsg, syncError } = content let date = DateUtil.getDate(createTimeStamp) let hour = DateUtil.getHour(createTimeStamp) let key = `${date}|||${hour}|||${pkgName}|||${appVersion}|||${channelName}|||${platform}|||${countryZh}|||${id}|||${userName}` let session = result[key] if (!session) { session = { createTimeStamp, state, allocCount: 0, allocSuccessCount: 0, established: established } if (state == ESTABLISHED) { session["allocCount"]++ session["allocSuccessCount"]++ } } else { if (session["createTimeStamp"] <= createTimeStamp) { session["createTimeStamp"] = createTimeStamp // 如果上一个状态是alloc,且当前状态不是alloc, alloc总数+1 // 如果上一个状态是alloc,且当前状态是established, 成功次数+1 // 解决分配跨小时的问题 switch (session["state"]) { case ALLOC: if (state != ALLOC) { session["allocCount"]++ } if (state == ESTABLISHED) { session["allocSuccessCount"]++ } break; } session["state"] = state session["established"] = established } } // 如果连接是关闭的,且不是用户关闭的 if (state == "sfox-cli-disable" && disableReason != "user") { session["error"] = disableReason } if (state == "sfox-cli-error") { if (syncErrMsg == "Connection refused" || syncErrMsg == "SSL connect error" || syncError == "timeout") { if (syncErrMsg) { session["error"] = syncErrMsg } else { session["error"] = syncError } } else { session["error"] = errstr } } result[key] = session window.setResult(result) } }