1
1
package bbgo
2
2
3
3
import (
4
- "fmt "
4
+ "context "
5
5
"reflect"
6
6
7
7
log "github.com/sirupsen/logrus"
@@ -10,96 +10,21 @@ import (
10
10
"github.com/c9s/bbgo/pkg/service"
11
11
)
12
12
13
- type PersistenceSelector struct {
14
- // StoreID is the store you want to use.
15
- StoreID string `json:"store" yaml:"store"`
16
-
17
- // Type is the persistence type
18
- Type string `json:"type" yaml:"type"`
19
- }
20
-
21
13
var DefaultPersistenceServiceFacade = & service.PersistenceServiceFacade {
22
14
Memory : service .NewMemoryService (),
23
15
}
24
16
25
- var PersistenceServiceFacade = DefaultPersistenceServiceFacade
26
-
27
- // Persistence is used for strategy to inject the persistence.
28
- type Persistence struct {
29
- PersistenceSelector * PersistenceSelector `json:"persistence,omitempty" yaml:"persistence,omitempty"`
30
- }
31
-
32
- func (p * Persistence ) backendService (t string ) (service.PersistenceService , error ) {
33
- switch t {
34
- case "json" :
35
- return PersistenceServiceFacade .Json , nil
36
-
37
- case "redis" :
38
- if PersistenceServiceFacade .Redis == nil {
39
- log .Warn ("redis persistence is not available, fallback to memory backend" )
40
- return PersistenceServiceFacade .Memory , nil
41
- }
42
- return PersistenceServiceFacade .Redis , nil
43
-
44
- case "memory" :
45
- return PersistenceServiceFacade .Memory , nil
46
-
47
- }
48
-
49
- return nil , fmt .Errorf ("unsupported persistent type %s" , t )
50
- }
51
-
52
- func (p * Persistence ) Load (val interface {}, subIDs ... string ) error {
53
- ps , err := p .backendService (p .PersistenceSelector .Type )
54
- if err != nil {
55
- return err
56
- }
57
-
58
- log .Debugf ("using persistence store %T for loading" , ps )
59
-
60
- if p .PersistenceSelector .StoreID == "" {
61
- p .PersistenceSelector .StoreID = "default"
62
- }
63
-
64
- store := ps .NewStore (p .PersistenceSelector .StoreID , subIDs ... )
65
- return store .Load (val )
66
- }
67
-
68
- func (p * Persistence ) Save (val interface {}, subIDs ... string ) error {
69
- ps , err := p .backendService (p .PersistenceSelector .Type )
70
- if err != nil {
71
- return err
72
- }
73
-
74
- log .Debugf ("using persistence store %T for storing" , ps )
75
-
76
- if p .PersistenceSelector .StoreID == "" {
77
- p .PersistenceSelector .StoreID = "default"
78
- }
79
-
80
- store := ps .NewStore (p .PersistenceSelector .StoreID , subIDs ... )
81
- return store .Save (val )
82
- }
83
-
84
- func (p * Persistence ) Sync (obj interface {}) error {
85
- id := dynamic .CallID (obj )
86
- if len (id ) == 0 {
87
- return nil
88
- }
89
-
90
- ps := PersistenceServiceFacade .Get ()
91
- return storePersistenceFields (obj , id , ps )
92
- }
17
+ var persistenceServiceFacade = DefaultPersistenceServiceFacade
93
18
94
19
// Sync syncs the object properties into the persistence layer
95
- func Sync (obj interface {}) {
20
+ func Sync (ctx context. Context , obj interface {}) {
96
21
id := dynamic .CallID (obj )
97
22
if len (id ) == 0 {
98
23
log .Warnf ("InstanceID() is not provided, can not sync persistence" )
99
24
return
100
25
}
101
26
102
- ps := PersistenceServiceFacade .Get ()
27
+ ps := persistenceServiceFacade .Get ()
103
28
err := storePersistenceFields (obj , id , ps )
104
29
if err != nil {
105
30
log .WithError (err ).Errorf ("persistence sync failed" )
0 commit comments