You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2022/06/23 14:33:09 UTC

[incubator-devlake] branch main updated: feat: ae e2e test for commits (#2318)

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

klesh 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 ea772ced feat: ae e2e test for commits (#2318)
ea772ced is described below

commit ea772ced8f31c3b854521b5ec497ef783471ba73
Author: mappjzc <zh...@merico.dev>
AuthorDate: Thu Jun 23 22:33:06 2022 +0800

    feat: ae e2e test for commits (#2318)
    
    Add TestAECommitDataFlow
    
    Nddtfjiang <zh...@merico.dev>
---
 .github/workflows/test-e2e.yml                     |   4 +-
 plugins/ae/ae.go                                   | 105 +-----------------
 plugins/ae/e2e/commit_test.go                      |  92 +++++++++++++++
 plugins/ae/e2e/raw_tables/_raw_ae_commits.csv      | 123 +++++++++++++++++++++
 plugins/ae/e2e/raw_tables/_raw_commits.csv         |  26 +++++
 .../ae/e2e/snapshot_tables/_tool_ae_commits.csv    | 123 +++++++++++++++++++++
 plugins/ae/e2e/snapshot_tables/commits.csv         |  26 +++++
 plugins/ae/{ae.go => impl/impl.go}                 |  21 +---
 8 files changed, 395 insertions(+), 125 deletions(-)

diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml
index e6420c44..4a409bad 100644
--- a/.github/workflows/test-e2e.yml
+++ b/.github/workflows/test-e2e.yml
@@ -39,8 +39,8 @@ jobs:
             ${{ runner.os }}-go-
       - name: Test
         env:
-          DB_URL: mysql://root:root@db:3306/lake?charset=utf8mb4&loc=Asia%2fShanghai&parseTime=True
-          E2E_DB_URL: mysql://root:root@db:3306/lake?charset=utf8mb4&loc=Asia%2fShanghai&parseTime=True
+          DB_URL: mysql://root:root@db:3306/lake?charset=utf8mb4&parseTime=True
+          E2E_DB_URL: mysql://root:root@db:3306/lake?charset=utf8mb4&parseTime=True
         run: |
           cp .env.example .env
           make e2e-test
diff --git a/plugins/ae/ae.go b/plugins/ae/ae.go
index 4ca20b24..3aa296d0 100644
--- a/plugins/ae/ae.go
+++ b/plugins/ae/ae.go
@@ -18,114 +18,13 @@ limitations under the License.
 package main // must be main for plugin entry point
 
 import (
-	"fmt"
-
-	"github.com/apache/incubator-devlake/migration"
-	"github.com/apache/incubator-devlake/plugins/ae/api"
-	"github.com/apache/incubator-devlake/plugins/ae/models"
-	"github.com/apache/incubator-devlake/plugins/ae/models/migrationscripts"
-	"github.com/apache/incubator-devlake/plugins/ae/tasks"
-	"github.com/apache/incubator-devlake/plugins/core"
-	"github.com/apache/incubator-devlake/plugins/helper"
+	"github.com/apache/incubator-devlake/plugins/ae/impl"
 	"github.com/apache/incubator-devlake/runner"
-	"github.com/mitchellh/mapstructure"
 	"github.com/spf13/cobra"
-	"github.com/spf13/viper"
-	"gorm.io/gorm"
 )
 
-var _ core.PluginMeta = (*AE)(nil)
-var _ core.PluginInit = (*AE)(nil)
-var _ core.PluginTask = (*AE)(nil)
-var _ core.PluginApi = (*AE)(nil)
-var _ core.Migratable = (*AE)(nil)
-
-type AE struct{}
-
-func (plugin AE) Init(config *viper.Viper, logger core.Logger, db *gorm.DB) error {
-	api.Init(config, logger, db)
-	return nil
-}
-
-func (plugin AE) Description() string {
-	return "To collect and enrich data from AE"
-}
-
-func (plugin AE) SubTaskMetas() []core.SubTaskMeta {
-	return []core.SubTaskMeta{
-		tasks.CollectProjectMeta,
-		tasks.CollectCommitsMeta,
-		tasks.ExtractProjectMeta,
-		tasks.ExtractCommitsMeta,
-		tasks.ConvertCommitsMeta,
-	}
-}
-
-func (plugin AE) PrepareTaskData(taskCtx core.TaskContext, options map[string]interface{}) (interface{}, error) {
-	var op tasks.AeOptions
-	err := mapstructure.Decode(options, &op)
-	if err != nil {
-		return nil, err
-	}
-	if op.ProjectId <= 0 {
-		return nil, fmt.Errorf("projectId is required")
-	}
-
-	connection := &models.AeConnection{}
-	connectionHelper := helper.NewConnectionHelper(
-		taskCtx,
-		nil,
-	)
-	if err != nil {
-		return nil, err
-	}
-
-	err = connectionHelper.FirstById(connection, op.ConnectionId)
-	if err != nil {
-		return nil, err
-	}
-
-	apiClient, err := tasks.CreateApiClient(taskCtx, connection)
-	if err != nil {
-		return nil, err
-	}
-
-	return &tasks.AeTaskData{
-		Options:   &op,
-		ApiClient: apiClient,
-	}, nil
-}
-
-func (plugin AE) RootPkgPath() string {
-	return "github.com/apache/incubator-devlake/plugins/ae"
-}
-
-func (plugin AE) MigrationScripts() []migration.Script {
-	return []migration.Script{
-		new(migrationscripts.InitSchemas),
-		new(migrationscripts.UpdateSchemas20220615),
-	}
-}
-
-func (plugin AE) ApiResources() map[string]map[string]core.ApiResourceHandler {
-	return map[string]map[string]core.ApiResourceHandler{
-		"test": {
-			"GET": api.TestConnection,
-		},
-		"connections": {
-			"GET":  api.ListConnections,
-			"POST": api.PostConnections,
-		},
-		"connections/:connectionId": {
-			"GET":    api.GetConnection,
-			"PATCH":  api.PatchConnection,
-			"DELETE": api.DeleteConnection,
-		},
-	}
-}
-
 // Export a variable named PluginEntry for Framework to search and load
-var PluginEntry AE //nolint
+var PluginEntry impl.AE //nolint
 
 func main() {
 	aeCmd := &cobra.Command{Use: "ae"}
diff --git a/plugins/ae/e2e/commit_test.go b/plugins/ae/e2e/commit_test.go
new file mode 100644
index 00000000..4b84f6fa
--- /dev/null
+++ b/plugins/ae/e2e/commit_test.go
@@ -0,0 +1,92 @@
+/*
+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"
+	"testing"
+
+	"github.com/apache/incubator-devlake/helpers/e2ehelper"
+	"github.com/apache/incubator-devlake/models/domainlayer/code"
+	"github.com/apache/incubator-devlake/plugins/ae/impl"
+	"github.com/apache/incubator-devlake/plugins/ae/models"
+	"github.com/apache/incubator-devlake/plugins/ae/tasks"
+)
+
+func TestAECommitDataFlow(t *testing.T) {
+	var ae impl.AE
+	dataflowTester := e2ehelper.NewDataFlowTester(t, "ae", ae)
+
+	taskData := &tasks.AeTaskData{
+		Options: &tasks.AeOptions{
+			ConnectionId: 1,
+			ProjectId:    13,
+		},
+	}
+
+	// import raw data table
+	dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_ae_commits.csv", "_raw_ae_commits")
+
+	// verify extraction
+	dataflowTester.FlushTabler(&models.AECommit{})
+	dataflowTester.Subtask(tasks.ExtractCommitsMeta, taskData)
+	dataflowTester.VerifyTable(
+		models.AECommit{},
+		fmt.Sprintf("./snapshot_tables/%s.csv", models.AECommit{}.TableName()),
+		[]string{"hex_sha"},
+		[]string{
+			"analysis_id",
+			"author_email",
+			"dev_eq",
+			"ae_project_id",
+			"_raw_data_params",
+			"_raw_data_table",
+			"_raw_data_id",
+			"_raw_data_remark",
+		},
+	)
+
+	// verify conversion
+	dataflowTester.FlushTabler(&code.Commit{})
+	// import data table
+	dataflowTester.ImportCsvIntoTabler("./raw_tables/_raw_commits.csv", &code.Commit{})
+	dataflowTester.Subtask(tasks.ConvertCommitsMeta, taskData)
+	dataflowTester.VerifyTable(
+		code.Commit{},
+		fmt.Sprintf("./snapshot_tables/%s.csv", code.Commit{}.TableName()),
+		[]string{"sha"},
+		[]string{
+			"_raw_data_params",
+			"_raw_data_table",
+			"_raw_data_id",
+			"_raw_data_remark",
+			"additions",
+			"deletions",
+			"dev_eq",
+			"message",
+			"author_name",
+			"author_email",
+			"authored_date",
+			"author_id",
+			"committer_name",
+			"committer_email",
+			"committed_date",
+			"committer_id",
+		},
+	)
+}
diff --git a/plugins/ae/e2e/raw_tables/_raw_ae_commits.csv b/plugins/ae/e2e/raw_tables/_raw_ae_commits.csv
new file mode 100644
index 00000000..3af489ee
--- /dev/null
+++ b/plugins/ae/e2e/raw_tables/_raw_ae_commits.csv
@@ -0,0 +1,123 @@
+id,params,data,url,input,created_at
+24518,"{""ProjectId"":13}","{""hexsha"":""1b38820d28119ca10dd6b83563b97fb5f6bec944"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""louis.s4372121@gmail.com"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24519,"{""ProjectId"":13}","{""hexsha"":""479cebd3661f46af39414fe439469ca8ab11e7bb"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""13120413800@163.com"",""dev_eq"":7}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24520,"{""ProjectId"":13}","{""hexsha"":""e4a4b2f1acc279b1b0386e72b5fefd185d06a341"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zikuan.an@merico.dev"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24521,"{""ProjectId"":13}","{""hexsha"":""3512d7e8ee3af3f73c1e82e4e06f19efda560a68"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zikuan.an@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24522,"{""ProjectId"":13}","{""hexsha"":""9079f1a8682b506e8da83d1432457f153a5bd82a"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""101256042+abeizn@users.noreply.github.com"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24523,"{""ProjectId"":13}","{""hexsha"":""9e7fc6d953fbf5e1b17dfddb32d9af5e9aa90e09"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yingchu.chen@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24524,"{""ProjectId"":13}","{""hexsha"":""97f02d4df5f133da636f8bd8aa5698b3b0679de3"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""louis.s4372121@gmail.com"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24525,"{""ProjectId"":13}","{""hexsha"":""487b389a8e6cec58d948c1b03ab82430e769efdb"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":1076}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24526,"{""ProjectId"":13}","{""hexsha"":""796d0ae622a1284467f703ef5a14af8a56958c04"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":5}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24527,"{""ProjectId"":13}","{""hexsha"":""0807765c0841abea9dd0985ed6d5adeb94812493"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":29}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24528,"{""ProjectId"":13}","{""hexsha"":""0d3aa41e5e3db60e7ddfd3c3835f40e8c1c8eeb4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""liang.zhang@merico.dev"",""dev_eq"":99}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24529,"{""ProjectId"":13}","{""hexsha"":""9fe7552499aa501fb0b50849f3c31a47fb71b97f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yanghui@meri.co"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24530,"{""ProjectId"":13}","{""hexsha"":""0826737cc83afd3bf3a6438140bdc438698d9aac"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yanghui@meri.co"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24531,"{""ProjectId"":13}","{""hexsha"":""c591acedadbf5ec78491d06e96a0119826c20709"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""julien.chinapen@merico.dev"",""dev_eq"":26}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24532,"{""ProjectId"":13}","{""hexsha"":""cfb28bb170386a5697c2a787e3edbce339007e03"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""julien.chinapen@merico.dev"",""dev_eq"":12}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24533,"{""ProjectId"":13}","{""hexsha"":""73117918e6b3ef4b404a5f11242f2eae84a47d8f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yanghui@meri.co"",""dev_eq"":3}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24534,"{""ProjectId"":13}","{""hexsha"":""8427585a53a6952f48c2c8b7df572ae890032b3f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yingchu.chen@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24535,"{""ProjectId"":13}","{""hexsha"":""d7565fc150f2c22b69c54d23f7d36be2f85ab3f4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""jzc001@qq.com"",""dev_eq"":221}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24536,"{""ProjectId"":13}","{""hexsha"":""17e34ba19bca5c8c040972cbce0da22a07c6ecac"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""keon.amini@merico.dev"",""dev_eq"":24}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24537,"{""ProjectId"":13}","{""hexsha"":""9b4f407e2219fe3eb68d999e36a10e9c8635138a"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""keon.amini@merico.dev"",""dev_eq"":106}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24538,"{""ProjectId"":13}","{""hexsha"":""09baac4eb3ff83c68716d820ce3095292974bb3d"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhicheng.jiang@merico.dev"",""dev_eq"":219}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24539,"{""ProjectId"":13}","{""hexsha"":""0b82a1f4a0498f98453452901117fd373e8906af"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yingchu.chen@merico.dev"",""dev_eq"":607}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24540,"{""ProjectId"":13}","{""hexsha"":""aa2f3faeb1094c22bff57146a164ea07265f7bbc"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yingchu.chen@merico.dev"",""dev_eq"":694}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24541,"{""ProjectId"":13}","{""hexsha"":""153b0ffe7f010d4ea9b93d8168619bc92d273b2a"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":192}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24542,"{""ProjectId"":13}","{""hexsha"":""9916bd442a3916260ef34c86b99cd49360ab0681"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":2}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24543,"{""ProjectId"":13}","{""hexsha"":""2beb6f57dd35112f29ed96c65cb9fc7daf24088d"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""21stcenturykline@gmail.com"",""dev_eq"":25}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24544,"{""ProjectId"":13}","{""hexsha"":""8addcdc8692ad4e2b47d5611830b81c1f9d81504"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""paul.goertzen@merico.dev"",""dev_eq"":137}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24545,"{""ProjectId"":13}","{""hexsha"":""51618c19c42b8035353f04eb067e6927286b00e7"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@meri.co"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24546,"{""ProjectId"":13}","{""hexsha"":""dddff3541bbb5bf45e76e6a681c4c91bb48f58c1"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24547,"{""ProjectId"":13}","{""hexsha"":""7107e0a26c75bcaa218bba71b1a65e906f4a7915"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24548,"{""ProjectId"":13}","{""hexsha"":""8f4d17eeb36e9a4f8b554ef6ebea0c747628008f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevinkline@kevins-macbook-pro.local"",""dev_eq"":53}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24549,"{""ProjectId"":13}","{""hexsha"":""359a1c3f70d71720e2a96119178722cfd3debfc9"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24550,"{""ProjectId"":13}","{""hexsha"":""cf936aaac8161fcf2b98d1ee66918c6ed56a0261"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":19}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24551,"{""ProjectId"":13}","{""hexsha"":""f7838c83cb972562f26367b2fb0ed378cc310cc4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":25}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24552,"{""ProjectId"":13}","{""hexsha"":""c10520a2392fc5001d909d81c1a24d438caf7d13"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":151}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24553,"{""ProjectId"":13}","{""hexsha"":""c901c81df60b8856399c4ade38d2d5666b9aef1c"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":201}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24554,"{""ProjectId"":13}","{""hexsha"":""5f251d7934e00c3e1f607ae17c367833f2f26f8f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":3}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24555,"{""ProjectId"":13}","{""hexsha"":""de6cff814aeaac108f8a251c288b14d38012ba9a"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":224}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24556,"{""ProjectId"":13}","{""hexsha"":""1c8c9e8b6ce9fbea368c0985dcef7de84d104b8b"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24557,"{""ProjectId"":13}","{""hexsha"":""21f647d8f279d6968bd7e2d814e88e2efd3be7b7"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":2}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24558,"{""ProjectId"":13}","{""hexsha"":""ecf691ecce767c70b302876638a3440937ced1bf"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24559,"{""ProjectId"":13}","{""hexsha"":""4e4fe40e0c90c470b48728a41ba34735abe0becf"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":340}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24560,"{""ProjectId"":13}","{""hexsha"":""335edf594dea65e4508b85dba1cb13a06118c279"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":56}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24561,"{""ProjectId"":13}","{""hexsha"":""5b48460e360e28b5642468e75074840a8acd6d94"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":6}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24562,"{""ProjectId"":13}","{""hexsha"":""9b6abf2cd079930a132dcb136bbe82b1549953c0"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":23}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24563,"{""ProjectId"":13}","{""hexsha"":""baaee879f1c6da29e5f1d35340cfb329d5cc6ee5"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":4}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24564,"{""ProjectId"":13}","{""hexsha"":""64868e729124ba10efc37a32cffa2a43448e6dac"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":41}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24565,"{""ProjectId"":13}","{""hexsha"":""8feda7b0577af0c4fa26f08069299084d0048c6f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":34}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24566,"{""ProjectId"":13}","{""hexsha"":""d8ea964721ddf096f6f1460ce4380e7ec7cfc765"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24567,"{""ProjectId"":13}","{""hexsha"":""e4597cefe6b5b72b9763791f469ccd248ddb6b14"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":11}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24568,"{""ProjectId"":13}","{""hexsha"":""7f673b502dbc02f1087ec0fad18964938bd2de7e"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":20}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24569,"{""ProjectId"":13}","{""hexsha"":""980004f139b471b781e9379cd7ac907413d94cb6"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":16}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24570,"{""ProjectId"":13}","{""hexsha"":""07f5c5e9b7abb967511fe792bcb49acf20b0ca85"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""louis.s4372121@gmail.com"",""dev_eq"":206}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24571,"{""ProjectId"":13}","{""hexsha"":""35132a6cde2c1df391fa12012dcf2b7f5148332d"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":8}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24572,"{""ProjectId"":13}","{""hexsha"":""36d68f2df79f4ffc849632745647243a815bcbb5"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24573,"{""ProjectId"":13}","{""hexsha"":""8a181ef503c0fee9f753d760a28c65ed699d49a5"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":9}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24574,"{""ProjectId"":13}","{""hexsha"":""8f732c22b2a0c20fd3068a32ed85da468fb27fc4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":174}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24575,"{""ProjectId"":13}","{""hexsha"":""bed8b5dc838151a146d3e6b9033862aafdb58c01"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""jinxiu.zhou@merico.dev"",""dev_eq"":44}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24576,"{""ProjectId"":13}","{""hexsha"":""70643393eba04e1636ec26e2b58568a1e82eb1f3"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""jinxiu.zhou@merico.dev"",""dev_eq"":50}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24577,"{""ProjectId"":13}","{""hexsha"":""93e9cedc821f5888c05ac3ef852c90696847bff7"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""jinxiu.zhou@merico.dev"",""dev_eq"":20}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24578,"{""ProjectId"":13}","{""hexsha"":""f5690f6b70e5977d0d5686bc1182be598cfef893"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":51}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24579,"{""ProjectId"":13}","{""hexsha"":""87183fef30120169ef65bca395756e7669ecfec9"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""jinxiu.zhou@merico.dev"",""dev_eq"":66}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24580,"{""ProjectId"":13}","{""hexsha"":""625da96d618b75e9d6a79c702862ae0fd66f91ca"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":59}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24581,"{""ProjectId"":13}","{""hexsha"":""69501576cac995fdffdb1e9e7fa6567dea01d83f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""jinxiu.zhou@merico.dev"",""dev_eq"":26}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24582,"{""ProjectId"":13}","{""hexsha"":""7fd4c1dddde9fdb57d4d86f8710f4804060010a4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevinkline@kevins-macbook-pro.local"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24583,"{""ProjectId"":13}","{""hexsha"":""d1b8132cfe7c5d3f6906920b5d44350fa26f5533"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""paul.goertzen@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24584,"{""ProjectId"":13}","{""hexsha"":""8ffa20ca94333c8b75a7cb065a33929dbbe7f666"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24585,"{""ProjectId"":13}","{""hexsha"":""9531f67548d9248596fa1c53adede7b3e4668cbd"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevinkline@kevins-macbook-pro.local"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24586,"{""ProjectId"":13}","{""hexsha"":""af1df917fe88e688dc6fc004c09c067760fdc1c0"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevinkline@kevins-macbook-pro.local"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24587,"{""ProjectId"":13}","{""hexsha"":""5fdc3946ef013eeea9db4073c1c05d0ba1a2bbb4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24588,"{""ProjectId"":13}","{""hexsha"":""63346c6b4152fc24ba570a5343969e4e115e54b5"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24589,"{""ProjectId"":13}","{""hexsha"":""b5656d073f82c3733650ec04dd59e1bf95f9d369"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24590,"{""ProjectId"":13}","{""hexsha"":""20cf5ddff8a52f59a8c84dded884fec73fc3551a"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24591,"{""ProjectId"":13}","{""hexsha"":""6dd8420411a19ed1713ba2cd1fc9231e20a900fa"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24592,"{""ProjectId"":13}","{""hexsha"":""0728bc9712aff6ad202aabe27ffd01f8142a55e4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24593,"{""ProjectId"":13}","{""hexsha"":""57d14eea760b49201ef1bb713f535765792c31af"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24594,"{""ProjectId"":13}","{""hexsha"":""b65a10855f45c3de4c56b8780537184cf76875e8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24595,"{""ProjectId"":13}","{""hexsha"":""2db9c018c9ebd059fd5b76c7bc238b2c71ef14b0"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""kevin.kline@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24596,"{""ProjectId"":13}","{""hexsha"":""ce9e81f1e739585de0bc91931889056e1c608e77"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24597,"{""ProjectId"":13}","{""hexsha"":""f816c74da65f364aa752510d3e0beca703d87def"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24598,"{""ProjectId"":13}","{""hexsha"":""0e44d53d72e452c2dc7d597547719fbdc8c1d087"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24599,"{""ProjectId"":13}","{""hexsha"":""21fee52c47a4d78755b0c050aa4b72dac847ede8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24600,"{""ProjectId"":13}","{""hexsha"":""d4bc3994fd2a26256ac5b69fbe92f28dd8b9b54a"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24601,"{""ProjectId"":13}","{""hexsha"":""b0080e98d0e12bdcc5702f44e569ad7ec3c4bafa"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24602,"{""ProjectId"":13}","{""hexsha"":""37160fac6e9613740e489f5dd1931b61622c8e29"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""21stcenturykline@gmail.com"",""dev_eq"":0}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24603,"{""ProjectId"":13}","{""hexsha"":""4b6235c68bfe24ddf4b6a6be2fc56d0bfbc64750"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":9}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24604,"{""ProjectId"":13}","{""hexsha"":""a0e03ad37955af9cf5bb738a1539ca2469147ec8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":85}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24605,"{""ProjectId"":13}","{""hexsha"":""dc6bdf3b66ff99eb8877a98d671e5f4489ad5612"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":37}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24606,"{""ProjectId"":13}","{""hexsha"":""a7b290d42d16e9ec634a74f3654983c9c899cb8f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":3}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24607,"{""ProjectId"":13}","{""hexsha"":""12cb9bd7079f2c397c0ce8105e0c0881d9efb988"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24608,"{""ProjectId"":13}","{""hexsha"":""9452910a0f1dc08e3e9f1453df2f67d6eaa8bf29"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":364}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24609,"{""ProjectId"":13}","{""hexsha"":""c22ba9baac3a90def0f4e34411c2f6838fec59a8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""cong.wang@merico.dev"",""dev_eq"":17}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24610,"{""ProjectId"":13}","{""hexsha"":""2585fa20298933ed2f9d809f1c59002767251896"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""21stcenturykline@gmail.com"",""dev_eq"":370}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24611,"{""ProjectId"":13}","{""hexsha"":""07f9a77dd7ee52d31f54850032daf6f3006e98dc"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yanghui@meri.co"",""dev_eq"":9}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24612,"{""ProjectId"":13}","{""hexsha"":""dc64869f16c6c90e594e1eabbb97e724ea626451"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":5}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24613,"{""ProjectId"":13}","{""hexsha"":""08e56ae307673318e053526dcf826dfc77000436"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""21stcenturykline@gmail.com"",""dev_eq"":10}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24614,"{""ProjectId"":13}","{""hexsha"":""adaa1ba753e8c4e6873823581ba3c95658279da8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""yanghui@meri.co"",""dev_eq"":13}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24615,"{""ProjectId"":13}","{""hexsha"":""98382fa30630208d0076635e9a9662dfc95ac95f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":12}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24616,"{""ProjectId"":13}","{""hexsha"":""6b8391ad186ba1c911b2c742bdf24db308b47bd2"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""21stcenturykline@gmail.com"",""dev_eq"":162}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24617,"{""ProjectId"":13}","{""hexsha"":""1fc6ea7256a0be1443be74da750fd57979c52423"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24618,"{""ProjectId"":13}","{""hexsha"":""26c90f81b16aa8b197fa509a5b07d1cd3312ec92"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":6}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24619,"{""ProjectId"":13}","{""hexsha"":""af1611ff10cac8b67ec4ada08761296adb7b67d8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":2}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24620,"{""ProjectId"":13}","{""hexsha"":""44be98dbf31e1bbb412427926e468ffcf1a8b1e0"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":14}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24621,"{""ProjectId"":13}","{""hexsha"":""eb77a41ae9e899b64997959e60381ed288e1645e"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":110}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24622,"{""ProjectId"":13}","{""hexsha"":""5d5f72c15c3531fe8054afe5ca97d9adda130e89"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""hezheng@merico.dev"",""dev_eq"":5}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24623,"{""ProjectId"":13}","{""hexsha"":""4c80df671a9bed9eebf800edbe87dc914b881414"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":74}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24624,"{""ProjectId"":13}","{""hexsha"":""1ab736dc6a7096f9fe6e56b4d4abde2dfced2dbe"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":2}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24625,"{""ProjectId"":13}","{""hexsha"":""95f26b49705c7f8c665ed8ce3a9004df7701248e"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":1}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24626,"{""ProjectId"":13}","{""hexsha"":""39a584a9c9e7be070abf856da42cf61005462c35"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":99}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24627,"{""ProjectId"":13}","{""hexsha"":""8423d797f3da568642baf1157a780e7512474da1"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""21stcenturykline@gmail.com"",""dev_eq"":268}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24628,"{""ProjectId"":13}","{""hexsha"":""54f7a845dbf62ddf8302938099202911397894c4"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":383}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24629,"{""ProjectId"":13}","{""hexsha"":""bad37d1c1a706f3ac2cc5c893b2c5d16de5e8c07"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":404}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24630,"{""ProjectId"":13}","{""hexsha"":""19ce2521c7538d418a9bffdcfa1ee2454ec880e9"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":2}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24631,"{""ProjectId"":13}","{""hexsha"":""fa3c8437eb3e060af0621198d530f0cd79a8ab8f"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":18}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24632,"{""ProjectId"":13}","{""hexsha"":""97eed674c1279d3d7c71704d140d8215d56ad777"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""louis.s4372121@gmail.com"",""dev_eq"":312}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24633,"{""ProjectId"":13}","{""hexsha"":""ef7c2374971bd2760e75a582a900d059884b0874"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":248}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24634,"{""ProjectId"":13}","{""hexsha"":""5b44afb495269973d37a755ed8334e2afbb40464"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":125}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24635,"{""ProjectId"":13}","{""hexsha"":""99c75977b587bce4898d967c56fd2e04e8f85e2d"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":77}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24636,"{""ProjectId"":13}","{""hexsha"":""02ff95c11379dd2bf7dcadbb70dd9f7341c1be00"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":97}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24637,"{""ProjectId"":13}","{""hexsha"":""384c228cb094997ad099aef3884eae68359cf3b8"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""joncodo@meri.co"",""dev_eq"":8}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24638,"{""ProjectId"":13}","{""hexsha"":""872ca2bf08c73af8c5ac716ac6a63313ad1aa1f0"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""justin.brazeau@merico.dev"",""dev_eq"":172}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
+24639,"{""ProjectId"":13}","{""hexsha"":""61a13c4b6f674a6a1f42f81d96bd95b40482338b"",""analysis_id"":""c16a6ba7-fc6d-473f-b63b-f11ed0988c5a"",""author_email"":""zhenmian.huang@merico.dev"",""dev_eq"":225}","http://34.214.122.134:30012/projects/13/commits?page=1&per_page=2000","null","2022-06-21 15:13:50.114"
diff --git a/plugins/ae/e2e/raw_tables/_raw_commits.csv b/plugins/ae/e2e/raw_tables/_raw_commits.csv
new file mode 100644
index 00000000..35139cb3
--- /dev/null
+++ b/plugins/ae/e2e/raw_tables/_raw_commits.csv
@@ -0,0 +1,26 @@
+sha,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,additions,deletions,dev_eq,message,author_name,author_email,authored_date,author_id,committer_name,committer_email,committed_date,committer_id
+0863515da4849ae0fc4912d0db1f10f7a682734d,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1044,TestNull,0,0,0,"update",Leto,gerile.tu@meri.co,2020-12-07T07:04:03.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-07T07:04:03.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+1ab18b1106ee7c02ad1f25c5d848fb45076d4cc6,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1022,TestNull,0,0,0,"upgrade recharts version",Leto,gerile.tu@meri.co,2020-11-24T15:25:44.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Geril Leto,gerile.tu@meri.co,2020-11-25T03:15:21.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+251c726a47f691e674bcbd6b76daa07256a712ed,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1053,TestNull,0,0,0,"fix label prop",Leto,gerile.tu@meri.co,2020-12-06T16:54:37.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-06T16:54:37.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+d7565fc150f2c22b69c54d23f7d36be2f85ab3f4,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24535,TestNull,0,0,0,"fix hello would and welcome to visit nddtf.com",Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com,Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com
+0807765c0841abea9dd0985ed6d5adeb94812493,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24527,TestNull,0,0,0,"extract renderIcon from Legend",cong,cong.wang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:cong.wang@merico.dev,cong,cong.wang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:cong.wang@merico.dev
+0d3aa41e5e3db60e7ddfd3c3835f40e8c1c8eeb4,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24528,TestNull,0,0,0,"fix label prop",liang,liang.zhang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:liang.zhang@merico.dev,liang,liang.zhang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:liang.zhang@merico.dev
+9fe7552499aa501fb0b50849f3c31a47fb71b97f,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24529,TestNull,0,0,0,"add second line to story for debugging legend",yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+0826737cc83afd3bf3a6438140bdc438698d9aac,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24530,TestNull,0,0,0,"extract renderIcon from Legend",yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+c591acedadbf5ec78491d06e96a0119826c20709,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24531,TestNull,0,0,0,"feat: add stackOffset to RechartsBarChart",julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev,julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev
+cfb28bb170386a5697c2a787e3edbce339007e03,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24532,TestNull,0,0,0,"upgrade recharts version",julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev,julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev
+73117918e6b3ef4b404a5f11242f2eae84a47d8f,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24533,TestNull,0,0,0,"add second line to story for debugging legend",yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+8427585a53a6952f48c2c8b7df572ae890032b3f,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24534,TestNull,0,0,0,"extract renderIcon from Legend",yingchu,yingchu.chen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yingchu.chen@merico.dev,yingchu,yingchu.chen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yingchu.chen@merico.dev
+17e34ba19bca5c8c040972cbce0da22a07c6ecac,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24536,TestNull,0,0,0,"feat: add stackOffset to RechartsBarChart",keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev,keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev
+9b4f407e2219fe3eb68d999e36a10e9c8635138a,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24537,TestNull,0,0,0,"fix label prop",keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev,keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev
+09baac4eb3ff83c68716d820ce3095292974bb3d,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24538,TestNull,0,0,0,"feat hello would and welcome to visit nddtf.com",Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com,Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com
+4fa37c521dc0d6fa8e22198a66d343aa5a557fa7,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1049,TestNull,0,0,0,"pointSize -> size",Leto,gerile.tu@meri.co,2020-12-06T17:15:58.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-06T17:15:58.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+601b144160734ed4e65a176a9d927470a9e77552,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1045,TestNull,0,0,0,"update",Leto,gerile.tu@meri.co,2020-12-07T04:08:54.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-07T04:08:54.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+77758e0fbbf32b68562c8704672d8f87c63b1ba0,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1021,TestNull,0,0,0,"feat: add stackOffset to RechartsBarChart",Leto,gerile.tu@meri.co,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Geril Leto,gerile.tu@meri.co,2020-11-25T03:15:21.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+0b82a1f4a0498f98453452901117fd373e8906af,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24539,TestNull,0,0,0,"add second line to story for debugging legend",yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+aa2f3faeb1094c22bff57146a164ea07265f7bbc,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24540,TestNull,0,0,0,"upgrade recharts version",yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+153b0ffe7f010d4ea9b93d8168619bc92d273b2a,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24541,TestNull,0,0,0,"extract renderIcon from Legend",joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co,joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co
+9916bd442a3916260ef34c86b99cd49360ab0681,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24542,TestNull,0,0,0,"feat: add stackOffset to RechartsBarChart",joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co,joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co
+30878bf8a35d1dafe937d45383f337a2b0f6a28e,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1023,TestNull,0,0,0,"add Indicator: Line",Leto,gerile.tu@meri.co,2020-11-29T15:35:23.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-11-29T15:35:23.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+3afec3448e02be6190f66c7fac40ac8beb46a742,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1024,TestNull,0,0,0,"add second line to story for debugging legend",Leto,gerile.tu@meri.co,2020-11-29T15:35:05.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-11-29T15:35:05.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+4aa88e8b0db2f71e5bf85f803c3bcc8849b8c319,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1025,TestNull,0,0,0,"extract renderIcon from Legend",Leto,gerile.tu@meri.co,2020-11-29T15:13:14.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-11-29T15:13:14.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
diff --git a/plugins/ae/e2e/snapshot_tables/_tool_ae_commits.csv b/plugins/ae/e2e/snapshot_tables/_tool_ae_commits.csv
new file mode 100644
index 00000000..46c903b0
--- /dev/null
+++ b/plugins/ae/e2e/snapshot_tables/_tool_ae_commits.csv
@@ -0,0 +1,123 @@
+hex_sha,analysis_id,author_email,dev_eq,ae_project_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+02ff95c11379dd2bf7dcadbb70dd9f7341c1be00,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,97,13,"{""ProjectId"":13}",_raw_ae_commits,24636,
+0728bc9712aff6ad202aabe27ffd01f8142a55e4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24592,
+07f5c5e9b7abb967511fe792bcb49acf20b0ca85,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,louis.s4372121@gmail.com,206,13,"{""ProjectId"":13}",_raw_ae_commits,24570,
+07f9a77dd7ee52d31f54850032daf6f3006e98dc,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yanghui@meri.co,9,13,"{""ProjectId"":13}",_raw_ae_commits,24611,
+0807765c0841abea9dd0985ed6d5adeb94812493,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,29,13,"{""ProjectId"":13}",_raw_ae_commits,24527,
+0826737cc83afd3bf3a6438140bdc438698d9aac,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yanghui@meri.co,0,13,"{""ProjectId"":13}",_raw_ae_commits,24530,
+08e56ae307673318e053526dcf826dfc77000436,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,21stcenturykline@gmail.com,10,13,"{""ProjectId"":13}",_raw_ae_commits,24613,
+09baac4eb3ff83c68716d820ce3095292974bb3d,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhicheng.jiang@merico.dev,219,13,"{""ProjectId"":13}",_raw_ae_commits,24538,
+0b82a1f4a0498f98453452901117fd373e8906af,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yingchu.chen@merico.dev,607,13,"{""ProjectId"":13}",_raw_ae_commits,24539,
+0d3aa41e5e3db60e7ddfd3c3835f40e8c1c8eeb4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,liang.zhang@merico.dev,99,13,"{""ProjectId"":13}",_raw_ae_commits,24528,
+0e44d53d72e452c2dc7d597547719fbdc8c1d087,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24598,
+12cb9bd7079f2c397c0ce8105e0c0881d9efb988,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,1,13,"{""ProjectId"":13}",_raw_ae_commits,24607,
+153b0ffe7f010d4ea9b93d8168619bc92d273b2a,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,192,13,"{""ProjectId"":13}",_raw_ae_commits,24541,
+17e34ba19bca5c8c040972cbce0da22a07c6ecac,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,keon.amini@merico.dev,24,13,"{""ProjectId"":13}",_raw_ae_commits,24536,
+19ce2521c7538d418a9bffdcfa1ee2454ec880e9,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,2,13,"{""ProjectId"":13}",_raw_ae_commits,24630,
+1ab736dc6a7096f9fe6e56b4d4abde2dfced2dbe,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,2,13,"{""ProjectId"":13}",_raw_ae_commits,24624,
+1b38820d28119ca10dd6b83563b97fb5f6bec944,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,louis.s4372121@gmail.com,0,13,"{""ProjectId"":13}",_raw_ae_commits,24518,
+1c8c9e8b6ce9fbea368c0985dcef7de84d104b8b,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,1,13,"{""ProjectId"":13}",_raw_ae_commits,24556,
+1fc6ea7256a0be1443be74da750fd57979c52423,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,1,13,"{""ProjectId"":13}",_raw_ae_commits,24617,
+20cf5ddff8a52f59a8c84dded884fec73fc3551a,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24590,
+21f647d8f279d6968bd7e2d814e88e2efd3be7b7,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,2,13,"{""ProjectId"":13}",_raw_ae_commits,24557,
+21fee52c47a4d78755b0c050aa4b72dac847ede8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24599,
+2585fa20298933ed2f9d809f1c59002767251896,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,21stcenturykline@gmail.com,370,13,"{""ProjectId"":13}",_raw_ae_commits,24610,
+26c90f81b16aa8b197fa509a5b07d1cd3312ec92,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,6,13,"{""ProjectId"":13}",_raw_ae_commits,24618,
+2beb6f57dd35112f29ed96c65cb9fc7daf24088d,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,21stcenturykline@gmail.com,25,13,"{""ProjectId"":13}",_raw_ae_commits,24543,
+2db9c018c9ebd059fd5b76c7bc238b2c71ef14b0,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24595,
+335edf594dea65e4508b85dba1cb13a06118c279,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,56,13,"{""ProjectId"":13}",_raw_ae_commits,24560,
+3512d7e8ee3af3f73c1e82e4e06f19efda560a68,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zikuan.an@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24521,
+35132a6cde2c1df391fa12012dcf2b7f5148332d,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,8,13,"{""ProjectId"":13}",_raw_ae_commits,24571,
+359a1c3f70d71720e2a96119178722cfd3debfc9,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,0,13,"{""ProjectId"":13}",_raw_ae_commits,24549,
+36d68f2df79f4ffc849632745647243a815bcbb5,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,1,13,"{""ProjectId"":13}",_raw_ae_commits,24572,
+37160fac6e9613740e489f5dd1931b61622c8e29,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,21stcenturykline@gmail.com,0,13,"{""ProjectId"":13}",_raw_ae_commits,24602,
+384c228cb094997ad099aef3884eae68359cf3b8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,8,13,"{""ProjectId"":13}",_raw_ae_commits,24637,
+39a584a9c9e7be070abf856da42cf61005462c35,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,99,13,"{""ProjectId"":13}",_raw_ae_commits,24626,
+44be98dbf31e1bbb412427926e468ffcf1a8b1e0,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,14,13,"{""ProjectId"":13}",_raw_ae_commits,24620,
+479cebd3661f46af39414fe439469ca8ab11e7bb,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,13120413800@163.com,7,13,"{""ProjectId"":13}",_raw_ae_commits,24519,
+487b389a8e6cec58d948c1b03ab82430e769efdb,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,1076,13,"{""ProjectId"":13}",_raw_ae_commits,24525,
+4b6235c68bfe24ddf4b6a6be2fc56d0bfbc64750,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,9,13,"{""ProjectId"":13}",_raw_ae_commits,24603,
+4c80df671a9bed9eebf800edbe87dc914b881414,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,74,13,"{""ProjectId"":13}",_raw_ae_commits,24623,
+4e4fe40e0c90c470b48728a41ba34735abe0becf,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,340,13,"{""ProjectId"":13}",_raw_ae_commits,24559,
+51618c19c42b8035353f04eb067e6927286b00e7,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@meri.co,1,13,"{""ProjectId"":13}",_raw_ae_commits,24545,
+54f7a845dbf62ddf8302938099202911397894c4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,383,13,"{""ProjectId"":13}",_raw_ae_commits,24628,
+57d14eea760b49201ef1bb713f535765792c31af,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24593,
+5b44afb495269973d37a755ed8334e2afbb40464,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,125,13,"{""ProjectId"":13}",_raw_ae_commits,24634,
+5b48460e360e28b5642468e75074840a8acd6d94,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,6,13,"{""ProjectId"":13}",_raw_ae_commits,24561,
+5d5f72c15c3531fe8054afe5ca97d9adda130e89,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,5,13,"{""ProjectId"":13}",_raw_ae_commits,24622,
+5f251d7934e00c3e1f607ae17c367833f2f26f8f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,3,13,"{""ProjectId"":13}",_raw_ae_commits,24554,
+5fdc3946ef013eeea9db4073c1c05d0ba1a2bbb4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24587,
+61a13c4b6f674a6a1f42f81d96bd95b40482338b,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,225,13,"{""ProjectId"":13}",_raw_ae_commits,24639,
+625da96d618b75e9d6a79c702862ae0fd66f91ca,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,59,13,"{""ProjectId"":13}",_raw_ae_commits,24580,
+63346c6b4152fc24ba570a5343969e4e115e54b5,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24588,
+64868e729124ba10efc37a32cffa2a43448e6dac,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,41,13,"{""ProjectId"":13}",_raw_ae_commits,24564,
+69501576cac995fdffdb1e9e7fa6567dea01d83f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,jinxiu.zhou@merico.dev,26,13,"{""ProjectId"":13}",_raw_ae_commits,24581,
+6b8391ad186ba1c911b2c742bdf24db308b47bd2,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,21stcenturykline@gmail.com,162,13,"{""ProjectId"":13}",_raw_ae_commits,24616,
+6dd8420411a19ed1713ba2cd1fc9231e20a900fa,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24591,
+70643393eba04e1636ec26e2b58568a1e82eb1f3,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,jinxiu.zhou@merico.dev,50,13,"{""ProjectId"":13}",_raw_ae_commits,24576,
+7107e0a26c75bcaa218bba71b1a65e906f4a7915,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,1,13,"{""ProjectId"":13}",_raw_ae_commits,24547,
+73117918e6b3ef4b404a5f11242f2eae84a47d8f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yanghui@meri.co,3,13,"{""ProjectId"":13}",_raw_ae_commits,24533,
+796d0ae622a1284467f703ef5a14af8a56958c04,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,5,13,"{""ProjectId"":13}",_raw_ae_commits,24526,
+7f673b502dbc02f1087ec0fad18964938bd2de7e,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,20,13,"{""ProjectId"":13}",_raw_ae_commits,24568,
+7fd4c1dddde9fdb57d4d86f8710f4804060010a4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevinkline@kevins-macbook-pro.local,0,13,"{""ProjectId"":13}",_raw_ae_commits,24582,
+8423d797f3da568642baf1157a780e7512474da1,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,21stcenturykline@gmail.com,268,13,"{""ProjectId"":13}",_raw_ae_commits,24627,
+8427585a53a6952f48c2c8b7df572ae890032b3f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yingchu.chen@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24534,
+87183fef30120169ef65bca395756e7669ecfec9,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,jinxiu.zhou@merico.dev,66,13,"{""ProjectId"":13}",_raw_ae_commits,24579,
+872ca2bf08c73af8c5ac716ac6a63313ad1aa1f0,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,172,13,"{""ProjectId"":13}",_raw_ae_commits,24638,
+8a181ef503c0fee9f753d760a28c65ed699d49a5,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,9,13,"{""ProjectId"":13}",_raw_ae_commits,24573,
+8addcdc8692ad4e2b47d5611830b81c1f9d81504,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,paul.goertzen@merico.dev,137,13,"{""ProjectId"":13}",_raw_ae_commits,24544,
+8f4d17eeb36e9a4f8b554ef6ebea0c747628008f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevinkline@kevins-macbook-pro.local,53,13,"{""ProjectId"":13}",_raw_ae_commits,24548,
+8f732c22b2a0c20fd3068a32ed85da468fb27fc4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,174,13,"{""ProjectId"":13}",_raw_ae_commits,24574,
+8feda7b0577af0c4fa26f08069299084d0048c6f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,34,13,"{""ProjectId"":13}",_raw_ae_commits,24565,
+8ffa20ca94333c8b75a7cb065a33929dbbe7f666,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24584,
+9079f1a8682b506e8da83d1432457f153a5bd82a,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,101256042+abeizn@users.noreply.github.com,0,13,"{""ProjectId"":13}",_raw_ae_commits,24522,
+93e9cedc821f5888c05ac3ef852c90696847bff7,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,jinxiu.zhou@merico.dev,20,13,"{""ProjectId"":13}",_raw_ae_commits,24577,
+9452910a0f1dc08e3e9f1453df2f67d6eaa8bf29,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,364,13,"{""ProjectId"":13}",_raw_ae_commits,24608,
+9531f67548d9248596fa1c53adede7b3e4668cbd,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevinkline@kevins-macbook-pro.local,0,13,"{""ProjectId"":13}",_raw_ae_commits,24585,
+95f26b49705c7f8c665ed8ce3a9004df7701248e,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,1,13,"{""ProjectId"":13}",_raw_ae_commits,24625,
+97eed674c1279d3d7c71704d140d8215d56ad777,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,louis.s4372121@gmail.com,312,13,"{""ProjectId"":13}",_raw_ae_commits,24632,
+97f02d4df5f133da636f8bd8aa5698b3b0679de3,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,louis.s4372121@gmail.com,0,13,"{""ProjectId"":13}",_raw_ae_commits,24524,
+980004f139b471b781e9379cd7ac907413d94cb6,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,16,13,"{""ProjectId"":13}",_raw_ae_commits,24569,
+98382fa30630208d0076635e9a9662dfc95ac95f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,12,13,"{""ProjectId"":13}",_raw_ae_commits,24615,
+9916bd442a3916260ef34c86b99cd49360ab0681,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,2,13,"{""ProjectId"":13}",_raw_ae_commits,24542,
+99c75977b587bce4898d967c56fd2e04e8f85e2d,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,77,13,"{""ProjectId"":13}",_raw_ae_commits,24635,
+9b4f407e2219fe3eb68d999e36a10e9c8635138a,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,keon.amini@merico.dev,106,13,"{""ProjectId"":13}",_raw_ae_commits,24537,
+9b6abf2cd079930a132dcb136bbe82b1549953c0,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,23,13,"{""ProjectId"":13}",_raw_ae_commits,24562,
+9e7fc6d953fbf5e1b17dfddb32d9af5e9aa90e09,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yingchu.chen@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24523,
+9fe7552499aa501fb0b50849f3c31a47fb71b97f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yanghui@meri.co,1,13,"{""ProjectId"":13}",_raw_ae_commits,24529,
+a0e03ad37955af9cf5bb738a1539ca2469147ec8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,85,13,"{""ProjectId"":13}",_raw_ae_commits,24604,
+a7b290d42d16e9ec634a74f3654983c9c899cb8f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,3,13,"{""ProjectId"":13}",_raw_ae_commits,24606,
+aa2f3faeb1094c22bff57146a164ea07265f7bbc,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yingchu.chen@merico.dev,694,13,"{""ProjectId"":13}",_raw_ae_commits,24540,
+adaa1ba753e8c4e6873823581ba3c95658279da8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,yanghui@meri.co,13,13,"{""ProjectId"":13}",_raw_ae_commits,24614,
+af1611ff10cac8b67ec4ada08761296adb7b67d8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,2,13,"{""ProjectId"":13}",_raw_ae_commits,24619,
+af1df917fe88e688dc6fc004c09c067760fdc1c0,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevinkline@kevins-macbook-pro.local,0,13,"{""ProjectId"":13}",_raw_ae_commits,24586,
+b0080e98d0e12bdcc5702f44e569ad7ec3c4bafa,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24601,
+b5656d073f82c3733650ec04dd59e1bf95f9d369,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,0,13,"{""ProjectId"":13}",_raw_ae_commits,24589,
+b65a10855f45c3de4c56b8780537184cf76875e8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,0,13,"{""ProjectId"":13}",_raw_ae_commits,24594,
+baaee879f1c6da29e5f1d35340cfb329d5cc6ee5,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,hezheng@merico.dev,4,13,"{""ProjectId"":13}",_raw_ae_commits,24563,
+bad37d1c1a706f3ac2cc5c893b2c5d16de5e8c07,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,404,13,"{""ProjectId"":13}",_raw_ae_commits,24629,
+bed8b5dc838151a146d3e6b9033862aafdb58c01,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,jinxiu.zhou@merico.dev,44,13,"{""ProjectId"":13}",_raw_ae_commits,24575,
+c10520a2392fc5001d909d81c1a24d438caf7d13,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,151,13,"{""ProjectId"":13}",_raw_ae_commits,24552,
+c22ba9baac3a90def0f4e34411c2f6838fec59a8,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,17,13,"{""ProjectId"":13}",_raw_ae_commits,24609,
+c591acedadbf5ec78491d06e96a0119826c20709,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,julien.chinapen@merico.dev,26,13,"{""ProjectId"":13}",_raw_ae_commits,24531,
+c901c81df60b8856399c4ade38d2d5666b9aef1c,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,201,13,"{""ProjectId"":13}",_raw_ae_commits,24553,
+ce9e81f1e739585de0bc91931889056e1c608e77,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,0,13,"{""ProjectId"":13}",_raw_ae_commits,24596,
+cf936aaac8161fcf2b98d1ee66918c6ed56a0261,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,19,13,"{""ProjectId"":13}",_raw_ae_commits,24550,
+cfb28bb170386a5697c2a787e3edbce339007e03,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,julien.chinapen@merico.dev,12,13,"{""ProjectId"":13}",_raw_ae_commits,24532,
+d1b8132cfe7c5d3f6906920b5d44350fa26f5533,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,paul.goertzen@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24583,
+d4bc3994fd2a26256ac5b69fbe92f28dd8b9b54a,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24600,
+d7565fc150f2c22b69c54d23f7d36be2f85ab3f4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,jzc001@qq.com,221,13,"{""ProjectId"":13}",_raw_ae_commits,24535,
+d8ea964721ddf096f6f1460ce4380e7ec7cfc765,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,1,13,"{""ProjectId"":13}",_raw_ae_commits,24566,
+dc64869f16c6c90e594e1eabbb97e724ea626451,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,5,13,"{""ProjectId"":13}",_raw_ae_commits,24612,
+dc6bdf3b66ff99eb8877a98d671e5f4489ad5612,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,37,13,"{""ProjectId"":13}",_raw_ae_commits,24605,
+dddff3541bbb5bf45e76e6a681c4c91bb48f58c1,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,1,13,"{""ProjectId"":13}",_raw_ae_commits,24546,
+de6cff814aeaac108f8a251c288b14d38012ba9a,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,224,13,"{""ProjectId"":13}",_raw_ae_commits,24555,
+e4597cefe6b5b72b9763791f469ccd248ddb6b14,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,kevin.kline@merico.dev,11,13,"{""ProjectId"":13}",_raw_ae_commits,24567,
+e4a4b2f1acc279b1b0386e72b5fefd185d06a341,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zikuan.an@merico.dev,1,13,"{""ProjectId"":13}",_raw_ae_commits,24520,
+eb77a41ae9e899b64997959e60381ed288e1645e,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,justin.brazeau@merico.dev,110,13,"{""ProjectId"":13}",_raw_ae_commits,24621,
+ecf691ecce767c70b302876638a3440937ced1bf,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,1,13,"{""ProjectId"":13}",_raw_ae_commits,24558,
+ef7c2374971bd2760e75a582a900d059884b0874,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,joncodo@meri.co,248,13,"{""ProjectId"":13}",_raw_ae_commits,24633,
+f5690f6b70e5977d0d5686bc1182be598cfef893,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,cong.wang@merico.dev,51,13,"{""ProjectId"":13}",_raw_ae_commits,24578,
+f7838c83cb972562f26367b2fb0ed378cc310cc4,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,25,13,"{""ProjectId"":13}",_raw_ae_commits,24551,
+f816c74da65f364aa752510d3e0beca703d87def,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,0,13,"{""ProjectId"":13}",_raw_ae_commits,24597,
+fa3c8437eb3e060af0621198d530f0cd79a8ab8f,c16a6ba7-fc6d-473f-b63b-f11ed0988c5a,zhenmian.huang@merico.dev,18,13,"{""ProjectId"":13}",_raw_ae_commits,24631,
diff --git a/plugins/ae/e2e/snapshot_tables/commits.csv b/plugins/ae/e2e/snapshot_tables/commits.csv
new file mode 100644
index 00000000..941512d0
--- /dev/null
+++ b/plugins/ae/e2e/snapshot_tables/commits.csv
@@ -0,0 +1,26 @@
+sha,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,additions,deletions,dev_eq,message,author_name,author_email,authored_date,author_id,committer_name,committer_email,committed_date,committer_id
+0807765c0841abea9dd0985ed6d5adeb94812493,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24527,TestNull,0,0,29,extract renderIcon from Legend,cong,cong.wang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:cong.wang@merico.dev,cong,cong.wang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:cong.wang@merico.dev
+0826737cc83afd3bf3a6438140bdc438698d9aac,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24530,TestNull,0,0,0,extract renderIcon from Legend,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+0863515da4849ae0fc4912d0db1f10f7a682734d,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1044,TestNull,0,0,0,update,Leto,gerile.tu@meri.co,2020-12-07T07:04:03.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-07T07:04:03.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+09baac4eb3ff83c68716d820ce3095292974bb3d,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24538,TestNull,0,0,219,feat hello would and welcome to visit nddtf.com,Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com,Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com
+0b82a1f4a0498f98453452901117fd373e8906af,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24539,TestNull,0,0,607,add second line to story for debugging legend,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+0d3aa41e5e3db60e7ddfd3c3835f40e8c1c8eeb4,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24528,TestNull,0,0,99,fix label prop,liang,liang.zhang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:liang.zhang@merico.dev,liang,liang.zhang@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:liang.zhang@merico.dev
+153b0ffe7f010d4ea9b93d8168619bc92d273b2a,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24541,TestNull,0,0,192,extract renderIcon from Legend,joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co,joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co
+17e34ba19bca5c8c040972cbce0da22a07c6ecac,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24536,TestNull,0,0,24,feat: add stackOffset to RechartsBarChart,keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev,keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev
+1ab18b1106ee7c02ad1f25c5d848fb45076d4cc6,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1022,TestNull,0,0,0,upgrade recharts version,Leto,gerile.tu@meri.co,2020-11-24T15:25:44.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Geril Leto,gerile.tu@meri.co,2020-11-25T03:15:21.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+251c726a47f691e674bcbd6b76daa07256a712ed,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1053,TestNull,0,0,0,fix label prop,Leto,gerile.tu@meri.co,2020-12-06T16:54:37.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-06T16:54:37.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+30878bf8a35d1dafe937d45383f337a2b0f6a28e,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1023,TestNull,0,0,0,add Indicator: Line,Leto,gerile.tu@meri.co,2020-11-29T15:35:23.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-11-29T15:35:23.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+3afec3448e02be6190f66c7fac40ac8beb46a742,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1024,TestNull,0,0,0,add second line to story for debugging legend,Leto,gerile.tu@meri.co,2020-11-29T15:35:05.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-11-29T15:35:05.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+4aa88e8b0db2f71e5bf85f803c3bcc8849b8c319,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1025,TestNull,0,0,0,extract renderIcon from Legend,Leto,gerile.tu@meri.co,2020-11-29T15:13:14.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-11-29T15:13:14.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+4fa37c521dc0d6fa8e22198a66d343aa5a557fa7,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1049,TestNull,0,0,0,pointSize -> size,Leto,gerile.tu@meri.co,2020-12-06T17:15:58.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-06T17:15:58.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+601b144160734ed4e65a176a9d927470a9e77552,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1045,TestNull,0,0,0,update,Leto,gerile.tu@meri.co,2020-12-07T04:08:54.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Leto,gerile.tu@meri.co,2020-12-07T04:08:54.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+73117918e6b3ef4b404a5f11242f2eae84a47d8f,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24533,TestNull,0,0,3,add second line to story for debugging legend,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+77758e0fbbf32b68562c8704672d8f87c63b1ba0,"{""ConnectionId"":1,""ProjectId"":20171709}",_raw_gitlab_api_merge_request_commits,1021,TestNull,0,0,0,feat: add stackOffset to RechartsBarChart,Leto,gerile.tu@meri.co,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co,Geril Leto,gerile.tu@meri.co,2020-11-25T03:15:21.000+00:00,gitlab:GitlabUser:1:gerile.tu@meri.co
+8427585a53a6952f48c2c8b7df572ae890032b3f,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24534,TestNull,0,0,0,extract renderIcon from Legend,yingchu,yingchu.chen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yingchu.chen@merico.dev,yingchu,yingchu.chen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yingchu.chen@merico.dev
+9916bd442a3916260ef34c86b99cd49360ab0681,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24542,TestNull,0,0,2,feat: add stackOffset to RechartsBarChart,joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co,joncodo,joncodo@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:joncodo@meri.co
+9b4f407e2219fe3eb68d999e36a10e9c8635138a,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24537,TestNull,0,0,106,fix label prop,keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev,keon,keon.amini@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:keon.amini@merico.dev
+9fe7552499aa501fb0b50849f3c31a47fb71b97f,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24529,TestNull,0,0,1,add second line to story for debugging legend,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+aa2f3faeb1094c22bff57146a164ea07265f7bbc,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24540,TestNull,0,0,694,upgrade recharts version,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co,yanghui,yanghui@meri.co,2020-11-24T15:26:33.000+00:00,GitlabUser:1:yanghui@meri.co
+c591acedadbf5ec78491d06e96a0119826c20709,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24531,TestNull,0,0,26,feat: add stackOffset to RechartsBarChart,julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev,julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev
+cfb28bb170386a5697c2a787e3edbce339007e03,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24532,TestNull,0,0,12,upgrade recharts version,julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev,julien,julien.chinapen@merico.dev,2020-11-24T15:26:33.000+00:00,GitlabUser:1:julien.chinapen@merico.dev
+d7565fc150f2c22b69c54d23f7d36be2f85ab3f4,"{""ConnectionId"":1,""ProjectId"":13}",_raw_gitlab_api_merge_request_commits,24535,TestNull,0,0,221,fix hello would and welcome to visit nddtf.com,Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com,Nd,jzc001@qq.com,2020-11-24T15:26:33.000+00:00,gitlab:GitlabUser:9:jzc001@qq.com
diff --git a/plugins/ae/ae.go b/plugins/ae/impl/impl.go
similarity index 82%
copy from plugins/ae/ae.go
copy to plugins/ae/impl/impl.go
index 4ca20b24..adcac5cf 100644
--- a/plugins/ae/ae.go
+++ b/plugins/ae/impl/impl.go
@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package main // must be main for plugin entry point
+package impl
 
 import (
 	"fmt"
@@ -27,9 +27,7 @@ import (
 	"github.com/apache/incubator-devlake/plugins/ae/tasks"
 	"github.com/apache/incubator-devlake/plugins/core"
 	"github.com/apache/incubator-devlake/plugins/helper"
-	"github.com/apache/incubator-devlake/runner"
 	"github.com/mitchellh/mapstructure"
-	"github.com/spf13/cobra"
 	"github.com/spf13/viper"
 	"gorm.io/gorm"
 )
@@ -123,20 +121,3 @@ func (plugin AE) ApiResources() map[string]map[string]core.ApiResourceHandler {
 		},
 	}
 }
-
-// Export a variable named PluginEntry for Framework to search and load
-var PluginEntry AE //nolint
-
-func main() {
-	aeCmd := &cobra.Command{Use: "ae"}
-	connectionId := aeCmd.Flags().Uint64P("Connection-id", "c", 0, "ae connection id")
-	projectId := aeCmd.Flags().IntP("project-id", "p", 0, "ae project id")
-	_ = aeCmd.MarkFlagRequired("project-id")
-	aeCmd.Run = func(cmd *cobra.Command, args []string) {
-		runner.DirectRun(cmd, args, PluginEntry, map[string]interface{}{
-			"connectionId": *connectionId,
-			"projectId":    *projectId,
-		})
-	}
-	runner.RunCmd(aeCmd)
-}