从 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,
);