/
runtimeConfig.go
83 lines (70 loc) · 2.32 KB
/
runtimeConfig.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package configuration
import (
"context"
"fmt"
"log"
"cloud.google.com/go/storage"
"github.com/eth-library/dataset-dj/datastructs"
"github.com/eth-library/dataset-dj/dbutil"
"github.com/eth-library/dataset-dj/redisutil"
"github.com/go-redis/redis"
"go.mongodb.org/mongo-driver/mongo"
)
// RuntimeConfig holds pointers to storage clients and some in memory lists
type RuntimeConfig struct {
StorageClient *storage.Client // client used to connect to the storage in order to read and write files
RdbClient *redis.Client
MongoClient *mongo.Client
MongoCtx context.Context
CtxCancel context.CancelFunc
ArchiveIDs datastructs.Set
SourceBucketList []dbutil.SourceBucket
SourceBuckets map[string]dbutil.SourceBucket
}
func InitRuntimeConfig(sc *ServerConfig) *RuntimeConfig {
ctx := context.Background()
storageClient, err := storage.NewClient(ctx)
if err != nil {
log.Fatal(err)
}
defer storageClient.Close()
// connect to redis instance
rdbClient := redisutil.InitRedisConnection(sc.RdbAddr)
// Get Client, Context, CalcelFunc and
// err from connect method.
// "mongodb+srv://data-dj:LibLab123@archive-cluster.jzmhu.mongodb.net/data-dj-main?retryWrites=true&w=majority"
mongoClient, mongoCtx, cancel, err := dbutil.ConnectToMDB(sc.DbConnector)
if err != nil {
panic(err)
}
// Ping mongoDB with Ping method
err = dbutil.PingMDB(ctx, mongoClient)
if err != nil {
fmt.Println("error PingMDB: ", err)
}
// Load the list of already used archiveIDs when redeploying
archiveIDs, err := dbutil.LoadArchiveIDs(mongoCtx, mongoClient, sc.DbName)
if err != nil {
log.Fatal(err)
}
sourceBucketList, err := dbutil.LoadSourceBuckets(mongoCtx, mongoClient, sc.DbName)
sourceBuckets := dbutil.BucketMapfromSlice(sourceBucketList)
if err != nil {
if sc.Mode != "test" {
log.Println("WARNING: no sourceBucketList found: ", err)
}
// init as empty slices and maps to avoid nil pointer errors
sourceBucketList = []dbutil.SourceBucket{}
sourceBuckets = map[string]dbutil.SourceBucket{}
}
rc := RuntimeConfig{
StorageClient: storageClient,
RdbClient: rdbClient,
MongoClient: mongoClient,
MongoCtx: mongoCtx,
CtxCancel: cancel,
ArchiveIDs: archiveIDs,
SourceBucketList: sourceBucketList,
SourceBuckets: sourceBuckets}
return &rc
}