Browse Source

Update exchange.go

master
yuriy0803 3 years ago committed by GitHub
parent
commit
4b8df40b4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 59
      exchange/exchange.go

59
exchange/exchange.go

@ -1,34 +1,29 @@
package exchange package exchange
import ( import (
"sync"
"encoding/json" "encoding/json"
"time" "io/ioutil"
"net/http"
"log" "log"
"net/http"
"sync"
"time"
"github.com/yuriy0803/open-etc-pool-friends/util"
"github.com/yuriy0803/open-etc-pool-friends/storage" "github.com/yuriy0803/open-etc-pool-friends/storage"
"io/ioutil" "github.com/yuriy0803/open-etc-pool-friends/util"
) )
type ExchangeProcessor struct { type ExchangeProcessor struct {
ExchangeConfig *ExchangeConfig ExchangeConfig *ExchangeConfig
backend *storage.RedisClient backend *storage.RedisClient
rpc *RestClient rpc *RestClient
halt bool halt bool
} }
type ExchangeConfig struct { type ExchangeConfig struct {
Enabled bool `json:"enabled"` Enabled bool `json:"enabled"`
Name string `json:"name"` Name string `json:"name"`
Url string `json:"url"` Url string `json:"url"`
Timeout string `json:"timeout"` Timeout string `json:"timeout"`
RefreshInterval string `json:"refreshInterval"` RefreshInterval string `json:"refreshInterval"`
} }
@ -54,25 +49,23 @@ func NewRestClient(name, url, timeout string) *RestClient {
} }
func (r *RestClient) GetData() (ExchangeReply, error) { func (r *RestClient) GetData() (ExchangeReply, error) {
Resp, err := r.doPost(r.Url, "ticker") resp, err := r.doPost(r.Url, "ticker")
if err != nil { if err != nil {
return nil, err return nil, err
} }
//var reply map[string][]interface{}
var data ExchangeReply var data ExchangeReply
err = json.Unmarshal(Resp, &data) err = json.Unmarshal(resp, &data)
return data, err return data, err
} }
func StartExchangeProcessor(cfg *ExchangeConfig, backend *storage.RedisClient)*ExchangeProcessor{ func StartExchangeProcessor(cfg *ExchangeConfig, backend *storage.RedisClient) *ExchangeProcessor {
u := &ExchangeProcessor{ExchangeConfig: cfg, backend: backend} u := &ExchangeProcessor{ExchangeConfig: cfg, backend: backend}
u.rpc = NewRestClient("ExchangeProcessor", cfg.Url, cfg.Timeout) u.rpc = NewRestClient("ExchangeProcessor", cfg.Url, cfg.Timeout)
return u return u
} }
func (u *ExchangeProcessor) Start(){ func (u *ExchangeProcessor) Start() {
refreshIntv := util.MustParseDuration(u.ExchangeConfig.RefreshInterval) refreshIntv := util.MustParseDuration(u.ExchangeConfig.RefreshInterval)
refreshTimer := time.NewTimer(refreshIntv) refreshTimer := time.NewTimer(refreshIntv)
log.Printf("Set Exchange data refresh every %v", refreshIntv) log.Printf("Set Exchange data refresh every %v", refreshIntv)
@ -80,7 +73,6 @@ func (u *ExchangeProcessor) Start(){
u.fetchData() u.fetchData()
refreshTimer.Reset(refreshIntv) refreshTimer.Reset(refreshIntv)
go func() { go func() {
for { for {
select { select {
@ -90,11 +82,9 @@ func (u *ExchangeProcessor) Start(){
} }
} }
}() }()
} }
func (u *ExchangeProcessor) fetchData() { func (u *ExchangeProcessor) fetchData() {
reply, err := u.rpc.GetData() reply, err := u.rpc.GetData()
if err != nil { if err != nil {
@ -102,13 +92,10 @@ func (u *ExchangeProcessor) fetchData() {
return return
} }
//log.Printf("Reply %v", reply)
//Store the data into the Redis Store
u.backend.StoreExchangeData(reply) u.backend.StoreExchangeData(reply)
if err != nil { if err != nil {
log.Printf("Failed to Store the data to echange %v", err) log.Printf("Failed to store the data to exchange %v", err)
return return
} }
@ -116,25 +103,23 @@ func (u *ExchangeProcessor) fetchData() {
} }
func (r *RestClient) doPost(url string, method string) ([]byte, error) { func (r *RestClient) doPost(url string, method string) ([]byte, error) {
req, err := http.NewRequest("GET", url, nil) req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json") req.Header.Set("Accept", "application/json")
log.Println(req) resp, err := r.client.Do(req)
resp, err := r.client.Get(url)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode == 200 { // OK if resp.StatusCode == 200 { // OK
bodyBytes, err2 := ioutil.ReadAll(resp.Body) bodyBytes, err2 := ioutil.ReadAll(resp.Body)
return bodyBytes, err2 return bodyBytes, err2
} }
return nil, err return nil, err
}
Loading…
Cancel
Save