作者
novlan1
研发平台数据上报
从 TAM 或者 RUM 拉数据,入库的时候不跟研发平台项目绑定,出库也就是读数据的时候才获取相应的 project 和 subproject 信息。
入库前先根据 projectKey 和 time,查询是否已有重复数据,有的话,就不再重复入库。这里解释下,为什么不让覆盖数据,主要是担心录入脏数据,可以先删旧数据,再插新数据,不允许覆盖。
projectKey 是项目 id,TAM 平台就是真实的 projectId,RUM 平台为 RUM-projectId 拼接,比如 RUM-145508。通过 RUM 前缀,拉数据的时候请求不同的接口。
出库的时候注入已删除项目的脏数据影响,需要过滤那些存在的 projectId。
ts
const projects = await projectDB.getAll();
const projectMap = flatten(projects, 'uuid');
const projectIdList = Object.keys(projectMap);
let subProjects = await subProjectDB.getAll();
// 先过滤
subProjects = subProjects.filter(item => projectIdList.includes(item.projectId));
// 后拉平
const subProjectMap = flatten(subProjects, 'webTAMID', 'mpTAMID');出库的时候,只返回研发平台有关联的数据:
ts
const where = {
time,
projectKey: { $in: Object.keys(subProjectMap) },
};
const data = await performanceDB.get(
where,
start,
limit,
sort,
);