From 0fad366b987aa78160ab29adc60a588e5cdb0de2 Mon Sep 17 00:00:00 2001 From: Lou Marvin Caraig Date: Thu, 20 Jun 2019 12:58:09 +0200 Subject: [PATCH 1/5] Add creation of status table Signed-off-by: Lou Marvin Caraig --- cmd/ghsync/subcmd/common.go | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/cmd/ghsync/subcmd/common.go b/cmd/ghsync/subcmd/common.go index 0ad8882..6b81446 100644 --- a/cmd/ghsync/subcmd/common.go +++ b/cmd/ghsync/subcmd/common.go @@ -22,6 +22,7 @@ import ( ) const maxVersion uint = 1560510971 +const statusTableName = "status" type PostgresOpt struct { DB string `long:"postgres-db" env:"GHSYNC_POSTGRES_DB" description:"PostgreSQL DB" default:"ghsync"` @@ -72,9 +73,46 @@ func (o PostgresOpt) initDB() (db *sql.DB, err error) { log.With(log.Fields{"db-version": dbVersion}).Debugf("the DB version is up to date") log.Infof("connection with the DB established") + if err = o.createStatusTable(); err != nil { + return db, err + } + return db, nil } +func (o PostgresOpt) createStatusTable() error { + log.Debugf(fmt.Sprintf("creating status table '%s'", statusTableName)) + + db, err := sql.Open("postgres", o.URL()) + if err != nil { + return err + } + + defer func() { + if err != nil { + db.Close() + } + }() + + stm := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s( + id serial PRIMARY KEY, + org VARCHAR (50) NOT NULL, + part VARCHAR (20) NOT NULL, + done INTEGER NOT NULL DEFAULT 0, + total INTEGER DEFAULT NULL, + UNIQUE (org, part) +);`, statusTableName) + log.Debugf("running statement: %s", stm) + _, err = db.Exec(stm) + if err != nil { + return fmt.Errorf("an error occured while ensureing the status table: %v", err) + } + + log.Infof("status table '%s' created", statusTableName) + + return nil +} + func newMigrate(url string) (*migrate.Migrate, error) { // wrap assets into Resource s := bindata.Resource(migrations.AssetNames(), From c376fb124ba748d956085dbdeb212ba59794c735 Mon Sep 17 00:00:00 2001 From: Lou Marvin Caraig Date: Thu, 20 Jun 2019 14:18:59 +0200 Subject: [PATCH 2/5] Add initialization of status table for shallow sub command Signed-off-by: Lou Marvin Caraig --- cmd/ghsync/subcmd/shallow.go | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/cmd/ghsync/subcmd/shallow.go b/cmd/ghsync/subcmd/shallow.go index 38e5979..ccb3eb9 100644 --- a/cmd/ghsync/subcmd/shallow.go +++ b/cmd/ghsync/subcmd/shallow.go @@ -1,11 +1,14 @@ package subcmd import ( + "database/sql" + "fmt" "strings" "github.com/src-d/ghsync/shallow" "gopkg.in/src-d/go-cli.v0" + "gopkg.in/src-d/go-log.v1" ) type ShallowCommand struct { @@ -29,8 +32,13 @@ func (c *ShallowCommand) Execute(args []string) error { return err } + orgs := strings.Split(c.Orgs, ",") + if err = c.initStatus(db, statusTableName, orgs); err != nil { + return err + } + orgSyncer := shallow.NewOrganizationSyncer(db, client) - for _, o := range strings.Split(c.Orgs, ",") { + for _, o := range orgs { err = orgSyncer.Sync(o) if err != nil { return err @@ -39,3 +47,25 @@ func (c *ShallowCommand) Execute(args []string) error { return nil } + +func (c *ShallowCommand) initStatus(db *sql.DB, tableName string, orgs []string) error { + log.Debugf("initializing status table for orgs: %v", orgs) + var b strings.Builder + + for _, o := range orgs[:len(orgs)-1] { + b.WriteString(fmt.Sprintf("('%s', 'repository'),", o)) + b.WriteString(fmt.Sprintf("('%s', 'user'),", o)) + } + b.WriteString(fmt.Sprintf("('%s', 'repository'),", orgs[len(orgs)-1])) + b.WriteString(fmt.Sprintf("('%s', 'user')", orgs[len(orgs)-1])) + + stm := fmt.Sprintf("INSERT INTO %s (org, part) VALUES %s ON CONFLICT (org, part) DO UPDATE SET failed=0, done=0, total=NULL;", tableName, b.String()) + log.Debugf("running statement: %s", stm) + _, err := db.Exec(stm) + if err != nil { + return fmt.Errorf(fmt.Sprintf( + "an error occured while initializing %s table: %v", tableName, err)) + } + + return nil +} From 2c2d8c9d58fa2c0615ff6536588b2c65997ca1e5 Mon Sep 17 00:00:00 2001 From: Lou Marvin Caraig Date: Thu, 20 Jun 2019 17:33:23 +0200 Subject: [PATCH 3/5] Add progress tracking for repository and user Signed-off-by: Lou Marvin Caraig --- cmd/ghsync/subcmd/shallow.go | 2 +- shallow/organization.go | 26 +++++++---- shallow/repository.go | 32 ++++++++++--- shallow/user.go | 90 +++++++++++++++++++++++------------- 4 files changed, 100 insertions(+), 50 deletions(-) diff --git a/cmd/ghsync/subcmd/shallow.go b/cmd/ghsync/subcmd/shallow.go index ccb3eb9..d649e5c 100644 --- a/cmd/ghsync/subcmd/shallow.go +++ b/cmd/ghsync/subcmd/shallow.go @@ -37,7 +37,7 @@ func (c *ShallowCommand) Execute(args []string) error { return err } - orgSyncer := shallow.NewOrganizationSyncer(db, client) + orgSyncer := shallow.NewOrganizationSyncer(db, client, statusTableName) for _, o := range orgs { err = orgSyncer.Sync(o) if err != nil { diff --git a/shallow/organization.go b/shallow/organization.go index 25f47d2..bc69500 100644 --- a/shallow/organization.go +++ b/shallow/organization.go @@ -13,16 +13,18 @@ import ( ) type OrganizationSyncer struct { - db *sql.DB - store *models.OrganizationStore - client *github.Client + db *sql.DB + store *models.OrganizationStore + client *github.Client + statusTableName string } -func NewOrganizationSyncer(db *sql.DB, c *github.Client) *OrganizationSyncer { +func NewOrganizationSyncer(db *sql.DB, c *github.Client, statusTableName string) *OrganizationSyncer { return &OrganizationSyncer{ - db: db, - store: models.NewOrganizationStore(db), - client: c, + db: db, + store: models.NewOrganizationStore(db), + client: c, + statusTableName: statusTableName, } } @@ -40,6 +42,12 @@ func (s *OrganizationSyncer) Sync(login string) error { if err == nil { logger.Infof("resource already exists, skipping") + stm := fmt.Sprintf("UPDATE %s SET total=0 WHERE org='%s'", s.statusTableName, login) + _, err = s.db.Exec(stm) + if err != nil { + return fmt.Errorf("unable to update status for org %s: %v", login, err) + } + return nil } @@ -48,13 +56,13 @@ func (s *OrganizationSyncer) Sync(login string) error { return err } - repoSyncer := NewRepositorySyncer(s.db, s.client) + repoSyncer := NewRepositorySyncer(s.db, s.client, s.statusTableName) err = repoSyncer.Sync(login, logger) if err != nil { return err } - userSyncer := NewUserSyncer(s.db, s.client) + userSyncer := NewUserSyncer(s.db, s.client, s.statusTableName) err = userSyncer.Sync(login, logger) if err != nil { return err diff --git a/shallow/repository.go b/shallow/repository.go index 25e67ef..6c60f35 100644 --- a/shallow/repository.go +++ b/shallow/repository.go @@ -13,16 +13,18 @@ import ( ) type RepositorySyncer struct { - db *sql.DB - store *models.RepositoryStore - client *github.Client + db *sql.DB + store *models.RepositoryStore + client *github.Client + statusTableName string } -func NewRepositorySyncer(db *sql.DB, c *github.Client) *RepositorySyncer { +func NewRepositorySyncer(db *sql.DB, c *github.Client, statusTableName string) *RepositorySyncer { return &RepositorySyncer{ - db: db, - store: models.NewRepositoryStore(db), - client: c, + db: db, + store: models.NewRepositoryStore(db), + client: c, + statusTableName: statusTableName, } } @@ -52,12 +54,28 @@ func (s *RepositorySyncer) Sync(owner string, logger log.Logger) error { opts.Page = r.NextPage } + stm := fmt.Sprintf("UPDATE %s SET total=%d WHERE org='%s' AND part='repository'", + s.statusTableName, len(repos), owner) + log.Debugf("running statement: %s", stm) + if _, err := s.db.Exec(stm); err != nil { + return fmt.Errorf("an error occured while updating %s table: %v", + s.statusTableName, err) + } + // Process each one of them for _, repository := range repos { err := s.doRepo(repository, logger) if err != nil { return err } + + stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND part='repository'", + s.statusTableName, owner) + log.Debugf("running statement: %s", stm) + if _, err := s.db.Exec(stm); err != nil { + return fmt.Errorf("an error occured while updating %s table: %v", + s.statusTableName, err) + } } logger.Infof("finished to retrieve repositories") diff --git a/shallow/user.go b/shallow/user.go index 1c362db..77ad111 100644 --- a/shallow/user.go +++ b/shallow/user.go @@ -13,14 +13,16 @@ import ( ) type UserSyncer struct { - db *sql.DB - client *github.Client + db *sql.DB + client *github.Client + statusTableName string } -func NewUserSyncer(db *sql.DB, c *github.Client) *UserSyncer { +func NewUserSyncer(db *sql.DB, c *github.Client, statusTableName string) *UserSyncer { return &UserSyncer{ - db: db, - client: c, + db: db, + client: c, + statusTableName: statusTableName, } } @@ -37,6 +39,8 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log logger.Infof("starting to retrieve users") + allUsers := make([]*github.User, 0) + // Get the list of all users for { users, r, err := s.client.Organizations.ListMembers(context.TODO(), org, opts) @@ -44,34 +48,8 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log return err } - for _, user := range users { - logger := logger.With(log.Fields{"user": user.GetLogin()}) - - _, err := store.FindOne(models.NewUserQuery(). - Where(kallax.And( - kallax.Eq(models.Schema.User.ID, user.GetID()), - )), - ) - if err != nil && err != kallax.ErrNotFound { - logger.With(log.Fields{"user": user.GetLogin()}).Errorf(err, "failed to read the resource from the DB") - return fmt.Errorf("failed to read the resource from the DB: %v", err) - } - - if err == nil { - logger.With(log.Fields{"user": user.GetLogin()}).Infof("resource already exists, skipping") - continue - } - - record := models.NewUser() - record.User = *user - - err = store.Insert(record) - if err != nil { - logger.Errorf(err, "failed to write the resource into the DB") - return fmt.Errorf("failed to write the resource into the DB: %v", err) - } - - logger.Debugf("resource written in the DB") + for _, u := range users { + allUsers = append(allUsers, u) } if r.NextPage == 0 { @@ -81,6 +59,52 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log opts.Page = r.NextPage } + stm := fmt.Sprintf("UPDATE %s SET total=%d WHERE org='%s' AND part='user'", + s.statusTableName, len(allUsers), org) + log.Debugf("running statement: %s", stm) + if _, err := s.db.Exec(stm); err != nil { + return fmt.Errorf("an error occured while updating %s table: %v", + s.statusTableName, err) + } + + for _, user := range allUsers { + logger := logger.With(log.Fields{"user": user.GetLogin()}) + + _, err := store.FindOne(models.NewUserQuery(). + Where(kallax.And( + kallax.Eq(models.Schema.User.ID, user.GetID()), + )), + ) + if err != nil && err != kallax.ErrNotFound { + logger.With(log.Fields{"user": user.GetLogin()}).Errorf(err, "failed to read the resource from the DB") + return fmt.Errorf("failed to read the resource from the DB: %v", err) + } + + if err == nil { + logger.With(log.Fields{"user": user.GetLogin()}).Infof("resource already exists, skipping") + continue + } + + record := models.NewUser() + record.User = *user + + err = store.Insert(record) + if err != nil { + logger.Errorf(err, "failed to write the resource into the DB") + return fmt.Errorf("failed to write the resource into the DB: %v", err) + } + + logger.Debugf("resource written in the DB") + + stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND part='user'", + s.statusTableName, org) + log.Debugf("running statement: %s", stm) + if _, err := s.db.Exec(stm); err != nil { + return fmt.Errorf("an error occured while updating %s table: %v", + s.statusTableName, err) + } + } + logger.Infof("finished to retrieve users") return nil From 42c257751ae10e37a614b35ec9ad13aed3e10d68 Mon Sep 17 00:00:00 2001 From: Lou Marvin Caraig Date: Thu, 20 Jun 2019 18:06:45 +0200 Subject: [PATCH 4/5] Add tracking of failed resources Signed-off-by: Lou Marvin Caraig --- cmd/ghsync/subcmd/common.go | 1 + shallow/repository.go | 22 ++++++++-- shallow/user.go | 86 ++++++++++++++++++++++++------------- 3 files changed, 74 insertions(+), 35 deletions(-) diff --git a/cmd/ghsync/subcmd/common.go b/cmd/ghsync/subcmd/common.go index 6b81446..620f8a5 100644 --- a/cmd/ghsync/subcmd/common.go +++ b/cmd/ghsync/subcmd/common.go @@ -99,6 +99,7 @@ func (o PostgresOpt) createStatusTable() error { org VARCHAR (50) NOT NULL, part VARCHAR (20) NOT NULL, done INTEGER NOT NULL DEFAULT 0, + failed INTEGER NOT NULL DEFAULT 0, total INTEGER DEFAULT NULL, UNIQUE (org, part) );`, statusTableName) diff --git a/shallow/repository.go b/shallow/repository.go index 6c60f35..05b895a 100644 --- a/shallow/repository.go +++ b/shallow/repository.go @@ -66,15 +66,19 @@ func (s *RepositorySyncer) Sync(owner string, logger log.Logger) error { for _, repository := range repos { err := s.doRepo(repository, logger) if err != nil { + stm := fmt.Sprintf("UPDATE %s SET failed=failed + 1 WHERE org='%s' AND part='repository'", + s.statusTableName, owner) + if err = s.updateStatus(stm); err != nil { + return err + } + return err } stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND part='repository'", s.statusTableName, owner) - log.Debugf("running statement: %s", stm) - if _, err := s.db.Exec(stm); err != nil { - return fmt.Errorf("an error occured while updating %s table: %v", - s.statusTableName, err) + if err = s.updateStatus(stm); err != nil { + return err } } @@ -83,6 +87,16 @@ func (s *RepositorySyncer) Sync(owner string, logger log.Logger) error { return nil } +func (s *RepositorySyncer) updateStatus(stm string) error { + log.Debugf("running statement: %s", stm) + if _, err := s.db.Exec(stm); err != nil { + return fmt.Errorf("an error occured while updating %s table: %v", + s.statusTableName, err) + } + + return nil +} + func (s *RepositorySyncer) doRepo(repository *github.Repository, parentLogger log.Logger) error { logger := parentLogger.With(log.Fields{"repository": repository.GetName()}) diff --git a/shallow/user.go b/shallow/user.go index 77ad111..3c8ea01 100644 --- a/shallow/user.go +++ b/shallow/user.go @@ -14,6 +14,7 @@ import ( type UserSyncer struct { db *sql.DB + store *models.UserStore client *github.Client statusTableName string } @@ -21,14 +22,14 @@ type UserSyncer struct { func NewUserSyncer(db *sql.DB, c *github.Client, statusTableName string) *UserSyncer { return &UserSyncer{ db: db, + store: models.NewUserStore(db), client: c, statusTableName: statusTableName, } } func (s *UserSyncer) Sync(org string, logger log.Logger) error { - store := models.NewUserStore(s.db) - return store.Transaction(func(store *models.UserStore) error { + return s.store.Transaction(func(store *models.UserStore) error { return s.doUsers(store, org, logger) }) } @@ -68,40 +69,21 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log } for _, user := range allUsers { - logger := logger.With(log.Fields{"user": user.GetLogin()}) - - _, err := store.FindOne(models.NewUserQuery(). - Where(kallax.And( - kallax.Eq(models.Schema.User.ID, user.GetID()), - )), - ) - if err != nil && err != kallax.ErrNotFound { - logger.With(log.Fields{"user": user.GetLogin()}).Errorf(err, "failed to read the resource from the DB") - return fmt.Errorf("failed to read the resource from the DB: %v", err) - } - - if err == nil { - logger.With(log.Fields{"user": user.GetLogin()}).Infof("resource already exists, skipping") - continue - } - - record := models.NewUser() - record.User = *user - - err = store.Insert(record) + err := s.doUser(user, logger) if err != nil { - logger.Errorf(err, "failed to write the resource into the DB") - return fmt.Errorf("failed to write the resource into the DB: %v", err) - } + stm := fmt.Sprintf("UPDATE %s SET failed=failed + 1 WHERE org='%s' AND part='user'", + s.statusTableName, org) + if err = s.updateStatus(stm); err != nil { + return err + } - logger.Debugf("resource written in the DB") + return err + } stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND part='user'", s.statusTableName, org) - log.Debugf("running statement: %s", stm) - if _, err := s.db.Exec(stm); err != nil { - return fmt.Errorf("an error occured while updating %s table: %v", - s.statusTableName, err) + if err = s.updateStatus(stm); err != nil { + return err } } @@ -109,3 +91,45 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log return nil } + +func (s *UserSyncer) updateStatus(stm string) error { + log.Debugf("running statement: %s", stm) + if _, err := s.db.Exec(stm); err != nil { + return fmt.Errorf("an error occured while updating %s table: %v", + s.statusTableName, err) + } + + return nil +} + +func (s *UserSyncer) doUser(user *github.User, parentLogger log.Logger) error { + logger := parentLogger.With(log.Fields{"user": user.GetLogin()}) + + _, err := s.store.FindOne(models.NewUserQuery(). + Where(kallax.And( + kallax.Eq(models.Schema.User.ID, user.GetID()), + )), + ) + if err != nil && err != kallax.ErrNotFound { + logger.With(log.Fields{"user": user.GetLogin()}).Errorf(err, "failed to read the resource from the DB") + return fmt.Errorf("failed to read the resource from the DB: %v", err) + } + + if err == nil { + logger.With(log.Fields{"user": user.GetLogin()}).Infof("resource already exists, skipping") + return nil + } + + record := models.NewUser() + record.User = *user + + err = s.store.Insert(record) + if err != nil { + logger.Errorf(err, "failed to write the resource into the DB") + return fmt.Errorf("failed to write the resource into the DB: %v", err) + } + + logger.Debugf("resource written in the DB") + + return nil +} From 725187e0d3229d5e6f0eb546abc61e1eca89a423 Mon Sep 17 00:00:00 2001 From: Lou Marvin Caraig Date: Fri, 21 Jun 2019 12:41:17 +0200 Subject: [PATCH 5/5] Rename part column of status table into entity Signed-off-by: Lou Marvin Caraig --- cmd/ghsync/subcmd/common.go | 4 ++-- cmd/ghsync/subcmd/shallow.go | 2 +- shallow/repository.go | 6 +++--- shallow/user.go | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cmd/ghsync/subcmd/common.go b/cmd/ghsync/subcmd/common.go index 620f8a5..3eb913c 100644 --- a/cmd/ghsync/subcmd/common.go +++ b/cmd/ghsync/subcmd/common.go @@ -97,11 +97,11 @@ func (o PostgresOpt) createStatusTable() error { stm := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s( id serial PRIMARY KEY, org VARCHAR (50) NOT NULL, - part VARCHAR (20) NOT NULL, + entity VARCHAR (20) NOT NULL, done INTEGER NOT NULL DEFAULT 0, failed INTEGER NOT NULL DEFAULT 0, total INTEGER DEFAULT NULL, - UNIQUE (org, part) + UNIQUE (org, entity) );`, statusTableName) log.Debugf("running statement: %s", stm) _, err = db.Exec(stm) diff --git a/cmd/ghsync/subcmd/shallow.go b/cmd/ghsync/subcmd/shallow.go index d649e5c..b4585af 100644 --- a/cmd/ghsync/subcmd/shallow.go +++ b/cmd/ghsync/subcmd/shallow.go @@ -59,7 +59,7 @@ func (c *ShallowCommand) initStatus(db *sql.DB, tableName string, orgs []string) b.WriteString(fmt.Sprintf("('%s', 'repository'),", orgs[len(orgs)-1])) b.WriteString(fmt.Sprintf("('%s', 'user')", orgs[len(orgs)-1])) - stm := fmt.Sprintf("INSERT INTO %s (org, part) VALUES %s ON CONFLICT (org, part) DO UPDATE SET failed=0, done=0, total=NULL;", tableName, b.String()) + stm := fmt.Sprintf("INSERT INTO %s (org, entity) VALUES %s ON CONFLICT (org, entity) DO UPDATE SET failed=0, done=0, total=NULL;", tableName, b.String()) log.Debugf("running statement: %s", stm) _, err := db.Exec(stm) if err != nil { diff --git a/shallow/repository.go b/shallow/repository.go index 05b895a..ef31ba8 100644 --- a/shallow/repository.go +++ b/shallow/repository.go @@ -54,7 +54,7 @@ func (s *RepositorySyncer) Sync(owner string, logger log.Logger) error { opts.Page = r.NextPage } - stm := fmt.Sprintf("UPDATE %s SET total=%d WHERE org='%s' AND part='repository'", + stm := fmt.Sprintf("UPDATE %s SET total=%d WHERE org='%s' AND entity='repository'", s.statusTableName, len(repos), owner) log.Debugf("running statement: %s", stm) if _, err := s.db.Exec(stm); err != nil { @@ -66,7 +66,7 @@ func (s *RepositorySyncer) Sync(owner string, logger log.Logger) error { for _, repository := range repos { err := s.doRepo(repository, logger) if err != nil { - stm := fmt.Sprintf("UPDATE %s SET failed=failed + 1 WHERE org='%s' AND part='repository'", + stm := fmt.Sprintf("UPDATE %s SET failed=failed + 1 WHERE org='%s' AND entity='repository'", s.statusTableName, owner) if err = s.updateStatus(stm); err != nil { return err @@ -75,7 +75,7 @@ func (s *RepositorySyncer) Sync(owner string, logger log.Logger) error { return err } - stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND part='repository'", + stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND entity='repository'", s.statusTableName, owner) if err = s.updateStatus(stm); err != nil { return err diff --git a/shallow/user.go b/shallow/user.go index 3c8ea01..9a47e3a 100644 --- a/shallow/user.go +++ b/shallow/user.go @@ -60,7 +60,7 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log opts.Page = r.NextPage } - stm := fmt.Sprintf("UPDATE %s SET total=%d WHERE org='%s' AND part='user'", + stm := fmt.Sprintf("UPDATE %s SET total=%d WHERE org='%s' AND entity='user'", s.statusTableName, len(allUsers), org) log.Debugf("running statement: %s", stm) if _, err := s.db.Exec(stm); err != nil { @@ -71,7 +71,7 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log for _, user := range allUsers { err := s.doUser(user, logger) if err != nil { - stm := fmt.Sprintf("UPDATE %s SET failed=failed + 1 WHERE org='%s' AND part='user'", + stm := fmt.Sprintf("UPDATE %s SET failed=failed + 1 WHERE org='%s' AND entity='user'", s.statusTableName, org) if err = s.updateStatus(stm); err != nil { return err @@ -80,7 +80,7 @@ func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Log return err } - stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND part='user'", + stm := fmt.Sprintf("UPDATE %s SET done=done + 1 WHERE org='%s' AND entity='user'", s.statusTableName, org) if err = s.updateStatus(stm); err != nil { return err