-
Notifications
You must be signed in to change notification settings - Fork 0
/
fetchall.go
118 lines (95 loc) · 3.26 KB
/
fetchall.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main
import (
"fmt"
"os"
"time"
"crypto_project/config"
"crypto_project/pkg/cryptocompare"
"crypto_project/pkg/db"
"crypto_project/pkg/models"
"github.com/sirupsen/logrus"
)
func main() {
log := logrus.New()
log.Out = os.Stdout
log.Level = logrus.DebugLevel
conf, err := config.ReadConfig("config.toml")
if err != nil {
log.Fatal("Error reading config: ")
log.Panic(err)
}
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Taipei",
conf.Database.Host, conf.Database.Username, conf.Database.Password, conf.Database.DBName, conf.Database.Port)
tradingSymbols := conf.Fetch.TradingSymbols
vsCurrency := conf.Fetch.VSCurrency
limitDaily := conf.Fetch.LimitDaily
limitHourly := conf.Fetch.LimitHourly
log.Infof("Starting data fetch for symbols: %v", tradingSymbols)
client := cryptocompare.NewClient(conf.Cryptocompare.APIKey, log)
db, err := db.NewDB(dsn, log)
if err != nil {
log.Fatalf("Failed to connect to DB: %v", err)
panic(err)
}
for _, symbol := range tradingSymbols {
log.Debugf("Fetching hourly data for symbol: %s", symbol)
// Fetch and save hourly data
hourlyData, err := client.FetchAllHourlyOHLCVData(symbol, vsCurrency, limitHourly)
if err != nil {
log.Errorf("Failed to fetch hourly data for symbol: %s, error: %v", symbol, err)
panic(err)
}
log.Debugf("Successfully fetched hourly data for symbol: %s", symbol)
hourlyOHLCVData := make([]models.CryptoOHLCVHourly, len(hourlyData))
for i, d := range hourlyData {
hourlyOHLCVData[i] = models.CryptoOHLCVHourly{
CryptoOHLCV: models.CryptoOHLCV{
TradingSymbol: symbol,
VsCurrency: vsCurrency,
Timestamp: time.Unix(d.Time, 0).UTC(),
Open: d.Open,
High: d.High,
Low: d.Low,
Close: d.Close,
VolumeFrom: d.VolumeFrom,
VolumeTo: d.VolumeTo,
},
}
}
if err := db.SaveHourlyOHLCData(hourlyOHLCVData); err != nil {
log.Errorf("Failed to save hourly data for symbol: %s, error: %v", symbol, err)
panic(err)
}
log.Debugf("Successfully saved hourly data for symbol: %s", symbol)
log.Debugf("Fetching daily data for symbol: %s", symbol)
// Fetch and save daily data
dailyData, err := client.FetchAllDailyOHLCVData(symbol, vsCurrency, limitDaily)
if err != nil {
log.Errorf("Failed to fetch daily data for symbol: %s, error: %v", symbol, err)
panic(err)
}
dailyOHLCVData := make([]models.CryptoOHLCVDaily, len(dailyData))
for i, d := range dailyData {
dailyOHLCVData[i] = models.CryptoOHLCVDaily{
CryptoOHLCV: models.CryptoOHLCV{
TradingSymbol: symbol,
VsCurrency: vsCurrency,
Timestamp: time.Unix(d.Time, 0).UTC(),
Open: d.Open,
High: d.High,
Low: d.Low,
Close: d.Close,
VolumeFrom: d.VolumeFrom,
VolumeTo: d.VolumeTo,
},
}
}
log.Debugf("Successfully fetched daily data for symbol: %s", symbol)
if err := db.SaveDailyOHLCData(dailyOHLCVData); err != nil {
log.Errorf("Failed to save daily data for symbol: %s, error: %v", symbol, err)
panic(err)
}
log.Debugf("Successfully saved daily data for symbol: %s", symbol)
}
log.Infof("Data fetch completed for symbols: %v", tradingSymbols)
}