Enable coingecko pro API endpoint, count coingecko requests in metrics
This commit is contained in:
parent
210ec75a3d
commit
85112a20c7
@ -279,7 +279,7 @@ func mainWithExitCode() int {
|
|||||||
return exitCodeFatal
|
return exitCodeFatal
|
||||||
}
|
}
|
||||||
|
|
||||||
if fiatRates, err = fiat.NewFiatRates(index, configFileContent, onNewFiatRatesTicker); err != nil {
|
if fiatRates, err = fiat.NewFiatRates(index, configFileContent, metrics, onNewFiatRatesTicker); err != nil {
|
||||||
glog.Error("fiatRates ", err)
|
glog.Error("fiatRates ", err)
|
||||||
return exitCodeFatal
|
return exitCodeFatal
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,6 +35,7 @@ type Metrics struct {
|
|||||||
WebsocketPendingRequests *prometheus.GaugeVec
|
WebsocketPendingRequests *prometheus.GaugeVec
|
||||||
SocketIOPendingRequests *prometheus.GaugeVec
|
SocketIOPendingRequests *prometheus.GaugeVec
|
||||||
XPubCacheSize prometheus.Gauge
|
XPubCacheSize prometheus.Gauge
|
||||||
|
CoingeckoRequests *prometheus.CounterVec
|
||||||
}
|
}
|
||||||
|
|
||||||
// Labels represents a collection of label name -> value mappings.
|
// Labels represents a collection of label name -> value mappings.
|
||||||
@ -255,6 +256,14 @@ func GetMetrics(coin string) (*Metrics, error) {
|
|||||||
ConstLabels: Labels{"coin": coin},
|
ConstLabels: Labels{"coin": coin},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
metrics.CoingeckoRequests = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: "blockbook_coingecko_requests",
|
||||||
|
Help: "Total number of requests to coingecko",
|
||||||
|
ConstLabels: Labels{"coin": coin},
|
||||||
|
},
|
||||||
|
[]string{"endpoint", "status"},
|
||||||
|
)
|
||||||
|
|
||||||
v := reflect.ValueOf(metrics)
|
v := reflect.ValueOf(metrics)
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"avalanche-2\",\"platformIdentifier\": \"avalanche\",\"platformVsCurrency\": \"usd\",\"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"avalanche-2\",\"platformIdentifier\": \"avalanche\",\"platformVsCurrency\": \"usd\",\"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"avalanche-2\",\"platformIdentifier\": \"avalanche\",\"platformVsCurrency\": \"usd\",\"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"avalanche-2\",\"platformIdentifier\": \"avalanche\",\"platformVsCurrency\": \"usd\",\"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,7 +57,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"bitcoin-cash\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"bitcoin-cash\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -253,7 +253,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"bitcoin-gold\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"bitcoin-gold\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -67,7 +67,7 @@
|
|||||||
"alternative_estimate_fee_params": "{\"url\": \"https://whatthefee.io/data.json\", \"periodSeconds\": 60}",
|
"alternative_estimate_fee_params": "{\"url\": \"https://whatthefee.io/data.json\", \"periodSeconds\": 60}",
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"bitcoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"bitcoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -61,7 +61,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"bitcore\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"bitcore\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"binancecoin\",\"platformIdentifier\": \"binance-smart-chain\",\"platformVsCurrency\": \"bnb\",\"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"binancecoin\",\"platformIdentifier\": \"binance-smart-chain\",\"platformVsCurrency\": \"bnb\",\"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -62,7 +62,7 @@
|
|||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"binancecoin\",\"platformIdentifier\": \"binance-smart-chain\",\"platformVsCurrency\": \"bnb\",\"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"binancecoin\",\"platformIdentifier\": \"binance-smart-chain\",\"platformVsCurrency\": \"bnb\",\"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"dash\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"dash\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"digibyte\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"digibyte\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -68,7 +68,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"dogecoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"dogecoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -61,7 +61,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ecash\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"ecash\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -55,7 +55,7 @@
|
|||||||
"queryBackendOnMempoolResync": true,
|
"queryBackendOnMempoolResync": true,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ethereum-classic\", \"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"ethereum-classic\", \"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,7 +62,7 @@
|
|||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -64,7 +64,7 @@
|
|||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@
|
|||||||
"processInternalTransactions": true,
|
"processInternalTransactions": true,
|
||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates-disabled": "coingecko",
|
"fiat_rates-disabled": "coingecko",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@
|
|||||||
"processInternalTransactions": true,
|
"processInternalTransactions": true,
|
||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates-disabled": "coingecko",
|
"fiat_rates-disabled": "coingecko",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@
|
|||||||
"processInternalTransactions": true,
|
"processInternalTransactions": true,
|
||||||
"queryBackendOnMempoolResync": false,
|
"queryBackendOnMempoolResync": false,
|
||||||
"fiat_rates-disabled": "coingecko",
|
"fiat_rates-disabled": "coingecko",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
"fiat_rates_params": "{\"coin\": \"ethereum\",\"platformIdentifier\": \"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 900}",
|
||||||
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
"fourByteSignatures": "https://www.4byte.directory/api/v1/signatures/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"fujicoin\", \"periodSeconds\": 600}"
|
"fiat_rates_params": "{\"coin\": \"fujicoin\", \"periodSeconds\": 600}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -61,7 +61,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"groestlcoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"groestlcoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -66,7 +66,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"litecoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"litecoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"monacoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"monacoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -63,7 +63,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"namecoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"namecoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"omotenashicoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"omotenashicoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"trezarcoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"trezarcoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"vertcoin\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"vertcoin\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
"additional_params": {
|
"additional_params": {
|
||||||
"fiat_rates": "coingecko",
|
"fiat_rates": "coingecko",
|
||||||
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
"fiat_rates_vs_currencies": "AED,ARS,AUD,BDT,BHD,BMD,BRL,CAD,CHF,CLP,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,JPY,KRW,KWD,LKR,MMK,MXN,MYR,NGN,NOK,NZD,PHP,PKR,PLN,RUB,SAR,SEK,SGD,THB,TRY,TWD,UAH,USD,VEF,VND,ZAR,BTC,ETH",
|
||||||
"fiat_rates_params": "{\"url\": \"https://api.coingecko.com/api/v3\", \"coin\": \"zcash\", \"periodSeconds\": 900}"
|
"fiat_rates_params": "{\"coin\": \"zcash\", \"periodSeconds\": 900}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -19,6 +20,7 @@ import (
|
|||||||
// Coingecko is a structure that implements RatesDownloaderInterface
|
// Coingecko is a structure that implements RatesDownloaderInterface
|
||||||
type Coingecko struct {
|
type Coingecko struct {
|
||||||
url string
|
url string
|
||||||
|
apiKey string
|
||||||
coin string
|
coin string
|
||||||
platformIdentifier string
|
platformIdentifier string
|
||||||
platformVsCurrency string
|
platformVsCurrency string
|
||||||
@ -30,6 +32,7 @@ type Coingecko struct {
|
|||||||
db *db.RocksDB
|
db *db.RocksDB
|
||||||
updatingCurrent bool
|
updatingCurrent bool
|
||||||
updatingTokens bool
|
updatingTokens bool
|
||||||
|
metrics *common.Metrics
|
||||||
}
|
}
|
||||||
|
|
||||||
// simpleSupportedVSCurrencies https://api.coingecko.com/api/v3/simple/supported_vs_currencies
|
// simpleSupportedVSCurrencies https://api.coingecko.com/api/v3/simple/supported_vs_currencies
|
||||||
@ -51,7 +54,7 @@ type marketChartPrices struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewCoinGeckoDownloader creates a coingecko structure that implements the RatesDownloaderInterface
|
// NewCoinGeckoDownloader creates a coingecko structure that implements the RatesDownloaderInterface
|
||||||
func NewCoinGeckoDownloader(db *db.RocksDB, url string, coin string, platformIdentifier string, platformVsCurrency string, allowedVsCurrencies string, timeFormat string, throttleDown bool) RatesDownloaderInterface {
|
func NewCoinGeckoDownloader(db *db.RocksDB, url string, coin string, platformIdentifier string, platformVsCurrency string, allowedVsCurrencies string, timeFormat string, metrics *common.Metrics, throttleDown bool) RatesDownloaderInterface {
|
||||||
var throttlingDelayMs int
|
var throttlingDelayMs int
|
||||||
if throttleDown {
|
if throttleDown {
|
||||||
throttlingDelayMs = 100
|
throttlingDelayMs = 100
|
||||||
@ -63,8 +66,22 @@ func NewCoinGeckoDownloader(db *db.RocksDB, url string, coin string, platformIde
|
|||||||
allowedVsCurrenciesMap[c] = struct{}{}
|
allowedVsCurrenciesMap[c] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apiKey := os.Getenv("COINGECKO_API_KEY")
|
||||||
|
|
||||||
|
// use default address if not overridden, with respect to existence of apiKey
|
||||||
|
if url == "" {
|
||||||
|
if apiKey != "" {
|
||||||
|
url = "https://pro-api.coingecko.com/api/v3/"
|
||||||
|
} else {
|
||||||
|
url = "https://api.coingecko.com/api/v3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glog.Info("Coingecko downloader url ", url)
|
||||||
|
|
||||||
return &Coingecko{
|
return &Coingecko{
|
||||||
url: url,
|
url: url,
|
||||||
|
apiKey: apiKey,
|
||||||
coin: coin,
|
coin: coin,
|
||||||
platformIdentifier: platformIdentifier,
|
platformIdentifier: platformIdentifier,
|
||||||
platformVsCurrency: platformVsCurrency,
|
platformVsCurrency: platformVsCurrency,
|
||||||
@ -76,6 +93,7 @@ func NewCoinGeckoDownloader(db *db.RocksDB, url string, coin string, platformIde
|
|||||||
},
|
},
|
||||||
db: db,
|
db: db,
|
||||||
throttlingDelay: time.Duration(throttlingDelayMs) * time.Millisecond,
|
throttlingDelay: time.Duration(throttlingDelayMs) * time.Millisecond,
|
||||||
|
metrics: metrics,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +115,7 @@ func doReq(req *http.Request, client *http.Client) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// makeReq HTTP request helper - will retry the call after 1 minute on error
|
// makeReq HTTP request helper - will retry the call after 1 minute on error
|
||||||
func (cg *Coingecko) makeReq(url string) ([]byte, error) {
|
func (cg *Coingecko) makeReq(url string, endpoint string) ([]byte, error) {
|
||||||
for {
|
for {
|
||||||
// glog.Infof("Coingecko makeReq %v", url)
|
// glog.Infof("Coingecko makeReq %v", url)
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
@ -105,14 +123,26 @@ func (cg *Coingecko) makeReq(url string) ([]byte, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
if cg.apiKey != "" {
|
||||||
|
req.Header.Set("x-cg-pro-api-key", cg.apiKey)
|
||||||
|
}
|
||||||
resp, err := doReq(req, cg.httpClient)
|
resp, err := doReq(req, cg.httpClient)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
if cg.metrics != nil {
|
||||||
|
cg.metrics.CoingeckoRequests.With(common.Labels{"endpoint": endpoint, "status": "success"}).Inc()
|
||||||
|
}
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
if err.Error() != "error code: 1015" && !strings.Contains(strings.ToLower(err.Error()), "exceeded the rate limit") {
|
if err.Error() != "error code: 1015" && !strings.Contains(strings.ToLower(err.Error()), "exceeded the rate limit") {
|
||||||
|
if cg.metrics != nil {
|
||||||
|
cg.metrics.CoingeckoRequests.With(common.Labels{"endpoint": endpoint, "status": "error"}).Inc()
|
||||||
|
}
|
||||||
glog.Errorf("Coingecko makeReq %v error %v", url, err)
|
glog.Errorf("Coingecko makeReq %v error %v", url, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if cg.metrics != nil {
|
||||||
|
cg.metrics.CoingeckoRequests.With(common.Labels{"endpoint": endpoint, "status": "throttle"}).Inc()
|
||||||
|
}
|
||||||
// if there is a throttling error, wait 60 seconds and retry
|
// if there is a throttling error, wait 60 seconds and retry
|
||||||
glog.Warningf("Coingecko makeReq %v error %v, will retry in 60 seconds", url, err)
|
glog.Warningf("Coingecko makeReq %v error %v, will retry in 60 seconds", url, err)
|
||||||
time.Sleep(60 * time.Second)
|
time.Sleep(60 * time.Second)
|
||||||
@ -122,7 +152,7 @@ func (cg *Coingecko) makeReq(url string) ([]byte, error) {
|
|||||||
// SimpleSupportedVSCurrencies /simple/supported_vs_currencies
|
// SimpleSupportedVSCurrencies /simple/supported_vs_currencies
|
||||||
func (cg *Coingecko) simpleSupportedVSCurrencies() (simpleSupportedVSCurrencies, error) {
|
func (cg *Coingecko) simpleSupportedVSCurrencies() (simpleSupportedVSCurrencies, error) {
|
||||||
url := cg.url + "/simple/supported_vs_currencies"
|
url := cg.url + "/simple/supported_vs_currencies"
|
||||||
resp, err := cg.makeReq(url)
|
resp, err := cg.makeReq(url, "supported_vs_currencies")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -153,7 +183,7 @@ func (cg *Coingecko) simplePrice(ids []string, vsCurrencies []string) (*map[stri
|
|||||||
params.Add("vs_currencies", vsCurrenciesParam)
|
params.Add("vs_currencies", vsCurrenciesParam)
|
||||||
|
|
||||||
url := fmt.Sprintf("%s/simple/price?%s", cg.url, params.Encode())
|
url := fmt.Sprintf("%s/simple/price?%s", cg.url, params.Encode())
|
||||||
resp, err := cg.makeReq(url)
|
resp, err := cg.makeReq(url, "simple/price")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -176,7 +206,7 @@ func (cg *Coingecko) coinsList() (coinList, error) {
|
|||||||
}
|
}
|
||||||
params.Add("include_platform", platform)
|
params.Add("include_platform", platform)
|
||||||
url := fmt.Sprintf("%s/coins/list?%s", cg.url, params.Encode())
|
url := fmt.Sprintf("%s/coins/list?%s", cg.url, params.Encode())
|
||||||
resp, err := cg.makeReq(url)
|
resp, err := cg.makeReq(url, "coins/list")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -203,7 +233,7 @@ func (cg *Coingecko) coinMarketChart(id string, vs_currency string, days string,
|
|||||||
params.Add("days", days)
|
params.Add("days", days)
|
||||||
|
|
||||||
url := fmt.Sprintf("%s/coins/%s/market_chart?%s", cg.url, id, params.Encode())
|
url := fmt.Sprintf("%s/coins/%s/market_chart?%s", cg.url, id, params.Encode())
|
||||||
resp, err := cg.makeReq(url)
|
resp, err := cg.makeReq(url, "market_chart")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,7 +61,7 @@ type FiatRates struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewFiatRates initializes the FiatRates handler
|
// NewFiatRates initializes the FiatRates handler
|
||||||
func NewFiatRates(db *db.RocksDB, configFileContent []byte, callback OnNewFiatRatesTicker) (*FiatRates, error) {
|
func NewFiatRates(db *db.RocksDB, configFileContent []byte, metrics *common.Metrics, callback OnNewFiatRatesTicker) (*FiatRates, error) {
|
||||||
var config struct {
|
var config struct {
|
||||||
FiatRates string `json:"fiat_rates"`
|
FiatRates string `json:"fiat_rates"`
|
||||||
FiatRatesParams string `json:"fiat_rates_params"`
|
FiatRatesParams string `json:"fiat_rates_params"`
|
||||||
@ -95,7 +95,7 @@ func NewFiatRates(db *db.RocksDB, configFileContent []byte, callback OnNewFiatRa
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if rdParams.URL == "" || rdParams.PeriodSeconds == 0 {
|
if rdParams.PeriodSeconds == 0 {
|
||||||
return nil, errors.New("missing parameters")
|
return nil, errors.New("missing parameters")
|
||||||
}
|
}
|
||||||
fr.timeFormat = "02-01-2006" // Layout string for FiatRates date formatting (DD-MM-YYYY)
|
fr.timeFormat = "02-01-2006" // Layout string for FiatRates date formatting (DD-MM-YYYY)
|
||||||
@ -117,7 +117,7 @@ func NewFiatRates(db *db.RocksDB, configFileContent []byte, callback OnNewFiatRa
|
|||||||
// a small hack - in tests the callback is not used, therefore there is no delay slowing down the test
|
// a small hack - in tests the callback is not used, therefore there is no delay slowing down the test
|
||||||
throttle = false
|
throttle = false
|
||||||
}
|
}
|
||||||
fr.downloader = NewCoinGeckoDownloader(db, rdParams.URL, rdParams.Coin, rdParams.PlatformIdentifier, rdParams.PlatformVsCurrency, fr.allowedVsCurrencies, fr.timeFormat, throttle)
|
fr.downloader = NewCoinGeckoDownloader(db, rdParams.URL, rdParams.Coin, rdParams.PlatformIdentifier, rdParams.PlatformVsCurrency, fr.allowedVsCurrencies, fr.timeFormat, metrics, throttle)
|
||||||
if is != nil {
|
if is != nil {
|
||||||
is.HasFiatRates = true
|
is.HasFiatRates = true
|
||||||
is.HasTokenFiatRates = fr.downloadTokens
|
is.HasTokenFiatRates = fr.downloadTokens
|
||||||
@ -359,6 +359,10 @@ func (fr *FiatRates) tickersToMap(tickers *[]common.CurrencyRatesTicker, granula
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(m) > 0 {
|
if len(m) > 0 {
|
||||||
|
if normalizedTime == from {
|
||||||
|
// there are multiple normalized tickers for the first entry, skip
|
||||||
|
continue
|
||||||
|
}
|
||||||
// check that there is a ticker for each period, set it from current value if missing
|
// check that there is a ticker for each period, set it from current value if missing
|
||||||
prevTime := normalizedTime
|
prevTime := normalizedTime
|
||||||
for {
|
for {
|
||||||
|
|||||||
@ -132,7 +132,7 @@ func TestFiatRates(t *testing.T) {
|
|||||||
// mocked CoinGecko API
|
// mocked CoinGecko API
|
||||||
configJSON := `{"fiat_rates": "coingecko", "fiat_rates_params": "{\"url\": \"` + mockServer.URL + `\", \"coin\": \"ethereum\",\"platformIdentifier\":\"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 60}"}`
|
configJSON := `{"fiat_rates": "coingecko", "fiat_rates_params": "{\"url\": \"` + mockServer.URL + `\", \"coin\": \"ethereum\",\"platformIdentifier\":\"ethereum\",\"platformVsCurrency\": \"eth\",\"periodSeconds\": 60}"}`
|
||||||
|
|
||||||
fiatRates, err := NewFiatRates(d, []byte(configJSON), nil)
|
fiatRates, err := NewFiatRates(d, []byte(configJSON), nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("FiatRates init error: %v", err)
|
t.Fatalf("FiatRates init error: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -123,7 +123,7 @@ func setupPublicHTTPServer(parser bchain.BlockChainParser, chain bchain.BlockCha
|
|||||||
|
|
||||||
// mocked CoinGecko API
|
// mocked CoinGecko API
|
||||||
configJSON := `{"fiat_rates": "coingecko", "fiat_rates_params": "{\"url\": \"none\", \"coin\": \"ethereum\",\"platformIdentifier\":\"ethereum\",\"platformVsCurrency\": \"usd\",\"periodSeconds\": 60}"}`
|
configJSON := `{"fiat_rates": "coingecko", "fiat_rates_params": "{\"url\": \"none\", \"coin\": \"ethereum\",\"platformIdentifier\":\"ethereum\",\"platformVsCurrency\": \"usd\",\"periodSeconds\": 60}"}`
|
||||||
fiatRates, err := fiat.NewFiatRates(d, []byte(configJSON), nil)
|
fiatRates, err := fiat.NewFiatRates(d, []byte(configJSON), nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatal("fiatRates ", err)
|
glog.Fatal("fiatRates ", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user