浏览代码

feat: 分析结果入库,还差controller没写完

sky 4 年之前
父节点
当前提交
86fe718705

+ 1380 - 0
analysis/group_user_interface_test_map.json

@@ -0,0 +1,1380 @@
+{
+  "1": {
+    "201250074": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250076": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250077": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250230": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "2": {
+    "201250203": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250208": {
+      "interface-test-times": 5,
+      "interface-test-concurrency-count": 50,
+      "interface-test-concurrency-failure": 20,
+      "interface-test-concurrency-pass": 30
+    },
+    "201250209": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250210": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "3": {
+    "201250141": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250142": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250143": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250144": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "4": {
+    "201840187": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850075": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850094": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850111": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "5": {
+    "201250054": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250186": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250199": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250206": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "6": {
+    "201250137": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250154": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250164": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250182": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "7": {
+    "201250183": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250202": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250215": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201830168": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "8": {
+    "201250132": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250133": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250134": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250221": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "9": {
+    "201250035": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250037": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250038": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201840309": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "10": {
+    "201250006": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250018": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250020": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201820043": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "11": {
+    "201850100": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870189": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870192": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870202": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "12": {
+    "201180024": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250056": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250057": {
+      "interface-test-times": 2,
+      "interface-test-concurrency-count": 20,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 20
+    },
+    "201870103": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "13": {
+    "201250034": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250036": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250039": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250045": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "14": {
+    "201250024": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250041": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250062": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250148": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "15": {
+    "201250009": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250015": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250022": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201830115": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "16": {
+    "201250051": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250070": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250104": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870024": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "17": {
+    "201250007": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250012": {
+      "interface-test-times": 1,
+      "interface-test-concurrency-count": 10,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 10
+    },
+    "201250013": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250026": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "18": {
+    "201250008": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250200": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250201": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250204": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "19": {
+    "201250040": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250058": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250060": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250064": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "20": {
+    "201250031": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250080": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250082": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250150": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "21": {
+    "201250059": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250061": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250075": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250078": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "22": {
+    "201250120": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250122": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250126": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250177": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "23": {
+    "201250081": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250098": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250099": {
+      "interface-test-times": 3,
+      "interface-test-concurrency-count": 30,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 30
+    },
+    "201250100": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "24": {
+    "201250030": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250084": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250227": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250228": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "25": {
+    "201180082": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250066": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201830129": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "218352005": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "26": {
+    "201250163": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250165": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250166": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250167": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "27": {
+    "201250135": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250145": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850029": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850030": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "28": {
+    "201250118": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250138": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250139": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250140": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "29": {
+    "201250111": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250112": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250113": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250115": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "30": {
+    "201250067": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250068": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250093": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201830006": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "31": {
+    "201250069": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250090": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250158": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870258": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "32": {
+    "201250092": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250102": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250103": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250105": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "33": {
+    "201850107": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870009": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870121": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201870139": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "34": {
+    "201250063": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250065": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850003": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850081": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "35": {
+    "201250049": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250050": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250052": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201830160": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "36": {
+    "201250175": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250176": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250178": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250179": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "37": {
+    "191870151": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250169": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250171": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250173": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "38": {
+    "201250094": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250095": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250096": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250097": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "39": {
+    "201250117": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250129": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250130": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250136": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "40": {
+    "201250071": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250072": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250073": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250229": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "41": {
+    "201250010": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250011": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250027": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250155": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "42": {
+    "201250110": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250119": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250184": {
+      "interface-test-times": 5,
+      "interface-test-concurrency-count": 49,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 49
+    },
+    "201250193": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "43": {
+    "191220027": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250107": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250109": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250116": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "44": {
+    "201250191": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250192": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250211": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250213": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "45": {
+    "201250147": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250170": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250198": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250214": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "46": {
+    "201250025": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250028": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250032": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201850049": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "47": {
+    "201250043": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250044": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250047": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250048": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "48": {
+    "201250159": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250161": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250162": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250194": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "49": {
+    "201250042": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250079": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250085": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250086": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "50": {
+    "201250123": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250125": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250151": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250152": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "51": {
+    "201250033": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250187": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250225": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250226": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "52": {
+    "201250053": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250083": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250087": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250106": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  },
+  "53": {
+    "201250180": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250217": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250219": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    },
+    "201250222": {
+      "interface-test-times": 0,
+      "interface-test-concurrency-count": 0,
+      "interface-test-concurrency-failure": 0,
+      "interface-test-concurrency-pass": 0
+    }
+  }
+}

+ 1168 - 0
analysis/group_user_pipeline_map.json

@@ -0,0 +1,1168 @@
+{
+  "1": {
+    "201250074": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250076": {
+      "pipeline-deploy": 21,
+      "pipeline-pass": 18,
+      "pipeline-failure": 3
+    },
+    "201250077": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250230": {
+      "pipeline-deploy": 2,
+      "pipeline-pass": 2,
+      "pipeline-failure": 0
+    }
+  },
+  "2": {
+    "201250203": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 10,
+      "pipeline-failure": 2
+    },
+    "201250208": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250209": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250210": {
+      "pipeline-deploy": 8,
+      "pipeline-pass": 8,
+      "pipeline-failure": 0
+    }
+  },
+  "3": {
+    "201250141": {
+      "pipeline-deploy": 23,
+      "pipeline-pass": 21,
+      "pipeline-failure": 2
+    },
+    "201250142": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250143": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250144": {
+      "pipeline-deploy": 20,
+      "pipeline-pass": 19,
+      "pipeline-failure": 1
+    }
+  },
+  "4": {
+    "201840187": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201850075": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201850094": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201850111": {
+      "pipeline-deploy": 33,
+      "pipeline-pass": 28,
+      "pipeline-failure": 5
+    }
+  },
+  "5": {
+    "201250054": {
+      "pipeline-deploy": 50,
+      "pipeline-pass": 39,
+      "pipeline-failure": 11
+    },
+    "201250186": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250199": {
+      "pipeline-deploy": 9,
+      "pipeline-pass": 8,
+      "pipeline-failure": 1
+    },
+    "201250206": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 10,
+      "pipeline-failure": 2
+    }
+  },
+  "6": {
+    "201250137": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250154": {
+      "pipeline-deploy": 3,
+      "pipeline-pass": 3,
+      "pipeline-failure": 0
+    },
+    "201250164": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250182": {
+      "pipeline-deploy": 10,
+      "pipeline-pass": 8,
+      "pipeline-failure": 2
+    }
+  },
+  "7": {
+    "201250183": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250202": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250215": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 8,
+      "pipeline-failure": 4
+    },
+    "201830168": {
+      "pipeline-deploy": 43,
+      "pipeline-pass": 15,
+      "pipeline-failure": 28
+    }
+  },
+  "8": {
+    "201250132": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250133": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250134": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250221": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "9": {
+    "201250035": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250037": {
+      "pipeline-deploy": 6,
+      "pipeline-pass": 5,
+      "pipeline-failure": 1
+    },
+    "201250038": {
+      "pipeline-deploy": 9,
+      "pipeline-pass": 6,
+      "pipeline-failure": 3
+    },
+    "201840309": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "10": {
+    "201250006": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250018": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250020": {
+      "pipeline-deploy": 22,
+      "pipeline-pass": 9,
+      "pipeline-failure": 13
+    },
+    "201820043": {
+      "pipeline-deploy": 18,
+      "pipeline-pass": 13,
+      "pipeline-failure": 5
+    }
+  },
+  "11": {
+    "201850100": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201870189": {
+      "pipeline-deploy": 13,
+      "pipeline-pass": 8,
+      "pipeline-failure": 5
+    },
+    "201870192": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201870202": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "12": {
+    "201180024": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250056": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250057": {
+      "pipeline-deploy": 10,
+      "pipeline-pass": 9,
+      "pipeline-failure": 1
+    },
+    "201870103": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "13": {
+    "201250034": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 4,
+      "pipeline-failure": 0
+    },
+    "201250036": {
+      "pipeline-deploy": 17,
+      "pipeline-pass": 16,
+      "pipeline-failure": 1
+    },
+    "201250039": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250045": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "14": {
+    "201250024": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250041": {
+      "pipeline-deploy": 2,
+      "pipeline-pass": 2,
+      "pipeline-failure": 0
+    },
+    "201250062": {
+      "pipeline-deploy": 13,
+      "pipeline-pass": 10,
+      "pipeline-failure": 3
+    },
+    "201250148": {
+      "pipeline-deploy": 10,
+      "pipeline-pass": 8,
+      "pipeline-failure": 2
+    }
+  },
+  "15": {
+    "201250009": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250015": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250022": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201830115": {
+      "pipeline-deploy": 8,
+      "pipeline-pass": 8,
+      "pipeline-failure": 0
+    }
+  },
+  "16": {
+    "201250051": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250070": {
+      "pipeline-deploy": 9,
+      "pipeline-pass": 9,
+      "pipeline-failure": 0
+    },
+    "201250104": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 5,
+      "pipeline-failure": 0
+    },
+    "201870024": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "17": {
+    "201250007": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250012": {
+      "pipeline-deploy": 16,
+      "pipeline-pass": 15,
+      "pipeline-failure": 1
+    },
+    "201250013": {
+      "pipeline-deploy": 17,
+      "pipeline-pass": 11,
+      "pipeline-failure": 6
+    },
+    "201250026": {
+      "pipeline-deploy": 2,
+      "pipeline-pass": 2,
+      "pipeline-failure": 0
+    }
+  },
+  "18": {
+    "201250008": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250200": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250201": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250204": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "19": {
+    "201250040": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250058": {
+      "pipeline-deploy": 3,
+      "pipeline-pass": 3,
+      "pipeline-failure": 0
+    },
+    "201250060": {
+      "pipeline-deploy": 11,
+      "pipeline-pass": 7,
+      "pipeline-failure": 4
+    },
+    "201250064": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "20": {
+    "201250031": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250080": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 5,
+      "pipeline-failure": 0
+    },
+    "201250082": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250150": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "21": {
+    "201250059": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250061": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250075": {
+      "pipeline-deploy": 3,
+      "pipeline-pass": 1,
+      "pipeline-failure": 2
+    },
+    "201250078": {
+      "pipeline-deploy": 15,
+      "pipeline-pass": 12,
+      "pipeline-failure": 3
+    }
+  },
+  "22": {
+    "201250120": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250122": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250126": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250177": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 3,
+      "pipeline-failure": 2
+    }
+  },
+  "23": {
+    "201250081": {
+      "pipeline-deploy": 17,
+      "pipeline-pass": 15,
+      "pipeline-failure": 2
+    },
+    "201250098": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250099": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 5,
+      "pipeline-failure": 0
+    },
+    "201250100": {
+      "pipeline-deploy": 9,
+      "pipeline-pass": 7,
+      "pipeline-failure": 2
+    }
+  },
+  "24": {
+    "201250030": {
+      "pipeline-deploy": 37,
+      "pipeline-pass": 30,
+      "pipeline-failure": 7
+    },
+    "201250084": {
+      "pipeline-deploy": 10,
+      "pipeline-pass": 10,
+      "pipeline-failure": 0
+    },
+    "201250227": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250228": {
+      "pipeline-deploy": 2,
+      "pipeline-pass": 2,
+      "pipeline-failure": 0
+    }
+  },
+  "25": {
+    "201180082": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250066": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201830129": {
+      "pipeline-deploy": 7,
+      "pipeline-pass": 6,
+      "pipeline-failure": 1
+    },
+    "218352005": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "26": {
+    "201250163": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250165": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250166": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250167": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "27": {
+    "201250135": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250145": {
+      "pipeline-deploy": 19,
+      "pipeline-pass": 19,
+      "pipeline-failure": 0
+    },
+    "201850029": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201850030": {
+      "pipeline-deploy": 22,
+      "pipeline-pass": 14,
+      "pipeline-failure": 8
+    }
+  },
+  "28": {
+    "201250118": {
+      "pipeline-deploy": 13,
+      "pipeline-pass": 12,
+      "pipeline-failure": 1
+    },
+    "201250138": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250139": {
+      "pipeline-deploy": 53,
+      "pipeline-pass": 46,
+      "pipeline-failure": 7
+    },
+    "201250140": {
+      "pipeline-deploy": 2,
+      "pipeline-pass": 2,
+      "pipeline-failure": 0
+    }
+  },
+  "29": {
+    "201250111": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 3,
+      "pipeline-failure": 1
+    },
+    "201250112": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 5,
+      "pipeline-failure": 0
+    },
+    "201250113": {
+      "pipeline-deploy": 6,
+      "pipeline-pass": 5,
+      "pipeline-failure": 1
+    },
+    "201250115": {
+      "pipeline-deploy": 17,
+      "pipeline-pass": 15,
+      "pipeline-failure": 2
+    }
+  },
+  "30": {
+    "201250067": {
+      "pipeline-deploy": 51,
+      "pipeline-pass": 15,
+      "pipeline-failure": 36
+    },
+    "201250068": {
+      "pipeline-deploy": 24,
+      "pipeline-pass": 8,
+      "pipeline-failure": 16
+    },
+    "201250093": {
+      "pipeline-deploy": 26,
+      "pipeline-pass": 14,
+      "pipeline-failure": 12
+    },
+    "201830006": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "31": {
+    "201250069": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250090": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250158": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201870258": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "32": {
+    "201250092": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250102": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250103": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250105": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 10,
+      "pipeline-failure": 2
+    }
+  },
+  "33": {
+    "201850107": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201870009": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201870121": {
+      "pipeline-deploy": 7,
+      "pipeline-pass": 6,
+      "pipeline-failure": 1
+    },
+    "201870139": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "34": {
+    "201250063": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250065": {
+      "pipeline-deploy": 6,
+      "pipeline-pass": 6,
+      "pipeline-failure": 0
+    },
+    "201850003": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201850081": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "35": {
+    "201250049": {
+      "pipeline-deploy": 40,
+      "pipeline-pass": 18,
+      "pipeline-failure": 22
+    },
+    "201250050": {
+      "pipeline-deploy": 13,
+      "pipeline-pass": 13,
+      "pipeline-failure": 0
+    },
+    "201250052": {
+      "pipeline-deploy": 13,
+      "pipeline-pass": 12,
+      "pipeline-failure": 1
+    },
+    "201830160": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    }
+  },
+  "36": {
+    "201250175": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250176": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250178": {
+      "pipeline-deploy": 20,
+      "pipeline-pass": 14,
+      "pipeline-failure": 6
+    },
+    "201250179": {
+      "pipeline-deploy": 14,
+      "pipeline-pass": 6,
+      "pipeline-failure": 8
+    }
+  },
+  "37": {
+    "191870151": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250169": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250171": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 3,
+      "pipeline-failure": 2
+    },
+    "201250173": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "38": {
+    "201250094": {
+      "pipeline-deploy": 28,
+      "pipeline-pass": 27,
+      "pipeline-failure": 1
+    },
+    "201250095": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250096": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250097": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "39": {
+    "201250117": {
+      "pipeline-deploy": 11,
+      "pipeline-pass": 11,
+      "pipeline-failure": 0
+    },
+    "201250129": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250130": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250136": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    }
+  },
+  "40": {
+    "201250071": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250072": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250073": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250229": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 4,
+      "pipeline-failure": 0
+    }
+  },
+  "41": {
+    "201250010": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250011": {
+      "pipeline-deploy": 16,
+      "pipeline-pass": 5,
+      "pipeline-failure": 11
+    },
+    "201250027": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250155": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "42": {
+    "201250110": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250119": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250184": {
+      "pipeline-deploy": 10,
+      "pipeline-pass": 8,
+      "pipeline-failure": 2
+    },
+    "201250193": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "43": {
+    "191220027": {
+      "pipeline-deploy": 5,
+      "pipeline-pass": 4,
+      "pipeline-failure": 1
+    },
+    "201250107": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250109": {
+      "pipeline-deploy": 25,
+      "pipeline-pass": 22,
+      "pipeline-failure": 3
+    },
+    "201250116": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "44": {
+    "201250191": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250192": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 8,
+      "pipeline-failure": 4
+    },
+    "201250211": {
+      "pipeline-deploy": 7,
+      "pipeline-pass": 7,
+      "pipeline-failure": 0
+    },
+    "201250213": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "45": {
+    "201250147": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 12,
+      "pipeline-failure": 0
+    },
+    "201250170": {
+      "pipeline-deploy": 28,
+      "pipeline-pass": 24,
+      "pipeline-failure": 4
+    },
+    "201250198": {
+      "pipeline-deploy": 6,
+      "pipeline-pass": 2,
+      "pipeline-failure": 4
+    },
+    "201250214": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 8,
+      "pipeline-failure": 4
+    }
+  },
+  "46": {
+    "201250025": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250028": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250032": {
+      "pipeline-deploy": 6,
+      "pipeline-pass": 6,
+      "pipeline-failure": 0
+    },
+    "201850049": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "47": {
+    "201250043": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 4,
+      "pipeline-failure": 0
+    },
+    "201250044": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 3,
+      "pipeline-failure": 1
+    },
+    "201250047": {
+      "pipeline-deploy": 15,
+      "pipeline-pass": 7,
+      "pipeline-failure": 8
+    },
+    "201250048": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "48": {
+    "201250159": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250161": {
+      "pipeline-deploy": 9,
+      "pipeline-pass": 6,
+      "pipeline-failure": 3
+    },
+    "201250162": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250194": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    }
+  },
+  "49": {
+    "201250042": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250079": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 11,
+      "pipeline-failure": 1
+    },
+    "201250085": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250086": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    }
+  },
+  "50": {
+    "201250123": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250125": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    },
+    "201250151": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250152": {
+      "pipeline-deploy": 2,
+      "pipeline-pass": 2,
+      "pipeline-failure": 0
+    }
+  },
+  "51": {
+    "201250033": {
+      "pipeline-deploy": 10,
+      "pipeline-pass": 6,
+      "pipeline-failure": 4
+    },
+    "201250187": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 4,
+      "pipeline-failure": 0
+    },
+    "201250225": {
+      "pipeline-deploy": 15,
+      "pipeline-pass": 9,
+      "pipeline-failure": 6
+    },
+    "201250226": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 1,
+      "pipeline-failure": 0
+    }
+  },
+  "52": {
+    "201250053": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250083": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250087": {
+      "pipeline-deploy": 1,
+      "pipeline-pass": 0,
+      "pipeline-failure": 1
+    },
+    "201250106": {
+      "pipeline-deploy": 4,
+      "pipeline-pass": 2,
+      "pipeline-failure": 2
+    }
+  },
+  "53": {
+    "201250180": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250217": {
+      "pipeline-deploy": 0,
+      "pipeline-pass": 0,
+      "pipeline-failure": 0
+    },
+    "201250219": {
+      "pipeline-deploy": 12,
+      "pipeline-pass": 4,
+      "pipeline-failure": 8
+    },
+    "201250222": {
+      "pipeline-deploy": 8,
+      "pipeline-pass": 8,
+      "pipeline-failure": 0
+    }
+  }
+}

+ 197 - 6
analysis/index.js

@@ -5,6 +5,9 @@ const CsvReader = require("../config/csvReader");
 const StudentService = require("../services/studentService");
 const GitlabApi = require("../apis/gitlabClient");
 const JsonHandler = require("../config/jsonHandler");
+const StudentConstructor = require("../models/constructors/StudentConstructor");
+const GroupConstructor = require("../models/constructors/GroupConstructor");
+const GroupService = require("../services/groupService");
 
 const userSchema = {
   'id': Number,
@@ -44,8 +47,8 @@ class Analysis {
       console.log(data); 
       Database.close();
       */
-
-      await this.getPipelineStatistics()
+      this.fromJsonToDatabase()
+      // await this.getInterfaceTestStatistics()
     } catch (errors) {
       console.error(errors);
     }
@@ -184,16 +187,204 @@ class Analysis {
     // },
     let group_user_map = await JsonHandler.readSync(__dirname+'/group_user_map.json');
     let group_user_pipeline_map = {};
+    let startTime = '2022-02-13 20:13:10';
+    const mysql = await Mysql.connect();
     for(let k of Object.keys(group_user_map)) {
       if(!group_user_pipeline_map[k]) group_user_pipeline_map[k] = {};
-      // TODO 妈的写不动了!!
+      let user_list = group_user_map[k];
+      for(let user of user_list) {
+        group_user_pipeline_map[k][user.studentId] = {
+          "pipeline-deploy":0,
+          "pipeline-pass":0,
+          "pipeline-failure":0
+        };
+        let [row] = await mysql.execute("select result,count(*) as count from pipeline_record where start_time > ? and user_id = ? group by result;", [startTime, user.userId]);
+        for(let res of row) {
+          if(res.result === '部署失败') {
+            group_user_pipeline_map[k][user.studentId]["pipeline-failure"] += res.count;
+          } else if(res.result === '部署成功') {
+            group_user_pipeline_map[k][user.studentId]["pipeline-pass"] += res.count;
+          }
+        }
+        group_user_pipeline_map[k][user.studentId]["pipeline-deploy"] = 
+        group_user_pipeline_map[k][user.studentId]["pipeline-pass"] + 
+        group_user_pipeline_map[k][user.studentId]["pipeline-failure"];
+      }
     }
-
+    mysql.end(); 
+    // await JsonHandler.writeSync(group_user_pipeline_map, __dirname+'/group_user_pipeline_map.json');
+  }
+  async getInterfaceTestStatistics() { // 按小组生成接口测试报告
+    // 由于依赖Pipeline, 所以也有上述问题
+    let group_user_map = await JsonHandler.readSync(__dirname+'/group_user_map.json');
+    let group_user_interface_test_map = {};
     let startTime = '2022-02-13 20:13:10';
-    let userId = 1454;
     const mysql = await Mysql.connect();
-    let [row] = await mysql.execute("select result,count(*) as count from pipeline_record where start_time > ? and user_id = ? group by result;", [startTime, userId]);
+    for(let k of Object.keys(group_user_map)) {
+      if(!group_user_interface_test_map[k]) group_user_interface_test_map[k] = {};
+      let user_list = group_user_map[k];
+      for(let user of user_list) {
+        let [row] = await mysql.execute("select count(*) as times, COALESCE(sum(success),0) as success, COALESCE(sum(failure),0) as failure from test_result where test_result.pipeline_record_id in (select id as pipe_record_id from pipeline_record where start_time > ? and user_id = ? ) ;", [startTime, user.userId]);
+        // console.log(row[0]); // { times: 0, success: null, failure: null }
+        row[0]['times'] = parseInt(row[0]['times']);
+        row[0]['failure'] = parseInt(row[0]['failure']);
+        row[0]['success'] = parseInt(row[0]['success']);
+        group_user_interface_test_map[k][user.studentId] =  {
+          "interface-test-times": row[0]['times'],
+          "interface-test-concurrency-count": row[0]['failure'] + row[0]['success'],
+          "interface-test-concurrency-failure": row[0]['failure'],
+          "interface-test-concurrency-pass": row[0]['success']
+        };
+      }
+    }
     mysql.end(); 
+    await JsonHandler.writeSync(group_user_interface_test_map, __dirname+'/group_user_interface_test_map.json');
+  }
+  async fromJsonToDatabase() { // 将上面生成的一系列json文件组合导入数据库
+    // TODO
+    const group_user_map = await JsonHandler.readSync(__dirname+'/group_user_map.json');
+    const group_project_info_map = await JsonHandler.readSync(__dirname+'/group_project_info_map.json');
+    const group_user_commits_map = await JsonHandler.readSync(__dirname+'/group_user_commits_map.json');
+    const group_user_pipeline_map = await JsonHandler.readSync(__dirname+'/group_user_pipeline_map.json');
+    const group_user_interface_test_map = await JsonHandler.readSync(__dirname+'/group_user_interface_test_map.json');
+     // mongo 连接
+    await Database.asyncConnect();
+
+    const generateGroupMembers = function(g) {
+      return group_user_map[g].map(item => {
+        return {
+          "userId": item.userId,
+          "studentId":item.studentId, 
+          "name":item.name
+        };
+      });
+    }
+    const generateGroupCommit = function(g) {
+      let raw = Object.entries(group_user_commits_map[g])
+      .map(v => {
+        v[1].identity = v[0];
+        return v[1];
+      });
+      let res = raw.reduce((prev, cur) => {
+        prev["commit-times"] += cur["commit-times"];
+        prev["valid-commit-times"] += cur["valid-commit-times"];
+        prev["buglist-commit"] += cur["buglist-commit"];
+        prev["feature-commit"] += cur["feature-commit"];
+        prev["commit-msg-overview"].push(...cur[["commit-msg-overview"]]);
+        return prev;
+      },{
+        "commit-times": 0,
+        "valid-commit-times": 0,
+        "buglist-commit": 0,
+        "feature-commit": 0,
+        "commit-msg-overview": []
+      });
+      res["commit-contribution"] = raw.map(item => {
+        return {
+          "name": item.identity, 
+          "times": item["commit-times"], 
+          "proportion": res["commit-times"] === 0 ? 0 : (item["commit-times"] / res["commit-times"] * 100).toFixed(2)
+        }
+      });
+      return res;
+    }
+    const generateGroupInterfaceTest = function(g) {
+      let raw = Object.entries(group_user_interface_test_map[g])
+      .map(v => {
+        v[1].identity = v[0];
+        return v[1];
+      });
+      let res = raw.reduce((prev, cur) => {
+        prev["interface-test-times"] += cur["interface-test-times"];
+        prev["interface-test-concurrency-count"] += cur["interface-test-concurrency-count"];
+        prev["interface-test-concurrency-failure"] += cur["interface-test-concurrency-failure"];
+        prev["interface-test-concurrency-pass"] += cur["interface-test-concurrency-pass"];
+        return prev;
+      },{
+        "interface-test-times": 0,
+        "interface-test-concurrency-count": 0,
+        "interface-test-concurrency-failure": 0,
+        "interface-test-concurrency-pass": 0
+      });
+      res["interface-test-contribution"] = raw.map(item => {
+        return {
+          "name": item.identity, 
+          "times": item["interface-test-times"], 
+          "proportion": res["interface-test-times"] === 0 ? 0 : (item["interface-test-times"] / res["interface-test-times"] * 100).toFixed(2)
+        }
+      });
+      return res;
+    }
+    const generateGroupPipeline = function(g) {
+      let raw = Object.entries(group_user_pipeline_map[g])
+      .map(v => {
+        v[1].identity = v[0];
+        return v[1];
+      });
+      let res = raw.reduce((prev, cur) => {
+        prev["pipeline-deploy"] += cur["pipeline-deploy"];
+        prev["pipeline-pass"] += cur["pipeline-pass"];
+        prev["pipeline-failure"] += cur["pipeline-failure"];
+        return prev;
+      },{
+        "pipeline-deploy": 0,
+        "pipeline-pass": 0,
+        "pipeline-failure": 0,
+      });
+      res["pipeline-contribution"] = raw.map(item => {
+        return {
+          "name": item.identity, 
+          "times": item["pipeline-deploy"], 
+          "proportion": res["pipeline-deploy"] === 0 ? 0 : (item["pipeline-deploy"] / res["pipeline-deploy"] * 100).toFixed(2)
+        }
+      });
+      return res;
+    }
+
+    for(let group of Object.keys(group_user_map)) {
+      // 生成小组报告, 入库
+      let projects = group_project_info_map[group];
+      let members = generateGroupMembers(group);
+      let group_commit = generateGroupCommit(group);
+      let group_interface_test = generateGroupInterfaceTest(group);
+      let group_pipeline = generateGroupPipeline(group);
+
+      let groupInfo = new GroupConstructor(
+        group,
+        projects,
+        members,
+        group_commit,
+        group_interface_test,
+        group_pipeline
+      );
+      // console.log(groupInfo);
+      GroupService.create(groupInfo);
+      // for(let user of group_user_map[group]) { // 生成个人报告, 入库
+      //   let commit = group_user_commits_map[group][user.studentId];
+      //   if(commit == null) commit = {
+      //     "commit-times": 0,
+      //     "valid-commit-times": 0,
+      //     "buglist-commit": 0,
+      //     "feature-commit": 0,
+      //     "commit-msg-overview": []
+      //   };
+      //   let interface_test = group_user_interface_test_map[group][user.studentId];
+      //   let pipeline = group_user_pipeline_map_map[group][user.studentId];
+      //   let studentInfo = new StudentConstructor(
+      //     user.name,
+      //     user.userId,
+      //     user.studentId,
+      //     group,
+      //     user.email,
+      //     commit,
+      //     projects,
+      //     interface_test,
+      //     pipeline
+      //   );
+      //   // console.log(studentInfo)
+      //   StudentService.create(studentInfo);
+      // }
+    }
   }
   findUserByCommitterEmail(committer_email, user_list) { // 通过committer email找用户
     for(let user of user_list) {

+ 24 - 0
controllers/groups_controller.js

@@ -0,0 +1,24 @@
+const GroupService = require('../services/groupService');
+
+class GroupsController {
+
+    static findAll(request, h) {
+      try {
+        const filter = request.query;
+        return GroupService.getAll(filter);
+      } catch(errors) {
+        return h.response(errors).code(422);
+      }
+    }
+    static async create(request, h) {
+        try {
+            const group = await GroupService.create(request.payload);
+            return h.response(group).code(201);
+        } catch(errors) {
+            return h.response(errors).code(422);
+        }
+    }
+
+}
+
+module.exports = GroupsController;

+ 1 - 0
format-group.json

@@ -39,6 +39,7 @@
     ]
   },
   "requirement-tree": {
+    "requirement-tree-operations": 0,
     "requirement-tree-contribution": [
       {"name": "", "times": 0, "proportion": 0}
     ]

+ 3 - 1
models/commit.js

@@ -1,4 +1,5 @@
 const mongoose = require('mongoose');
+const ContributionSchema = require('./contribution');
 const Schema = mongoose.Schema;
 
 const CommitSchema = new Schema({
@@ -6,7 +7,8 @@ const CommitSchema = new Schema({
   'valid-commit-times': Number,
   'buglist-commit': Number,
   'feature-commit': Number,
-  'commit-msg-overview': [String]
+  'commit-msg-overview': [String],
+  'commit-contribution': [ContributionSchema]
 });
 
 module.exports = CommitSchema;

+ 21 - 0
models/constructors/GroupConstructor.js

@@ -0,0 +1,21 @@
+class GroupConstructor {
+  constructor(
+    group,
+    projects,
+    members,
+    commit,
+    interface_test,
+    pipeline
+  ) {
+    this.group = group;
+    this.projects = projects;
+    this.members = members;
+    this.commit = commit;
+    this.test = {
+      "interface-test": interface_test
+    };
+    this.pipeline = pipeline;
+  }
+}
+
+module.exports = GroupConstructor;

+ 27 - 0
models/constructors/StudentConstructor.js

@@ -0,0 +1,27 @@
+class StudentConstructor {
+  constructor(
+    name,
+    userId,
+    studentId,
+    group,
+    email,
+    commit,
+    projects,
+    interface_test,
+    pipeline
+  ) {
+    this.name = name;
+    this.userId = userId;
+    this.studentId = studentId;
+    this.group = group;
+    this.email = email;
+    this.commit = commit;
+    this.projects = projects;
+    this.test = {
+      "interface-test": interface_test
+    };
+    this.pipeline = pipeline;
+  }
+}
+
+module.exports = StudentConstructor;

+ 10 - 0
models/contribution.js

@@ -0,0 +1,10 @@
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+
+const ContributionSchema = new Schema({
+  "name": String, // 真实人名 or commiter name
+  "times": String, // 次数
+  "proportion": Number, // 比例(%)
+});
+
+module.exports = ContributionSchema;

+ 19 - 0
models/group.js

@@ -0,0 +1,19 @@
+const mongoose = require('mongoose');
+const CommitSchema = require('./commit');
+const PipelineSchema = require('./pipeline');
+const ProjectSchema = require('./project');
+const MemberSchema = require('./member');
+const TestSchema = require('./test');
+const Schema = mongoose.Schema;
+
+const GroupSchema = new Schema({
+  'group': Number, // groupId
+  'projects': [ProjectSchema], // 所加入的项目
+  'members': [MemberSchema], // 成员
+  'commit': CommitSchema,
+  'test': TestSchema,
+  'pipeline': PipelineSchema
+});
+
+const Group = mongoose.model('Group', GroupSchema);
+module.exports = Group;

+ 10 - 0
models/member.js

@@ -0,0 +1,10 @@
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+
+const MemberSchema = new Schema({
+  "userId": String, // 门户Id
+  "studentId": String, // 学号
+  "name": String // 真实人名
+});
+
+module.exports = MemberSchema;

+ 3 - 1
models/pipeline.js

@@ -1,10 +1,12 @@
 const mongoose = require('mongoose');
+const ContributionSchema = require('./contribution');
 const Schema = mongoose.Schema;
 
 const PipelineSchema = new Schema({
   'pipeline-deploy': Number,
   'pipeline-pass': Number,
-  'pipeline-failure': Number
+  'pipeline-failure': Number,
+  'pipeline-contribution': [ContributionSchema]
 });
 
 // const Pipeline = mongoose.model('Pipeline', PipelineSchema);

+ 2 - 0
models/requirementTree.js

@@ -1,8 +1,10 @@
 const mongoose = require('mongoose');
+const ContributionSchema = require('./contribution');
 const Schema = mongoose.Schema;
 
 const RequirementTreeSchema = new Schema({
   "requirement-tree-operations": Number,
+  'requirement-tree-contribution': [ContributionSchema]
 });
 
 // const RequirementTree = mongoose.model('RequirementTree', RequirementTreeSchema);

+ 0 - 1
models/student.js

@@ -1,6 +1,5 @@
 const mongoose = require('mongoose');
 const CommitSchema = require('./commit');
-const Commit = require('./commit');
 const PipelineSchema = require('./pipeline');
 const ProjectSchema = require('./project');
 const TestSchema = require('./test');

+ 3 - 1
models/test.js

@@ -1,11 +1,13 @@
 const mongoose = require('mongoose');
+const ContributionSchema = require('./contribution');
 const Schema = mongoose.Schema;
 
 const InterfaceTestSchema = new Schema({
   'interface-test-times': Number,
   'interface-test-concurrency-count': Number,
   'interface-test-concurrency-failure': Number,
-  'interface-test-concurrency-pass': Number
+  'interface-test-concurrency-pass': Number,
+  'interface-test-contribution': [ContributionSchema]
 })
 
 const TestSchema = new Schema({

+ 3 - 2
routes/index.js

@@ -1,13 +1,14 @@
 // const PostsController = require('../controllers/posts_controller');
 const StudentsController = require('../controllers/students_controller');
-// const GroupsController = require('../controllers/groups_controller');
+const GroupsController = require('../controllers/groups_controller');
 
 exports.plugin = {
     pkg: require('../package.json'),
     register: async function(server, options) {
         // server.route({ path: '/students/{id}', method: 'GET', handler: StudentsController.findById });
         server.route({ path: '/students/', method: 'GET', handler: StudentsController.findAll });
-        server.route({ path: '/students/', method: 'POST', handler: StudentsController.create });
+        server.route({ path: '/groups/', method: 'GET', handler: GroupsController.findAll });
+        // server.route({ path: '/students/', method: 'POST', handler: StudentsController.create });
 
         // server.route({ path: '/group/{groupId}', method: 'GET', handler: GroupsController.findByGroupId });
         // server.route({ path: '/group/students/{groupId}', method: 'GET', handler: GroupsController.findStudentsByGroupId });

+ 24 - 0
services/groupService.js

@@ -0,0 +1,24 @@
+const Group = require('../models/group');
+
+
+class GroupService {
+    static async getAll(filter) {
+        return Group.find(filter);
+    }
+    static async findOne(filter) {
+        return Group.findOne(filter);
+    }
+    static async create(GroupData) {
+        GroupService.validateModel(GroupData);
+        return new Group(GroupData).save();
+    }
+
+    static validateModel(data) {
+        const group = new Group(data);
+        const validation = group.validateSync();
+        if (validation)
+            throw validation.errors
+    }
+}
+
+module.exports = GroupService;

+ 5 - 5
services/projectService.js

@@ -1,13 +1,13 @@
 const Project = require('../models/project');
 
 
-class StudentService {
+class ProjectService {
     static async getAll(filter) {
         return Project.find(filter);
     }
-    static async create(StudentData) {
-        StudentService.validateModel(StudentData);
-        return new Project(StudentData).save();
+    static async create(ProjectData) {
+        ProjectService.validateModel(ProjectData);
+        return new Project(ProjectData).save();
     }
 
     static validateModel(data) {
@@ -18,4 +18,4 @@ class StudentService {
     }
 }
 
-module.exports = StudentService;
+module.exports = ProjectService;

+ 3 - 0
services/studentService.js

@@ -5,6 +5,9 @@ class StudentService {
     static async getAll(filter) {
         return Student.find(filter);
     }
+    static async findOne(filter) {
+        return Student.findOne(filter);
+    }
     static async create(StudentData) {
         StudentService.validateModel(StudentData);
         return new Student(StudentData).save();