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 f2dd0d33  Issues/2038 (#2039)
f2dd0d33 is described below

commit f2dd0d33103c49acc591e879cedf2e2e5382bb0e
Author: likyh <[email protected]>
AuthorDate: Mon Jun 6 21:53:16 2022 +0800

     Issues/2038 (#2039)
    
    * add some log and ignore case of log_level
    
    * add some log and ignore case of log_level
    
    Co-authored-by: linyh <[email protected]>
---
 logger/{log.go => init.go}                         | 14 ++++-----
 .../helper/default_logger.go => logger/logger.go   |  2 +-
 plugins/gitextractor/main.go                       |  4 +--
 plugins/gitextractor/store/database.go             | 15 ++++++----
 plugins/gitextractor/tasks/git_repo_collector.go   |  2 +-
 plugins/helper/api_async_client_test.go            | 13 +++++----
 plugins/helper/api_client.go                       |  2 +-
 plugins/helper/api_collector_test.go               | 33 ++++++++++------------
 plugins/helper/api_extractor.go                    | 12 ++++++--
 plugins/helper/api_extractor_test.go               |  8 ++++--
 plugins/helper/batch_save.go                       | 20 +++++++++----
 plugins/helper/batch_save_divider.go               |  5 ++--
 plugins/helper/batch_save_divider_test.go          |  7 +++--
 plugins/helper/batch_save_test.go                  |  3 +-
 plugins/helper/data_convertor.go                   |  2 +-
 plugins/helper/data_convertor_test.go              |  8 ++++--
 plugins/helper/default_task_context.go             | 13 +++++++--
 plugins/helper/default_task_logger.go              |  3 +-
 runner/db.go                                       |  8 +++---
 19 files changed, 104 insertions(+), 70 deletions(-)

diff --git a/logger/log.go b/logger/init.go
similarity index 87%
rename from logger/log.go
rename to logger/init.go
index 7fc466f8..a5ff6616 100644
--- a/logger/log.go
+++ b/logger/init.go
@@ -21,10 +21,10 @@ import (
        "fmt"
        "github.com/apache/incubator-devlake/config"
        "github.com/apache/incubator-devlake/plugins/core"
-       "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/sirupsen/logrus"
        prefixed "github.com/x-cray/logrus-prefixed-formatter"
        "os"
+       "strings"
 )
 
 var inner *logrus.Logger
@@ -33,14 +33,14 @@ var Global core.Logger
 func init() {
        inner = logrus.New()
        logLevel := logrus.InfoLevel
-       switch config.GetConfig().GetString("LOGGING_LEVEL") {
-       case "Debug":
+       switch strings.ToLower(config.GetConfig().GetString("LOGGING_LEVEL")) {
+       case "debug":
                logLevel = logrus.DebugLevel
-       case "Info":
+       case "info":
                logLevel = logrus.InfoLevel
-       case "Warn":
+       case "warn":
                logLevel = logrus.WarnLevel
-       case "Error":
+       case "error":
                logLevel = logrus.ErrorLevel
        }
        inner.SetLevel(logLevel)
@@ -53,5 +53,5 @@ func init() {
                inner.Info(fmt.Sprintf("failed to create dir logs: %s", err))
        }
        loggerPool := make(map[string]*logrus.Logger)
-       Global = helper.NewDefaultLogger(inner, "", loggerPool)
+       Global = NewDefaultLogger(inner, "", loggerPool)
 }
diff --git a/plugins/helper/default_logger.go b/logger/logger.go
similarity index 99%
rename from plugins/helper/default_logger.go
rename to logger/logger.go
index c6afb66f..110affe1 100644
--- a/plugins/helper/default_logger.go
+++ b/logger/logger.go
@@ -15,7 +15,7 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package helper
+package logger
 
 import (
        "fmt"
diff --git a/plugins/gitextractor/main.go b/plugins/gitextractor/main.go
index 7da1f30a..300ae5b0 100644
--- a/plugins/gitextractor/main.go
+++ b/plugins/gitextractor/main.go
@@ -42,6 +42,7 @@ func main() {
        output := flag.String("output", "", "-output")
        db := flag.String("db", "", "-db")
        flag.Parse()
+       log := logger.Global.Nested("git extractor")
        var storage models.Store
        var err error
        if *url == "" {
@@ -60,13 +61,12 @@ func main() {
                if err != nil {
                        panic(err)
                }
-               storage = store.NewDatabase(database)
+               storage = store.NewDatabase(database, log)
        } else {
                panic("either specify `-output` or `-db` argument as 
destination")
        }
        defer storage.Close()
        ctx := context.Background()
-       log := logger.Global.Nested("git extractor")
        subTaskCtx := helper.NewStandaloneSubTaskContext(
                config.GetConfig(),
                log,
diff --git a/plugins/gitextractor/store/database.go 
b/plugins/gitextractor/store/database.go
index 7c872c8d..4e264fc6 100644
--- a/plugins/gitextractor/store/database.go
+++ b/plugins/gitextractor/store/database.go
@@ -19,6 +19,7 @@ package store
 
 import (
        "github.com/apache/incubator-devlake/models/domainlayer/code"
+       "github.com/apache/incubator-devlake/plugins/core"
        "github.com/apache/incubator-devlake/plugins/helper"
        "gorm.io/gorm"
        "reflect"
@@ -29,16 +30,18 @@ const BathSize = 100
 type Database struct {
        //db     *gorm.DB
        driver *helper.BatchSaveDivider
+       log    core.Logger
 }
 
-func NewDatabase(db *gorm.DB) *Database {
+func NewDatabase(db *gorm.DB, log core.Logger) *Database {
        database := new(Database)
        database.driver = helper.NewBatchSaveDivider(db, BathSize)
+       database.log = log
        return database
 }
 
 func (d *Database) RepoCommits(repoCommit *code.RepoCommit) error {
-       batch, err := d.driver.ForType(reflect.TypeOf(repoCommit))
+       batch, err := d.driver.ForType(reflect.TypeOf(repoCommit), d.log)
        if err != nil {
                return err
        }
@@ -46,7 +49,7 @@ func (d *Database) RepoCommits(repoCommit *code.RepoCommit) 
error {
 }
 
 func (d *Database) Commits(commit *code.Commit) error {
-       batch, err := d.driver.ForType(reflect.TypeOf(commit))
+       batch, err := d.driver.ForType(reflect.TypeOf(commit), d.log)
        if err != nil {
                return err
        }
@@ -54,7 +57,7 @@ func (d *Database) Commits(commit *code.Commit) error {
 }
 
 func (d *Database) Refs(ref *code.Ref) error {
-       batch, err := d.driver.ForType(reflect.TypeOf(ref))
+       batch, err := d.driver.ForType(reflect.TypeOf(ref), d.log)
        if err != nil {
                return err
        }
@@ -62,7 +65,7 @@ func (d *Database) Refs(ref *code.Ref) error {
 }
 
 func (d *Database) CommitFiles(file *code.CommitFile) error {
-       batch, err := d.driver.ForType(reflect.TypeOf(file))
+       batch, err := d.driver.ForType(reflect.TypeOf(file), d.log)
        if err != nil {
                return err
        }
@@ -73,7 +76,7 @@ func (d *Database) CommitParents(pp []*code.CommitParent) 
error {
        if len(pp) == 0 {
                return nil
        }
-       batch, err := d.driver.ForType(reflect.TypeOf(pp[0]))
+       batch, err := d.driver.ForType(reflect.TypeOf(pp[0]), d.log)
        if err != nil {
                return err
        }
diff --git a/plugins/gitextractor/tasks/git_repo_collector.go 
b/plugins/gitextractor/tasks/git_repo_collector.go
index 0ee6fece..4dcb8cd2 100644
--- a/plugins/gitextractor/tasks/git_repo_collector.go
+++ b/plugins/gitextractor/tasks/git_repo_collector.go
@@ -56,7 +56,7 @@ func (o GitExtractorOptions) Valid() error {
 func CollectGitRepo(subTaskCtx core.SubTaskContext) error {
        var err error
        db := subTaskCtx.GetDb()
-       storage := store.NewDatabase(db)
+       storage := store.NewDatabase(db, subTaskCtx.GetLogger())
        op := subTaskCtx.GetData().(GitExtractorOptions)
        p := parser.NewLibGit2(storage, subTaskCtx)
        if strings.HasPrefix(op.Url, "http") {
diff --git a/plugins/helper/api_async_client_test.go 
b/plugins/helper/api_async_client_test.go
index dff9c5f8..266c22b8 100644
--- a/plugins/helper/api_async_client_test.go
+++ b/plugins/helper/api_async_client_test.go
@@ -31,6 +31,7 @@ import (
        "time"
 
        "github.com/agiledragon/gomonkey/v2"
+       "github.com/apache/incubator-devlake/logger"
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/sirupsen/logrus"
        "github.com/spf13/viper"
@@ -103,7 +104,7 @@ func CreateTestAsyncApiClientWithRateLimitAndCtx(t 
*testing.T, rateLimiter *ApiR
                return &DefaultTaskContext{
                        &defaultExecContext{
                                cfg:      cfg,
-                               logger:   &DefaultLogger{},
+                               logger:   &logger.DefaultLogger{},
                                db:       db,
                                ctx:      ctx,
                                name:     "Test",
@@ -146,7 +147,7 @@ func TestWaitAsync_EmptyWork(t *testing.T) {
 func TestWaitAsync_WithWork(t *testing.T) {
        asyncApiClient, _ := CreateTestAsyncApiClient(t)
 
-       gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), 
"Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
+       gm_info := 
gomonkey.ApplyMethod(reflect.TypeOf(&logger.DefaultLogger{}), "Info", func(_ 
*logger.DefaultLogger, _ string, _ ...interface{}) {
        })
        defer gm_info.Reset()
 
@@ -187,7 +188,7 @@ func TestWaitAsync_WithWork(t *testing.T) {
 func TestWaitAsync_MutiWork(t *testing.T) {
        asyncApiClient, _ := CreateTestAsyncApiClient(t)
 
-       gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), 
"Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
+       gm_info := 
gomonkey.ApplyMethod(reflect.TypeOf(&logger.DefaultLogger{}), "Info", func(_ 
*logger.DefaultLogger, _ string, _ ...interface{}) {
        })
        defer gm_info.Reset()
 
@@ -231,7 +232,7 @@ func TestWaitAsync_MutiWork(t *testing.T) {
 // go test -gcflags=all=-l -run ^TestDoAsync_OnceSuceess
 func TestDoAsync_OnceSuceess(t *testing.T) {
        asyncApiClient, _ := CreateTestAsyncApiClient(t)
-       gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), 
"Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
+       gm_info := 
gomonkey.ApplyMethod(reflect.TypeOf(&logger.DefaultLogger{}), "Info", func(_ 
*logger.DefaultLogger, _ string, _ ...interface{}) {
        })
        defer gm_info.Reset()
 
@@ -261,7 +262,7 @@ func TestDoAsync_OnceSuceess(t *testing.T) {
 // go test -gcflags=all=-l -run ^TestDoAsync_TryAndFail
 func TestDoAsync_TryAndFail(t *testing.T) {
        asyncApiClient, _ := CreateTestAsyncApiClient(t)
-       gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), 
"Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
+       gm_info := 
gomonkey.ApplyMethod(reflect.TypeOf(&logger.DefaultLogger{}), "Info", func(_ 
*logger.DefaultLogger, _ string, _ ...interface{}) {
        })
        defer gm_info.Reset()
 
@@ -294,7 +295,7 @@ func TestDoAsync_TryAndFail(t *testing.T) {
 // go test -gcflags=all=-l -run ^TestDoAsync_TryAndSuceess
 func TestDoAsync_TryAndSuceess(t *testing.T) {
        asyncApiClient, _ := CreateTestAsyncApiClient(t)
-       gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), 
"Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
+       gm_info := 
gomonkey.ApplyMethod(reflect.TypeOf(&logger.DefaultLogger{}), "Info", func(_ 
*logger.DefaultLogger, _ string, _ ...interface{}) {
        })
        defer gm_info.Reset()
 
diff --git a/plugins/helper/api_client.go b/plugins/helper/api_client.go
index 33b7ef7a..001b4c66 100644
--- a/plugins/helper/api_client.go
+++ b/plugins/helper/api_client.go
@@ -217,7 +217,7 @@ func (apiClient *ApiClient) Do(
                return nil, err
        }
 
-       // after recieve
+       // after receive
        if apiClient.afterReponse != nil {
                err = apiClient.afterReponse(res)
                if err != nil {
diff --git a/plugins/helper/api_collector_test.go 
b/plugins/helper/api_collector_test.go
index 532b2293..c8f89286 100644
--- a/plugins/helper/api_collector_test.go
+++ b/plugins/helper/api_collector_test.go
@@ -33,6 +33,7 @@ import (
        "time"
 
        "github.com/agiledragon/gomonkey/v2"
+       "github.com/apache/incubator-devlake/logger"
        "github.com/apache/incubator-devlake/models/common"
        "github.com/sirupsen/logrus"
        "github.com/stretchr/testify/assert"
@@ -176,45 +177,41 @@ func MockDB(t *testing.T) {
        gt = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Table", func(db 
*gorm.DB, name string, args ...interface{}) *gorm.DB {
                assert.Equal(t, name, TestTableData.TableName())
                return db
-       },
-       )
+       })
 
        gc = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Create", func(db 
*gorm.DB, value interface{}) *gorm.DB {
                assert.Equal(t, TestTableData, value.(*TestTable))
                return db
-       },
-       )
+       })
 
        gd = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Delete", func(db 
*gorm.DB, value interface{}, conds ...interface{}) (tx *gorm.DB) {
                return db
-       },
-       )
+       })
 
        ga = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "AutoMigrate", 
func(db *gorm.DB, dst ...interface{}) error {
                return nil
-       },
-       )
+       })
 
        god = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Order", func(db 
*gorm.DB, value interface{}) (tx *gorm.DB) {
                return db
-       },
-       )
+       })
 
        gw = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Where", func(db 
*gorm.DB, query interface{}, args ...interface{}) (tx *gorm.DB) {
                return db
-       },
-       )
+       })
+
+       gr = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Count", func(db 
*gorm.DB, count *int64) (tx *gorm.DB) {
+               return db
+       })
 
        gr = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "Rows", func(db 
*gorm.DB) (*sql.Rows, error) {
                return &sql.Rows{}, nil
-       },
-       )
+       })
 
        gs = gomonkey.ApplyMethod(reflect.TypeOf(&gorm.DB{}), "ScanRows", 
func(db *gorm.DB, rows *sql.Rows, dest interface{}) error {
                dest = TestRawMessage
                return nil
-       },
-       )
+       })
 
 }
 
@@ -268,7 +265,7 @@ func CreateTestApiCollector() (*ApiCollector, error) {
        return NewApiCollector(ApiCollectorArgs{
                RawDataSubTaskArgs: RawDataSubTaskArgs{
                        Ctx: &DefaultSubTaskContext{
-                               defaultExecContext: 
newDefaultExecContext(GetConfigForTest("../../"), 
NewDefaultLogger(logrus.New(), "Test", make(map[string]*logrus.Logger)), db, 
ctx, "Test", nil, nil),
+                               defaultExecContext: 
newDefaultExecContext(GetConfigForTest("../../"), 
logger.NewDefaultLogger(logrus.New(), "Test", make(map[string]*logrus.Logger)), 
db, ctx, "Test", nil, nil),
                        },
                        Table: TestTable{}.TableName(),
                        Params: &TestParam{
@@ -1096,7 +1093,7 @@ func TestExecute_Total(t *testing.T) {
        })
        defer gs.Reset()
 
-       gin := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), "Info", 
func(_ *DefaultLogger, _ string, _ ...interface{}) {
+       gin := gomonkey.ApplyMethod(reflect.TypeOf(&logger.DefaultLogger{}), 
"Info", func(_ *logger.DefaultLogger, _ string, _ ...interface{}) {
        })
        defer gin.Reset()
 
diff --git a/plugins/helper/api_extractor.go b/plugins/helper/api_extractor.go
index 8f6d6b6a..c96e33ed 100644
--- a/plugins/helper/api_extractor.go
+++ b/plugins/helper/api_extractor.go
@@ -64,10 +64,18 @@ func NewApiExtractor(args ApiExtractorArgs) (*ApiExtractor, 
error) {
 func (extractor *ApiExtractor) Execute() error {
        // load data from database
        db := extractor.args.Ctx.GetDb()
-       cursor, err := db.Table(extractor.table).Order("id ASC").Where("params 
= ?", extractor.params).Rows()
+       log := extractor.args.Ctx.GetLogger()
+       count := int64(0)
+       cursor, err := db.
+               Table(extractor.table).
+               Order("id ASC").
+               Where("params = ?", extractor.params).
+               Count(&count).
+               Rows()
        if err != nil {
                return err
        }
+       log.Info("get data from %s where params=%s and got %d", 
extractor.table, extractor.params, count)
        defer cursor.Close()
        row := &RawData{}
 
@@ -113,7 +121,7 @@ func (extractor *ApiExtractor) Execute() error {
 
                for _, result := range results {
                        // get the batch operator for the specific type
-                       batch, err := divider.ForType(reflect.TypeOf(result))
+                       batch, err := divider.ForType(reflect.TypeOf(result), 
log)
                        if err != nil {
                                return err
                        }
diff --git a/plugins/helper/api_extractor_test.go 
b/plugins/helper/api_extractor_test.go
index b895d2df..d225e71d 100644
--- a/plugins/helper/api_extractor_test.go
+++ b/plugins/helper/api_extractor_test.go
@@ -21,6 +21,8 @@ import (
        "context"
        "database/sql"
        "fmt"
+       "github.com/apache/incubator-devlake/logger"
+       "github.com/apache/incubator-devlake/plugins/core"
        "reflect"
        "testing"
        "time"
@@ -48,7 +50,7 @@ func CreateTestApiExtractor(t *testing.T) (*ApiExtractor, 
error) {
        return NewApiExtractor(ApiExtractorArgs{
                RawDataSubTaskArgs: RawDataSubTaskArgs{
                        Ctx: &DefaultSubTaskContext{
-                               defaultExecContext: 
newDefaultExecContext(GetConfigForTest("../../"), 
NewDefaultLogger(logrus.New(), "Test", make(map[string]*logrus.Logger)), 
&gorm.DB{}, ctx, "Test", nil, nil),
+                               defaultExecContext: 
newDefaultExecContext(GetConfigForTest("../../"), 
logger.NewDefaultLogger(logrus.New(), "Test", make(map[string]*logrus.Logger)), 
&gorm.DB{}, ctx, "Test", nil, nil),
                        },
                        Table: TestTable{}.TableName(),
                        Params: &TestParam{
@@ -107,7 +109,7 @@ func TestApiExtractorExecute(t *testing.T) {
        )
 
        fortypeTimes := 0
-       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type) (*BatchSave, error) {
+       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type, log core.Logger) 
(*BatchSave, error) {
                fortypeTimes++
                assert.Equal(t, rowType, reflect.TypeOf(TestTableData))
                err := d.onNewBatchSave(rowType)
@@ -168,7 +170,7 @@ func TestApiExtractorExecute_Cancel(t *testing.T) {
        )
 
        fortypeTimes := 0
-       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type) (*BatchSave, error) {
+       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type, log core.Logger) 
(*BatchSave, error) {
                fortypeTimes++
                assert.Equal(t, rowType, reflect.TypeOf(TestTableData))
                err := d.onNewBatchSave(rowType)
diff --git a/plugins/helper/batch_save.go b/plugins/helper/batch_save.go
index 2f9d20b7..a5d66a7f 100644
--- a/plugins/helper/batch_save.go
+++ b/plugins/helper/batch_save.go
@@ -19,11 +19,11 @@ package helper
 
 import (
        "fmt"
-       "reflect"
-       "strings"
-
+       "github.com/apache/incubator-devlake/plugins/core"
        "gorm.io/gorm"
        "gorm.io/gorm/clause"
+       "reflect"
+       "strings"
 )
 
 // Insert data by batch can increase database performance drastically, this 
class aim to make batch-save easier,
@@ -35,20 +35,24 @@ type BatchSave struct {
        // I'm guessing the reason is the type information lost when converted 
to interface{}
        slots      reflect.Value
        db         *gorm.DB
+       logger     core.Logger
        current    int
        size       int
        valueIndex map[string]int
 }
 
-func NewBatchSave(db *gorm.DB, slotType reflect.Type, size int) (*BatchSave, 
error) {
+func NewBatchSave(db *gorm.DB, log core.Logger, slotType reflect.Type, size 
int) (*BatchSave, error) {
        if slotType.Kind() != reflect.Ptr {
                return nil, fmt.Errorf("slotType must be a pointer")
        }
        if !hasPrimaryKey(slotType) {
-               return nil, fmt.Errorf("no primary key")
+               return nil, fmt.Errorf("%s no primary key", slotType.String())
        }
+       log = log.Nested(slotType.String())
+       log.Info("create batch save success")
        return &BatchSave{
                slotType:   slotType,
+               logger:     log,
                slots:      reflect.MakeSlice(reflect.SliceOf(slotType), size, 
size),
                db:         db,
                size:       size,
@@ -80,15 +84,19 @@ func (c *BatchSave) Add(slot interface{}) error {
        // flush out into database if max outed
        if c.current == c.size {
                return c.Flush()
+       } else if c.current%100 == 0 {
+               c.logger.Debug("batch save current: %d", c.current)
        }
        return nil
 }
 
 func (c *BatchSave) Flush() error {
-       err := c.db.Clauses(clause.OnConflict{UpdateAll: 
true}).Create(c.slots.Slice(0, c.current).Interface()).Error
+       result := c.db.Clauses(clause.OnConflict{UpdateAll: 
true}).Create(c.slots.Slice(0, c.current).Interface())
+       err := result.Error
        if err != nil {
                return err
        }
+       c.logger.Info("batch save flush %d and %d success", c.slots.Slice(0, 
c.current).Len(), result.RowsAffected)
        c.current = 0
        c.valueIndex = make(map[string]int)
        return nil
diff --git a/plugins/helper/batch_save_divider.go 
b/plugins/helper/batch_save_divider.go
index 9a20eb42..63003e98 100644
--- a/plugins/helper/batch_save_divider.go
+++ b/plugins/helper/batch_save_divider.go
@@ -18,6 +18,7 @@ limitations under the License.
 package helper
 
 import (
+       "github.com/apache/incubator-devlake/plugins/core"
        "reflect"
 
        "gorm.io/gorm"
@@ -47,13 +48,13 @@ func (d *BatchSaveDivider) OnNewBatchSave(cb 
OnNewBatchSave) {
 }
 
 // return *BatchSave for specified type
-func (d *BatchSaveDivider) ForType(rowType reflect.Type) (*BatchSave, error) {
+func (d *BatchSaveDivider) ForType(rowType reflect.Type, log core.Logger) 
(*BatchSave, error) {
        // get the cache for the specific type
        batch := d.batches[rowType]
        var err error
        // create one if not exists
        if batch == nil {
-               batch, err = NewBatchSave(d.db, rowType, d.batchSize)
+               batch, err = NewBatchSave(d.db, log, rowType, d.batchSize)
                if err != nil {
                        return nil, err
                }
diff --git a/plugins/helper/batch_save_divider_test.go 
b/plugins/helper/batch_save_divider_test.go
index 4d7a8181..42991a33 100644
--- a/plugins/helper/batch_save_divider_test.go
+++ b/plugins/helper/batch_save_divider_test.go
@@ -18,6 +18,7 @@ limitations under the License.
 package helper
 
 import (
+       "github.com/apache/incubator-devlake/logger"
        "reflect"
        "testing"
 
@@ -50,13 +51,13 @@ func TestBatchSaveDivider(t *testing.T) {
        var b3 *BatchSave
 
        // test if it saved and only saved once for one Type
-       b1, err = batchSaveDivider.ForType(reflect.TypeOf(TestTableData))
+       b1, err = batchSaveDivider.ForType(reflect.TypeOf(TestTableData), 
logger.Global)
        assert.Equal(t, initTimes, 1)
        assert.Equal(t, err, nil)
-       b2, err = batchSaveDivider.ForType(reflect.TypeOf(&TestTable2{}))
+       b2, err = batchSaveDivider.ForType(reflect.TypeOf(&TestTable2{}), 
logger.Global)
        assert.Equal(t, initTimes, 2)
        assert.Equal(t, err, nil)
-       b3, err = batchSaveDivider.ForType(reflect.TypeOf(TestTableData))
+       b3, err = batchSaveDivider.ForType(reflect.TypeOf(TestTableData), 
logger.Global)
        assert.Equal(t, initTimes, 2)
        assert.Equal(t, err, nil)
 
diff --git a/plugins/helper/batch_save_test.go 
b/plugins/helper/batch_save_test.go
index fd6bdfad..464be8ee 100644
--- a/plugins/helper/batch_save_test.go
+++ b/plugins/helper/batch_save_test.go
@@ -22,6 +22,7 @@ import (
        "testing"
 
        "github.com/agiledragon/gomonkey/v2"
+       "github.com/apache/incubator-devlake/logger"
        "github.com/apache/incubator-devlake/models/domainlayer"
        "github.com/apache/incubator-devlake/models/domainlayer/ticket"
        "github.com/stretchr/testify/assert"
@@ -157,7 +158,7 @@ func TestBatchSave(t *testing.T) {
 
        TestBatchSize = 1
        rowType := reflect.TypeOf(TestTableData)
-       batch, err := NewBatchSave(db, rowType, TestBatchSize)
+       batch, err := NewBatchSave(db, logger.Global, rowType, TestBatchSize)
 
        // test diff type
        assert.Equal(t, err, nil)
diff --git a/plugins/helper/data_convertor.go b/plugins/helper/data_convertor.go
index 29dc66a5..44a9affb 100644
--- a/plugins/helper/data_convertor.go
+++ b/plugins/helper/data_convertor.go
@@ -115,7 +115,7 @@ func (converter *DataConverter) Execute() error {
 
                for _, result := range results {
                        // get the batch operator for the specific type
-                       batch, err := divider.ForType(reflect.TypeOf(result))
+                       batch, err := divider.ForType(reflect.TypeOf(result), 
converter.args.Ctx.GetLogger())
                        if err != nil {
                                return err
                        }
diff --git a/plugins/helper/data_convertor_test.go 
b/plugins/helper/data_convertor_test.go
index 3a4d84f7..5791c54d 100644
--- a/plugins/helper/data_convertor_test.go
+++ b/plugins/helper/data_convertor_test.go
@@ -26,6 +26,8 @@ import (
        "time"
 
        "github.com/agiledragon/gomonkey/v2"
+       "github.com/apache/incubator-devlake/logger"
+       "github.com/apache/incubator-devlake/plugins/core"
        "github.com/magiconair/properties/assert"
        "github.com/sirupsen/logrus"
        "gorm.io/gorm"
@@ -38,7 +40,7 @@ func CreateTestDataConverter(t *testing.T) (*DataConverter, 
error) {
        return NewDataConverter(DataConverterArgs{
                RawDataSubTaskArgs: RawDataSubTaskArgs{
                        Ctx: &DefaultSubTaskContext{
-                               defaultExecContext: 
newDefaultExecContext(GetConfigForTest("../../"), 
NewDefaultLogger(logrus.New(), "Test", make(map[string]*logrus.Logger)), 
&gorm.DB{}, ctx, "Test", nil, nil),
+                               defaultExecContext: 
newDefaultExecContext(GetConfigForTest("../../"), 
logger.NewDefaultLogger(logrus.New(), "Test", make(map[string]*logrus.Logger)), 
&gorm.DB{}, ctx, "Test", nil, nil),
                        },
                        Table: TestTable{}.TableName(),
                        Params: &TestParam{
@@ -99,7 +101,7 @@ func TestDataConvertorExecute(t *testing.T) {
        )
 
        fortypeTimes := 0
-       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type) (*BatchSave, error) {
+       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type, log core.Logger) 
(*BatchSave, error) {
                fortypeTimes++
                assert.Equal(t, rowType, reflect.TypeOf(TestTableData))
                err := d.onNewBatchSave(rowType)
@@ -160,7 +162,7 @@ func TestDataConvertorExecute_Cancel(t *testing.T) {
        )
 
        fortypeTimes := 0
-       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type) (*BatchSave, error) {
+       gf := gomonkey.ApplyMethod(reflect.TypeOf(&BatchSaveDivider{}), 
"ForType", func(d *BatchSaveDivider, rowType reflect.Type, log core.Logger) 
(*BatchSave, error) {
                fortypeTimes++
                assert.Equal(t, rowType, reflect.TypeOf(TestTableData))
                err := d.onNewBatchSave(rowType)
diff --git a/plugins/helper/default_task_context.go 
b/plugins/helper/default_task_context.go
index f49e2534..3b14b0d0 100644
--- a/plugins/helper/default_task_context.go
+++ b/plugins/helper/default_task_context.go
@@ -22,6 +22,7 @@ import (
        "fmt"
        "sync"
        "sync/atomic"
+       "time"
 
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/spf13/viper"
@@ -152,7 +153,8 @@ func (c *DefaultTaskContext) IncProgress(quantity int) {
 // SubTaskContext default implementation
 type DefaultSubTaskContext struct {
        *defaultExecContext
-       taskCtx *DefaultTaskContext
+       taskCtx          *DefaultTaskContext
+       LastProgressTime time.Time
 }
 
 func (c *DefaultSubTaskContext) SetProgress(current int, total int) {
@@ -164,7 +166,12 @@ func (c *DefaultSubTaskContext) SetProgress(current int, 
total int) {
 
 func (c *DefaultSubTaskContext) IncProgress(quantity int) {
        c.defaultExecContext.IncProgress(core.SubTaskIncProgress, quantity)
-       c.logger.Info("finished records: %d", c.current)
+       if c.LastProgressTime.IsZero() || 
c.LastProgressTime.Add(3*time.Second).Before(time.Now()) || c.current%1000 == 0 
{
+               c.LastProgressTime = time.Now()
+               c.logger.Info("finished records: %d", c.current)
+       } else {
+               c.logger.Debug("finished records: %d", c.current)
+       }
 }
 
 func NewDefaultTaskContext(
@@ -193,6 +200,7 @@ func (c *DefaultTaskContext) SubTaskContext(subtask string) 
(core.SubTaskContext
                                c.subtaskCtxs[subtask] = &DefaultSubTaskContext{
                                        c.defaultExecContext.fork(subtask),
                                        c,
+                                       time.Time{},
                                }
                        }
                        c.defaultExecContext.mu.Unlock()
@@ -220,6 +228,7 @@ func NewStandaloneSubTaskContext(
        return &DefaultSubTaskContext{
                newDefaultExecContext(cfg, logger, db, ctx, name, data, nil),
                nil,
+               time.Time{},
        }
 }
 
diff --git a/plugins/helper/default_task_logger.go 
b/plugins/helper/default_task_logger.go
index 01e72c54..2b4b20a3 100644
--- a/plugins/helper/default_task_logger.go
+++ b/plugins/helper/default_task_logger.go
@@ -18,6 +18,7 @@ limitations under the License.
 package helper
 
 import (
+       "github.com/apache/incubator-devlake/logger"
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/sirupsen/logrus"
 )
@@ -26,5 +27,5 @@ import (
 // TODO: implement another TaskLogger for distributed runner/worker
 
 func NewDefaultTaskLogger(log *logrus.Logger, prefix string, loggerPool 
map[string]*logrus.Logger) core.Logger {
-       return NewDefaultLogger(log, prefix, loggerPool)
+       return logger.NewDefaultLogger(log, prefix, loggerPool)
 }
diff --git a/runner/db.go b/runner/db.go
index ecf9b379..a4d3a93b 100644
--- a/runner/db.go
+++ b/runner/db.go
@@ -33,12 +33,12 @@ import (
 
 func NewGormDb(config *viper.Viper, logger core.Logger) (*gorm.DB, error) {
        dbLoggingLevel := gormLogger.Error
-       switch config.GetString("DB_LOGGING_LEVEL") {
-       case "Silent":
+       switch strings.ToLower(config.GetString("DB_LOGGING_LEVEL")) {
+       case "silent":
                dbLoggingLevel = gormLogger.Silent
-       case "Warn":
+       case "warn":
                dbLoggingLevel = gormLogger.Warn
-       case "Info":
+       case "info":
                dbLoggingLevel = gormLogger.Info
        }
 

Reply via email to