123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package ethermineapi
- import (
- "encoding/json"
- "fmt"
- "io"
- "net/http"
- "strings"
- )
- // Unmarahals JSON from specified url to v
- // Usage example:
- // <url> - string with web url to raw json data
- // <JsonStruct> - struct type that describes json data at <url>
- //
- // -- code --
- // var parseTo <JsonStruct>
- // err := UnmasrshalFromUrl(<url>, &parseTo)
- // -- code --
- func UnmasrshalFromUrl(url string, v interface{}) error {
- webClient := &http.Client{}
- // Get response from url
- webResp, err := webClient.Get(url)
- if err != nil {
- return err
- }
- // Close response body
- defer webResp.Body.Close()
- // Convert from Reader to []byte
- jsonData, err := io.ReadAll(webResp.Body)
- if err != nil {
- return err
- }
- // Convert []byte to string
- jsonDataStr := fmt.Sprintf("%s", jsonData)
- jsonDataStr = strings.ReplaceAll(jsonDataStr, "null", "0")
- // Covenrt string ot []byte
- jsonData = []byte(jsonDataStr)
- // LogDebug.Println(v)
- return json.Unmarshal([]byte(jsonData), &v)
- }
- func MinerStats(pool, wallet string) (JsonCurrentStats, error) {
- var currentStats JsonCurrentStats
- url := fmt.Sprintf("%s/miner/%s/currentStats", pool, wallet)
- dataExists, err := IsDataExists(url)
- if err != nil {
- return currentStats, err
- }
- if !dataExists {
- return currentStats, fmt.Errorf("no data for miner %s", wallet)
- }
- return currentStats, UnmasrshalFromUrl(url, ¤tStats)
- }
- func Workers(pool, wallet string) (JsonWorker, error) {
- var workers JsonWorker
- url := fmt.Sprintf("%s/miner/%s/workers", pool, wallet)
- dataExists, err := IsDataExists(url)
- if err != nil {
- return workers, err
- }
- if !dataExists {
- return workers, fmt.Errorf("no data for workers of %s", wallet)
- }
- return workers, UnmasrshalFromUrl(url, &workers)
- }
- func Payouts(pool, wallet string) (JsonPayouts, error) {
- var payouts JsonPayouts
- url := fmt.Sprintf("%s/miner/%s/payouts", pool, wallet)
- // dataExists, err := IsDataExists(url) Not needed for payouts
- // if err != nil {
- // return payouts, err
- // }
- //
- // if !dataExists {
- // return workers, fmt.Errorf("no data for workers of %s", wallet)
- // }
- err := UnmasrshalFromUrl(url, &payouts)
- if err != nil {
- return payouts, fmt.Errorf("couldn't get payouts from %s", url)
- }
- return payouts, err
- }
- func IsDataExists(url string) (bool, error) {
- var base baseResponce
-
- err := UnmasrshalFromUrl(url, &base)
- if err != nil {
- return false, fmt.Errorf("couldn't get base response from %s", url)
- }
- if string(base.Data) == "\"NO DATA\"" {
- return false, nil
- }
- return true, nil
- }
|