1
1
package main
2
2
3
3
import (
4
- "errors"
5
4
"strings"
6
5
"sync"
7
6
7
+ "github.com/pkg/errors"
8
8
log "github.com/sirupsen/logrus"
9
9
"gorm.io/gorm"
10
10
@@ -14,21 +14,23 @@ import (
14
14
"github.com/dipdup-net/metadata/cmd/metadata/context"
15
15
"github.com/dipdup-net/metadata/cmd/metadata/models"
16
16
"github.com/dipdup-net/metadata/cmd/metadata/resolver"
17
+ "github.com/dipdup-net/metadata/cmd/metadata/storage"
17
18
"github.com/dipdup-net/metadata/cmd/metadata/tzkt"
18
19
)
19
20
20
21
// Indexer -
21
22
type Indexer struct {
22
- network string
23
- indexName string
24
- state state.State
25
- resolver resolver.Receiver
26
- db * gorm.DB
27
- scanner * tzkt.Scanner
28
- ctx * context.Context
29
- contracts * Queue
30
- tokens * Queue
31
- maxRetryCount uint64
23
+ network string
24
+ indexName string
25
+ state state.State
26
+ resolver resolver.Receiver
27
+ db * gorm.DB
28
+ scanner * tzkt.Scanner
29
+ ctx * context.Context
30
+ contracts * Queue
31
+ tokens * Queue
32
+ thumbnailCreator * ThumbnailCreator
33
+ settings config.Settings
32
34
33
35
stop chan struct {}
34
36
wg sync.WaitGroup
@@ -50,16 +52,19 @@ func NewIndexer(network string, indexerConfig *config.Indexer, database generalC
50
52
}
51
53
52
54
indexer := & Indexer {
53
- scanner : tzkt .New (indexerConfig .DataSource .Tzkt , filters .Accounts ... ),
54
- network : network ,
55
- indexName : models .IndexName (network ),
56
- resolver : rslvr ,
57
- maxRetryCount : settings . MaxRetryCountOnError ,
58
- ctx : ctx ,
59
- db : db ,
60
- stop : make (chan struct {}, 1 ),
55
+ scanner : tzkt .New (indexerConfig .DataSource .Tzkt , filters .Accounts ... ),
56
+ network : network ,
57
+ indexName : models .IndexName (network ),
58
+ resolver : rslvr ,
59
+ settings : settings ,
60
+ ctx : ctx ,
61
+ db : db ,
62
+ stop : make (chan struct {}, 1 ),
61
63
}
62
64
65
+ if aws := storage .NewAWS (settings .AWS .AccessKey , settings .AWS .Secret , settings .AWS .Region , settings .AWS .BucketName ); aws != nil {
66
+ indexer .thumbnailCreator = NewThumbnailCreator (aws , db , settings .IPFSGateways )
67
+ }
63
68
indexer .contracts = NewQueue (db , 15 , 60 , indexer .onContractFlush , indexer .onContractTick )
64
69
indexer .tokens = NewQueue (db , 15 , 60 , indexer .onTokenFlush , indexer .onTokenTick )
65
70
@@ -76,6 +81,9 @@ func (indexer *Indexer) Start() error {
76
81
return err
77
82
}
78
83
84
+ if indexer .thumbnailCreator != nil {
85
+ indexer .thumbnailCreator .Start ()
86
+ }
79
87
indexer .contracts .Start ()
80
88
indexer .tokens .Start ()
81
89
@@ -92,6 +100,12 @@ func (indexer *Indexer) Close() error {
92
100
indexer .stop <- struct {}{}
93
101
indexer .wg .Wait ()
94
102
103
+ if indexer .thumbnailCreator != nil {
104
+ if err := indexer .thumbnailCreator .Close (); err != nil {
105
+ return err
106
+ }
107
+ }
108
+
95
109
if err := indexer .scanner .Close (); err != nil {
96
110
return err
97
111
}
@@ -175,11 +189,11 @@ func (indexer *Indexer) handlerUpdate(msg tzkt.Message) error {
175
189
switch path [len (path )- 1 ] {
176
190
case "token_metadata" :
177
191
if err := indexer .processTokenMetadata (msg .Body [i ], tx ); err != nil {
178
- return err
192
+ return errors . Wrap ( err , "token_metadata" )
179
193
}
180
194
case "metadata" :
181
195
if err := indexer .processContractMetadata (msg .Body [i ], tx ); err != nil {
182
- return err
196
+ return errors . Wrap ( err , "contract_metadata" )
183
197
}
184
198
}
185
199
}
0 commit comments