@@ -14,6 +14,7 @@ import (
1414 "github.com/golang-migrate/migrate/v4/database/sqlite3"
1515 _ "github.com/golang-migrate/migrate/v4/source/file"
1616 _ "github.com/mattn/go-sqlite3"
17+ "go.uber.org/zap"
1718)
1819
1920type DB interface {
@@ -36,10 +37,11 @@ type DB interface {
3637}
3738
3839type SQLiteDB struct {
39- db * sql.DB
40+ db * sql.DB
41+ logger * zap.Logger
4042}
4143
42- func NewSQLiteDB (dbPath string ) (* SQLiteDB , error ) {
44+ func NewSQLiteDB (dbPath string , logger * zap. Logger ) (* SQLiteDB , error ) {
4345 db , err := sql .Open ("sqlite3" , dbPath )
4446 if err != nil {
4547 return nil , fmt .Errorf ("failed to open database: %w" , err )
@@ -57,7 +59,7 @@ func NewSQLiteDB(dbPath string) (*SQLiteDB, error) {
5759 return nil , fmt .Errorf ("failed to enable WAL mode: %w" , err )
5860 }
5961
60- return & SQLiteDB {db : db }, nil
62+ return & SQLiteDB {db : db , logger : logger }, nil
6163}
6264
6365func (s * SQLiteDB ) RunMigrations (migrationsPath string ) error {
@@ -371,34 +373,36 @@ func (s *SQLiteDB) ListWorkflows(limit, offset int) ([]Workflow, error) {
371373 return nil , fmt .Errorf ("failed to scan workflow: %w" , err )
372374 }
373375 if err := json .Unmarshal ([]byte (nodesJSON ), & workflow .Nodes ); err != nil {
374- fmt . Printf ( "Warning: failed to unmarshal nodes for workflow %s: %v \n " , workflow .WorkflowID , err )
375- workflow . Nodes = make ([] * pb. Node , 0 )
376+ s . logger . Error ( " failed to unmarshal nodes for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
377+ return nil , fmt . Errorf ( "failed to unmarshal nodes for workflow %s: %w" , workflow . WorkflowID , err )
376378 }
377379
378380 if err := json .Unmarshal ([]byte (validatorsJSON ), & workflow .Validators ); err != nil {
379- fmt . Printf ( "Warning: failed to unmarshal validators for workflow %s: %v \n " , workflow .WorkflowID , err )
380- workflow . Validators = make ([] * pb. Node , 0 )
381+ s . logger . Error ( " failed to unmarshal validators for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
382+ return nil , fmt . Errorf ( "failed to unmarshal validators for workflow %s: %w" , workflow . WorkflowID , err )
381383 }
382384
383385 if err := json .Unmarshal ([]byte (loadBalancersJSON ), & workflow .LoadBalancers ); err != nil {
384- fmt . Printf ( "Warning: failed to unmarshal loadbalancers for workflow %s: %v \n " , workflow .WorkflowID , err )
385- workflow . LoadBalancers = make ([] * pb. Node , 0 )
386+ s . logger . Error ( " failed to unmarshal loadbalancers for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
387+ return nil , fmt . Errorf ( "failed to unmarshal loadbalancers for workflow %s: %w" , workflow . WorkflowID , err )
386388 }
387389
388390 if walletsJSON != "" && walletsJSON != "{}" {
389391 workflow .Wallets = & pb.WalletInfo {}
390392 if err := protojson .Unmarshal ([]byte (walletsJSON ), workflow .Wallets ); err != nil {
391- fmt .Printf ("Warning: failed to unmarshal wallets for workflow %s: %v\n " , workflow .WorkflowID , err )
393+ s .logger .Error ("failed to unmarshal wallets for workflow" , zap .String ("workflow_id" , workflow .WorkflowID ), zap .Error (err ))
394+ return nil , fmt .Errorf ("failed to unmarshal wallets for workflow %s: %w" , workflow .WorkflowID , err )
392395 }
393396 }
394397
395398 if err := json .Unmarshal ([]byte (configJSON ), & workflow .Config ); err != nil {
396- fmt .Printf ("Warning: failed to unmarshal config for workflow %s: %v\n " , workflow .WorkflowID , err )
399+ s .logger .Error ("failed to unmarshal config for workflow" , zap .String ("workflow_id" , workflow .WorkflowID ), zap .Error (err ))
400+ return nil , fmt .Errorf ("failed to unmarshal config for workflow %s: %w" , workflow .WorkflowID , err )
397401 }
398402
399403 if err := json .Unmarshal ([]byte (monitoringLinksJSON ), & workflow .MonitoringLinks ); err != nil {
400- fmt . Printf ( "Warning: failed to unmarshal monitoring links for workflow %s: %v \n " , workflow .WorkflowID , err )
401- workflow . MonitoringLinks = map [ string ] string {}
404+ s . logger . Error ( " failed to unmarshal monitoring links for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
405+ return nil , fmt . Errorf ( "failed to unmarshal monitoring links for workflow %s: %w" , workflow . WorkflowID , err )
402406 }
403407
404408 if loadTestSpecJSON != "" && loadTestSpecJSON != "{}" {
@@ -412,7 +416,7 @@ func (s *SQLiteDB) ListWorkflows(limit, offset int) ([]Workflow, error) {
412416 return nil , fmt .Errorf ("error iterating rows: %w" , err )
413417 }
414418
415- return workflows , nil
419+ return workflows , err
416420}
417421
418422func (s * SQLiteDB ) DeleteWorkflow (workflowID string ) error {
@@ -540,7 +544,7 @@ func (s *SQLiteDB) UpdateWorkflowTemplate(templateID string, template *WorkflowT
540544 return nil
541545}
542546
543- func (s * SQLiteDB ) ListWorkflowTemplates (limit , offset int ) ([]WorkflowTemplate , error ) {
547+ func (s * SQLiteDB ) ListWorkflowTemplates (limit , offset int ) (templates []WorkflowTemplate , err error ) {
544548 ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
545549 defer cancel ()
546550
@@ -554,9 +558,12 @@ func (s *SQLiteDB) ListWorkflowTemplates(limit, offset int) ([]WorkflowTemplate,
554558 if err != nil {
555559 return nil , fmt .Errorf ("failed to list workflow templates: %w" , err )
556560 }
557- defer rows .Close ()
561+ defer func () {
562+ if closeErr := rows .Close (); closeErr != nil {
563+ s .logger .Error ("failed to close rows" , zap .Error (closeErr ))
564+ }
565+ }()
558566
559- var templates []WorkflowTemplate
560567 for rows .Next () {
561568 var template WorkflowTemplate
562569 var configJSON string
@@ -576,7 +583,8 @@ func (s *SQLiteDB) ListWorkflowTemplates(limit, offset int) ([]WorkflowTemplate,
576583 }
577584
578585 if err := json .Unmarshal ([]byte (configJSON ), & template .Config ); err != nil {
579- fmt .Printf ("Warning: failed to unmarshal config for template %s: %v\n " , template .TemplateID , err )
586+ s .logger .Error ("failed to unmarshal config for template" , zap .String ("template_id" , template .TemplateID ), zap .Error (err ))
587+ return nil , fmt .Errorf ("failed to unmarshal config for template %s: %w" , template .TemplateID , err )
580588 }
581589
582590 templates = append (templates , template )
@@ -586,7 +594,7 @@ func (s *SQLiteDB) ListWorkflowTemplates(limit, offset int) ([]WorkflowTemplate,
586594 return nil , fmt .Errorf ("error iterating rows: %w" , err )
587595 }
588596
589- return templates , nil
597+ return templates , err
590598}
591599
592600func (s * SQLiteDB ) DeleteWorkflowTemplate (templateID string ) error {
@@ -610,7 +618,7 @@ func (s *SQLiteDB) DeleteWorkflowTemplate(templateID string) error {
610618}
611619
612620// Template workflow tracking implementation
613- func (s * SQLiteDB ) ListTemplateWorkflows (templateID string , limit , offset int ) ([]Workflow , error ) {
621+ func (s * SQLiteDB ) ListTemplateWorkflows (templateID string , limit , offset int ) (workflows []Workflow , err error ) {
614622 ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
615623 defer cancel ()
616624
@@ -626,9 +634,12 @@ func (s *SQLiteDB) ListTemplateWorkflows(templateID string, limit, offset int) (
626634 if err != nil {
627635 return nil , fmt .Errorf ("failed to list template workflows: %w" , err )
628636 }
629- defer rows .Close ()
637+ defer func () {
638+ if closeErr := rows .Close (); closeErr != nil {
639+ s .logger .Error ("failed to close rows" , zap .Error (closeErr ))
640+ }
641+ }()
630642
631- var workflows []Workflow
632643 for rows .Next () {
633644 var workflow Workflow
634645 var nodesJSON , validatorsJSON , loadBalancersJSON , walletsJSON , configJSON , monitoringLinksJSON , loadTestSpecJSON string
@@ -655,34 +666,36 @@ func (s *SQLiteDB) ListTemplateWorkflows(templateID string, limit, offset int) (
655666 }
656667
657668 if err := json .Unmarshal ([]byte (nodesJSON ), & workflow .Nodes ); err != nil {
658- fmt . Printf ( "Warning: failed to unmarshal nodes for workflow %s: %v \n " , workflow .WorkflowID , err )
659- workflow . Nodes = make ([] * pb. Node , 0 )
669+ s . logger . Error ( " failed to unmarshal nodes for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
670+ return nil , fmt . Errorf ( "failed to unmarshal nodes for workflow %s: %w" , workflow . WorkflowID , err )
660671 }
661672
662673 if err := json .Unmarshal ([]byte (validatorsJSON ), & workflow .Validators ); err != nil {
663- fmt . Printf ( "Warning: failed to unmarshal validators for workflow %s: %v \n " , workflow .WorkflowID , err )
664- workflow . Validators = make ([] * pb. Node , 0 )
674+ s . logger . Error ( " failed to unmarshal validators for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
675+ return nil , fmt . Errorf ( "failed to unmarshal validators for workflow %s: %w" , workflow . WorkflowID , err )
665676 }
666677
667678 if err := json .Unmarshal ([]byte (loadBalancersJSON ), & workflow .LoadBalancers ); err != nil {
668- fmt . Printf ( "Warning: failed to unmarshal loadbalancers for workflow %s: %v \n " , workflow .WorkflowID , err )
669- workflow . LoadBalancers = make ([] * pb. Node , 0 )
679+ s . logger . Error ( " failed to unmarshal loadbalancers for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
680+ return nil , fmt . Errorf ( "failed to unmarshal loadbalancers for workflow %s: %w" , workflow . WorkflowID , err )
670681 }
671682
672683 if walletsJSON != "" && walletsJSON != "{}" {
673684 workflow .Wallets = & pb.WalletInfo {}
674685 if err := protojson .Unmarshal ([]byte (walletsJSON ), workflow .Wallets ); err != nil {
675- fmt .Printf ("Warning: failed to unmarshal wallets for workflow %s: %v\n " , workflow .WorkflowID , err )
686+ s .logger .Error ("failed to unmarshal wallets for workflow" , zap .String ("workflow_id" , workflow .WorkflowID ), zap .Error (err ))
687+ return nil , fmt .Errorf ("failed to unmarshal wallets for workflow %s: %w" , workflow .WorkflowID , err )
676688 }
677689 }
678690
679691 if err := json .Unmarshal ([]byte (configJSON ), & workflow .Config ); err != nil {
680- fmt .Printf ("Warning: failed to unmarshal config for workflow %s: %v\n " , workflow .WorkflowID , err )
692+ s .logger .Error ("failed to unmarshal config for workflow" , zap .String ("workflow_id" , workflow .WorkflowID ), zap .Error (err ))
693+ return nil , fmt .Errorf ("failed to unmarshal config for workflow %s: %w" , workflow .WorkflowID , err )
681694 }
682695
683696 if err := json .Unmarshal ([]byte (monitoringLinksJSON ), & workflow .MonitoringLinks ); err != nil {
684- fmt . Printf ( "Warning: failed to unmarshal monitoring links for workflow %s: %v \n " , workflow .WorkflowID , err )
685- workflow . MonitoringLinks = map [ string ] string {}
697+ s . logger . Error ( " failed to unmarshal monitoring links for workflow" , zap . String ( "workflow_id" , workflow .WorkflowID ), zap . Error ( err ) )
698+ return nil , fmt . Errorf ( "failed to unmarshal monitoring links for workflow %s: %w" , workflow . WorkflowID , err )
686699 }
687700
688701 if loadTestSpecJSON != "" && loadTestSpecJSON != "{}" {
@@ -696,5 +709,5 @@ func (s *SQLiteDB) ListTemplateWorkflows(templateID string, limit, offset int) (
696709 return nil , fmt .Errorf ("error iterating rows: %w" , err )
697710 }
698711
699- return workflows , nil
712+ return workflows , err
700713}
0 commit comments