Skip to content

Commit

Permalink
statis
Browse files Browse the repository at this point in the history
  • Loading branch information
osoftdeveloper committed Oct 31, 2019
1 parent 4c6856f commit a5d6cbf
Show file tree
Hide file tree
Showing 15 changed files with 2,125 additions and 7 deletions.
63 changes: 63 additions & 0 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ package client
import (
"encoding/json"
"errors"
"fmt"

. "github.com/browser/log"
"github.com/browser/types"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ftbrowser/common"
"github.com/ftserverstatistical/services/param"
"go.uber.org/zap"
)

Expand All @@ -14,15 +18,74 @@ const (
methodBlockByNumber = "ft_getBlockByNumber"
methodChainConfig = "ft_getChainConfig"
methodBlockAndResultByNumber = "ft_getBlockAndResultByNumber"
methodFeeResult = "fee_getObjectFeeResult"
methodSendRawTransaction = "ft_sendRawTransaction"
methodAssetInfoByName = "account_getAssetInfoByName"
methodAssetInfoByID = "account_getAssetInfoByID"
methodGetAccountByName = "account_getAccountByName"
methodGetCode = "account_getCode"
methodAccountByID = "account_getAccountByID"
methodDposCadidatesSize = "dpos_candidatesSize"
methodDposIrreversible = "dpos_irreversible"
methodBrowserAllEpoch = "dpos_browserAllEpoch"
methodBrowserVote = "dpos_browserVote"
methodBrowserEpochRecord = "dpos_browserEpochRecord"
)

func GetAccountByID(id uint64) (string, error) {
request := common.NewRPCRequest("2.0", methodAccountByID, id)
jsonParsed, err := common.SendRPCRequst(param.Rpchost, request)
if err != nil {
ZapLog.Error(fmt.Sprintf("GetAccountByID SendRPCRequst error --- %s", err))
return "", err
}
if result := jsonParsed.Path("result").Data(); result == nil {
return "", fmt.Errorf("GetAccountByID Name not found ID:%d", id)
}
name := jsonParsed.Path("result.accountName").Data().(string)
return name, nil
}

func GetBrowserEpochRecord(epoch uint64) (*types.ArrayCandidateInfoForBrowser, error) {
data := &types.ArrayCandidateInfoForBrowser{}
err := GetData(methodBrowserEpochRecord, data, epoch)
if err != nil {
ZapLog.Error("GetBrowserVote error", zap.Error(err))
return nil, err
}
return data, nil
}

func GetBrowserVote(epoch uint64) (*types.ArrayCandidateInfoForBrowser, error) {
data := &types.ArrayCandidateInfoForBrowser{}
err := GetData(methodBrowserVote, data, epoch)
if err != nil {
ZapLog.Error("GetBrowserVote error", zap.Error(err))
return nil, err
}
return data, nil
}

func GetBrowserAllEpoch() (*types.Epochs, error) {
data := &types.Epochs{}
err := GetData(methodBrowserAllEpoch, data)
if err != nil {
ZapLog.Error("GetBrowserAllEpoch error", zap.Error(err))
return nil, err
}
return data, nil
}

func GetFeeResultByTime(time uint64, startFeeID uint64, count uint64) (*types.ObjectFeeResult, error) {
data := &types.ObjectFeeResult{}
err := GetData(methodFeeResult, data, startFeeID, count, time*1000000000)
if err != nil {
ZapLog.Error("GetFeeResultByTime error", zap.Error(err))
return nil, err
}
return data, nil
}

func GetCurrentBlockInfo() (*types.RpcBlock, error) {
data := &types.RpcBlock{}
err := GetData(methodCurrentBlock, data, true)
Expand Down
95 changes: 95 additions & 0 deletions common/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package common

import (
"math/big"
"sort"
)

type Float64Sort struct {
name string
value float64
}

func Float64SorterProcess(planets []Float64Sort) {
bi := &Float64Sorter{
data: planets,
}
sort.Sort(bi)
}

type Float64Sorter struct {
data []Float64Sort
by func(p1, p2 *Float64Sort) bool
}

func (s *Float64Sorter) Len() int {
return len(s.data)
}

func (s *Float64Sorter) Swap(i, j int) {
s.data[i], s.data[j] = s.data[j], s.data[i]
}

func (s *Float64Sorter) Less(i, j int) bool {
return s.data[i].value > s.data[j].value
}

// uint64
type Uint64Sort struct {
Name string
Value uint64
}

func Uint64SorterProcess(planets []Uint64Sort) {
bi := &Uint64Sorter{
data: planets,
}
sort.Sort(bi)
}

type Uint64Sorter struct {
data []Uint64Sort
by func(p1, p2 *Uint64Sort) bool
}

func (s *Uint64Sorter) Len() int {
return len(s.data)
}

func (s *Uint64Sorter) Swap(i, j int) {
s.data[i], s.data[j] = s.data[j], s.data[i]
}

func (s *Uint64Sorter) Less(i, j int) bool {
return s.data[i].Value > s.data[j].Value
}

type BigIntSort struct {
Name string
Value *big.Int
}

// type ByBigInt func(p1, p2 *bigIntSort) bool

func BigIntSorterProcess(planets []BigIntSort) {
bi := &BigIntSorter{
data: planets,
}
sort.Sort(bi)
}

type BigIntSorter struct {
data []BigIntSort
}

func (s *BigIntSorter) Len() int {
return len(s.data)
}

func (s *BigIntSorter) Swap(i, j int) {
s.data[i], s.data[j] = s.data[j], s.data[i]
}

func (s *BigIntSorter) Less(i, j int) bool {
return s.data[i].Value.Cmp(s.data[j].Value) > 0
}
197 changes: 197 additions & 0 deletions db/statis.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
package db

import (
"database/sql"
"fmt"
"math/big"

. "github.com/browser/log"
"go.uber.org/zap"
)

type MysqlToken struct {
Token_name string
User_num uint64
User_rank int
Call_num uint64
Call_rank int
Income_rank int
FeeTotal *big.Int
Holder_num uint64
Holder_rank int
}

type MysqlContract struct {
Contract_name string
User_num uint64
User_rank int
Call_num uint64
Call_rank int
Income_rank int
FeeTotal *big.Int
}

type MysqlFeeRank struct {
Name string
Type int64
Fee string
}

func GetBlockHeight() (int64, error) {
var height int64
sqlstr := fmt.Sprintf("SELECT height FROM statis_block_info")
row := Mysql.db.QueryRow(sqlstr)
err := row.Scan(&height)
if err == sql.ErrNoRows {
return 0, sql.ErrNoRows
}
if err != nil {
ZapLog.Error("GetBlockHeight error", zap.Error(err), zap.String("sql", sqlstr))
return 0, err
}
return height, nil
}

func LoadTokens() ([]*MysqlToken, error) {
sqlstr := "SELECT token_name,user_num, user_rank,call_num, call_rank, income_rank,feeTotal" +
",holder_num FROM statis_token"

rows, err := Mysql.db.Query(sqlstr)
defer rows.Close()
if err != nil {
ZapLog.Error("LoadTokens", zap.Error(err), zap.String("sql", sqlstr))
return nil, err
}

datas := make([]*MysqlToken, 0)
for rows.Next() {
var feestr string
data := &MysqlToken{}
err := rows.Scan(&data.Token_name, &data.User_num, &data.User_rank, &data.Call_num, &data.Call_rank, &data.Income_rank, &feestr, &data.Holder_num)
data.FeeTotal, _ = big.NewInt(0).SetString(feestr, 10)
if err == sql.ErrNoRows {
return nil, sql.ErrNoRows
}
if err != nil {
ZapLog.Panic("LoadTokens error", zap.Error(err), zap.String("sql", sqlstr))
}
datas = append(datas, data)
}

return datas, nil
}

func LoadContracts() ([]*MysqlContract, error) {
sqlstr := "SELECT contract_name,user_num, user_rank,call_num, call_rank, income_rank,feeTotal FROM statis_contract"

rows, err := Mysql.db.Query(sqlstr)
defer rows.Close()
if err != nil {
ZapLog.Error("LoadContracts", zap.Error(err), zap.String("sql", sqlstr))
return nil, err
}

datas := make([]*MysqlContract, 0)
for rows.Next() {
var feestr string
data := &MysqlContract{}
err := rows.Scan(&data.Contract_name, &data.User_num, &data.User_rank, &data.Call_num, &data.Call_rank, &data.Income_rank, &feestr)
data.FeeTotal, _ = big.NewInt(0).SetString(feestr, 10)
if err == sql.ErrNoRows {
return nil, sql.ErrNoRows
}
if err != nil {
ZapLog.Panic("LoadContracts error", zap.Error(err), zap.String("sql", sqlstr))
}
datas = append(datas, data)
}
return datas, nil
}

type ContrackStatistics struct {
User map[string]int
User_num uint64
User_rank int
Call_num uint64
Call_rank int
Income_rank int
FeeTotal *big.Int
}

type TokenStatistics struct {
User map[string]int
User_num uint64
User_rank int
Call_num uint64
Call_rank int
Income_rank int
FeeTotal *big.Int
Holder map[string]int
Holder_num uint64
Holder_rank int
}

func InsertToken(name string, data *TokenStatistics, tx *sql.Tx) {
blocksql := fmt.Sprintf("REPLACE INTO statis_token(token_name, user_num, user_rank,"+
" call_num, call_rank, holder_num,holder_rank,income_rank,feeTotal)"+
" VALUES('%s', %d, %d, %d , %d, %d , %d,%d, '%s');",
name, data.User_num, data.User_rank, data.Call_num, data.Call_rank,
data.Holder_num, data.Holder_rank, data.Income_rank, data.FeeTotal.String())
_, err := tx.Exec(blocksql)
if err != nil {
ZapLog.Panic("insertToken failed", zap.Error(err), zap.String("sql", blocksql))
}
}

func InsertContract(name string, data *ContrackStatistics, tx *sql.Tx) {
blocksql := fmt.Sprintf("REPLACE INTO statis_contract(contract_name, user_num, user_rank,"+
" call_num, call_rank, income_rank,feeTotal)"+
" VALUES('%s', %d, %d, %d , %d, %d, '%s');",
name, data.User_num, data.User_rank, data.Call_num, data.Call_rank,
data.Income_rank, data.FeeTotal.String())
_, err := tx.Exec(blocksql)
if err != nil {
ZapLog.Panic("InsertContract failed", zap.Error(err), zap.String("sql", blocksql))
}
}

func ReplaceTotalFee(name, nametype string, fee *big.Int, rank int, tx *sql.Tx) {
blocksql := fmt.Sprintf("REPLACE INTO statis_fee_total(name,nametype,rank,fee) "+
"VALUES('%s','%s',%d, '%s');", name, nametype, rank, fee.String())
_, err := tx.Exec(blocksql)
if err != nil {
ZapLog.Panic("InsertContract failed", zap.Error(err), zap.String("sql", blocksql))
}
}

func ReplaceBlockInfo(height int64) {
blocksql := fmt.Sprintf("REPLACE INTO statis_block_info(id,height) VALUES(%d,%d);", 1, height)
_, err := Mysql.db.Exec(blocksql)
if err != nil {
ZapLog.Panic("insertBlockInfo failed", zap.Error(err), zap.String("sql", blocksql))
}
}

func InsertTokenInfo(name string, decimals uint64, assetid uint64, shortName string) {
blocksql := fmt.Sprintf("REPLACE INTO statis_token_info(name,decimals,assetid,shortname) VALUES('%s',%d,%d,'%s') ", name, decimals, assetid, shortName)
_, err := Mysql.db.Exec(blocksql)
if err != nil {
ZapLog.Panic("InsertTokenInfo failed", zap.Error(err), zap.String("sql", blocksql))
}
}

func GetTokenInfoByAssetID(assetid uint64) (uint64, string, string, error) {
var decimals uint64
var name, shortname string
sqlstr := fmt.Sprintf("SELECT decimals,name,shortname FROM statis_token_info where assetid = %d ", assetid)
row := Mysql.db.QueryRow(sqlstr)
err := row.Scan(&decimals, &name, &shortname)
if err == sql.ErrNoRows {
return 0, "", "", sql.ErrNoRows
}
if err != nil {
ZapLog.Error("getTokenInfoByAssetID error", zap.Error(err), zap.String("sql", sqlstr))
return 0, "", "", err
}
return decimals, name, shortname, nil
}
1 change: 1 addition & 0 deletions dispatch/dispatch.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ func (d *Dispatch) sendBlockToTask() {
d.checkTaskResult()
if block.Block.Number.Int64()%config.Log.SyncBlockShowNumber == 0 {
ZapLog.Info("commit success", zap.Uint64("height", block.Block.Number.Uint64()))
time.Sleep(time.Second * 100)
}
}
}()
Expand Down
Loading

0 comments on commit a5d6cbf

Please sign in to comment.