This is an automated email from the ASF dual-hosted git repository.

warren pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new c9e741d7 refactor(gitlab): add conn id to issues
c9e741d7 is described below

commit c9e741d78d20b9111e13d6d6b61734440f902be8
Author: Yingchu Chen <[email protected]>
AuthorDate: Sun Jun 19 19:57:13 2022 +0800

    refactor(gitlab): add conn id to issues
---
 plugins/gitlab/e2e/issues_test.go                  | 147 +++++
 .../e2e/raw_tables/_raw_gitlab_api_issues.csv      |  36 ++
 .../snapshot_tables/_tool_gitlab_issue_labels.csv  |  10 +
 .../e2e/snapshot_tables/_tool_gitlab_issues.csv    | 630 +++++++++++++++++++++
 .../gitlab/e2e/snapshot_tables/board_issues.csv    |  36 ++
 plugins/gitlab/e2e/snapshot_tables/issues.csv      | 630 +++++++++++++++++++++
 plugins/gitlab/tasks/issue_collector.go            |  23 +-
 plugins/gitlab/tasks/issue_convertor.go            |  20 +-
 plugins/gitlab/tasks/issue_extractor.go            |  23 +-
 plugins/gitlab/tasks/issue_label_convertor.go      |  24 +-
 10 files changed, 1517 insertions(+), 62 deletions(-)

diff --git a/plugins/gitlab/e2e/issues_test.go 
b/plugins/gitlab/e2e/issues_test.go
new file mode 100644
index 00000000..b1dd24e9
--- /dev/null
+++ b/plugins/gitlab/e2e/issues_test.go
@@ -0,0 +1,147 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package e2e
+
+import (
+       "fmt"
+       "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+       "testing"
+
+       "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       "github.com/apache/incubator-devlake/plugins/gitlab/impl"
+       "github.com/apache/incubator-devlake/plugins/gitlab/models"
+       "github.com/apache/incubator-devlake/plugins/gitlab/tasks"
+)
+
+func TestGitlabIssueDataFlow(t *testing.T) {
+
+       var gitlab impl.Gitlab
+       dataflowTester := e2ehelper.NewDataFlowTester(t, "gitlab", gitlab)
+
+       taskData := &tasks.GitlabTaskData{
+               Options: &tasks.GitlabOptions{
+                       ConnectionId: 1,
+                       ProjectId:    11624398,
+               },
+       }
+       // import raw data table
+       
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_gitlab_api_issues.csv",
+               "_raw_gitlab_api_issues")
+
+       // verify extraction
+       dataflowTester.FlushTabler(&models.GitlabIssue{})
+       dataflowTester.FlushTabler(&models.GitlabIssueLabel{})
+       dataflowTester.FlushTabler(&models.GitlabUser{})
+       dataflowTester.Subtask(tasks.ExtractApiIssuesMeta, taskData)
+       dataflowTester.VerifyTable(
+               models.GitlabIssue{},
+               fmt.Sprintf("./snapshot_tables/%s.csv", 
models.GitlabIssue{}.TableName()),
+               []string{"connection_id", "gitlab_id"},
+               []string{
+                       "project_id",
+                       "number",
+                       "state",
+                       "title",
+                       "body",
+                       "priority",
+                       "type",
+                       "status",
+                       "assignee_id",
+                       "assignee_name",
+                       "lead_time_minutes",
+                       "url",
+                       "closed_at",
+                       "gitlab_created_at",
+                       "gitlab_updated_at",
+                       "severity",
+                       "component",
+                       "time_estimate",
+                       "total_time_spent",
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               models.GitlabIssueLabel{},
+               fmt.Sprintf("./snapshot_tables/%s.csv", 
models.GitlabIssueLabel{}.TableName()),
+               []string{"connection_id", "issue_id", "label_name"},
+               []string{
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       // verify conversion
+       dataflowTester.FlushTabler(&ticket.Issue{})
+       dataflowTester.FlushTabler(&ticket.BoardIssue{})
+       dataflowTester.Subtask(tasks.ConvertIssuesMeta, taskData)
+       dataflowTester.VerifyTable(
+               ticket.Issue{},
+               fmt.Sprintf("./snapshot_tables/%s.csv", 
ticket.Issue{}.TableName()),
+               []string{"id"},
+               []string{
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+                       "url",
+                       "issue_key",
+                       "title",
+                       "description",
+                       "epic_key",
+                       "type",
+                       "status",
+                       "original_status",
+                       "story_point",
+                       "resolution_date",
+                       "created_date",
+                       "updated_date",
+                       "lead_time_minutes",
+                       "parent_issue_id",
+                       "priority",
+                       "original_estimate_minutes",
+                       "time_spent_minutes",
+                       "time_remaining_minutes",
+                       "creator_id",
+                       "assignee_id",
+                       "assignee_name",
+                       "severity",
+                       "component",
+                       "icon_url",
+                       "creator_name",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               &ticket.BoardIssue{},
+               fmt.Sprintf("./snapshot_tables/%s.csv", 
ticket.BoardIssue{}.TableName()),
+               []string{"board_id", "issue_id"},
+               []string{
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+}
diff --git a/plugins/gitlab/e2e/raw_tables/_raw_gitlab_api_issues.csv 
b/plugins/gitlab/e2e/raw_tables/_raw_gitlab_api_issues.csv
new file mode 100644
index 00000000..512b979f
--- /dev/null
+++ b/plugins/gitlab/e2e/raw_tables/_raw_gitlab_api_issues.csv
@@ -0,0 +1,36 @@
+id,params,data,url,input,created_at
+1,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20154666,""iid"":1,""project_id"":11624398,""title"":""Call-commit
 graph spec v2.0"",""description"":""Here is the [alpha version of 
v2.0](https://paper.dropbox.com/doc/Call-Commit-Graph-Specification--AbdAXg1s2CAz97ZkRS9H0RzuAg-E3EIqOD2MrNXXGwYXRSED#:uid=336346991861768974394903\u0026h2=v2.0-Alpha-(4/17/19)).
 Let's use this issue for discussion and feedback.\n\nOverview\nThe major 
changes in this version:\n\n1. Before, a multi-lan [...]
+2,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20487839,""iid"":2,""project_id"":11624398,""title"":""集成star-rank数据"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-01T03:38:16.909Z"",""updated_at"":""2019-05-10T14:57:35.790Z"",""closed_at"":""2019-05-10T14:57:35.763Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3adf96a381af9f113cd6309aa0?s=8
 [...]
+3,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20589705,""iid"":3,""project_id"":11624398,""title"":""AttributeError:
 'NoneType' object has no attribute 'getText'"",""description"":""项目: 
\n`https://github.com/ethereum/ethereumj.git`\n\ntraceback:\n```\nTraceback 
(most recent call last):\n  File 
\""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/worker.py\"",
 line 799, in perform_job\n    rv = job.perform()\n  File 
\""/root/.local/share/virtu [...]
+4,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20654851,""iid"":4,""project_id"":11624398,""title"":""Remove
 developers who do not have an 
email"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-07T13:40:45.484Z"",""updated_at"":""2019-05-07T13:54:34.347Z"",""closed_at"":""2019-05-07T13:54:34.254Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3
 [...]
+5,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20762881,""iid"":5,""project_id"":11624398,""title"":""grpc
 server启动失败"",""description"":""```\nth (from tensorflow.python.framework.ops) 
is deprecated and will be removed in a future version.\nInstructions for 
updating:\nColocations handled automatically by placer.\nTraceback (most recent 
call last):\n  File \""server.py\"", line 11, in \u003cmodule\u003e\n    from 
merico.grpc.api import *\n  File \""/meta-analytics/merico/grpc/ap [...]
+6,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20843580,""iid"":6,""project_id"":11624398,""title"":""Tech
 tags and their classes"",""description"":""```\n开发\n    后端\n        开发语言\n     
       python\n            php\n            ruby\n            java\n            
Node.js\n            Golang\n            Erlang\n            lua\n            
scala\n            C#\n            coffeescript\n        框架\n            .NET\n 
           asp.net\n            Rails\n            ThinkPH [...]
+7,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20884758,""iid"":7,""project_id"":11624398,""title"":""触发发送周报"",""description"":""https://gitlab.com/meri.co/vdev.co/merge_requests/457"",""state"":""closed"",""created_at"":""2019-05-14T13:46:06.308Z"",""updated_at"":""2019-11-15T06:49:57.807Z"",""closed_at"":""2019-11-15T06:49:57.777Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"",""name"":""Hezheng
 Yin"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com [...]
+8,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20885280,""iid"":8,""project_id"":11624398,""title"":""利用ngingx
 反向代理grpc 服务, 启动多个grpc 
实例"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-14T13:50:03.766Z"",""updated_at"":""2019-11-15T06:49:55.056Z"",""closed_at"":""2019-11-15T06:49:55.026Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"",""name"":""Hezheng
 
Yin"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/69667c2c63ce892e11
 [...]
+9,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":20925640,""iid"":9,""project_id"":11624398,""title"":""star-rank数据
 
获取从数据库获取"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-15T12:39:11.098Z"",""updated_at"":""2019-11-15T06:49:49.590Z"",""closed_at"":""2019-11-15T06:49:49.562Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"",""name"":""Hezheng
 
Yin"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/69667c2c63ce892e11b9ac098e3abc4
 [...]
+10,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21054967,""iid"":10,""project_id"":11624398,""title"":""关于create_repo.py
 复制测试文件到repos目录下出现的问题"",""description"":""在服务器和CI runner运行测试时,出现在测试 
test_1_1_3_3_3_update_lines.py、test_1_1_4_2_no_new_line_between_functions.py 
两个文件时,出现一下情况\n\n```\n    if with_exceptions and status != 0:  \n       raise 
GitCommandError(command, status, stderr_value, stdout_value)  \n       
git.exc.GitCommandError: Cmd('git') failed due to: exit code(1)  \n   [...]
+11,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21056626,""iid"":11,""project_id"":11624398,""title"":""commit
 中author.email 是None"",""description"":""repo: 
https://github.com/eosio/eos.git\n\ncommit: 
dbbd1ddcf7291ffa3714c86414a7439898246ed3\n\n\nmeta analystics branch: 
develop"",""state"":""closed"",""created_at"":""2019-05-19T08:35:39.623Z"",""updated_at"":""2019-05-23T06:17:20.475Z"",""closed_at"":""2019-05-23T06:17:20.453Z"",""closed_by"":{""id"":3455322,""username"":""doub
 [...]
+12,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21208504,""iid"":12,""project_id"":11624398,""title"":""grpc
 getCommit 增加add line 和del 
line"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-23T06:18:01.863Z"",""updated_at"":""2019-06-05T00:25:52.920Z"",""closed_at"":""2019-06-05T00:25:52.902Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3adf96
 [...]
+13,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21208538,""iid"":13,""project_id"":11624398,""title"":""grpc
 中 
优化GetEmailModuleValues的速度"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-23T06:19:33.497Z"",""updated_at"":""2019-05-28T15:52:05.843Z"",""closed_at"":""2019-05-28T15:52:05.775Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3adf96a38
 [...]
+14,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21226518,""iid"":14,""project_id"":11624398,""title"":""Can
 not get meta dev value,  min() arg is an empty 
sequence"",""description"":""repo : 
https://github.com/adishavit/argh.git\n\n接口: 
GetProjectStatus"",""state"":""closed"",""created_at"":""2019-05-23T15:15:44.721Z"",""updated_at"":""2019-05-29T02:22:58.517Z"",""closed_at"":""2019-05-29T02:22:58.477Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 [...]
+15,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21298841,""iid"":15,""project_id"":11624398,""title"":""ci
 memroy 
error"",""description"":""https://gitlab.com/meri.co/meta-analytics/-/jobs/219315516"",""state"":""closed"",""created_at"":""2019-05-26T02:24:04.521Z"",""updated_at"":""2019-07-30T20:06:07.582Z"",""closed_at"":""2019-07-30T20:06:07.544Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"",""name"":""Hezheng
 Yin"",""state"":""active"",""avatar_url"":""https://sec [...]
+16,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21317058,""iid"":16,""project_id"":11624398,""title"":""Change
 /data to a local dir"",""description"":""While installing according to 
https://gitlab.com/meri.co/meta-analytics/wikis/Code-Analytics-Local-Installation-Guide:\n```\n2019-05-27
 12:07:45.953396: I tensorflow/compiler/xla/service/service.cc:158]   
StreamExecutor device (0): \u003cundefined\u003e, \u003cundefined\u003e\nLoaded 
model apache_a097395_1\nin test analyze, ex:  [...]
+17,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21338868,""iid"":17,""project_id"":11624398,""title"":""Getting
 doc_coverage error:  division by zero"",""description"":""repo: 
https://github.com/haolinmeri/0526gopub.git(go项目)\n\nmeta-analystics branch: 
feature-five-metrics"",""state"":""closed"",""created_at"":""2019-05-27T16:20:31.078Z"",""updated_at"":""2019-06-10T04:46:08.213Z"",""closed_at"":""2019-06-10T04:46:08.193Z"",""closed_by"":{""id"":3455322,""username"":""doubleqia
 [...]
+18,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21390168,""iid"":18,""project_id"":11624398,""title"":""worker
 better exit 
method"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-29T02:24:39.023Z"",""updated_at"":""2019-07-30T20:07:21.840Z"",""closed_at"":""2019-07-30T20:07:21.761Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"",""name"":""Hezheng
 
Yin"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/69667c2c63ce892e11b9ac09
 [...]
+19,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21390176,""iid"":19,""project_id"":11624398,""title"":""Record
 the running time of the 
task"",""description"":"""",""state"":""closed"",""created_at"":""2019-05-29T02:25:15.288Z"",""updated_at"":""2019-06-05T12:54:55.848Z"",""closed_at"":""2019-06-05T12:54:55.811Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3adf96
 [...]
+20,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21439510,""iid"":20,""project_id"":11624398,""title"":""ValueError:
 A graph without link has an undefined modularity"",""description"":""repo: 
https://gitee.com/haolin16/union02.git\n\nmeta分支: 
deploy-enterprise\n```\n14:04:14 ValueError: A graph without link has an 
undefined modularity\nTraceback (most recent call last):\n  File 
\""/usr/local/lib/python3.6/dist-packages/rq/worker.py\"", line 812, in 
perform_job\n    rv = job.perfo [...]
+21,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21501200,""iid"":21,""project_id"":11624398,""title"":""Test
 Uber repos"",""description"":""monday: 
[https://merico.monday.com/boards/174925610/pulses/243918190](https://merico.monday.com/boards/174925610/pulses/243918190)\n\n*
 [x]  [okbuck](https://github.com/uber/okbuck)\n* [x]  
[ringpop-go](https://github.com/uber/ringpop-go)\n* [x]  
[tchannel-go](https://github.com/uber/tchannel-go)"",""state"":""closed"",""created_at"":""2019
 [...]
+22,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21583750,""iid"":22,""project_id"":11624398,""title"":""robustness
 metric"",""description"":""current threshold is set to 0.01, the new threshold 
= 1 / num(developers) \n\ndetail: 
https://merico.monday.com/boards/174925610/pulses/244527797"",""state"":""closed"",""created_at"":""2019-06-05T00:30:34.887Z"",""updated_at"":""2019-06-05T02:13:04.071Z"",""closed_at"":""2019-06-05T02:13:04.026Z"",""closed_by"":{""id"":3455322,""username
 [...]
+23,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21584909,""iid"":23,""project_id"":11624398,""title"":""email
 Ignore 
case"",""description"":"""",""state"":""closed"",""created_at"":""2019-06-05T02:32:48.598Z"",""updated_at"":""2019-06-05T03:34:10.543Z"",""closed_at"":""2019-06-05T03:34:10.427Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3adf96a381af9f113cd6309a
 [...]
+24,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21589011,""iid"":24,""project_id"":11624398,""title"":""add
 version into getproject 
status"",""description"":"""",""state"":""closed"",""created_at"":""2019-06-05T07:29:07.031Z"",""updated_at"":""2019-06-05T13:02:57.184Z"",""closed_at"":""2019-06-05T13:02:56.509Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9e3adf96a
 [...]
+25,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21592802,""iid"":25,""project_id"":11624398,""title"":""git
 ssh clone Host key verification 
failed"",""description"":"""",""state"":""closed"",""created_at"":""2019-06-05T09:43:55.137Z"",""updated_at"":""2019-06-10T04:45:47.580Z"",""closed_at"":""2019-06-10T04:45:47.555Z"",""closed_by"":{""id"":3455322,""username"":""doubleqiang"",""name"":""Qiang
 
Sun"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/49da9
 [...]
+26,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21670901,""iid"":26,""project_id"":11624398,""title"":""confirm
 commit 
4b0e1fd0d46242973b37f3edbc72c59cd473d260"",""description"":""现在网页和excel能完全对的上了,不过4b0e1fd0d46242973b37f3edbc72c59cd473d260没拉到也是一个问题,后续还需要在确认下
 @孙强\n\nrepo: 
https://github.com/uber/tchannel-go"",""state"":""closed"",""created_at"":""2019-06-07T12:44:49.077Z"",""updated_at"":""2019-11-15T06:50:24.644Z"",""closed_at"":""2019-11-15T06:50:24.617Z"",""closed_by"":{""id
 [...]
+27,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21726803,""iid"":27,""project_id"":11624398,""title"":""ValueError,
 min() is an empty 
sequence"",""description"":""很多项目都会报这个错,但是一般将pickle文件删除,重新分析就不报错了\n\n![ca_min_bug](/uploads/955fec1766a0ef4e2d5a53072899bdb8/ca_min_bug.png)"",""state"":""closed"",""created_at"":""2019-06-10T04:48:05.959Z"",""updated_at"":""2019-06-12T23:11:14.677Z"",""closed_at"":""2019-06-12T23:11:14.649Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"
 [...]
+28,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21788574,""iid"":28,""project_id"":11624398,""title"":""[GoLang
 Graph Server] ConnectionResetError"",""description"":""repo: 
https://github.com/ethereum/go-ethereum.git(看错误的类型,应该是任何go和js的repo都有可能报)\n\n偶尔会报出以下错误\n\n```\nConnectionResetError:
 [Errno 104] Connection reset by peer\n  File \""urllib3/response.py\"", line 
397, in _error_catcher\n    yield\n  File \""urllib3/response.py\"", line 707, 
in read_chunked\n    chunk = self._ha [...]
+29,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21789932,""iid"":29,""project_id"":11624398,""title"":""[BUG]
 An error was occurred during documentation 
generation."",""description"":""在执行类似请求, GET 
https://api.github.com/repositories/87335980/pulls?state=closed\u0026base=master\u0026page=50\n\nAn
 error was occurred during documentation generation. Please check the 
log\n\n\ndetail : 
http://142.93.222.77:9000/sentry/analysis-worker/issues/8/?query=is%3Aunresolved\n\nps:
 如需登录,请使用以 [...]
+30,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21796407,""iid"":30,""project_id"":11624398,""title"":""js
 graph server 
支持断点续算功能"",""description"":"""",""state"":""closed"",""created_at"":""2019-06-11T13:05:55.826Z"",""updated_at"":""2019-08-07T18:11:44.491Z"",""closed_at"":""2019-08-07T18:11:44.461Z"",""closed_by"":{""id"":2994198,""username"":""hezheng"",""name"":""Hezheng
 
Yin"",""state"":""active"",""avatar_url"":""https://secure.gravatar.com/avatar/69667c2c63ce892e11b9ac098
 [...]
+31,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21800987,""iid"":31,""project_id"":11624398,""title"":""project_commit_share
 的值全为0"",""description"":""repo: 
https://github.com/ontio/ontology.git\n\nbranch: 
develop\n\n复现过程:\n\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 
-*-\n\n\""\""\""\n复现前准备:\n0. 
从本issue下载pickle文件\nhttps://persper-my.sharepoint.com/:u:/g/personal/qiang_sun_meri_co/EWPMo3ZYeyZJsewwJT8b77EBwQdAWAzVgBvyHnqyeue0zg?e=57GW49\n\n1.
 启动go graph server\ngit cl [...]
+32,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":21851460,""iid"":32,""project_id"":11624398,""title"":""Some
 common file names are filtered out by npm registry"",""description"":""The new 
feature of filtering out third-party dependencies has a very high recall but 
also has some problems with precision. Some common file names that developers 
use are also filtered out because there exists a npm package with the same 
name. For example, 'src/index.js', 'main.js' are filtered out be [...]
+33,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":22009366,""iid"":33,""project_id"":11624398,""title"":""Improve
 the explainability of commit dev value"",""description"":""The original 
discussion happened in 
https://gitlab.com/meri.co/vdev.co/issues/384.\n\nAccording to the discussion 
above, we need to provide the following info to vdev:\n\nLegends:\n\n1. [e] - 
existing 已经存在的metric\n2. [n] - new 新增的metric\n\nDeveloper related:\n\n1. [e] 
开发价值(dev_value)\n2. [n] 开发当量(dev_equivalen [...]
+34,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":22115913,""iid"":34,""project_id"":11624398,""title"":""Preprocessing
 round"",""description"":""@rankinzheng Please review the info that we show at 
the end of the preprocessing round:\n\n1. total number of commits (提交数量)\n2. 
total number of developers (开发者数量)\n3. total LOC (总代码行数)\n4. language 
distribution (语言分布)\n5. detected third-party code (检测到的第三方库)\n6. directories 
that are recommended to exclude (推荐忽略的目录)\n7. supported langua [...]
+35,"{""ConnectionId"":1,""ProjectId"":11624398}","{""id"":22381552,""iid"":35,""project_id"":11624398,""title"":""BUG:
  计算js doc coverage错误"",""description"":""repo: 
https://github.com/wagtail/wagtail.git\n\n错误栈:\n```\nI0630 06:06:23.853005 
140291087861568 doc_coverage.py:70] {'doccoveragejs': 0.06826448348447077, 
'doxygen': 0.9317355165155293}                                          \n--- 
Logging error ---                                                               
                   [...]
diff --git a/plugins/gitlab/e2e/snapshot_tables/_tool_gitlab_issue_labels.csv 
b/plugins/gitlab/e2e/snapshot_tables/_tool_gitlab_issue_labels.csv
new file mode 100644
index 00000000..c85ba707
--- /dev/null
+++ b/plugins/gitlab/e2e/snapshot_tables/_tool_gitlab_issue_labels.csv
@@ -0,0 +1,10 @@
+connection_id,issue_id,label_name,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,20589705,P0 - 
blocking,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,3,
+1,20654851,P0 - 
blocking,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,4,
+1,21317058,P2 - 
improvement,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,16,
+1,21390168,Feature,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,18,
+1,21390176,Feature,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,19,
+1,21439510,P0 - 
blocking,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,20,
+1,21788574,P0 - 
blocking,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,28,
+1,21800987,P0 - 
blocking,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,31,
+1,22115913,Feature,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,34,
diff --git a/plugins/gitlab/e2e/snapshot_tables/_tool_gitlab_issues.csv 
b/plugins/gitlab/e2e/snapshot_tables/_tool_gitlab_issues.csv
new file mode 100644
index 00000000..6e04a612
--- /dev/null
+++ b/plugins/gitlab/e2e/snapshot_tables/_tool_gitlab_issues.csv
@@ -0,0 +1,630 @@
+connection_id,gitlab_id,project_id,number,state,title,body,priority,type,status,assignee_id,assignee_name,lead_time_minutes,url,closed_at,gitlab_created_at,gitlab_updated_at,severity,component,time_estimate,total_time_spent,created_at,updated_at,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,20154666,11624398,1,closed,Call-commit graph spec v2.0,"Here is the [alpha 
version of 
v2.0](https://paper.dropbox.com/doc/Call-Commit-Graph-Specification--AbdAXg1s2CAz97ZkRS9H0RzuAg-E3EIqOD2MrNXXGwYXRSED#:uid=336346991861768974394903&h2=v2.0-Alpha-(4/17/19)).
 Let's use this issue for discussion and feedback.
+
+Overview
+The major changes in this version:
+
+1. Before, a multi-language project has multiple call-commit graphs, one for 
each language. In this version 2.0, we’re merging call-commit graphs of 
different languages into a single call-commit graph and provide the ability to 
do node/edge queries by language. This will simplify our data storage and share 
computation process.
+2. A `Node` in the graph can be uniquely identified by its `id` together with 
`language` attribute
+3. `NodeId` is added to represent the info needed to uniquely identify a `Node`
+4. `HistoryEntry` is added to represent a function’s changes in a commit
+5. `addedBy` is added to `Node`
+6. `Commit` has several new attributes to store all relevant meta info, 
including: `committerName`, `committerEmail`, `parents`, `authorDate`, 
`commitDate`",,,,0,,149525,,2019-07-30T20:22:02.465+00:00,2019-04-18T00:16:04.745+00:00,2020-02-26T07:08:40.176+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,1,
+1,20487839,11624398,2,closed,集成star-rank数据,,,,,3463231,xzheng,13639,,2019-05-10T14:57:35.763+00:00,2019-05-01T03:38:16.909+00:00,2019-05-10T14:57:35.790+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,2,
+1,20589705,11624398,3,closed,AttributeError: 'NoneType' object has no 
attribute 'getText',"项目: 
+`https://github.com/ethereum/ethereumj.git`
+
+traceback:
+```
+Traceback (most recent call last):
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/worker.py"",
 line 799, in perform_job
+    rv = job.perform()
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/job.py"",
 line 600, in perform
+    self._result = self._execute()
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/job.py"",
 line 606, in _execute
+    return self.func(*self.args, **self.kwargs)
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 246, in 
analyzing
+    raise e
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 238, in 
analyzing
+    analyzing_repo(git_url, batch_time, callback_address, auth_type, username, 
password, private_key)
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 206, in 
analyzing_repo
+    raise e
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 190, in 
analyzing_repo
+    loop.run_until_complete(az.analyzing(new_pickle_path))
+  File ""/usr/lib/python3.6/asyncio/base_events.py"", line 473, in 
run_until_complete
+    return future.result()
+  File ""/code-analytics/persper/analytics/multi_analyzer.py"", line 58, in 
analyzing
+    await analyzer.analyze()
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 180, in analyze
+    await self._analyzeCommit(commit, expectedParentCommit, 
CommitSeekingMode.NormalForward)
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 243, in 
_analyzeCommit
+    old_fname, old_src, new_fname, new_src, diff.diff)
+  File ""/meta-analytics/merico/graphserver/java/java_graph_server.py"", line 
67, in update_graph
+    get_function_range_java)
+  File ""/code-analytics/persper/analytics/c.py"", line 27, in 
function_change_stats
+    *ranges_func(new_ast), inv_adds, inv_dels, separate=True)
+  File ""/meta-analytics/merico/graphserver/java/java_helper.py"", line 125, 
in get_function_range_java
+    walker.walk(collector, tree)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 151, in walk
+    self.walk(listener, child)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 151, in walk
+    self.walk(listener, child)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 151, in walk
+    self.walk(listener, child)
+  [Previous line repeated 3 more times]
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 149, in walk
+    self.enterRule(listener, t)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 163, in enterRule
+    ctx.enterRule(listener)
+  File ""/meta-analytics/merico/parser/java/JavaParser.py"", line 2614, in 
enterRule
+    listener.enterMethodDeclaration(self)
+  File ""/meta-analytics/merico/graphserver/java/java_helper.py"", line 40, in 
enterMethodDeclaration
+    name = ctx.IDENTIFIER().getText()
+AttributeError: 'NoneType' object has no attribute 'getText'
+```",,,,3407892,farhaanbukhsh,2596,,2019-05-07T03:06:40.441+00:00,2019-05-05T07:49:57.735+00:00,2019-05-07T03:06:40.476+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,3,
+1,20654851,11624398,4,closed,Remove developers who do not have an 
email,,,,,3455322,doubleqiang,13,,2019-05-07T13:54:34.254+00:00,2019-05-07T13:40:45.484+00:00,2019-05-07T13:54:34.347+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,4,
+1,20762881,11624398,5,closed,grpc server启动失败,"```
+th (from tensorflow.python.framework.ops) is deprecated and will be removed in 
a future version.
+Instructions for updating:
+Colocations handled automatically by placer.
+Traceback (most recent call last):
+  File ""server.py"", line 11, in <module>
+    from merico.grpc.api import *
+  File ""/meta-analytics/merico/grpc/api/__init__.py"", line 1, in <module>
+    from .commits import *
+  File ""/meta-analytics/merico/grpc/api/commits.py"", line 3, in <module>
+    from merico.grpc.repository import Repository
+  File ""/meta-analytics/merico/grpc/repository.py"", line 13, in <module>
+    from merico.analyzer.meta_analyzer import MetaAnalyzer
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 25, in 
<module>
+    class MetaAnalyzer(MultiAnalyzer):
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 27, in 
MetaAnalyzer
+    _classifier = CommitMessageClassifier.load(""apache_a097395_1"")
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/src/commit-classification/commitclassifier/commit_message_classifier.py"",
 line 179, in load
+    classifier = CommitMessageClassifier.load_from_dict(classifier_dict, 
weights_file_path=_model_path(name, 'h5'))
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/src/commit-classification/commitclassifier/commit_message_classifier.py"",
 line 188, in load_from_dict
+    classifier = CommitMessageClassifier(input_encoder, model_builder, 
output_encoder, weights_file_path=weights_file_path)
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/src/commit-classification/commitclassifier/commit_message_classifier.py"",
 line 33, in __init__
+    self._model.load_weights(weights_file_path)
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/lib/python3.6/site-packages/keras/engine/network.py"",
 line 1157, in load_weights
+    with h5py.File(filepath, mode='r') as f:
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/lib/python3.6/site-packages/h5py/_hl/files.py"",
 line 394, in __init__
+    swmr=swmr)
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/lib/python3.6/site-packages/h5py/_hl/files.py"",
 line 170, in make_fid
+    fid = h5f.open(name, flags, fapl=fapl)
+  File ""h5py/_objects.pyx"", line 54, in h5py._objects.with_phil.wrapper
+  File ""h5py/_objects.pyx"", line 55, in h5py._objects.with_phil.wrapper
+  File ""h5py/h5f.pyx"", line 85, in h5py.h5f.open
+OSError: Unable to open file (file signature not found)
+
+```",,,,3455322,doubleqiang,692,,2019-05-11T02:30:43.647+00:00,2019-05-10T14:58:19.126+00:00,2019-05-11T02:30:43.667+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,5,
+1,20843580,11624398,6,closed,Tech tags and their classes,"```
+开发
+    后端
+        开发语言
+            python
+            php
+            ruby
+            java
+            Node.js
+            Golang
+            Erlang
+            lua
+            scala
+            C#
+            coffeescript
+        框架
+            .NET
+            asp.net
+            Rails
+            ThinkPHP
+            ZendFramework
+            Spring
+            Structs
+            Hibernate
+            Flask
+            Django
+        网络
+            网络应用
+                http
+                https
+                ssh
+                Oauth
+                ftp
+            网络底层
+                tcp 
+                udp
+                socket
+                dns
+                select
+                epool
+            框架
+                tornado
+        异步IO
+            gevent
+        接口定义
+            Graphql
+            rpc
+            GrpcProto
+            ProtoBuf
+            Xml
+            Json
+            SOA
+            RESTFUL
+            JMS
+            thrift
+        数据库
+            关系型数据库
+                mysql
+                postgredb
+                sqlserver
+                oracle 
+                mariadb
+            非关系型数据库
+                orientdb
+                mongodb
+                hbase
+                couchbase
+                cassandra
+            数据库定义
+                ORM
+                sql file
+        缓存
+            Memcached
+            redis
+        消息队列
+            RabbitMQ
+            ZeroMQ
+            ActiveMQ
+            Kafka
+        搜索引擎
+            elasticsearch
+            sphinx
+            solr
+            lucene
+        Web servers
+            nginx
+            apache
+            MS IIS
+            TOMCAT
+            CGI
+            Httpd
+        操作系统
+            UNIX
+            Linux
+            Windows
+        分布式计算
+            hadoop
+            map-reduce
+    前端
+        网页前端
+            javascript
+                ajax
+                XSS
+                CSRF
+                jquery
+                ES6
+                node.js
+                npm
+                yam
+                React.js
+                Redux
+                Angular
+                Vue.js
+            html
+                seo
+                html5
+            css
+                css3
+                bootstrap
+                bulma
+        手机应用
+            android
+            
+            ios
+                Object-c
+        PC客户端
+        
+    运维
+        docker file
+        
+    嵌入式开发
+```",,,,0,,267380,,2019-11-15T06:49:31.564+00:00,2019-05-13T14:29:20.224+00:00,2019-11-15T06:49:31.589+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,6,
+1,20884758,11624398,7,closed,触发发送周报,https://gitlab.com/meri.co/vdev.co/merge_requests/457,,,,3455322,doubleqiang,265983,,2019-11-15T06:49:57.777+00:00,2019-05-14T13:46:06.308+00:00,2019-11-15T06:49:57.807+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,7,
+1,20885280,11624398,8,closed,"利用ngingx 反向代理grpc 服务, 启动多个grpc 
实例",,,,,3455322,doubleqiang,265979,,2019-11-15T06:49:55.026+00:00,2019-05-14T13:50:03.766+00:00,2019-11-15T06:49:55.056+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,8,
+1,20925640,11624398,9,closed,star-rank数据 
获取从数据库获取,,,,,3455322,doubleqiang,264610,,2019-11-15T06:49:49.562+00:00,2019-05-15T12:39:11.098+00:00,2019-11-15T06:49:49.590+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,9,
+1,21054967,11624398,10,closed,关于create_repo.py 复制测试文件到repos目录下出现的问题,"在服务器和CI 
runner运行测试时,出现在测试 
test_1_1_3_3_3_update_lines.py、test_1_1_4_2_no_new_line_between_functions.py 
两个文件时,出现一下情况
+
+```
+    if with_exceptions and status != 0:  
+       raise GitCommandError(command, status, stderr_value, stdout_value)  
+       git.exc.GitCommandError: Cmd('git') failed due to: exit code(1)  
+         cmdline: git commit -m N  
+         stdout: 'On branch master  
+       nothing to commit, working tree clean  
+```
+
+yizhe通过在create_repo.py 添加sleep(1)可以解决该问题,怀疑是复制文件的过程和commit add 
步骤发生了异步执行,在没有复制完代码前就运行了git add,但是通过调用 `strace -o out.txt -T -tt -e trace=all 
-p`发现复制文件并没有消耗太多时间,log见附件
+[out.txt](/uploads/42d1ba18726e74797144aea652a7012b/out.txt)",,,,0,,115857,,2019-08-07T18:12:18.826+00:00,2019-05-19T07:15:16.750+00:00,2019-08-07T18:12:18.856+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,10,
+1,21056626,11624398,11,closed,commit 中author.email 是None,"repo: 
https://github.com/eosio/eos.git
+
+commit: dbbd1ddcf7291ffa3714c86414a7439898246ed3
+
+
+meta analystics branch: 
develop",,,,3455322,doubleqiang,5621,,2019-05-23T06:17:20.453+00:00,2019-05-19T08:35:39.623+00:00,2019-05-23T06:17:20.475+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,11,
+1,21208504,11624398,12,closed,grpc getCommit 增加add line 和del 
line,,,,,3455322,doubleqiang,18367,,2019-06-05T00:25:52.902+00:00,2019-05-23T06:18:01.863+00:00,2019-06-05T00:25:52.920+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,12,
+1,21208538,11624398,13,closed,grpc 中 
优化GetEmailModuleValues的速度,,,,,3455322,doubleqiang,7772,,2019-05-28T15:52:05.775+00:00,2019-05-23T06:19:33.497+00:00,2019-05-28T15:52:05.843+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,13,
+1,21226518,11624398,14,closed,"Can not get meta dev value,  min() arg is an 
empty sequence","repo : https://github.com/adishavit/argh.git
+
+接口: 
GetProjectStatus",,,,3455322,doubleqiang,7867,,2019-05-29T02:22:58.477+00:00,2019-05-23T15:15:44.721+00:00,2019-05-29T02:22:58.517+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,14,
+1,21298841,11624398,15,closed,ci memroy 
error,https://gitlab.com/meri.co/meta-analytics/-/jobs/219315516,,,,3269714,xiaoerlaigeidd,94662,,2019-07-30T20:06:07.544+00:00,2019-05-26T02:24:04.521+00:00,2019-07-30T20:06:07.582+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,15,
+1,21317058,11624398,16,closed,Change /data to a local dir,"While installing 
according to 
https://gitlab.com/meri.co/meta-analytics/wikis/Code-Analytics-Local-Installation-Guide:
+```
+2019-05-27 12:07:45.953396: I tensorflow/compiler/xla/service/service.cc:158]  
 StreamExecutor device (0): <undefined>, <undefined>
+Loaded model apache_a097395_1
+in test analyze, ex: [Errno 13] Permission denied: '/data'
+```
+It is better to use a local dir like `$HOME/data` and automatically create 
that dir.
+(I can bypass this issue by creating `/data` with `sudo` and then 
`chmod`.)",,,,3455322,doubleqiang,1083766,,2021-06-17T19:08:45.325+00:00,2019-05-27T04:22:09.273+00:00,2021-06-17T19:08:45.340+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,16,
+1,21338868,11624398,17,closed,Getting doc_coverage error:  division by 
zero,"repo: https://github.com/haolinmeri/0526gopub.git(go项目)
+
+meta-analystics branch: 
feature-five-metrics",,,,3455322,doubleqiang,19465,,2019-06-10T04:46:08.193+00:00,2019-05-27T16:20:31.078+00:00,2019-06-10T04:46:08.213+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,17,
+1,21390168,11624398,18,closed,worker better exit 
method,,,,,3455322,doubleqiang,90342,,2019-07-30T20:07:21.761+00:00,2019-05-29T02:24:39.023+00:00,2019-07-30T20:07:21.840+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,18,
+1,21390176,11624398,19,closed,Record the running time of the 
task,,,,,3455322,doubleqiang,10709,,2019-06-05T12:54:55.811+00:00,2019-05-29T02:25:15.288+00:00,2019-06-05T12:54:55.848+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,19,
+1,21439510,11624398,20,closed,ValueError: A graph without link has an 
undefined modularity,"repo: https://gitee.com/haolin16/union02.git
+
+meta分支: deploy-enterprise
+```
+14:04:14 ValueError: A graph without link has an undefined modularity
+Traceback (most recent call last):
+  File ""/usr/local/lib/python3.6/dist-packages/rq/worker.py"", line 812, in 
perform_job
+    rv = job.perform()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 588, in 
perform
+    self._result = self._execute()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 594, in 
_execute
+    return self.func(*self.args, **self.kwargs)
+  File ""/meta-analytics/merico/grpc/repository.py"", line 590, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 584, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 548, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 540, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 326, in 
start_compute_data
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 148, in 
project_modularity
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 148, in 
compute_modularity
+    return self.graph.compute_modularity()
+  File ""/code-analytics/persper/analytics/call_commit_graph.py"", line 263, 
in compute_modularity
+    modularity = community.modularity(partition, graph)
+  File 
""/usr/local/lib/python3.6/dist-packages/community/community_louvain.py"", line 
141, in modularity
+    raise ValueError(""A graph without link has an undefined modularity"")
+ValueError: A graph without link has an undefined modularity
+Traceback (most recent call last):
+  File ""/usr/local/lib/python3.6/dist-packages/rq/worker.py"", line 812, in 
perform_job
+    rv = job.perform()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 588, in 
perform
+    self._result = self._execute()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 594, in 
_execute
+    return self.func(*self.args, **self.kwargs)
+  File ""/meta-analytics/merico/grpc/repository.py"", line 590, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 584, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 548, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 540, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 326, in 
start_compute_data
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 148, in 
project_modularity
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 148, in 
compute_modularity
+    return self.graph.compute_modularity()
+  File ""/code-analytics/persper/analytics/call_commit_graph.py"", line 263, 
in compute_modularity
+    modularity = community.modularity(partition, graph)
+  File 
""/usr/local/lib/python3.6/dist-packages/community/community_louvain.py"", line 
141, in modularity
+    raise ValueError(""A graph without link has an undefined modularity"")
+ValueError: A graph without link has an undefined modularity
+
+```",,,,3959846,huangwenren,2827,,2019-06-01T13:20:50.934+00:00,2019-05-30T14:13:21.259+00:00,2019-06-01T13:20:50.964+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,20,
+1,21501200,11624398,21,closed,Test Uber repos,"monday: 
[https://merico.monday.com/boards/174925610/pulses/243918190](https://merico.monday.com/boards/174925610/pulses/243918190)
+
+* [x]  [okbuck](https://github.com/uber/okbuck)
+* [x]  [ringpop-go](https://github.com/uber/ringpop-go)
+* [x]  
[tchannel-go](https://github.com/uber/tchannel-go)",,,,0,,84605,,2019-07-30T20:06:58.389+00:00,2019-06-02T02:01:07.281+00:00,2019-07-30T20:06:58.423+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,21,
+1,21583750,11624398,22,closed,robustness metric,"current threshold is set to 
0.01, the new threshold = 1 / num(developers) 
+
+detail: 
https://merico.monday.com/boards/174925610/pulses/244527797",,,,3455322,doubleqiang,102,,2019-06-05T02:13:04.026+00:00,2019-06-05T00:30:34.887+00:00,2019-06-05T02:13:04.071+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,22,
+1,21584909,11624398,23,closed,email Ignore 
case,,,,,3455322,doubleqiang,61,,2019-06-05T03:34:10.427+00:00,2019-06-05T02:32:48.598+00:00,2019-06-05T03:34:10.543+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,23,
+1,21589011,11624398,24,closed,add version into getproject 
status,,,,,3455322,doubleqiang,333,,2019-06-05T13:02:56.509+00:00,2019-06-05T07:29:07.031+00:00,2019-06-05T13:02:57.184+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,24,
+1,21592802,11624398,25,closed,git ssh clone Host key verification 
failed,,,,,3455322,doubleqiang,6901,,2019-06-10T04:45:47.555+00:00,2019-06-05T09:43:55.137+00:00,2019-06-10T04:45:47.580+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,25,
+1,21670901,11624398,26,closed,confirm commit 
4b0e1fd0d46242973b37f3edbc72c59cd473d260,"现在网页和excel能完全对的上了,不过4b0e1fd0d46242973b37f3edbc72c59cd473d260没拉到也是一个问题,后续还需要在确认下
 @孙强
+
+repo: 
https://github.com/uber/tchannel-go",,,,3455322,doubleqiang,231485,,2019-11-15T06:50:24.617+00:00,2019-06-07T12:44:49.077+00:00,2019-11-15T06:50:24.644+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,26,
+1,21726803,11624398,27,closed,"ValueError, min() is an empty 
sequence","很多项目都会报这个错,但是一般将pickle文件删除,重新分析就不报错了
+
+![ca_min_bug](/uploads/955fec1766a0ef4e2d5a53072899bdb8/ca_min_bug.png)",,,,0,,3983,,2019-06-12T23:11:14.649+00:00,2019-06-10T04:48:05.959+00:00,2019-06-12T23:11:14.677+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,27,
+1,21788574,11624398,28,closed,[GoLang Graph Server] 
ConnectionResetError,"repo: 
https://github.com/ethereum/go-ethereum.git(看错误的类型,应该是任何go和js的repo都有可能报)
+
+偶尔会报出以下错误
+
+```
+ConnectionResetError: [Errno 104] Connection reset by peer
+  File ""urllib3/response.py"", line 397, in _error_catcher
+    yield
+  File ""urllib3/response.py"", line 707, in read_chunked
+    chunk = self._handle_chunk(amt)
+  File ""urllib3/response.py"", line 653, in _handle_chunk
+    value = self._fp._safe_read(amt)
+  File ""http/client.py"", line 612, in _safe_read
+    chunk = self.fp.read(min(amt, MAXAMOUNT))
+  File ""socket.py"", line 586, in readinto
+    return self._sock.recv_into(b)
+ProtocolError: (""Connection broken: ConnectionResetError(104, 'Connection 
reset by peer')"", ConnectionResetError(104, 'Connection reset by peer'))
+  File ""requests/models.py"", line 750, in generate
+    for chunk in self.raw.stream(chunk_size, decode_content=True):
+  File ""urllib3/response.py"", line 527, in stream
+    for line in self.read_chunked(amt, decode_content=decode_content):
+  File ""urllib3/response.py"", line 732, in read_chunked
+    self._original_response.close()
+  File ""contextlib.py"", line 99, in __exit__
+    self.gen.throw(type, value, traceback)
+  File ""urllib3/response.py"", line 415, in _error_catcher
+    raise ProtocolError('Connection broken: %r' % e, e)
+ChunkedEncodingError: (""Connection broken: ConnectionResetError(104, 
'Connection reset by peer')"", ConnectionResetError(104, 'Connection reset by 
peer'))
+  File ""rq/worker.py"", line 812, in perform_job
+    rv = job.perform()
+  File ""rq/job.py"", line 588, in perform
+    self._result = self._execute()
+  File ""rq/job.py"", line 594, in _execute
+    return self.func(*self.args, **self.kwargs)
+  File ""merico/grpc/repository.py"", line 631, in analyzing_job
+    raise e
+  File ""merico/grpc/repository.py"", line 628, in analyzing_job
+    auth_type, username, password, private_key)
+  File ""merico/grpc/repository.py"", line 605, in analyzing_repo
+    raise e
+  File ""merico/grpc/repository.py"", line 597, in analyzing_repo
+    repo.start_compute_data()
+  File ""merico/grpc/repository.py"", line 315, in start_compute_data
+    module_contrib_data = self.analyzer.module_contrib(dev_dict)
+  File ""merico/analyzer/meta_analyzer.py"", line 77, in module_contrib
+    analyzer.graph, self._linguist[lang], email))
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 113, in graph
+    return self._graphServer.get_graph()
+  File ""merico/graphserver/go/go_graph_server.py"", line 94, in get_graph
+    r = self._session.get(graph_url)
+  File ""requests/sessions.py"", line 546, in get
+    return self.request('GET', url, **kwargs)
+  File ""requests/sessions.py"", line 533, in request
+    resp = self.send(prep, **send_kwargs)
+  File ""requests/sessions.py"", line 686, in send
+    r.content
+  File ""requests/models.py"", line 828, in content
+    self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b''
+  File ""requests/models.py"", line 753, in generate
+    raise ChunkedEncodingError(e)
+```
+
+detail : 
http://142.93.222.77:9000/sentry/analysis-worker/issues/22/?query=is%3Aresolved
+
+ps: 如需登录,请使用以下用户名/密码, 
[email protected]/sq874948234",,,,3403757,yizhe.merico,225872,,2019-11-15T06:50:33.056+00:00,2019-06-11T10:18:04.449+00:00,2019-11-15T06:50:33.090+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,28,
+1,21789932,11624398,29,closed,[BUG] An error was occurred during documentation 
generation.,"在执行类似请求, GET 
https://api.github.com/repositories/87335980/pulls?state=closed&base=master&page=50
+
+An error was occurred during documentation generation. Please check the log
+
+
+detail : 
http://142.93.222.77:9000/sentry/analysis-worker/issues/8/?query=is%3Aunresolved
+
+ps: 如需登录,请使用以下用户名/密码, 
[[email protected]](mailto:[email protected])/sq874948234",,,,3455322,doubleqiang,225829,,2019-11-15T06:50:37.790+00:00,2019-06-11T11:01:04.373+00:00,2019-11-15T06:50:37.815+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,29,
+1,21796407,11624398,30,closed,js graph server 
支持断点续算功能,,,,,3455322,doubleqiang,82385,,2019-08-07T18:11:44.461+00:00,2019-06-11T13:05:55.826+00:00,2019-08-07T18:11:44.491+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,30,
+1,21800987,11624398,31,closed,project_commit_share 的值全为0,"repo: 
https://github.com/ontio/ontology.git
+
+branch: develop
+
+复现过程:
+
+```python
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+""""""
+复现前准备:
+0. 从本issue下载pickle文件
+https://persper-my.sharepoint.com/:u:/g/personal/qiang_sun_meri_co/EWPMo3ZYeyZJsewwJT8b77EBwQdAWAzVgBvyHnqyeue0zg?e=57GW49
+
+1. 启动go graph server
+git clone [email protected]:meri.co/golang/graph-server.git
+cd graph-server && go run app/graphserver/main.go -addr :9089
+
+2. 设置hosts
+echo ""127.0.0.1    gs-go"" > /etc/hosts
+
+3. clone ontio/ontology 项目到对应目录
+git clone https://github.com/ontio/ontology.git /data/repos/ontio/ontology
+""""""
+
+import pickle
+
+pickle_path = '/home/xxq/Downloads/3113361428.pickle'
+with open(pickle_path,mode='rb') as f:
+    az = pickle.load(f)
+
+az.project_commit_share()
+```
+
+有报一个runtime warning
+```
+/home/xxq/codes/src/gitlab.com/persper/code-analytics/persper/util/normalize_score.py:11:
 RuntimeWarning: invalid value encountered in double_scalars
+  normalized_scores[idx] = scores[idx] / score_sum * coef
+```",,,,2994198,hezheng,76023,,2019-08-03T10:01:26.955+00:00,2019-06-11T14:58:22.022+00:00,2019-08-03T10:01:26.990+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,31,
+1,21851460,11624398,32,closed,Some common file names are filtered out by npm 
registry,"The new feature of filtering out third-party dependencies has a very 
high recall but also has some problems with precision. Some common file names 
that developers use are also filtered out because there exists a npm package 
with the same name. For example, 'src/index.js', 'main.js' are filtered out 
because of https://www.npmjs.com/package/index and 
https://www.npmjs.com/package/main.
+
+I've added several examples in the unit tests (`test/js/test_file_filter.py`). 
They're currently commented out so that the tests can pass. Please look into 
this issue and make sure the tests can pass with my examples 
uncommented.",,,,3959846,huangwenren,223892,,2019-11-15T06:51:19.593+00:00,2019-06-12T19:19:03.868+00:00,2019-11-15T06:51:19.619+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,32,
+1,22009366,11624398,33,closed,Improve the explainability of commit dev 
value,"The original discussion happened in 
https://gitlab.com/meri.co/vdev.co/issues/384.
+
+According to the discussion above, we need to provide the following info to 
vdev:
+
+Legends:
+
+1. [e] - existing 已经存在的metric
+2. [n] - new 新增的metric
+
+Developer related:
+
+1. [e] 开发价值(dev_value)
+2. [n] 开发当量(dev_equivalent)
+3. [?] 排名(ranking)
+4. [e] 总提交数(num_commits)
+5. [n] 提交数占比(share_commits)
+6. [n] 开发价值和提交数比(ratio_value_commits)
+7. [e] 新增的代码行数(num_additions)
+8. [e] 删除的代码行数(num_deletions)
+9. [n] 总代码行数占比(share_loc)
+10. [n] 开发价值和代码行数比(ratio_value_loc)
+
+Commit related:
+
+1. [e] 开发价值(dev_value)
+2. [n] 开发当量(dev_equivalent)
+3. [?] 排名(ranking)
+4. [e] 新增的代码行数(num_additions)
+5. [e] 删除的代码行数(num_deletions)
+6. [n] 总代码行数占比(share_loc)
+7. [n] 开发价值和代码行数比(ratio_value_loc)
+8. [e] 修改的函数量(num_functions)
+
+Function related:
+
+1. [e] 函数名(signature)
+2. [e] 所在文件(file)
+3. [e] 函数总开发价值(function_dev_value)
+4. [e] 提交所占开发价值(commit_dev_value)
+5. [e] 函数总开发当量(function_dev_equivalent)
+6. [e] 提交所占开发量(commit_dev_equivalent)
+7. [e] 新增的代码行数(num_additions)
+8. [e] 删除的代码行数(num_deletions)
+9. [e] 入度(in_degree)
+10. [e] 
出度(out_degree)",,,,0,,61393,,2019-07-30T20:08:36.934+00:00,2019-06-18T04:54:51.903+00:00,2019-07-30T20:08:36.963+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,33,
+1,22115913,11624398,34,closed,Preprocessing round,"@rankinzheng Please review 
the info that we show at the end of the preprocessing round:
+
+1. total number of commits (提交数量)
+2. total number of developers (开发者数量)
+3. total LOC (总代码行数)
+4. language distribution (语言分布)
+5. detected third-party code (检测到的第三方库)
+6. directories that are recommended to exclude (推荐忽略的目录)
+7. supported languages (支持的语言)
+
+The formal analysis can take the following parameters:
+
+1. A blacklist for paths to exclude
+2. A blacklist of commits to 
exclude",,,,0,,43672,,2019-07-21T14:26:48.861+00:00,2019-06-21T06:34:41.804+00:00,2019-07-21T14:26:48.905+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,34,
+1,22381552,11624398,35,closed,BUG:  计算js doc coverage错误,"repo: 
https://github.com/wagtail/wagtail.git
+
+错误栈:
+```
+I0630 06:06:23.853005 140291087861568 doc_coverage.py:70] {'doccoveragejs': 
0.06826448348447077, 'doxygen': 0.9317355165155293}                             
             
+--- Logging error ---                                                          
                                                                                
         
+Traceback (most recent call last):                                             
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 994, in emit           
                                                                                
            
+    msg = self.format(record)                                                  
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 840, in format         
                                                                                
            
+    return fmt.format(record)                                                  
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 928, in format                                                             
               
+    return prefix + super(PythonFormatter, self).format(record)                
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 577, in format         
                                                                                
            
+    record.message = record.getMessage()                                       
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 338, in getMessage     
                                                                                
            
+    msg = msg % self.args                                                      
                                                                                
          
+TypeError: not all arguments converted during string formatting                
                                                                                
          
+Call stack:                                                                    
                                                                                
          
+  File ""test_analyze.py"", line 21, in <module>                               
                                                                                
            
+    repo.start_compute_data()                                                  
                                                                                
          
+  File ""/meta-analytics/merico/grpc/repository.py"", line 344, in 
start_compute_data                                                              
                        
+    doc_coverage_data = self.compute_doc_coverage(self._repo_path)             
                                                                                
          
+  File ""/meta-analytics/merico/grpc/repository.py"", line 432, in 
compute_doc_coverage                                                            
                        
+    return doc_cov_az.doc_coverage()                                           
                                                                                
          
+  File ""/meta-analytics/merico/analyzer/doc_coverage.py"", line 74, in 
doc_coverage                                                                    
                   
+    coverage += parser() * weight                                              
                                                                                
          
+  File ""/meta-analytics/merico/analyzer/doc_coverage.py"", line 145, in 
coverage_js                                                                     
                  
+    _logger.error('coverage_js errors: ', result.stderr)                       
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1337, in error         
                                                                                
            
+    self._log(ERROR, msg, args, **kwargs)                                      
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1444, in _log          
                                                                                
            
+    self.handle(record)                                                        
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1454, in handle        
                                                                                
            
+    self.callHandlers(record)                                                  
                                                                                
          
+
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1454, in handle        
                                                                                
   [39/1940]
+    self.callHandlers(record)                                                  
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1516, in callHandlers  
                                                                                
            
+    hdlr.handle(record)                                                        
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 891, in handle                                                             
              
+    return self._current_handler.handle(record)                                
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 865, in handle         
                                                                                
            
+    self.emit(record)                                                          
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 825, in emit                                                               
               
+    self._log_to_stderr(record)                                                
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 797, in _log_to_stderr                                                     
               
+    super(PythonHandler, self).emit(record)                                    
                                                                                
         
+Message: 'coverage_js errors: '                                                
                                                                                
          
+Arguments: (b'caught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/api/admin.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzin
+g file ""/data/repos/wagtail/wagtail/client/src/api/admin.test.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/clie
+nt/src/api/client.js"": Error: Line 57: Unexpected tokencaught exception while 
analyzing file ""/data/repos/wagtail/wagtail/client/src/api/client.test.js"": 
Error: Line 1: 
+Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Button/Button.js"": Error: 
Line 1: Unexpected tokencaught excepti
+on while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Button/Button.test.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file ""
+/data/repos/wagtail/wagtail/client/src/components/Draftail/DraftUtils.js"": 
Error: Line 24: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wag
+tail/client/src/components/Draftail/DraftUtils.test.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/com
+ponents/Draftail/EditorFallback/EditorFallback.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/componen
+ts/Draftail/EditorFallback/EditorFallback.test.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/componen
+ts/Draftail/Tooltip/Tooltip.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/Tooltip
+/Tooltip.test.js"": Error: Line 1: Unexpected tokencaught exception while 
analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/EmbedBlock.js""
+: Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/EmbedBlock.test.js"":
 Error: Lin
+e 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/ImageBlock.js"":
 Error: Line 1: Unexpected t
+okencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/ImageBlock.test.js"":
 Error: Line 1: Unexpected tokencaught e
+xception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/MediaBlock.js"":
 Error: Line 1: Unexpected tokencaught exception while an
+alyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/MediaBlock.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file
+ 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/decorators/Document.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/w
+agtail/wagtail/client/src/components/Draftail/decorators/Document.test.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wag
+tail/client/src/components/Draftail/decorators/Link.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/com
+ponents/Draftail/decorators/Link.test.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Drafta
+il/decorators/TooltipEntity.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/decorat
+ors/TooltipEntity.test.js"": Error: Line 1: Unexpected tokencaught exception 
while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/index.js"": E
+rror: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/index.test.js"": 
Error: Line 1: Unexpected
+ tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/sources/ModalWorkflowSource.js"":
 Error: Line 1: Unexpected tokenc
+aught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/sources/ModalWorkflowSource.test.js"":
 Error: Line 1: Unexpected tokencau
+ght exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/Explorer.js"": 
Error: Line 1: Unexpected tokencaught exception while analyz
+ing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/Explorer.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos
+/wagtail/wagtail/client/src/components/Explorer/ExplorerHeader.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/cl$
+ing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/Explorer.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/da[0/1940]
+/wagtail/wagtail/client/src/components/Explorer/ExplorerHeader.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/cli
+ent/src/components/Explorer/ExplorerHeader.test.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/compone
+nts/Explorer/ExplorerItem.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerI
+tem.test.js"": Error: Line 1: Unexpected tokencaught exception while analyzing 
file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerPanel.js"":
 Error:
+Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerPanel.test.js"":
 Error: Line 1: Unexpect
+ed tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerToggle.js"":
 Error: Line 1: Unexpected tokencaught excep
+tion while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerToggle.test.js"":
 Error: Line 1: Unexpected tokencaught exception while anal
+yzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/PageCount.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/w
+agtail/wagtail/client/src/components/Explorer/PageCount.test.js"": Error: Line 
1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/clien
+t/src/components/Explorer/actions.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/a
+ctions.test.js"": Error: Line 1: Unexpected tokencaught exception while 
analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/index.js"": Error: 
Line
+1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/index.test.js"": 
Error: Line 1: Unexpected tokencaugh
+t exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/reducers/explorer.js"":
 Error: Line 11: Unexpected tokencaught exception whil
+e analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/reducers/explorer.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing 
+file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/reducers/nodes.js"":
 Error: Line 58: Unexpected tokencaught exception while analyzing file 
""/data/repos/w
+agtail/wagtail/client/src/components/Explorer/reducers/nodes.test.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/
+client/src/components/Icon/Icon.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Icon/Icon.te
+st.js"": Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/LoadingSpinner/LoadingSpinner.js"":
 Error:
+ Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/LoadingSpinner/LoadingSpinner.test.js"":
 Error: Line 1: 
+Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Portal/Portal.js"": Error: 
Line 1: Unexpected tokencaught excepti
+on while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Portal/Portal.test.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file ""
+/data/repos/wagtail/wagtail/client/src/components/PublicationStatus/PublicationStatus.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file ""/data/re
+pos/wagtail/wagtail/client/src/components/PublicationStatus/PublicationStatus.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos
+/wagtail/wagtail/client/src/components/Transition/Transition.js"": Error: Line 
1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/clien
+t/src/components/Transition/Transition.test.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/config/wagt
+ailConfig.js"": Error: Line 1: Unexpected tokencaught exception while 
analyzing file 
""/data/repos/wagtail/wagtail/client/src/config/wagtailConfig.test.js"": Error: 
Line 1:
+ Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/includes/initSubmenus.js"": Error: 
Line 50: Unexpected tokencaught exceptio
+n while analyzing file ""/data/repos/wagtail/wagtail/client/src/index.js"": 
Error: Line 6: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagta
+il/client/src/index.test.js"": Error: Line 1: Unexpected tokencaught exception 
while analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/actions.js"": Error: Line
+ 5: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/focus.js"": Error: Line 16: 
Unexpected tokencaught exception while
+ analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/focus.test.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file ""/data/repos/wagtail/w
+agtail/client/src/utils/performance.js"": Error: Line 31: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/polyfills.js
+"": Error: Line 6: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/tests/adapter.js"": Error: Line 1: 
Unexpected tokencaught exce
+ption while analyzing file 
""/data/repos/wagtail/wagtail/client/tests/stubs.js"": Error: Line 6: 
Unexpected tokencaught exception while analyzing file ""/data/repos/wagtail
+/wagtail/wagtail/admin/static_src/wagtailadmin/app/draftail.entry.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/
+wagtail/admin/static_src/wagtailadmin/app/wagtailadmin.entry.js"": Error: Line 
1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/wagta
+il/admin/templates/wagtailadmin/edit_handlers/inline_panel.js"": Error: Line 
1: Unexpected token %caught exception while analyzing file 
""/data/repos/wagtail/wagtail/wagta
+il/contrib/search_promotions/templates/wagtailsearchpromotions/includes/searchpromotions_formset.js"":
 Error: Line 8: Unexpected token %',) 
+```",,,,0,,36188,,2019-07-25T12:51:17.909+00:00,2019-06-30T09:42:38.585+00:00,2019-07-25T12:51:17.945+00:00,,,0,0,2022-06-19T11:55:37.946+00:00,2022-06-19T11:55:37.946+00:00,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,35,
diff --git a/plugins/gitlab/e2e/snapshot_tables/board_issues.csv 
b/plugins/gitlab/e2e/snapshot_tables/board_issues.csv
new file mode 100644
index 00000000..2f6aa0f0
--- /dev/null
+++ b/plugins/gitlab/e2e/snapshot_tables/board_issues.csv
@@ -0,0 +1,36 @@
+board_id,issue_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20154666,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,1,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20487839,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,2,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20589705,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,3,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20654851,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,4,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20762881,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,5,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20843580,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,6,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20884758,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,7,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20885280,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,8,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:20925640,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,9,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21054967,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,10,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21056626,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,11,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21208504,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,12,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21208538,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,13,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21226518,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,14,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21298841,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,15,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21317058,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,16,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21338868,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,17,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21390168,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,18,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21390176,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,19,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21439510,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,20,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21501200,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,21,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21583750,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,22,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21584909,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,23,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21589011,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,24,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21592802,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,25,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21670901,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,26,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21726803,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,27,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21788574,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,28,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21789932,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,29,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21796407,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,30,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21800987,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,31,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:21851460,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,32,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:22009366,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,33,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:22115913,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,34,
+gitlab:GitlabProject:1:11624398,gitlab:GitlabIssue:1:22381552,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,35,
diff --git a/plugins/gitlab/e2e/snapshot_tables/issues.csv 
b/plugins/gitlab/e2e/snapshot_tables/issues.csv
new file mode 100644
index 00000000..2b5388dc
--- /dev/null
+++ b/plugins/gitlab/e2e/snapshot_tables/issues.csv
@@ -0,0 +1,630 @@
+id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,url,issue_key,title,description,epic_key,type,status,original_status,story_point,resolution_date,created_date,updated_date,lead_time_minutes,parent_issue_id,priority,original_estimate_minutes,time_spent_minutes,time_remaining_minutes,creator_id,assignee_id,assignee_name,severity,component,icon_url,creator_name
+gitlab:GitlabIssue:1:20154666,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,1,,,1,Call-commit
 graph spec v2.0,"Here is the [alpha version of 
v2.0](https://paper.dropbox.com/doc/Call-Commit-Graph-Specification--AbdAXg1s2CAz97ZkRS9H0RzuAg-E3EIqOD2MrNXXGwYXRSED#:uid=336346991861768974394903&h2=v2.0-Alpha-(4/17/19)).
 Let's use this issue for discussion and feedback.
+
+Overview
+The major changes in this version:
+
+1. Before, a multi-language project has multiple call-commit graphs, one for 
each language. In this version 2.0, we’re merging call-commit graphs of 
different languages into a single call-commit graph and provide the ability to 
do node/edge queries by language. This will simplify our data storage and share 
computation process.
+2. A `Node` in the graph can be uniquely identified by its `id` together with 
`language` attribute
+3. `NodeId` is added to represent the info needed to uniquely identify a `Node`
+4. `HistoryEntry` is added to represent a function’s changes in a commit
+5. `addedBy` is added to `Node`
+6. `Commit` has several new attributes to store all relevant meta info, 
including: `committerName`, `committerEmail`, `parents`, `authorDate`, 
`commitDate`",,,DONE,,0,2019-07-30T20:22:02.465+00:00,2019-04-18T00:16:04.745+00:00,2020-02-26T07:08:40.176+00:00,149525,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:20487839,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,2,,,2,集成star-rank数据,,,,DONE,,0,2019-05-10T14:57:35.763+00:00,2019-05-01T03:38:16.909+00:00,2019-05-10T14:57:35.790+00:00,13639,,,0,0,0,,,xzheng,,,,
+gitlab:GitlabIssue:1:20589705,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,3,,,3,AttributeError:
 'NoneType' object has no attribute 'getText',"项目: 
+`https://github.com/ethereum/ethereumj.git`
+
+traceback:
+```
+Traceback (most recent call last):
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/worker.py"",
 line 799, in perform_job
+    rv = job.perform()
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/job.py"",
 line 600, in perform
+    self._result = self._execute()
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/rq/job.py"",
 line 606, in _execute
+    return self.func(*self.args, **self.kwargs)
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 246, in 
analyzing
+    raise e
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 238, in 
analyzing
+    analyzing_repo(git_url, batch_time, callback_address, auth_type, username, 
password, private_key)
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 206, in 
analyzing_repo
+    raise e
+  File ""/vdev.co/code_analysis/code_analytics_server.py"", line 190, in 
analyzing_repo
+    loop.run_until_complete(az.analyzing(new_pickle_path))
+  File ""/usr/lib/python3.6/asyncio/base_events.py"", line 473, in 
run_until_complete
+    return future.result()
+  File ""/code-analytics/persper/analytics/multi_analyzer.py"", line 58, in 
analyzing
+    await analyzer.analyze()
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 180, in analyze
+    await self._analyzeCommit(commit, expectedParentCommit, 
CommitSeekingMode.NormalForward)
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 243, in 
_analyzeCommit
+    old_fname, old_src, new_fname, new_src, diff.diff)
+  File ""/meta-analytics/merico/graphserver/java/java_graph_server.py"", line 
67, in update_graph
+    get_function_range_java)
+  File ""/code-analytics/persper/analytics/c.py"", line 27, in 
function_change_stats
+    *ranges_func(new_ast), inv_adds, inv_dels, separate=True)
+  File ""/meta-analytics/merico/graphserver/java/java_helper.py"", line 125, 
in get_function_range_java
+    walker.walk(collector, tree)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 151, in walk
+    self.walk(listener, child)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 151, in walk
+    self.walk(listener, child)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 151, in walk
+    self.walk(listener, child)
+  [Previous line repeated 3 more times]
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 149, in walk
+    self.enterRule(listener, t)
+  File 
""/root/.local/share/virtualenvs/code_analysis-f-DU2e54/lib/python3.6/site-packages/antlr4/tree/Tree.py"",
 line 163, in enterRule
+    ctx.enterRule(listener)
+  File ""/meta-analytics/merico/parser/java/JavaParser.py"", line 2614, in 
enterRule
+    listener.enterMethodDeclaration(self)
+  File ""/meta-analytics/merico/graphserver/java/java_helper.py"", line 40, in 
enterMethodDeclaration
+    name = ctx.IDENTIFIER().getText()
+AttributeError: 'NoneType' object has no attribute 'getText'
+```",,,DONE,,0,2019-05-07T03:06:40.441+00:00,2019-05-05T07:49:57.735+00:00,2019-05-07T03:06:40.476+00:00,2596,,,0,0,0,,,farhaanbukhsh,,,,
+gitlab:GitlabIssue:1:20654851,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,4,,,4,Remove
 developers who do not have an 
email,,,,DONE,,0,2019-05-07T13:54:34.254+00:00,2019-05-07T13:40:45.484+00:00,2019-05-07T13:54:34.347+00:00,13,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:20762881,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,5,,,5,grpc
 server启动失败,"```
+th (from tensorflow.python.framework.ops) is deprecated and will be removed in 
a future version.
+Instructions for updating:
+Colocations handled automatically by placer.
+Traceback (most recent call last):
+  File ""server.py"", line 11, in <module>
+    from merico.grpc.api import *
+  File ""/meta-analytics/merico/grpc/api/__init__.py"", line 1, in <module>
+    from .commits import *
+  File ""/meta-analytics/merico/grpc/api/commits.py"", line 3, in <module>
+    from merico.grpc.repository import Repository
+  File ""/meta-analytics/merico/grpc/repository.py"", line 13, in <module>
+    from merico.analyzer.meta_analyzer import MetaAnalyzer
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 25, in 
<module>
+    class MetaAnalyzer(MultiAnalyzer):
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 27, in 
MetaAnalyzer
+    _classifier = CommitMessageClassifier.load(""apache_a097395_1"")
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/src/commit-classification/commitclassifier/commit_message_classifier.py"",
 line 179, in load
+    classifier = CommitMessageClassifier.load_from_dict(classifier_dict, 
weights_file_path=_model_path(name, 'h5'))
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/src/commit-classification/commitclassifier/commit_message_classifier.py"",
 line 188, in load_from_dict
+    classifier = CommitMessageClassifier(input_encoder, model_builder, 
output_encoder, weights_file_path=weights_file_path)
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/src/commit-classification/commitclassifier/commit_message_classifier.py"",
 line 33, in __init__
+    self._model.load_weights(weights_file_path)
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/lib/python3.6/site-packages/keras/engine/network.py"",
 line 1157, in load_weights
+    with h5py.File(filepath, mode='r') as f:
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/lib/python3.6/site-packages/h5py/_hl/files.py"",
 line 394, in __init__
+    swmr=swmr)
+  File 
""/root/.local/share/virtualenvs/meta-analytics-YHILf8e4/lib/python3.6/site-packages/h5py/_hl/files.py"",
 line 170, in make_fid
+    fid = h5f.open(name, flags, fapl=fapl)
+  File ""h5py/_objects.pyx"", line 54, in h5py._objects.with_phil.wrapper
+  File ""h5py/_objects.pyx"", line 55, in h5py._objects.with_phil.wrapper
+  File ""h5py/h5f.pyx"", line 85, in h5py.h5f.open
+OSError: Unable to open file (file signature not found)
+
+```",,,DONE,,0,2019-05-11T02:30:43.647+00:00,2019-05-10T14:58:19.126+00:00,2019-05-11T02:30:43.667+00:00,692,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:20843580,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,6,,,6,Tech
 tags and their classes,"```
+开发
+    后端
+        开发语言
+            python
+            php
+            ruby
+            java
+            Node.js
+            Golang
+            Erlang
+            lua
+            scala
+            C#
+            coffeescript
+        框架
+            .NET
+            asp.net
+            Rails
+            ThinkPHP
+            ZendFramework
+            Spring
+            Structs
+            Hibernate
+            Flask
+            Django
+        网络
+            网络应用
+                http
+                https
+                ssh
+                Oauth
+                ftp
+            网络底层
+                tcp 
+                udp
+                socket
+                dns
+                select
+                epool
+            框架
+                tornado
+        异步IO
+            gevent
+        接口定义
+            Graphql
+            rpc
+            GrpcProto
+            ProtoBuf
+            Xml
+            Json
+            SOA
+            RESTFUL
+            JMS
+            thrift
+        数据库
+            关系型数据库
+                mysql
+                postgredb
+                sqlserver
+                oracle 
+                mariadb
+            非关系型数据库
+                orientdb
+                mongodb
+                hbase
+                couchbase
+                cassandra
+            数据库定义
+                ORM
+                sql file
+        缓存
+            Memcached
+            redis
+        消息队列
+            RabbitMQ
+            ZeroMQ
+            ActiveMQ
+            Kafka
+        搜索引擎
+            elasticsearch
+            sphinx
+            solr
+            lucene
+        Web servers
+            nginx
+            apache
+            MS IIS
+            TOMCAT
+            CGI
+            Httpd
+        操作系统
+            UNIX
+            Linux
+            Windows
+        分布式计算
+            hadoop
+            map-reduce
+    前端
+        网页前端
+            javascript
+                ajax
+                XSS
+                CSRF
+                jquery
+                ES6
+                node.js
+                npm
+                yam
+                React.js
+                Redux
+                Angular
+                Vue.js
+            html
+                seo
+                html5
+            css
+                css3
+                bootstrap
+                bulma
+        手机应用
+            android
+            
+            ios
+                Object-c
+        PC客户端
+        
+    运维
+        docker file
+        
+    嵌入式开发
+```",,,DONE,,0,2019-11-15T06:49:31.564+00:00,2019-05-13T14:29:20.224+00:00,2019-11-15T06:49:31.589+00:00,267380,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:20884758,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,7,,,7,触发发送周报,https://gitlab.com/meri.co/vdev.co/merge_requests/457,,,DONE,,0,2019-11-15T06:49:57.777+00:00,2019-05-14T13:46:06.308+00:00,2019-11-15T06:49:57.807+00:00,265983,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:20885280,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,8,,,8,"利用ngingx
 反向代理grpc 服务, 启动多个grpc 
实例",,,,DONE,,0,2019-11-15T06:49:55.026+00:00,2019-05-14T13:50:03.766+00:00,2019-11-15T06:49:55.056+00:00,265979,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:20925640,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,9,,,9,star-rank数据
 
获取从数据库获取,,,,DONE,,0,2019-11-15T06:49:49.562+00:00,2019-05-15T12:39:11.098+00:00,2019-11-15T06:49:49.590+00:00,264610,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21054967,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,10,,,10,关于create_repo.py
 复制测试文件到repos目录下出现的问题,"在服务器和CI runner运行测试时,出现在测试 
test_1_1_3_3_3_update_lines.py、test_1_1_4_2_no_new_line_between_functions.py 
两个文件时,出现一下情况
+
+```
+    if with_exceptions and status != 0:  
+       raise GitCommandError(command, status, stderr_value, stdout_value)  
+       git.exc.GitCommandError: Cmd('git') failed due to: exit code(1)  
+         cmdline: git commit -m N  
+         stdout: 'On branch master  
+       nothing to commit, working tree clean  
+```
+
+yizhe通过在create_repo.py 添加sleep(1)可以解决该问题,怀疑是复制文件的过程和commit add 
步骤发生了异步执行,在没有复制完代码前就运行了git add,但是通过调用 `strace -o out.txt -T -tt -e trace=all 
-p`发现复制文件并没有消耗太多时间,log见附件
+[out.txt](/uploads/42d1ba18726e74797144aea652a7012b/out.txt)",,,DONE,,0,2019-08-07T18:12:18.826+00:00,2019-05-19T07:15:16.750+00:00,2019-08-07T18:12:18.856+00:00,115857,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:21056626,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,11,,,11,commit
 中author.email 是None,"repo: https://github.com/eosio/eos.git
+
+commit: dbbd1ddcf7291ffa3714c86414a7439898246ed3
+
+
+meta analystics branch: 
develop",,,DONE,,0,2019-05-23T06:17:20.453+00:00,2019-05-19T08:35:39.623+00:00,2019-05-23T06:17:20.475+00:00,5621,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21208504,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,12,,,12,grpc
 getCommit 增加add line 和del 
line,,,,DONE,,0,2019-06-05T00:25:52.902+00:00,2019-05-23T06:18:01.863+00:00,2019-06-05T00:25:52.920+00:00,18367,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21208538,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,13,,,13,grpc
 中 
优化GetEmailModuleValues的速度,,,,DONE,,0,2019-05-28T15:52:05.775+00:00,2019-05-23T06:19:33.497+00:00,2019-05-28T15:52:05.843+00:00,7772,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21226518,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,14,,,14,"Can
 not get meta dev value,  min() arg is an empty sequence","repo : 
https://github.com/adishavit/argh.git
+
+接口: 
GetProjectStatus",,,DONE,,0,2019-05-29T02:22:58.477+00:00,2019-05-23T15:15:44.721+00:00,2019-05-29T02:22:58.517+00:00,7867,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21298841,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,15,,,15,ci
 memroy 
error,https://gitlab.com/meri.co/meta-analytics/-/jobs/219315516,,,DONE,,0,2019-07-30T20:06:07.544+00:00,2019-05-26T02:24:04.521+00:00,2019-07-30T20:06:07.582+00:00,94662,,,0,0,0,,,xiaoerlaigeidd,,,,
+gitlab:GitlabIssue:1:21317058,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,16,,,16,Change
 /data to a local dir,"While installing according to 
https://gitlab.com/meri.co/meta-analytics/wikis/Code-Analytics-Local-Installation-Guide:
+```
+2019-05-27 12:07:45.953396: I tensorflow/compiler/xla/service/service.cc:158]  
 StreamExecutor device (0): <undefined>, <undefined>
+Loaded model apache_a097395_1
+in test analyze, ex: [Errno 13] Permission denied: '/data'
+```
+It is better to use a local dir like `$HOME/data` and automatically create 
that dir.
+(I can bypass this issue by creating `/data` with `sudo` and then 
`chmod`.)",,,DONE,,0,2021-06-17T19:08:45.325+00:00,2019-05-27T04:22:09.273+00:00,2021-06-17T19:08:45.340+00:00,1083766,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21338868,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,17,,,17,Getting
 doc_coverage error:  division by zero,"repo: 
https://github.com/haolinmeri/0526gopub.git(go项目)
+
+meta-analystics branch: 
feature-five-metrics",,,DONE,,0,2019-06-10T04:46:08.193+00:00,2019-05-27T16:20:31.078+00:00,2019-06-10T04:46:08.213+00:00,19465,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21390168,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,18,,,18,worker
 better exit 
method,,,,DONE,,0,2019-07-30T20:07:21.761+00:00,2019-05-29T02:24:39.023+00:00,2019-07-30T20:07:21.840+00:00,90342,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21390176,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,19,,,19,Record
 the running time of the 
task,,,,DONE,,0,2019-06-05T12:54:55.811+00:00,2019-05-29T02:25:15.288+00:00,2019-06-05T12:54:55.848+00:00,10709,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21439510,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,20,,,20,ValueError:
 A graph without link has an undefined modularity,"repo: 
https://gitee.com/haolin16/union02.git
+
+meta分支: deploy-enterprise
+```
+14:04:14 ValueError: A graph without link has an undefined modularity
+Traceback (most recent call last):
+  File ""/usr/local/lib/python3.6/dist-packages/rq/worker.py"", line 812, in 
perform_job
+    rv = job.perform()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 588, in 
perform
+    self._result = self._execute()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 594, in 
_execute
+    return self.func(*self.args, **self.kwargs)
+  File ""/meta-analytics/merico/grpc/repository.py"", line 590, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 584, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 548, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 540, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 326, in 
start_compute_data
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 148, in 
project_modularity
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 148, in 
compute_modularity
+    return self.graph.compute_modularity()
+  File ""/code-analytics/persper/analytics/call_commit_graph.py"", line 263, 
in compute_modularity
+    modularity = community.modularity(partition, graph)
+  File 
""/usr/local/lib/python3.6/dist-packages/community/community_louvain.py"", line 
141, in modularity
+    raise ValueError(""A graph without link has an undefined modularity"")
+ValueError: A graph without link has an undefined modularity
+Traceback (most recent call last):
+  File ""/usr/local/lib/python3.6/dist-packages/rq/worker.py"", line 812, in 
perform_job
+    rv = job.perform()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 588, in 
perform
+    self._result = self._execute()
+  File ""/usr/local/lib/python3.6/dist-packages/rq/job.py"", line 594, in 
_execute
+    return self.func(*self.args, **self.kwargs)
+  File ""/meta-analytics/merico/grpc/repository.py"", line 590, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 584, in 
analyzing_job
+  File ""/meta-analytics/merico/grpc/repository.py"", line 548, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 540, in 
analyzing_repo
+  File ""/meta-analytics/merico/grpc/repository.py"", line 326, in 
start_compute_data
+  File ""/meta-analytics/merico/analyzer/meta_analyzer.py"", line 148, in 
project_modularity
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 148, in 
compute_modularity
+    return self.graph.compute_modularity()
+  File ""/code-analytics/persper/analytics/call_commit_graph.py"", line 263, 
in compute_modularity
+    modularity = community.modularity(partition, graph)
+  File 
""/usr/local/lib/python3.6/dist-packages/community/community_louvain.py"", line 
141, in modularity
+    raise ValueError(""A graph without link has an undefined modularity"")
+ValueError: A graph without link has an undefined modularity
+
+```",,,DONE,,0,2019-06-01T13:20:50.934+00:00,2019-05-30T14:13:21.259+00:00,2019-06-01T13:20:50.964+00:00,2827,,,0,0,0,,,huangwenren,,,,
+gitlab:GitlabIssue:1:21501200,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,21,,,21,Test
 Uber repos,"monday: 
[https://merico.monday.com/boards/174925610/pulses/243918190](https://merico.monday.com/boards/174925610/pulses/243918190)
+
+* [x]  [okbuck](https://github.com/uber/okbuck)
+* [x]  [ringpop-go](https://github.com/uber/ringpop-go)
+* [x]  
[tchannel-go](https://github.com/uber/tchannel-go)",,,DONE,,0,2019-07-30T20:06:58.389+00:00,2019-06-02T02:01:07.281+00:00,2019-07-30T20:06:58.423+00:00,84605,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:21583750,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,22,,,22,robustness
 metric,"current threshold is set to 0.01, the new threshold = 1 / 
num(developers) 
+
+detail: 
https://merico.monday.com/boards/174925610/pulses/244527797",,,DONE,,0,2019-06-05T02:13:04.026+00:00,2019-06-05T00:30:34.887+00:00,2019-06-05T02:13:04.071+00:00,102,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21584909,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,23,,,23,email
 Ignore 
case,,,,DONE,,0,2019-06-05T03:34:10.427+00:00,2019-06-05T02:32:48.598+00:00,2019-06-05T03:34:10.543+00:00,61,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21589011,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,24,,,24,add
 version into getproject 
status,,,,DONE,,0,2019-06-05T13:02:56.509+00:00,2019-06-05T07:29:07.031+00:00,2019-06-05T13:02:57.184+00:00,333,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21592802,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,25,,,25,git
 ssh clone Host key verification 
failed,,,,DONE,,0,2019-06-10T04:45:47.555+00:00,2019-06-05T09:43:55.137+00:00,2019-06-10T04:45:47.580+00:00,6901,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21670901,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,26,,,26,confirm
 commit 
4b0e1fd0d46242973b37f3edbc72c59cd473d260,"现在网页和excel能完全对的上了,不过4b0e1fd0d46242973b37f3edbc72c59cd473d260没拉到也是一个问题,后续还需要在确认下
 @孙强
+
+repo: 
https://github.com/uber/tchannel-go",,,DONE,,0,2019-11-15T06:50:24.617+00:00,2019-06-07T12:44:49.077+00:00,2019-11-15T06:50:24.644+00:00,231485,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21726803,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,27,,,27,"ValueError,
 min() is an empty sequence","很多项目都会报这个错,但是一般将pickle文件删除,重新分析就不报错了
+
+![ca_min_bug](/uploads/955fec1766a0ef4e2d5a53072899bdb8/ca_min_bug.png)",,,DONE,,0,2019-06-12T23:11:14.649+00:00,2019-06-10T04:48:05.959+00:00,2019-06-12T23:11:14.677+00:00,3983,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:21788574,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,28,,,28,[GoLang
 Graph Server] ConnectionResetError,"repo: 
https://github.com/ethereum/go-ethereum.git(看错误的类型,应该是任何go和js的repo都有可能报)
+
+偶尔会报出以下错误
+
+```
+ConnectionResetError: [Errno 104] Connection reset by peer
+  File ""urllib3/response.py"", line 397, in _error_catcher
+    yield
+  File ""urllib3/response.py"", line 707, in read_chunked
+    chunk = self._handle_chunk(amt)
+  File ""urllib3/response.py"", line 653, in _handle_chunk
+    value = self._fp._safe_read(amt)
+  File ""http/client.py"", line 612, in _safe_read
+    chunk = self.fp.read(min(amt, MAXAMOUNT))
+  File ""socket.py"", line 586, in readinto
+    return self._sock.recv_into(b)
+ProtocolError: (""Connection broken: ConnectionResetError(104, 'Connection 
reset by peer')"", ConnectionResetError(104, 'Connection reset by peer'))
+  File ""requests/models.py"", line 750, in generate
+    for chunk in self.raw.stream(chunk_size, decode_content=True):
+  File ""urllib3/response.py"", line 527, in stream
+    for line in self.read_chunked(amt, decode_content=decode_content):
+  File ""urllib3/response.py"", line 732, in read_chunked
+    self._original_response.close()
+  File ""contextlib.py"", line 99, in __exit__
+    self.gen.throw(type, value, traceback)
+  File ""urllib3/response.py"", line 415, in _error_catcher
+    raise ProtocolError('Connection broken: %r' % e, e)
+ChunkedEncodingError: (""Connection broken: ConnectionResetError(104, 
'Connection reset by peer')"", ConnectionResetError(104, 'Connection reset by 
peer'))
+  File ""rq/worker.py"", line 812, in perform_job
+    rv = job.perform()
+  File ""rq/job.py"", line 588, in perform
+    self._result = self._execute()
+  File ""rq/job.py"", line 594, in _execute
+    return self.func(*self.args, **self.kwargs)
+  File ""merico/grpc/repository.py"", line 631, in analyzing_job
+    raise e
+  File ""merico/grpc/repository.py"", line 628, in analyzing_job
+    auth_type, username, password, private_key)
+  File ""merico/grpc/repository.py"", line 605, in analyzing_repo
+    raise e
+  File ""merico/grpc/repository.py"", line 597, in analyzing_repo
+    repo.start_compute_data()
+  File ""merico/grpc/repository.py"", line 315, in start_compute_data
+    module_contrib_data = self.analyzer.module_contrib(dev_dict)
+  File ""merico/analyzer/meta_analyzer.py"", line 77, in module_contrib
+    analyzer.graph, self._linguist[lang], email))
+  File ""/code-analytics/persper/analytics/analyzer2.py"", line 113, in graph
+    return self._graphServer.get_graph()
+  File ""merico/graphserver/go/go_graph_server.py"", line 94, in get_graph
+    r = self._session.get(graph_url)
+  File ""requests/sessions.py"", line 546, in get
+    return self.request('GET', url, **kwargs)
+  File ""requests/sessions.py"", line 533, in request
+    resp = self.send(prep, **send_kwargs)
+  File ""requests/sessions.py"", line 686, in send
+    r.content
+  File ""requests/models.py"", line 828, in content
+    self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b''
+  File ""requests/models.py"", line 753, in generate
+    raise ChunkedEncodingError(e)
+```
+
+detail : 
http://142.93.222.77:9000/sentry/analysis-worker/issues/22/?query=is%3Aresolved
+
+ps: 如需登录,请使用以下用户名/密码, 
[email protected]/sq874948234",,,DONE,,0,2019-11-15T06:50:33.056+00:00,2019-06-11T10:18:04.449+00:00,2019-11-15T06:50:33.090+00:00,225872,,,0,0,0,,,yizhe.merico,,,,
+gitlab:GitlabIssue:1:21789932,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,29,,,29,[BUG]
 An error was occurred during documentation generation.,"在执行类似请求, GET 
https://api.github.com/repositories/87335980/pulls?state=closed&base=master&page=50
+
+An error was occurred during documentation generation. Please check the log
+
+
+detail : 
http://142.93.222.77:9000/sentry/analysis-worker/issues/8/?query=is%3Aunresolved
+
+ps: 如需登录,请使用以下用户名/密码, 
[[email protected]](mailto:[email protected])/sq874948234",,,DONE,,0,2019-11-15T06:50:37.790+00:00,2019-06-11T11:01:04.373+00:00,2019-11-15T06:50:37.815+00:00,225829,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21796407,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,30,,,30,js
 graph server 
支持断点续算功能,,,,DONE,,0,2019-08-07T18:11:44.461+00:00,2019-06-11T13:05:55.826+00:00,2019-08-07T18:11:44.491+00:00,82385,,,0,0,0,,,doubleqiang,,,,
+gitlab:GitlabIssue:1:21800987,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,31,,,31,project_commit_share
 的值全为0,"repo: https://github.com/ontio/ontology.git
+
+branch: develop
+
+复现过程:
+
+```python
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+""""""
+复现前准备:
+0. 从本issue下载pickle文件
+https://persper-my.sharepoint.com/:u:/g/personal/qiang_sun_meri_co/EWPMo3ZYeyZJsewwJT8b77EBwQdAWAzVgBvyHnqyeue0zg?e=57GW49
+
+1. 启动go graph server
+git clone [email protected]:meri.co/golang/graph-server.git
+cd graph-server && go run app/graphserver/main.go -addr :9089
+
+2. 设置hosts
+echo ""127.0.0.1    gs-go"" > /etc/hosts
+
+3. clone ontio/ontology 项目到对应目录
+git clone https://github.com/ontio/ontology.git /data/repos/ontio/ontology
+""""""
+
+import pickle
+
+pickle_path = '/home/xxq/Downloads/3113361428.pickle'
+with open(pickle_path,mode='rb') as f:
+    az = pickle.load(f)
+
+az.project_commit_share()
+```
+
+有报一个runtime warning
+```
+/home/xxq/codes/src/gitlab.com/persper/code-analytics/persper/util/normalize_score.py:11:
 RuntimeWarning: invalid value encountered in double_scalars
+  normalized_scores[idx] = scores[idx] / score_sum * coef
+```",,,DONE,,0,2019-08-03T10:01:26.955+00:00,2019-06-11T14:58:22.022+00:00,2019-08-03T10:01:26.990+00:00,76023,,,0,0,0,,,hezheng,,,,
+gitlab:GitlabIssue:1:21851460,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,32,,,32,Some
 common file names are filtered out by npm registry,"The new feature of 
filtering out third-party dependencies has a very high recall but also has some 
problems with precision. Some common file names that developers use are also 
filtered out because there exists a npm package with the same name. For 
example, 'src/index.js', 'main.js' are filtered out because of 
https://www.npmjs [...]
+
+I've added several examples in the unit tests (`test/js/test_file_filter.py`). 
They're currently commented out so that the tests can pass. Please look into 
this issue and make sure the tests can pass with my examples 
uncommented.",,,DONE,,0,2019-11-15T06:51:19.593+00:00,2019-06-12T19:19:03.868+00:00,2019-11-15T06:51:19.619+00:00,223892,,,0,0,0,,,huangwenren,,,,
+gitlab:GitlabIssue:1:22009366,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,33,,,33,Improve
 the explainability of commit dev value,"The original discussion happened in 
https://gitlab.com/meri.co/vdev.co/issues/384.
+
+According to the discussion above, we need to provide the following info to 
vdev:
+
+Legends:
+
+1. [e] - existing 已经存在的metric
+2. [n] - new 新增的metric
+
+Developer related:
+
+1. [e] 开发价值(dev_value)
+2. [n] 开发当量(dev_equivalent)
+3. [?] 排名(ranking)
+4. [e] 总提交数(num_commits)
+5. [n] 提交数占比(share_commits)
+6. [n] 开发价值和提交数比(ratio_value_commits)
+7. [e] 新增的代码行数(num_additions)
+8. [e] 删除的代码行数(num_deletions)
+9. [n] 总代码行数占比(share_loc)
+10. [n] 开发价值和代码行数比(ratio_value_loc)
+
+Commit related:
+
+1. [e] 开发价值(dev_value)
+2. [n] 开发当量(dev_equivalent)
+3. [?] 排名(ranking)
+4. [e] 新增的代码行数(num_additions)
+5. [e] 删除的代码行数(num_deletions)
+6. [n] 总代码行数占比(share_loc)
+7. [n] 开发价值和代码行数比(ratio_value_loc)
+8. [e] 修改的函数量(num_functions)
+
+Function related:
+
+1. [e] 函数名(signature)
+2. [e] 所在文件(file)
+3. [e] 函数总开发价值(function_dev_value)
+4. [e] 提交所占开发价值(commit_dev_value)
+5. [e] 函数总开发当量(function_dev_equivalent)
+6. [e] 提交所占开发量(commit_dev_equivalent)
+7. [e] 新增的代码行数(num_additions)
+8. [e] 删除的代码行数(num_deletions)
+9. [e] 入度(in_degree)
+10. [e] 
出度(out_degree)",,,DONE,,0,2019-07-30T20:08:36.934+00:00,2019-06-18T04:54:51.903+00:00,2019-07-30T20:08:36.963+00:00,61393,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:22115913,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,34,,,34,Preprocessing
 round,"@rankinzheng Please review the info that we show at the end of the 
preprocessing round:
+
+1. total number of commits (提交数量)
+2. total number of developers (开发者数量)
+3. total LOC (总代码行数)
+4. language distribution (语言分布)
+5. detected third-party code (检测到的第三方库)
+6. directories that are recommended to exclude (推荐忽略的目录)
+7. supported languages (支持的语言)
+
+The formal analysis can take the following parameters:
+
+1. A blacklist for paths to exclude
+2. A blacklist of commits to 
exclude",,,DONE,,0,2019-07-21T14:26:48.861+00:00,2019-06-21T06:34:41.804+00:00,2019-07-21T14:26:48.905+00:00,43672,,,0,0,0,,,,,,,
+gitlab:GitlabIssue:1:22381552,"{""ConnectionId"":1,""ProjectId"":11624398}",_raw_gitlab_api_issues,35,,,35,BUG:
  计算js doc coverage错误,"repo: https://github.com/wagtail/wagtail.git
+
+错误栈:
+```
+I0630 06:06:23.853005 140291087861568 doc_coverage.py:70] {'doccoveragejs': 
0.06826448348447077, 'doxygen': 0.9317355165155293}                             
             
+--- Logging error ---                                                          
                                                                                
         
+Traceback (most recent call last):                                             
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 994, in emit           
                                                                                
            
+    msg = self.format(record)                                                  
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 840, in format         
                                                                                
            
+    return fmt.format(record)                                                  
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 928, in format                                                             
               
+    return prefix + super(PythonFormatter, self).format(record)                
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 577, in format         
                                                                                
            
+    record.message = record.getMessage()                                       
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 338, in getMessage     
                                                                                
            
+    msg = msg % self.args                                                      
                                                                                
          
+TypeError: not all arguments converted during string formatting                
                                                                                
          
+Call stack:                                                                    
                                                                                
          
+  File ""test_analyze.py"", line 21, in <module>                               
                                                                                
            
+    repo.start_compute_data()                                                  
                                                                                
          
+  File ""/meta-analytics/merico/grpc/repository.py"", line 344, in 
start_compute_data                                                              
                        
+    doc_coverage_data = self.compute_doc_coverage(self._repo_path)             
                                                                                
          
+  File ""/meta-analytics/merico/grpc/repository.py"", line 432, in 
compute_doc_coverage                                                            
                        
+    return doc_cov_az.doc_coverage()                                           
                                                                                
          
+  File ""/meta-analytics/merico/analyzer/doc_coverage.py"", line 74, in 
doc_coverage                                                                    
                   
+    coverage += parser() * weight                                              
                                                                                
          
+  File ""/meta-analytics/merico/analyzer/doc_coverage.py"", line 145, in 
coverage_js                                                                     
                  
+    _logger.error('coverage_js errors: ', result.stderr)                       
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1337, in error         
                                                                                
            
+    self._log(ERROR, msg, args, **kwargs)                                      
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1444, in _log          
                                                                                
            
+    self.handle(record)                                                        
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1454, in handle        
                                                                                
            
+    self.callHandlers(record)                                                  
                                                                                
          
+
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1454, in handle        
                                                                                
   [39/1940]
+    self.callHandlers(record)                                                  
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 1516, in callHandlers  
                                                                                
            
+    hdlr.handle(record)                                                        
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 891, in handle                                                             
              
+    return self._current_handler.handle(record)                                
                                                                                
          
+  File ""/usr/lib/python3.6/logging/__init__.py"", line 865, in handle         
                                                                                
            
+    self.emit(record)                                                          
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 825, in emit                                                               
               
+    self._log_to_stderr(record)                                                
                                                                                
          
+  File ""/usr/local/lib/python3.6/dist-packages/absl/logging/__init__.py"", 
line 797, in _log_to_stderr                                                     
               
+    super(PythonHandler, self).emit(record)                                    
                                                                                
         
+Message: 'coverage_js errors: '                                                
                                                                                
          
+Arguments: (b'caught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/api/admin.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzin
+g file ""/data/repos/wagtail/wagtail/client/src/api/admin.test.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/clie
+nt/src/api/client.js"": Error: Line 57: Unexpected tokencaught exception while 
analyzing file ""/data/repos/wagtail/wagtail/client/src/api/client.test.js"": 
Error: Line 1: 
+Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Button/Button.js"": Error: 
Line 1: Unexpected tokencaught excepti
+on while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Button/Button.test.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file ""
+/data/repos/wagtail/wagtail/client/src/components/Draftail/DraftUtils.js"": 
Error: Line 24: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wag
+tail/client/src/components/Draftail/DraftUtils.test.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/com
+ponents/Draftail/EditorFallback/EditorFallback.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/componen
+ts/Draftail/EditorFallback/EditorFallback.test.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/componen
+ts/Draftail/Tooltip/Tooltip.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/Tooltip
+/Tooltip.test.js"": Error: Line 1: Unexpected tokencaught exception while 
analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/EmbedBlock.js""
+: Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/EmbedBlock.test.js"":
 Error: Lin
+e 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/ImageBlock.js"":
 Error: Line 1: Unexpected t
+okencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/ImageBlock.test.js"":
 Error: Line 1: Unexpected tokencaught e
+xception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/MediaBlock.js"":
 Error: Line 1: Unexpected tokencaught exception while an
+alyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/blocks/MediaBlock.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file
+ 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/decorators/Document.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/w
+agtail/wagtail/client/src/components/Draftail/decorators/Document.test.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wag
+tail/client/src/components/Draftail/decorators/Link.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/com
+ponents/Draftail/decorators/Link.test.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Drafta
+il/decorators/TooltipEntity.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/decorat
+ors/TooltipEntity.test.js"": Error: Line 1: Unexpected tokencaught exception 
while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/index.js"": E
+rror: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/index.test.js"": 
Error: Line 1: Unexpected
+ tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/sources/ModalWorkflowSource.js"":
 Error: Line 1: Unexpected tokenc
+aught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Draftail/sources/ModalWorkflowSource.test.js"":
 Error: Line 1: Unexpected tokencau
+ght exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/Explorer.js"": 
Error: Line 1: Unexpected tokencaught exception while analyz
+ing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/Explorer.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos
+/wagtail/wagtail/client/src/components/Explorer/ExplorerHeader.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/cl$
+ing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/Explorer.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/da[0/1940]
+/wagtail/wagtail/client/src/components/Explorer/ExplorerHeader.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/cli
+ent/src/components/Explorer/ExplorerHeader.test.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/compone
+nts/Explorer/ExplorerItem.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerI
+tem.test.js"": Error: Line 1: Unexpected tokencaught exception while analyzing 
file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerPanel.js"":
 Error:
+Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerPanel.test.js"":
 Error: Line 1: Unexpect
+ed tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerToggle.js"":
 Error: Line 1: Unexpected tokencaught excep
+tion while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/ExplorerToggle.test.js"":
 Error: Line 1: Unexpected tokencaught exception while anal
+yzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/PageCount.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/w
+agtail/wagtail/client/src/components/Explorer/PageCount.test.js"": Error: Line 
1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/clien
+t/src/components/Explorer/actions.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/a
+ctions.test.js"": Error: Line 1: Unexpected tokencaught exception while 
analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/index.js"": Error: 
Line
+1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/index.test.js"": 
Error: Line 1: Unexpected tokencaugh
+t exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/reducers/explorer.js"":
 Error: Line 11: Unexpected tokencaught exception whil
+e analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/reducers/explorer.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing 
+file 
""/data/repos/wagtail/wagtail/client/src/components/Explorer/reducers/nodes.js"":
 Error: Line 58: Unexpected tokencaught exception while analyzing file 
""/data/repos/w
+agtail/wagtail/client/src/components/Explorer/reducers/nodes.test.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/
+client/src/components/Icon/Icon.js"": Error: Line 1: Unexpected tokencaught 
exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Icon/Icon.te
+st.js"": Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/LoadingSpinner/LoadingSpinner.js"":
 Error:
+ Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/LoadingSpinner/LoadingSpinner.test.js"":
 Error: Line 1: 
+Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Portal/Portal.js"": Error: 
Line 1: Unexpected tokencaught excepti
+on while analyzing file 
""/data/repos/wagtail/wagtail/client/src/components/Portal/Portal.test.js"": 
Error: Line 1: Unexpected tokencaught exception while analyzing file ""
+/data/repos/wagtail/wagtail/client/src/components/PublicationStatus/PublicationStatus.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file ""/data/re
+pos/wagtail/wagtail/client/src/components/PublicationStatus/PublicationStatus.test.js"":
 Error: Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos
+/wagtail/wagtail/client/src/components/Transition/Transition.js"": Error: Line 
1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/clien
+t/src/components/Transition/Transition.test.js"": Error: Line 1: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/config/wagt
+ailConfig.js"": Error: Line 1: Unexpected tokencaught exception while 
analyzing file 
""/data/repos/wagtail/wagtail/client/src/config/wagtailConfig.test.js"": Error: 
Line 1:
+ Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/includes/initSubmenus.js"": Error: 
Line 50: Unexpected tokencaught exceptio
+n while analyzing file ""/data/repos/wagtail/wagtail/client/src/index.js"": 
Error: Line 6: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagta
+il/client/src/index.test.js"": Error: Line 1: Unexpected tokencaught exception 
while analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/actions.js"": Error: Line
+ 5: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/focus.js"": Error: Line 16: 
Unexpected tokencaught exception while
+ analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/focus.test.js"": Error: Line 1: 
Unexpected tokencaught exception while analyzing file ""/data/repos/wagtail/w
+agtail/client/src/utils/performance.js"": Error: Line 31: Unexpected 
tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/src/utils/polyfills.js
+"": Error: Line 6: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/client/tests/adapter.js"": Error: Line 1: 
Unexpected tokencaught exce
+ption while analyzing file 
""/data/repos/wagtail/wagtail/client/tests/stubs.js"": Error: Line 6: 
Unexpected tokencaught exception while analyzing file ""/data/repos/wagtail
+/wagtail/wagtail/admin/static_src/wagtailadmin/app/draftail.entry.js"": Error: 
Line 1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/
+wagtail/admin/static_src/wagtailadmin/app/wagtailadmin.entry.js"": Error: Line 
1: Unexpected tokencaught exception while analyzing file 
""/data/repos/wagtail/wagtail/wagta
+il/admin/templates/wagtailadmin/edit_handlers/inline_panel.js"": Error: Line 
1: Unexpected token %caught exception while analyzing file 
""/data/repos/wagtail/wagtail/wagta
+il/contrib/search_promotions/templates/wagtailsearchpromotions/includes/searchpromotions_formset.js"":
 Error: Line 8: Unexpected token %',) 
+```",,,DONE,,0,2019-07-25T12:51:17.909+00:00,2019-06-30T09:42:38.585+00:00,2019-07-25T12:51:17.945+00:00,36188,,,0,0,0,,,,,,,
diff --git a/plugins/gitlab/tasks/issue_collector.go 
b/plugins/gitlab/tasks/issue_collector.go
index cc5554fe..e5732e25 100644
--- a/plugins/gitlab/tasks/issue_collector.go
+++ b/plugins/gitlab/tasks/issue_collector.go
@@ -46,7 +46,7 @@ var CollectApiIssuesMeta = core.SubTaskMeta{
 
 func CollectApiIssues(taskCtx core.SubTaskContext) error {
        db := taskCtx.GetDal()
-       data := taskCtx.GetData().(*GitlabTaskData)
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_ISSUE_TABLE)
 
        since := data.Since
        incremental := false
@@ -67,23 +67,10 @@ func CollectApiIssues(taskCtx core.SubTaskContext) error {
        }
 
        collector, err := helper.NewApiCollector(helper.ApiCollectorArgs{
-               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-                       Ctx: taskCtx,
-                       /*
-                               This struct will be JSONEncoded and stored into 
database along with raw data itself, to identity minimal
-                               set of data to be process, for example, we 
process JiraIssues by Board
-                       */
-                       Params: GitlabApiParams{
-                               ProjectId: data.Options.ProjectId,
-                       },
-                       /*
-                               Table store raw data
-                       */
-                       Table: RAW_ISSUE_TABLE,
-               },
-               ApiClient:   data.ApiClient,
-               PageSize:    100,
-               Incremental: incremental,
+               RawDataSubTaskArgs: *rawDataSubTaskArgs,
+               ApiClient:          data.ApiClient,
+               PageSize:           100,
+               Incremental:        incremental,
 
                UrlTemplate: "projects/{{ .Params.ProjectId }}/issues",
                /*
diff --git a/plugins/gitlab/tasks/issue_convertor.go 
b/plugins/gitlab/tasks/issue_convertor.go
index acae625d..1b694091 100644
--- a/plugins/gitlab/tasks/issue_convertor.go
+++ b/plugins/gitlab/tasks/issue_convertor.go
@@ -40,13 +40,13 @@ var ConvertIssuesMeta = core.SubTaskMeta{
 
 func ConvertIssues(taskCtx core.SubTaskContext) error {
        db := taskCtx.GetDal()
-       data := taskCtx.GetData().(*GitlabTaskData)
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_ISSUE_TABLE)
        projectId := data.Options.ProjectId
 
        clauses := []dal.Clause{
                dal.Select("issues.*"),
                dal.From("_tool_gitlab_issues issues"),
-               dal.Where("project_id = ?", projectId),
+               dal.Where("project_id = ? and connection_id = ?", projectId, 
data.Options.ConnectionId),
        }
        cursor, err := db.Cursor(clauses...)
        if err != nil {
@@ -58,19 +58,13 @@ func ConvertIssues(taskCtx core.SubTaskContext) error {
        boardIdGen := didgen.NewDomainIdGenerator(&gitlabModels.GitlabProject{})
 
        converter, err := helper.NewDataConverter(helper.DataConverterArgs{
-               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-                       Ctx: taskCtx,
-                       Params: GitlabApiParams{
-                               ProjectId: data.Options.ProjectId,
-                       },
-                       Table: RAW_ISSUE_TABLE,
-               },
-               InputRowType: reflect.TypeOf(gitlabModels.GitlabIssue{}),
-               Input:        cursor,
+               RawDataSubTaskArgs: *rawDataSubTaskArgs,
+               InputRowType:       reflect.TypeOf(gitlabModels.GitlabIssue{}),
+               Input:              cursor,
                Convert: func(inputRow interface{}) ([]interface{}, error) {
                        issue := inputRow.(*gitlabModels.GitlabIssue)
                        domainIssue := &ticket.Issue{
-                               DomainEntity:            
domainlayer.DomainEntity{Id: issueIdGen.Generate(issue.GitlabId)},
+                               DomainEntity:            
domainlayer.DomainEntity{Id: issueIdGen.Generate(data.Options.ConnectionId, 
issue.GitlabId)},
                                IssueKey:                
strconv.Itoa(issue.Number),
                                Title:                   issue.Title,
                                Description:             issue.Body,
@@ -94,7 +88,7 @@ func ConvertIssues(taskCtx core.SubTaskContext) error {
                                domainIssue.Status = ticket.DONE
                        }
                        boardIssue := &ticket.BoardIssue{
-                               BoardId: boardIdGen.Generate(projectId),
+                               BoardId: 
boardIdGen.Generate(data.Options.ConnectionId, projectId),
                                IssueId: domainIssue.Id,
                        }
                        return []interface{}{
diff --git a/plugins/gitlab/tasks/issue_extractor.go 
b/plugins/gitlab/tasks/issue_extractor.go
index 4be8ed80..0039138a 100644
--- a/plugins/gitlab/tasks/issue_extractor.go
+++ b/plugins/gitlab/tasks/issue_extractor.go
@@ -124,23 +124,10 @@ type IssuesResponse struct {
 }
 
 func ExtractApiIssues(taskCtx core.SubTaskContext) error {
-       data := taskCtx.GetData().(*GitlabTaskData)
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_ISSUE_TABLE)
 
        extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
-               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-                       Ctx: taskCtx,
-                       /*
-                               This struct will be JSONEncoded and stored into 
database along with raw data itself, to identity minimal
-                               set of data to be process, for example, we 
process JiraIssues by Board
-                       */
-                       Params: GitlabApiParams{
-                               ProjectId: data.Options.ProjectId,
-                       },
-                       /*
-                               Table store raw data
-                       */
-                       Table: RAW_ISSUE_TABLE,
-               },
+               RawDataSubTaskArgs: *rawDataSubTaskArgs,
                Extract: func(row *helper.RawData) ([]interface{}, error) {
                        body := &IssuesResponse{}
                        err := json.Unmarshal(row.Data, body)
@@ -163,11 +150,13 @@ func ExtractApiIssues(taskCtx core.SubTaskContext) error {
 
                        for _, label := range body.Labels {
                                results = append(results, 
&models.GitlabIssueLabel{
-                                       IssueId:   gitlabIssue.GitlabId,
-                                       LabelName: label,
+                                       IssueId:      gitlabIssue.GitlabId,
+                                       LabelName:    label,
+                                       ConnectionId: data.Options.ConnectionId,
                                })
 
                        }
+                       gitlabIssue.ConnectionId = data.Options.ConnectionId
                        results = append(results, gitlabIssue)
 
                        return results, nil
diff --git a/plugins/gitlab/tasks/issue_label_convertor.go 
b/plugins/gitlab/tasks/issue_label_convertor.go
index 3b591c3d..d1c4eaa3 100644
--- a/plugins/gitlab/tasks/issue_label_convertor.go
+++ b/plugins/gitlab/tasks/issue_label_convertor.go
@@ -37,14 +37,16 @@ var ConvertIssueLabelsMeta = core.SubTaskMeta{
 
 func ConvertIssueLabels(taskCtx core.SubTaskContext) error {
        db := taskCtx.GetDal()
-       data := taskCtx.GetData().(*GitlabTaskData)
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_ISSUE_TABLE)
        projectId := data.Options.ProjectId
        clauses := []dal.Clause{
                dal.Select("*"),
                dal.From(&gitlabModels.GitlabIssueLabel{}),
-               dal.Join(`left join _tool_gitlab_issues on 
-                       _tool_gitlab_issues.gitlab_id = 
_tool_gitlab_issue_labels.issue_id`),
-               dal.Where("_tool_gitlab_issues.project_id = ?", projectId),
+               dal.Join("left join _tool_gitlab_issues on " +
+                       "_tool_gitlab_issues.gitlab_id = 
_tool_gitlab_issue_labels.issue_id"),
+               dal.Where("_tool_gitlab_issues.project_id = ? "+
+                       "and _tool_gitlab_issues.connection_id = ?",
+                       projectId, data.Options.ConnectionId),
                dal.Orderby("issue_id ASC"),
        }
 
@@ -57,19 +59,13 @@ func ConvertIssueLabels(taskCtx core.SubTaskContext) error {
        issueIdGen := didgen.NewDomainIdGenerator(&gitlabModels.GitlabIssue{})
 
        converter, err := helper.NewDataConverter(helper.DataConverterArgs{
-               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-                       Ctx: taskCtx,
-                       Params: GitlabApiParams{
-                               ProjectId: projectId,
-                       },
-                       Table: RAW_ISSUE_TABLE,
-               },
-               InputRowType: reflect.TypeOf(gitlabModels.GitlabIssueLabel{}),
-               Input:        cursor,
+               RawDataSubTaskArgs: *rawDataSubTaskArgs,
+               InputRowType:       
reflect.TypeOf(gitlabModels.GitlabIssueLabel{}),
+               Input:              cursor,
                Convert: func(inputRow interface{}) ([]interface{}, error) {
                        issueLabel := inputRow.(*gitlabModels.GitlabIssueLabel)
                        domainIssueLabel := &ticket.IssueLabel{
-                               IssueId:   
issueIdGen.Generate(issueLabel.IssueId),
+                               IssueId:   
issueIdGen.Generate(data.Options.ConnectionId, issueLabel.IssueId),
                                LabelName: issueLabel.LabelName,
                        }
                        return []interface{}{

Reply via email to