1177 lines
34 KiB
Go
1177 lines
34 KiB
Go
|
// dbif.go
|
||
|
package dbif
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"pool/internal/cache"
|
||
|
"pool/internal/db"
|
||
|
"pool/internal/server/coin"
|
||
|
"strconv"
|
||
|
|
||
|
//"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const MINER_UPDATE_MINERS_DB_DURATION time.Duration = 5
|
||
|
|
||
|
/*const MINER_UPDATE_MINERS_STATS_DB_DURATION time.Duration = 5
|
||
|
const MINER_UPDATE_USERS_DB_DURATION time.Duration = 5
|
||
|
const MINER_UPDATE_USERS_STATS_DB_DURATION time.Duration = 5
|
||
|
const MINER_UPDATE_POOL_DB_DURATION time.Duration = 5
|
||
|
const MINER_UPDATE_POOL_STATS_DB_DURATION time.Duration = 5
|
||
|
const MINER_UPDATE_ADDRESS_DB_DURATION time.Duration = 5*/
|
||
|
|
||
|
func Create_db_tables(DbCtx *db.DbContext, coinType string) {
|
||
|
//Periodic
|
||
|
db.CreateTable(DbCtx, "miners", coinType)
|
||
|
db.CreateTable(DbCtx, "miners_stats", coinType)
|
||
|
//Real time
|
||
|
//db.CreateTable(DbCtx, "miner", coinType)
|
||
|
//Periodic
|
||
|
//db.CreateTable(DbCtx, "users", coinType)
|
||
|
//db.CreateTable(DbCtx, "users_stats", coinType)
|
||
|
//Real time
|
||
|
//db.CreateTable(DbCtx, "users_blkstats", coinType)
|
||
|
//Periodic
|
||
|
//db.CreateTable(DbCtx, "pool", coinType)
|
||
|
//db.CreateTable(DbCtx, "pool_stats", coinType)
|
||
|
//Real time
|
||
|
db.CreateTable(DbCtx, "pool_blkstats", coinType)
|
||
|
db.CreateTable(DbCtx, "blk_detail", coinType)
|
||
|
db.CreateTable(DbCtx, "blk_new", coinType)
|
||
|
//Preset
|
||
|
db.CreateTable(DbCtx, "address", coinType)
|
||
|
//Real time
|
||
|
db.CreateTable(DbCtx, "blk_height_detail", coinType)
|
||
|
log.Println("create tables!")
|
||
|
}
|
||
|
|
||
|
func NotifyMinersDb(m *coin.MinerObj) {
|
||
|
var msg db.Miners_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "miners"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = m.Name
|
||
|
msg.Fromip = m.FromIP
|
||
|
if msg.Date.Sub(m.LastSubmitime).Seconds() > 300 {
|
||
|
msg.State = coin.MINER_STATUS_DISCONNECTED
|
||
|
} else {
|
||
|
msg.State = m.Status
|
||
|
}
|
||
|
msg.Online = m.StartSubmitTime
|
||
|
msg.Offline = m.OfflineTime
|
||
|
msg.Retry = int(m.Retry)
|
||
|
m.Duration = m.LastSubmitime.Sub(m.StartSubmitTime).Seconds()
|
||
|
m.DurationTime = m.Duration
|
||
|
msg.Duration = m.Duration
|
||
|
msg.Protocol = m.Protocol
|
||
|
msg.User = m.User
|
||
|
msg.Miner = m.Miner
|
||
|
msg.Index = fmt.Sprint(m.MinerIndex)
|
||
|
msg.Diff = m.Difficulty
|
||
|
msg.Height = m.CurHeight
|
||
|
msg.Accepts = m.Accepts
|
||
|
msg.Rejects = m.Rejects
|
||
|
if (m.Accepts + m.Rejects) > 0 {
|
||
|
msg.Ratio = m.Rejects / (m.Accepts + m.Rejects)
|
||
|
} else {
|
||
|
msg.Ratio = 0
|
||
|
}
|
||
|
msg.Staleds = float64(m.ErrStaleds)
|
||
|
msg.Lows = float64(m.ErrLowDiffs)
|
||
|
msg.Duplicates = float64(m.ErrDuplicates)
|
||
|
msg.Formats = float64(m.ErrFormats)
|
||
|
msg.Others = float64(m.ErrOthers)
|
||
|
msg.Disabled = m.IsDisabled
|
||
|
msg.Last_submit = m.LastSubmitime
|
||
|
msg.Submits = int(m.Submits)
|
||
|
msg.Blocks = int(m.Blocks)
|
||
|
msg.Orphans = int(m.Orphans)
|
||
|
if m.Submits > 0 {
|
||
|
msg.Orphan_ratio = float64(m.Orphans) / float64(m.Submits)
|
||
|
} else {
|
||
|
msg.Orphan_ratio = 0
|
||
|
}
|
||
|
|
||
|
m.Server.DbCtx.Miners_ch <- msg
|
||
|
}
|
||
|
|
||
|
func NotifyMinersStatsDb(m *coin.MinerObj) {
|
||
|
var msg db.MinersStats_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "miners_stats"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = m.Name
|
||
|
|
||
|
msg.User = m.User
|
||
|
msg.Miner = m.Miner
|
||
|
msg.Index = fmt.Sprint(m.MinerIndex)
|
||
|
|
||
|
msg.Shares5m = m.Accepts5M
|
||
|
msg.Shares15m = m.Accepts15M
|
||
|
msg.Shares30m = m.Accepts30M
|
||
|
msg.Shares1h = m.Accepts1h
|
||
|
msg.Shares3h = m.Accepts3h
|
||
|
msg.Shares6h = m.Accepts6h
|
||
|
msg.Shares12h = m.Accepts12h
|
||
|
msg.Shares24h = m.Accepts24h
|
||
|
msg.Shares48h = m.Accepts48h
|
||
|
|
||
|
msg.Rejects5m = m.Rejects5M
|
||
|
msg.Rejects15m = m.Rejects15M
|
||
|
msg.Rejects30m = m.Rejects30M
|
||
|
msg.Rejects1h = m.Rejects1h
|
||
|
msg.Rejects3h = m.Rejects3h
|
||
|
msg.Rejects6h = m.Rejects6h
|
||
|
msg.Rejects12h = m.Rejects12h
|
||
|
msg.Rejects24h = m.Rejects24h
|
||
|
msg.Rejects48h = m.Rejects48h
|
||
|
|
||
|
msg.Mhs5m = m.Mhs5M
|
||
|
msg.Mhs15m = m.Mhs15M
|
||
|
msg.Mhs30m = m.Mhs30M
|
||
|
msg.Mhs1h = m.Mhs1h
|
||
|
msg.Mhs3h = m.Mhs3h
|
||
|
msg.Mhs6h = m.Mhs6h
|
||
|
msg.Mhs12h = m.Mhs12h
|
||
|
msg.Mhs24h = m.Mhs24h
|
||
|
msg.Mhs48h = m.Mhs48h
|
||
|
|
||
|
msg.Ratio5m = m.RejectRatio5M
|
||
|
msg.Ratio15m = m.RejectRatio15M
|
||
|
msg.Ratio30m = m.RejectRatio30M
|
||
|
msg.Ratio1h = m.RejectRatio1h
|
||
|
msg.Ratio3h = m.RejectRatio3h
|
||
|
msg.Ratio6h = m.RejectRatio6h
|
||
|
msg.Ratio12h = m.RejectRatio12h
|
||
|
msg.Ratio24h = m.RejectRatio24h
|
||
|
msg.Ratio48h = m.RejectRatio48h
|
||
|
|
||
|
m.Server.DbCtx.MinersStats_ch <- msg
|
||
|
}
|
||
|
|
||
|
/*func NotifyMinerDb2(m *coin.MinerObj, block *coin.BlockMsg) {
|
||
|
var msg db.Miner_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "miner"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = m.Name
|
||
|
|
||
|
msg.User = m.User
|
||
|
msg.Miner = m.Miner
|
||
|
msg.Index = fmt.Sprint(m.MinerIndex)
|
||
|
|
||
|
msg.Target = block.Target
|
||
|
msg.Submit_target = block.Submit_target
|
||
|
msg.Height = block.Height
|
||
|
if block.Success {
|
||
|
msg.Success = 1
|
||
|
} else {
|
||
|
msg.Success = 0
|
||
|
}
|
||
|
msg.Pow = block.Pow
|
||
|
msg.Net_target = block.Net_target
|
||
|
msg.Submit = block.Submit
|
||
|
msg.Hash = block.Hash
|
||
|
msg.Header = block.Header
|
||
|
msg.Accepts = block.Accepts
|
||
|
msg.Total_accepts = block.Total_accepts
|
||
|
msg.Rejects = block.Rejects
|
||
|
msg.Total_rejects = block.Total_rejects
|
||
|
msg.Reward = block.Reward
|
||
|
msg.Fee = block.Fee
|
||
|
msg.Nonce = block.Nonce
|
||
|
msg.SubIdx = block.SubIdx
|
||
|
|
||
|
m.Server.DbCtx.Miner_ch <- msg
|
||
|
|
||
|
}*/
|
||
|
|
||
|
/*func NotifyUsersDb(u *coin.UserObj) {
|
||
|
var msg db.Users_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "users"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = u.Name
|
||
|
|
||
|
msg.User = u.User
|
||
|
|
||
|
msg.Normal = u.Normal
|
||
|
msg.Abnormal = u.Abnormal
|
||
|
msg.Offline = u.Offline
|
||
|
|
||
|
msg.MhsZero = u.MhsZero
|
||
|
msg.MhsLow = u.MhsLow
|
||
|
msg.HighRejects = u.HighRejects
|
||
|
msg.Unstable = u.Unstable
|
||
|
|
||
|
msg.Submits = u.Submits
|
||
|
msg.Blocks = u.Blocks
|
||
|
msg.Orphans = u.Orphans
|
||
|
if u.Submits > 0 {
|
||
|
msg.Orphan_ratio = float64(u.Orphans) / float64(u.Submits)
|
||
|
} else {
|
||
|
msg.Orphan_ratio = 0
|
||
|
}
|
||
|
msg.Reward = u.Reward
|
||
|
msg.Fee = u.Fee
|
||
|
|
||
|
u.Server.DbCtx.Users_ch <- msg
|
||
|
}*/
|
||
|
|
||
|
/*func NotifyUsersStatsDb(u *coin.UserObj) {
|
||
|
var msg db.UsersStats_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "users_stats"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = u.Name
|
||
|
|
||
|
msg.User = u.User
|
||
|
|
||
|
msg.Shares5m = u.Accepts5M
|
||
|
msg.Shares15m = u.Accepts15M
|
||
|
msg.Shares30m = u.Accepts30M
|
||
|
msg.Shares1h = u.Accepts1h
|
||
|
msg.Shares3h = u.Accepts3h
|
||
|
msg.Shares6h = u.Accepts6h
|
||
|
msg.Shares12h = u.Accepts12h
|
||
|
msg.Shares24h = u.Accepts24h
|
||
|
msg.Shares48h = u.Accepts48h
|
||
|
|
||
|
msg.Rejects5m = u.Rejects5M
|
||
|
msg.Rejects15m = u.Rejects15M
|
||
|
msg.Rejects30m = u.Rejects30M
|
||
|
msg.Rejects1h = u.Rejects1h
|
||
|
msg.Rejects3h = u.Rejects3h
|
||
|
msg.Rejects6h = u.Rejects6h
|
||
|
msg.Rejects12h = u.Rejects12h
|
||
|
msg.Rejects24h = u.Rejects24h
|
||
|
msg.Rejects48h = u.Rejects48h
|
||
|
|
||
|
msg.Mhs5m = u.Mhs5M
|
||
|
msg.Mhs15m = u.Mhs15M
|
||
|
msg.Mhs30m = u.Mhs30M
|
||
|
msg.Mhs1h = u.Mhs1h
|
||
|
msg.Mhs3h = u.Mhs3h
|
||
|
msg.Mhs6h = u.Mhs6h
|
||
|
msg.Mhs12h = u.Mhs12h
|
||
|
msg.Mhs24h = u.Mhs24h
|
||
|
msg.Mhs48h = u.Mhs48h
|
||
|
|
||
|
msg.Ratio5m = u.RejectRatio5M
|
||
|
msg.Ratio15m = u.RejectRatio15M
|
||
|
msg.Ratio30m = u.RejectRatio30M
|
||
|
msg.Ratio1h = u.RejectRatio1h
|
||
|
msg.Ratio3h = u.RejectRatio3h
|
||
|
msg.Ratio6h = u.RejectRatio6h
|
||
|
msg.Ratio12h = u.RejectRatio12h
|
||
|
msg.Ratio24h = u.RejectRatio24h
|
||
|
msg.Ratio48h = u.RejectRatio48h
|
||
|
|
||
|
u.Server.DbCtx.UsersStats_ch <- msg
|
||
|
}*/
|
||
|
|
||
|
/*func NotifyUsersBlkStatsDb2(m *coin.MinerObj, block *coin.UserBlockMsg) {
|
||
|
var msg db.UsersBlkStats_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "users_blkstats"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = m.Name
|
||
|
|
||
|
msg.User = m.User
|
||
|
|
||
|
msg.Miner = block.Miner
|
||
|
msg.Index = block.Index
|
||
|
msg.Height = block.Height
|
||
|
msg.Hash = block.Hash
|
||
|
msg.Pow = block.Pow
|
||
|
msg.Net_target = block.Net_target
|
||
|
msg.Submit = block.Submit
|
||
|
if block.Success {
|
||
|
msg.Success = 1
|
||
|
} else {
|
||
|
msg.Success = 0
|
||
|
}
|
||
|
msg.Accepts = block.Accepts
|
||
|
msg.Rejects = block.Rejects
|
||
|
msg.Reward = block.Reward
|
||
|
msg.Fee = block.Fee
|
||
|
msg.Nonce = block.Nonce
|
||
|
msg.SubIdx = block.SubIdx
|
||
|
|
||
|
m.Server.DbCtx.UsersBlkStats_ch <- msg
|
||
|
|
||
|
}*/
|
||
|
|
||
|
/*func NotifyPoolDb(server *coin.ServerContext) {
|
||
|
var msg db.Pool_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "pool"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = server.MinerType
|
||
|
|
||
|
msg.Miners = server.TotalMiners
|
||
|
msg.Normal = server.Normal
|
||
|
msg.Abnormal = server.Abnormal
|
||
|
msg.Offline = server.Offline
|
||
|
|
||
|
msg.MhsZero = server.MhsZero
|
||
|
msg.MhsLow = server.MhsLow
|
||
|
msg.HighRejects = server.HighRejects
|
||
|
msg.Unstable = server.Unstable
|
||
|
|
||
|
msg.Net_target = server.NetTarget
|
||
|
msg.Height = server.NetHight
|
||
|
msg.Submits = server.Submits
|
||
|
msg.Blocks = server.Blocks
|
||
|
msg.Orphans = server.Orphans
|
||
|
|
||
|
if server.Submits > 0 {
|
||
|
msg.Orphan_ratio = float64(server.Orphans) / float64(server.Submits)
|
||
|
} else {
|
||
|
msg.Orphan_ratio = 0
|
||
|
}
|
||
|
msg.Reward = server.Reward
|
||
|
msg.Fee = server.Fee
|
||
|
|
||
|
server.DbCtx.Pool_ch <- msg
|
||
|
}*/
|
||
|
|
||
|
/*func NotifyPoolStatsDb(server *coin.ServerContext) {
|
||
|
var msg db.PoolStats_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "pool_stats"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = server.MinerType
|
||
|
|
||
|
msg.Shares5m = server.Accepts5M
|
||
|
msg.Shares15m = server.Accepts15M
|
||
|
msg.Shares30m = server.Accepts30M
|
||
|
msg.Shares1h = server.Accepts1h
|
||
|
msg.Shares3h = server.Accepts3h
|
||
|
msg.Shares6h = server.Accepts6h
|
||
|
msg.Shares12h = server.Accepts12h
|
||
|
msg.Shares24h = server.Accepts24h
|
||
|
msg.Shares48h = server.Accepts48h
|
||
|
|
||
|
msg.Rejects5m = server.Rejects5M
|
||
|
msg.Rejects15m = server.Rejects15M
|
||
|
msg.Rejects30m = server.Rejects30M
|
||
|
msg.Rejects1h = server.Rejects1h
|
||
|
msg.Rejects3h = server.Rejects3h
|
||
|
msg.Rejects6h = server.Rejects6h
|
||
|
msg.Rejects12h = server.Rejects12h
|
||
|
msg.Rejects24h = server.Rejects24h
|
||
|
msg.Rejects48h = server.Rejects48h
|
||
|
|
||
|
msg.Mhs5m = server.Mhs5M
|
||
|
msg.Mhs15m = server.Mhs15M
|
||
|
msg.Mhs30m = server.Mhs30M
|
||
|
msg.Mhs1h = server.Mhs1h
|
||
|
msg.Mhs3h = server.Mhs3h
|
||
|
msg.Mhs6h = server.Mhs6h
|
||
|
msg.Mhs12h = server.Mhs12h
|
||
|
msg.Mhs24h = server.Mhs24h
|
||
|
msg.Mhs48h = server.Mhs48h
|
||
|
|
||
|
msg.Ratio5m = server.RejectRatio5M
|
||
|
msg.Ratio15m = server.RejectRatio15M
|
||
|
msg.Ratio30m = server.RejectRatio30M
|
||
|
msg.Ratio1h = server.RejectRatio1h
|
||
|
msg.Ratio3h = server.RejectRatio3h
|
||
|
msg.Ratio6h = server.RejectRatio6h
|
||
|
msg.Ratio12h = server.RejectRatio12h
|
||
|
msg.Ratio24h = server.RejectRatio24h
|
||
|
msg.Ratio48h = server.RejectRatio48h
|
||
|
|
||
|
server.DbCtx.PoolStats_ch <- msg
|
||
|
}*/
|
||
|
|
||
|
func NotifyPoolBlkStatsDb2(server *coin.ServerContext, block *coin.PoolBlkMsg) {
|
||
|
var msg db.PoolBlkStats_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "pool_blkstats"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = server.MinerType
|
||
|
|
||
|
msg.Height = block.Height
|
||
|
msg.Hash = block.Hash
|
||
|
msg.Pow = block.Pow
|
||
|
msg.Net_target = block.Net_target
|
||
|
msg.Submit = block.Submit
|
||
|
if block.Success {
|
||
|
msg.Success = 1
|
||
|
} else {
|
||
|
msg.Success = 0
|
||
|
}
|
||
|
msg.Accepts = block.Accepts
|
||
|
msg.Rejects = block.Rejects
|
||
|
msg.Reward = block.Reward
|
||
|
msg.Fee = block.Fee
|
||
|
msg.Nonce = block.Nonce
|
||
|
msg.SubIdx = block.SubIdx
|
||
|
|
||
|
server.DbCtx.PoolBlkStats_ch <- msg
|
||
|
|
||
|
}
|
||
|
|
||
|
func NotifyBlkDetailDb(m *coin.MinerObj, height int64, hash string, success bool, miner_diff float64, pool_diff float64, nonce string, subidx int64) {
|
||
|
var msg db.BlkDetail_db_msg
|
||
|
msg.Id = 0
|
||
|
msg.Msg = "blk_detail"
|
||
|
msg.Date = time.Now()
|
||
|
msg.MinerType = m.Name
|
||
|
|
||
|
msg.User = m.User
|
||
|
msg.Miner = m.Miner
|
||
|
msg.Index = fmt.Sprint(m.MinerIndex)
|
||
|
|
||
|
msg.Height = height
|
||
|
msg.Hash = hash
|
||
|
if success {
|
||
|
msg.Success = 1
|
||
|
} else {
|
||
|
msg.Success = 0
|
||
|
}
|
||
|
|
||
|
msg.Miner_diff = miner_diff
|
||
|
msg.Pool_diff = pool_diff
|
||
|
msg.Nonce = nonce
|
||
|
msg.SubIdx = subidx
|
||
|
|
||
|
//m.Server.DbCtx.BlkDetail_ch <- msg
|
||
|
db.Save_blk_detail(m.Server.DbCtx, &msg)
|
||
|
}
|
||
|
|
||
|
func notify_miners_db(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
online_map := make(map[string]int)
|
||
|
server.Miners.Range(func(k, v interface{}) bool {
|
||
|
m, ok := v.(*(coin.MinerObj))
|
||
|
if ok {
|
||
|
if m.User == "" || m.Miner == "" || fmt.Sprint(m.MinerIndex) == "" {
|
||
|
return true
|
||
|
}
|
||
|
if (m.Accepts > 0) && (m.Status == coin.MINER_STATUS_RUNNING) {
|
||
|
if time.Now().Sub(m.LastSubmitime).Seconds() <= 300 {
|
||
|
online_k := m.User + "." + m.Miner + "_" + fmt.Sprint(m.MinerIndex)
|
||
|
online_map[online_k] = 1
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
})
|
||
|
|
||
|
server.Miners.Range(func(k, v interface{}) bool {
|
||
|
m, ok := v.(*(coin.MinerObj))
|
||
|
if ok {
|
||
|
if m.User == "" || m.Miner == "" || fmt.Sprint(m.MinerIndex) == "" {
|
||
|
return true
|
||
|
}
|
||
|
if m.Accepts > 0 /* || (m.Rejects > 0)*/ {
|
||
|
if (m.Status == coin.MINER_STATUS_DISCONNECTED) || (time.Now().Sub(m.LastSubmitime).Seconds() > 300) {
|
||
|
online_k := m.User + "." + m.Miner + "_" + fmt.Sprint(m.MinerIndex)
|
||
|
_, exists := online_map[online_k]
|
||
|
if !exists {
|
||
|
NotifyMinersDb(m)
|
||
|
}
|
||
|
} else {
|
||
|
NotifyMinersDb(m)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func notify_miners_stats_db(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
var pool_accepts_5m float64 = 0
|
||
|
var pool_accepts_15m float64 = 0
|
||
|
var pool_accepts_30m float64 = 0
|
||
|
var pool_accepts_1h float64 = 0
|
||
|
var pool_accepts_3h float64 = 0
|
||
|
var pool_accepts_6h float64 = 0
|
||
|
var pool_accepts_12h float64 = 0
|
||
|
var pool_accepts_24h float64 = 0
|
||
|
var pool_accepts_48h float64 = 0
|
||
|
|
||
|
var pool_rejects_5m float64 = 0
|
||
|
var pool_rejects_15m float64 = 0
|
||
|
var pool_rejects_30m float64 = 0
|
||
|
var pool_rejects_1h float64 = 0
|
||
|
var pool_rejects_3h float64 = 0
|
||
|
var pool_rejects_6h float64 = 0
|
||
|
var pool_rejects_12h float64 = 0
|
||
|
var pool_rejects_24h float64 = 0
|
||
|
var pool_rejects_48h float64 = 0
|
||
|
|
||
|
var pool_mhs_5m float64 = 0
|
||
|
var pool_mhs_15m float64 = 0
|
||
|
var pool_mhs_30m float64 = 0
|
||
|
var pool_mhs_1h float64 = 0
|
||
|
var pool_mhs_3h float64 = 0
|
||
|
var pool_mhs_6h float64 = 0
|
||
|
var pool_mhs_12h float64 = 0
|
||
|
var pool_mhs_24h float64 = 0
|
||
|
var pool_mhs_48h float64 = 0
|
||
|
|
||
|
var pool_ratio_5m float64 = 0
|
||
|
var pool_ratio_15m float64 = 0
|
||
|
var pool_ratio_30m float64 = 0
|
||
|
var pool_ratio_1h float64 = 0
|
||
|
var pool_ratio_3h float64 = 0
|
||
|
var pool_ratio_6h float64 = 0
|
||
|
var pool_ratio_12h float64 = 0
|
||
|
var pool_ratio_24h float64 = 0
|
||
|
var pool_ratio_48h float64 = 0
|
||
|
|
||
|
var total_miners int64 = 0
|
||
|
var miner_all []string
|
||
|
cmp := time.Now()
|
||
|
server.MMhs.Range(func(k, v interface{}) bool {
|
||
|
m, ok := v.(coin.MhsObj)
|
||
|
if ok {
|
||
|
//server.Logg.Info("[mhs save]", zap.String("miner", m.User+"."+m.Miner), zap.Int("accepts", len(m.Accepts)), zap.Int("algo", m.Algo))
|
||
|
|
||
|
if m.User == "" || m.Miner == "" || m.Index == "" {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
uminer, umok := server.Miners.Load(m.MinerId)
|
||
|
if !umok {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
var miner coin.MinerObj
|
||
|
var thisCoin = server.CoinCtx.Coin
|
||
|
miner.Server = server
|
||
|
miner_all = append(miner_all, m.User+"."+m.Miner+"_"+m.Index)
|
||
|
|
||
|
var accepts_1h float64 = 0
|
||
|
var accepts_24h float64 = 0
|
||
|
|
||
|
var accepts_m5 float64 = 0
|
||
|
var accepts_m15 float64 = 0
|
||
|
var accepts_m30 float64 = 0
|
||
|
var accepts_3h float64 = 0
|
||
|
var accepts_6h float64 = 0
|
||
|
var accepts_12h float64 = 0
|
||
|
var accepts_48h float64 = 0
|
||
|
|
||
|
var accepts_1h_cnt int64 = 0
|
||
|
var accepts_24h_cnt int64 = 0
|
||
|
|
||
|
var accepts_m5_cnt float64 = 0
|
||
|
var accepts_m15_cnt float64 = 0
|
||
|
var accepts_m30_cnt float64 = 0
|
||
|
var accepts_3h_cnt float64 = 0
|
||
|
var accepts_6h_cnt float64 = 0
|
||
|
var accepts_12h_cnt float64 = 0
|
||
|
var accepts_48h_cnt float64 = 0
|
||
|
|
||
|
if len(m.Accepts) > 0 {
|
||
|
var i int = -1
|
||
|
for i = len(m.Accepts) - 1; i >= 0; i-- {
|
||
|
tdiff := cmp.Sub(m.Accepts[i].Tt).Seconds()
|
||
|
if tdiff <= 3600 {
|
||
|
accepts_1h = accepts_1h + m.Accepts[i].Diff
|
||
|
accepts_1h_cnt++
|
||
|
}
|
||
|
if tdiff <= 5*60 {
|
||
|
accepts_m5 = accepts_m5 + m.Accepts[i].Diff
|
||
|
accepts_m5_cnt++
|
||
|
}
|
||
|
if tdiff <= 15*60 {
|
||
|
accepts_m15 = accepts_m15 + m.Accepts[i].Diff
|
||
|
accepts_m15_cnt++
|
||
|
}
|
||
|
if tdiff <= 30*60 {
|
||
|
accepts_m30 = accepts_m30 + m.Accepts[i].Diff
|
||
|
accepts_m30_cnt++
|
||
|
}
|
||
|
if tdiff <= 3*3600 {
|
||
|
accepts_3h = accepts_3h + m.Accepts[i].Diff
|
||
|
accepts_3h_cnt++
|
||
|
}
|
||
|
if tdiff <= 6*3600 {
|
||
|
accepts_6h = accepts_6h + m.Accepts[i].Diff
|
||
|
accepts_6h_cnt++
|
||
|
}
|
||
|
if tdiff <= 12*3600 {
|
||
|
accepts_12h = accepts_12h + m.Accepts[i].Diff
|
||
|
accepts_12h_cnt++
|
||
|
}
|
||
|
if tdiff <= 24*3600 {
|
||
|
accepts_24h = accepts_24h + m.Accepts[i].Diff
|
||
|
accepts_24h_cnt++
|
||
|
}
|
||
|
if tdiff <= 48*3600 {
|
||
|
accepts_48h = accepts_48h + m.Accepts[i].Diff
|
||
|
accepts_48h_cnt++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
miner.Accepts5M = accepts_m5
|
||
|
miner.Accepts15M = accepts_m15
|
||
|
miner.Accepts30M = accepts_m30
|
||
|
miner.Accepts1h = accepts_1h
|
||
|
miner.Accepts3h = accepts_3h
|
||
|
miner.Accepts6h = accepts_6h
|
||
|
miner.Accepts12h = accepts_12h
|
||
|
miner.Accepts24h = accepts_24h
|
||
|
miner.Accepts48h = accepts_48h
|
||
|
|
||
|
var diffOneShareHashesAvg uint64
|
||
|
if thisCoin != "alph" {
|
||
|
diffOneShareHashesAvg = uint64(0x00000000FFFFFFFF)
|
||
|
} else {
|
||
|
diffOneShareHashesAvg = uint64(0xFFFFFFFFF)
|
||
|
}
|
||
|
|
||
|
var coefficient float64 = 1
|
||
|
miner.Mhs1h = accepts_1h * float64(diffOneShareHashesAvg) / coefficient / float64(3600) / 1000000
|
||
|
//server.Logg.Info("[mhs save]", zap.Float64("mhs1h", msg.Mhs), zap.Float64("duration", mhs_duration), zap.Float64("diff", m.Difficulty))
|
||
|
|
||
|
miner.Mhs5M = accepts_m5 * float64(diffOneShareHashesAvg) / coefficient / float64(5*60) / 1000000
|
||
|
miner.Mhs15M = accepts_m15 * float64(diffOneShareHashesAvg) / coefficient / float64(15*60) / 1000000
|
||
|
miner.Mhs30M = accepts_m30 * float64(diffOneShareHashesAvg) / coefficient / float64(30*60) / 1000000
|
||
|
miner.Mhs3h = accepts_3h * float64(diffOneShareHashesAvg) / coefficient / float64(3*3600) / 1000000
|
||
|
miner.Mhs6h = accepts_6h * float64(diffOneShareHashesAvg) / coefficient / float64(6*3600) / 1000000
|
||
|
miner.Mhs12h = accepts_12h * float64(diffOneShareHashesAvg) / coefficient / float64(12*3600) / 1000000
|
||
|
miner.Mhs48h = accepts_48h * float64(diffOneShareHashesAvg) / coefficient / float64(48*3600) / 1000000
|
||
|
miner.Mhs24h = accepts_24h * float64(diffOneShareHashesAvg) / coefficient / float64(3600*24) / 1000000
|
||
|
|
||
|
//server.Logg.Info("[mhs save]", zap.Int("accepts_24h", accepts_24h), zap.Float64("Mhs24h", msg.Mhs24h))
|
||
|
} else {
|
||
|
miner.Mhs1h = 0
|
||
|
miner.Mhs24h = 0
|
||
|
|
||
|
miner.Mhs5M = 0
|
||
|
miner.Mhs15M = 0
|
||
|
miner.Mhs30M = 0
|
||
|
miner.Mhs3h = 0
|
||
|
miner.Mhs6h = 0
|
||
|
miner.Mhs12h = 0
|
||
|
miner.Mhs24h = 0
|
||
|
}
|
||
|
|
||
|
var rejects_1h_cnt int64 = 0
|
||
|
var rejects_24h_cnt int64 = 0
|
||
|
|
||
|
var rejects_m5_cnt int64 = 0
|
||
|
var rejects_m15_cnt int64 = 0
|
||
|
var rejects_m30_cnt int64 = 0
|
||
|
var rejects_3h_cnt int64 = 0
|
||
|
var rejects_6h_cnt int64 = 0
|
||
|
var rejects_12h_cnt int64 = 0
|
||
|
var rejects_48h_cnt int64 = 0
|
||
|
|
||
|
if len(m.Rejects) > 0 {
|
||
|
var j int = -1
|
||
|
for j = 0; j < len(m.Rejects); j++ {
|
||
|
tdiff := cmp.Sub(m.Rejects[j].Tt).Seconds()
|
||
|
if tdiff <= 3600 {
|
||
|
rejects_1h_cnt++
|
||
|
}
|
||
|
if tdiff <= 5*60 {
|
||
|
rejects_m5_cnt++
|
||
|
}
|
||
|
if tdiff <= 15*60 {
|
||
|
rejects_m15_cnt++
|
||
|
}
|
||
|
if tdiff <= 30*60 {
|
||
|
rejects_m30_cnt++
|
||
|
}
|
||
|
if tdiff <= 3*3600 {
|
||
|
rejects_3h_cnt++
|
||
|
}
|
||
|
if tdiff <= 6*3600 {
|
||
|
rejects_6h_cnt++
|
||
|
}
|
||
|
if tdiff <= 12*3600 {
|
||
|
rejects_12h_cnt++
|
||
|
}
|
||
|
if tdiff <= 24*3600 {
|
||
|
rejects_24h_cnt++
|
||
|
}
|
||
|
if tdiff <= 48*3600 {
|
||
|
rejects_48h_cnt++
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
miner.Rejects5M = float64(rejects_m5_cnt)
|
||
|
miner.Rejects15M = float64(rejects_m15_cnt)
|
||
|
miner.Rejects30M = float64(rejects_m30_cnt)
|
||
|
miner.Rejects1h = float64(rejects_1h_cnt)
|
||
|
miner.Rejects3h = float64(rejects_3h_cnt)
|
||
|
miner.Rejects6h = float64(rejects_6h_cnt)
|
||
|
miner.Rejects12h = float64(rejects_12h_cnt)
|
||
|
miner.Rejects24h = float64(rejects_24h_cnt)
|
||
|
miner.Rejects48h = float64(rejects_48h_cnt)
|
||
|
|
||
|
miner.RejectRatio5M = 0
|
||
|
if rejects_m5_cnt > 0 {
|
||
|
miner.RejectRatio5M = miner.Rejects5M / (miner.Rejects5M + float64(accepts_m5_cnt))
|
||
|
}
|
||
|
miner.RejectRatio15M = 0
|
||
|
if rejects_m15_cnt > 0 {
|
||
|
miner.RejectRatio15M = miner.Rejects15M / (miner.Rejects15M + float64(accepts_m15_cnt))
|
||
|
}
|
||
|
miner.RejectRatio30M = 0
|
||
|
if rejects_m30_cnt > 0 {
|
||
|
miner.RejectRatio30M = miner.Rejects30M / (miner.Rejects30M + float64(accepts_m30_cnt))
|
||
|
}
|
||
|
miner.RejectRatio1h = 0
|
||
|
if rejects_1h_cnt > 0 {
|
||
|
miner.RejectRatio1h = miner.Rejects1h / (miner.Rejects1h + float64(accepts_1h_cnt))
|
||
|
}
|
||
|
miner.RejectRatio3h = 0
|
||
|
if rejects_3h_cnt > 0 {
|
||
|
miner.RejectRatio3h = miner.Rejects3h / (miner.Rejects3h + float64(accepts_3h_cnt))
|
||
|
}
|
||
|
miner.RejectRatio6h = 0
|
||
|
if rejects_6h_cnt > 0 {
|
||
|
miner.RejectRatio6h = miner.Rejects6h / (miner.Rejects6h + float64(accepts_6h_cnt))
|
||
|
}
|
||
|
miner.RejectRatio12h = 0
|
||
|
if rejects_12h_cnt > 0 {
|
||
|
miner.RejectRatio12h = miner.Rejects12h / (miner.Rejects12h + float64(accepts_12h_cnt))
|
||
|
}
|
||
|
miner.RejectRatio24h = 0
|
||
|
if rejects_24h_cnt > 0 {
|
||
|
miner.RejectRatio24h = miner.Rejects24h / (miner.Rejects24h + float64(accepts_24h_cnt))
|
||
|
}
|
||
|
miner.RejectRatio48h = 0
|
||
|
if rejects_48h_cnt > 0 {
|
||
|
miner.RejectRatio48h = miner.Rejects48h / (miner.Rejects48h + float64(accepts_48h_cnt))
|
||
|
}
|
||
|
|
||
|
pool_accepts_5m = pool_accepts_5m + miner.Accepts5M
|
||
|
pool_accepts_15m = pool_accepts_15m + miner.Accepts15M
|
||
|
pool_accepts_30m = pool_accepts_30m + miner.Accepts30M
|
||
|
pool_accepts_1h = pool_accepts_1h + miner.Accepts1h
|
||
|
pool_accepts_3h = pool_accepts_3h + miner.Accepts3h
|
||
|
pool_accepts_6h = pool_accepts_6h + miner.Accepts6h
|
||
|
pool_accepts_12h = pool_accepts_12h + miner.Accepts12h
|
||
|
pool_accepts_24h = pool_accepts_24h + miner.Accepts24h
|
||
|
pool_accepts_48h = pool_accepts_48h + miner.Accepts48h
|
||
|
|
||
|
pool_rejects_5m = pool_rejects_5m + miner.Rejects5M
|
||
|
pool_rejects_15m = pool_rejects_15m + miner.Rejects15M
|
||
|
pool_rejects_30m = pool_rejects_30m + miner.Rejects30M
|
||
|
pool_rejects_1h = pool_rejects_1h + miner.Rejects1h
|
||
|
pool_rejects_3h = pool_rejects_3h + miner.Rejects3h
|
||
|
pool_rejects_6h = pool_rejects_6h + miner.Rejects6h
|
||
|
pool_rejects_12h = pool_rejects_12h + miner.Rejects12h
|
||
|
pool_rejects_24h = pool_rejects_24h + miner.Rejects24h
|
||
|
pool_rejects_48h = pool_rejects_48h + miner.Rejects48h
|
||
|
|
||
|
pool_mhs_5m = pool_mhs_5m + miner.Mhs5M
|
||
|
pool_mhs_15m = pool_mhs_15m + miner.Mhs15M
|
||
|
pool_mhs_30m = pool_mhs_30m + miner.Mhs30M
|
||
|
pool_mhs_1h = pool_mhs_1h + miner.Mhs1h
|
||
|
pool_mhs_3h = pool_mhs_3h + miner.Mhs3h
|
||
|
pool_mhs_6h = pool_mhs_6h + miner.Mhs6h
|
||
|
pool_mhs_12h = pool_mhs_12h + miner.Mhs12h
|
||
|
pool_mhs_24h = pool_mhs_24h + miner.Mhs24h
|
||
|
pool_mhs_48h = pool_mhs_48h + miner.Mhs48h
|
||
|
|
||
|
pool_ratio_5m = pool_ratio_5m + miner.RejectRatio5M
|
||
|
pool_ratio_15m = pool_ratio_15m + miner.RejectRatio15M
|
||
|
pool_ratio_30m = pool_ratio_30m + miner.RejectRatio30M
|
||
|
pool_ratio_1h = pool_ratio_1h + miner.RejectRatio1h
|
||
|
pool_ratio_3h = pool_ratio_3h + miner.RejectRatio3h
|
||
|
pool_ratio_6h = pool_ratio_6h + miner.RejectRatio6h
|
||
|
pool_ratio_12h = pool_ratio_12h + miner.RejectRatio12h
|
||
|
pool_ratio_24h = pool_ratio_24h + miner.RejectRatio24h
|
||
|
pool_ratio_48h = pool_ratio_48h + miner.RejectRatio48h
|
||
|
|
||
|
miner.Name = m.Name
|
||
|
miner.User = m.User
|
||
|
miner.Miner = m.Miner
|
||
|
miner.MinerIndex, _ = strconv.ParseInt(m.Index, 10, 64)
|
||
|
|
||
|
NotifyMinersStatsDb(&miner)
|
||
|
|
||
|
//fmt.Printf("notify_miners_stats_db store miner miner %v, miner_id %v, umok %v\n", uminer, m.MinerId, umok)
|
||
|
if umok {
|
||
|
up_miner := uminer.(*coin.MinerObj)
|
||
|
up_miner.Accepts5M = miner.Accepts5M
|
||
|
up_miner.Accepts15M = miner.Accepts15M
|
||
|
up_miner.Accepts30M = miner.Accepts30M
|
||
|
up_miner.Accepts1h = miner.Accepts1h
|
||
|
up_miner.Accepts3h = miner.Accepts3h
|
||
|
up_miner.Accepts6h = miner.Accepts6h
|
||
|
up_miner.Accepts12h = miner.Accepts12h
|
||
|
up_miner.Accepts24h = miner.Accepts24h
|
||
|
up_miner.Accepts48h = miner.Accepts48h
|
||
|
|
||
|
up_miner.Rejects5M = miner.Rejects5M
|
||
|
up_miner.Rejects15M = miner.Rejects15M
|
||
|
up_miner.Rejects30M = miner.Rejects30M
|
||
|
up_miner.Rejects1h = miner.Rejects1h
|
||
|
up_miner.Rejects3h = miner.Rejects3h
|
||
|
up_miner.Rejects6h = miner.Rejects6h
|
||
|
up_miner.Rejects12h = miner.Rejects12h
|
||
|
up_miner.Rejects24h = miner.Rejects24h
|
||
|
up_miner.Rejects48h = miner.Rejects48h
|
||
|
|
||
|
up_miner.Mhs5M = miner.Mhs5M
|
||
|
up_miner.Mhs15M = miner.Mhs15M
|
||
|
up_miner.Mhs30M = miner.Mhs30M
|
||
|
up_miner.Mhs1h = miner.Mhs1h
|
||
|
up_miner.Mhs3h = miner.Mhs3h
|
||
|
up_miner.Mhs6h = miner.Mhs6h
|
||
|
up_miner.Mhs12h = miner.Mhs12h
|
||
|
up_miner.Mhs24h = miner.Mhs24h
|
||
|
up_miner.Mhs48h = miner.Mhs48h
|
||
|
|
||
|
up_miner.RejectRatio5M = miner.RejectRatio5M
|
||
|
up_miner.RejectRatio15M = miner.RejectRatio15M
|
||
|
up_miner.RejectRatio30M = miner.RejectRatio30M
|
||
|
up_miner.RejectRatio1h = miner.RejectRatio1h
|
||
|
up_miner.RejectRatio3h = miner.RejectRatio3h
|
||
|
up_miner.RejectRatio6h = miner.RejectRatio6h
|
||
|
up_miner.RejectRatio12h = miner.RejectRatio12h
|
||
|
up_miner.RejectRatio24h = miner.RejectRatio24h
|
||
|
up_miner.RejectRatio48h = miner.RejectRatio48h
|
||
|
//fmt.Printf("notify_miners_stats_db store miner mhs5m %v, miner_id %v, %v\n", up_miner.Mhs5M, up_miner.MinerId, up_miner)
|
||
|
}
|
||
|
|
||
|
total_miners++
|
||
|
|
||
|
}
|
||
|
return true
|
||
|
})
|
||
|
|
||
|
server.Accepts5M = pool_accepts_5m
|
||
|
server.Accepts15M = pool_accepts_15m
|
||
|
server.Accepts30M = pool_accepts_30m
|
||
|
server.Accepts1h = pool_accepts_1h
|
||
|
server.Accepts3h = pool_accepts_3h
|
||
|
server.Accepts6h = pool_accepts_6h
|
||
|
server.Accepts12h = pool_accepts_12h
|
||
|
server.Accepts24h = pool_accepts_24h
|
||
|
server.Accepts48h = pool_accepts_48h
|
||
|
|
||
|
server.Rejects5M = pool_rejects_5m
|
||
|
server.Rejects15M = pool_rejects_15m
|
||
|
server.Rejects30M = pool_rejects_30m
|
||
|
server.Rejects1h = pool_rejects_1h
|
||
|
server.Rejects3h = pool_rejects_3h
|
||
|
server.Rejects6h = pool_rejects_6h
|
||
|
server.Rejects12h = pool_rejects_12h
|
||
|
server.Rejects24h = pool_rejects_24h
|
||
|
server.Rejects48h = pool_rejects_48h
|
||
|
|
||
|
server.Mhs5M = pool_mhs_5m
|
||
|
server.Mhs15M = pool_mhs_15m
|
||
|
server.Mhs30M = pool_mhs_30m
|
||
|
server.Mhs1h = pool_mhs_1h
|
||
|
server.Mhs3h = pool_mhs_3h
|
||
|
server.Mhs6h = pool_mhs_6h
|
||
|
server.Mhs12h = pool_mhs_12h
|
||
|
server.Mhs24h = pool_mhs_24h
|
||
|
server.Mhs48h = pool_mhs_48h
|
||
|
|
||
|
server.RejectRatio5M = pool_ratio_5m / float64(total_miners)
|
||
|
server.RejectRatio15M = pool_ratio_15m / float64(total_miners)
|
||
|
server.RejectRatio30M = pool_ratio_30m / float64(total_miners)
|
||
|
server.RejectRatio1h = pool_ratio_1h / float64(total_miners)
|
||
|
server.RejectRatio3h = pool_ratio_3h / float64(total_miners)
|
||
|
server.RejectRatio6h = pool_ratio_6h / float64(total_miners)
|
||
|
server.RejectRatio12h = pool_ratio_12h / float64(total_miners)
|
||
|
server.RejectRatio24h = pool_ratio_24h / float64(total_miners)
|
||
|
server.RejectRatio48h = pool_ratio_48h / float64(total_miners)
|
||
|
|
||
|
//NotifyPoolStatsDb(server)
|
||
|
|
||
|
//NotifyPoolDb(server)
|
||
|
|
||
|
//server.Logg.Info("[mhs save]", zap.Int("24hupdate", len(miner_all)))
|
||
|
var total int = 0
|
||
|
for miner_idx := 0; miner_idx < len(miner_all); miner_idx++ {
|
||
|
v, ok := server.MMhs.Load(miner_all[miner_idx])
|
||
|
if ok {
|
||
|
var m coin.MhsObj = v.(coin.MhsObj)
|
||
|
if cmp.Sub(m.StartDayTime).Seconds() >= 3600*52 {
|
||
|
//server.Logg.Info("[mhs save 1]", zap.String("miner", m.User+"."+m.Miner), zap.Int("accepts", len(m.Accepts)), zap.Int("rejects", len(m.Rejects)))
|
||
|
m.StartDayTime = m.StartDayTime.Add(time.Hour * 4)
|
||
|
if len(m.Accepts) > 0 {
|
||
|
var i int = 0
|
||
|
for i = 0; i < len(m.Accepts); i++ {
|
||
|
if cmp.Sub(m.Accepts[i].Tt).Seconds() <= 3600*48 {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
if i > 0 {
|
||
|
as := m.Accepts[i:]
|
||
|
m.Accepts = as
|
||
|
for cnt := 0; cnt < len(m.Accepts); cnt++ {
|
||
|
cache.RemoveMhsCache(server.RedisClient, server.MinerType, m.User, m.Miner, m.Index, "accepts")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if len(m.Rejects) > 0 {
|
||
|
var i int = 0
|
||
|
for i = 0; i < len(m.Rejects); i++ {
|
||
|
if cmp.Sub(m.Rejects[i].Tt).Seconds() <= 3600*48 {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
if i > 0 {
|
||
|
rs := m.Rejects[i:]
|
||
|
m.Rejects = rs
|
||
|
for cnt := 0; cnt < len(m.Rejects); cnt++ {
|
||
|
cache.RemoveMhsCache(server.RedisClient, server.MinerType, m.User, m.Miner, m.Index, "rejects")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//server.Logg.Info("[mhs save 1]", zap.String("miner", m.User+"."+m.Miner), zap.Int("accepts", len(m.Accepts)), zap.Int("rejects", len(m.Rejects)))
|
||
|
}
|
||
|
|
||
|
server.MMhs.Store(miner_all[miner_idx], m)
|
||
|
cache.StoreMhsCache(server.RedisClient, server.MinerType, m.User, m.Miner, m.Index, "starttime", m.StartDayTime)
|
||
|
total++
|
||
|
}
|
||
|
}
|
||
|
//server.Logg.Info("[mhs save]", zap.Int("24hupdate", total))
|
||
|
}
|
||
|
|
||
|
/*func notify_users_db(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
server.Users.Range(func(k, v interface{}) bool {
|
||
|
u_sets, ok := v.(coin.UserMinerContainer)
|
||
|
if ok {
|
||
|
var u coin.UserObj
|
||
|
u.Server = server
|
||
|
u.User = k.(string)
|
||
|
user := strings.TrimSuffix(u.User, "00000000")
|
||
|
u.User = user
|
||
|
u.Name = server.MinerType
|
||
|
|
||
|
u.Normal = 0
|
||
|
u.Abnormal = 0
|
||
|
|
||
|
u.Offline = 0
|
||
|
u.MhsZero = 0
|
||
|
u.MhsLow = 0
|
||
|
u.HighRejects = 0
|
||
|
u.Unstable = 0
|
||
|
|
||
|
u.Submits = 0
|
||
|
u.Blocks = 0
|
||
|
u.Orphans = 0
|
||
|
|
||
|
u.Reward = 0
|
||
|
u.Fee = 0
|
||
|
//fmt.Printf("-->notify_users_db user %v data %v", u.User, u_sets.Data)
|
||
|
for _, miner_id := range u_sets.Data {
|
||
|
mobj, mok := server.Miners.Load(miner_id)
|
||
|
//fmt.Printf("-->notify_users_db miner_id %v, miner_obj %v\n", miner_id, mobj)
|
||
|
if mok {
|
||
|
m := mobj.(*coin.MinerObj)
|
||
|
u.Submits = u.Submits + int64(m.Submits)
|
||
|
u.Blocks = u.Blocks + int64(m.Blocks)
|
||
|
u.Orphans = u.Orphans + int64(m.Orphans)
|
||
|
|
||
|
u.Reward = u.Reward + m.Reward
|
||
|
u.Fee = u.Fee + m.Fee
|
||
|
}
|
||
|
}
|
||
|
|
||
|
NotifyUsersDb(&u)
|
||
|
}
|
||
|
return true
|
||
|
})
|
||
|
}*/
|
||
|
|
||
|
/*func notify_users_stats_db(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
server.Users.Range(func(k, v interface{}) bool {
|
||
|
//fmt.Printf("notify_users_stats_db user=%v, value=%v\n", k, v)
|
||
|
u_sets, ok := v.(coin.UserMinerContainer)
|
||
|
if ok {
|
||
|
var u coin.UserObj
|
||
|
u.Server = server
|
||
|
u.User = k.(string)
|
||
|
user := strings.TrimSuffix(u.User, "00000000")
|
||
|
u.User = user
|
||
|
u.Name = server.MinerType
|
||
|
|
||
|
u.Accepts5M = 0
|
||
|
u.Accepts15M = 0
|
||
|
u.Accepts30M = 0
|
||
|
u.Accepts1h = 0
|
||
|
u.Accepts3h = 0
|
||
|
u.Accepts6h = 0
|
||
|
u.Accepts12h = 0
|
||
|
u.Accepts24h = 0
|
||
|
u.Accepts48h = 0
|
||
|
|
||
|
u.Rejects5M = 0
|
||
|
u.Rejects15M = 0
|
||
|
u.Rejects30M = 0
|
||
|
u.Rejects1h = 0
|
||
|
u.Rejects3h = 0
|
||
|
u.Rejects6h = 0
|
||
|
u.Rejects12h = 0
|
||
|
u.Rejects24h = 0
|
||
|
u.Rejects48h = 0
|
||
|
|
||
|
u.Mhs5M = 0
|
||
|
u.Mhs15M = 0
|
||
|
u.Mhs30M = 0
|
||
|
u.Mhs1h = 0
|
||
|
u.Mhs3h = 0
|
||
|
u.Mhs6h = 0
|
||
|
u.Mhs12h = 0
|
||
|
u.Mhs24h = 0
|
||
|
u.Mhs48h = 0
|
||
|
|
||
|
u.RejectRatio5M = 0
|
||
|
u.RejectRatio15M = 0
|
||
|
u.RejectRatio30M = 0
|
||
|
u.RejectRatio1h = 0
|
||
|
u.RejectRatio3h = 0
|
||
|
u.RejectRatio6h = 0
|
||
|
u.RejectRatio12h = 0
|
||
|
u.RejectRatio24h = 0
|
||
|
u.RejectRatio48h = 0
|
||
|
|
||
|
var total_miners int64 = 0
|
||
|
for _, miner_id := range u_sets.Data {
|
||
|
//fmt.Printf("notify_users_stats_db user=%v, miner=%v\n", k, miner_id)
|
||
|
mobj, mok := server.Miners.Load(miner_id)
|
||
|
//fmt.Printf("notify_users_stats_db miner=%v,mobj=%v, mok=%v\n", miner_id, mobj, mok)
|
||
|
if mok {
|
||
|
m := mobj.(*coin.MinerObj)
|
||
|
u.Accepts5M = u.Accepts5M + m.Accepts5M
|
||
|
//fmt.Printf("notify_users_stats_db, Accepts5M %v, %v", u.Accepts5M, m.Accepts5M)
|
||
|
u.Accepts15M = u.Accepts15M + m.Accepts15M
|
||
|
u.Accepts30M = u.Accepts30M + m.Accepts30M
|
||
|
u.Accepts1h = u.Accepts1h + m.Accepts1h
|
||
|
u.Accepts3h = u.Accepts3h + m.Accepts3h
|
||
|
u.Accepts6h = u.Accepts6h + m.Accepts6h
|
||
|
u.Accepts12h = u.Accepts12h + m.Accepts12h
|
||
|
u.Accepts24h = u.Accepts24h + m.Accepts24h
|
||
|
u.Accepts48h = u.Accepts48h + m.Accepts48h
|
||
|
|
||
|
u.Rejects5M = u.Rejects5M + m.Rejects5M
|
||
|
u.Rejects15M = u.Rejects15M + m.Rejects15M
|
||
|
u.Rejects30M = u.Rejects30M + m.Rejects30M
|
||
|
u.Rejects1h = u.Rejects1h + m.Rejects1h
|
||
|
u.Rejects3h = u.Rejects3h + m.Rejects3h
|
||
|
u.Rejects6h = u.Rejects6h + m.Rejects6h
|
||
|
u.Rejects12h = u.Rejects12h + m.Rejects12h
|
||
|
u.Rejects24h = u.Rejects24h + m.Rejects24h
|
||
|
u.Rejects48h = u.Rejects48h + m.Rejects48h
|
||
|
|
||
|
u.Mhs5M = u.Mhs5M + m.Mhs5M
|
||
|
u.Mhs15M = u.Mhs15M + m.Mhs15M
|
||
|
u.Mhs30M = u.Mhs30M + m.Mhs30M
|
||
|
u.Mhs1h = u.Mhs1h + m.Mhs1h
|
||
|
u.Mhs3h = u.Mhs3h + m.Mhs3h
|
||
|
u.Mhs6h = u.Mhs6h + m.Mhs6h
|
||
|
u.Mhs12h = u.Mhs12h + m.Mhs12h
|
||
|
u.Mhs24h = u.Mhs24h + m.Mhs24h
|
||
|
u.Mhs48h = u.Mhs48h + m.Mhs48h
|
||
|
|
||
|
u.RejectRatio5M = u.RejectRatio5M + m.RejectRatio5M
|
||
|
u.RejectRatio15M = u.RejectRatio15M + m.RejectRatio15M
|
||
|
u.RejectRatio30M = u.RejectRatio30M + m.RejectRatio30M
|
||
|
u.RejectRatio1h = u.RejectRatio1h + m.RejectRatio1h
|
||
|
u.RejectRatio3h = u.RejectRatio3h + m.RejectRatio3h
|
||
|
u.RejectRatio6h = u.RejectRatio6h + m.RejectRatio6h
|
||
|
u.RejectRatio12h = u.RejectRatio12h + m.RejectRatio12h
|
||
|
u.RejectRatio24h = u.RejectRatio24h + m.RejectRatio24h
|
||
|
u.RejectRatio48h = u.RejectRatio48h + m.RejectRatio48h
|
||
|
|
||
|
total_miners++
|
||
|
}
|
||
|
}
|
||
|
if total_miners > 0 {
|
||
|
u.RejectRatio5M = u.RejectRatio5M / float64(total_miners)
|
||
|
u.RejectRatio15M = u.RejectRatio15M / float64(total_miners)
|
||
|
u.RejectRatio30M = u.RejectRatio30M / float64(total_miners)
|
||
|
u.RejectRatio1h = u.RejectRatio1h / float64(total_miners)
|
||
|
u.RejectRatio3h = u.RejectRatio3h / float64(total_miners)
|
||
|
u.RejectRatio6h = u.RejectRatio6h / float64(total_miners)
|
||
|
u.RejectRatio12h = u.RejectRatio12h / float64(total_miners)
|
||
|
u.RejectRatio24h = u.RejectRatio24h / float64(total_miners)
|
||
|
u.RejectRatio48h = u.RejectRatio48h / float64(total_miners)
|
||
|
//fmt.Printf("notify_users_stats_db, total %v, accept %v", total_miners, u.Accepts5M)
|
||
|
NotifyUsersStatsDb(&u)
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
})
|
||
|
}*/
|
||
|
|
||
|
func Handle_miners_timer(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
timer := time.NewTimer(time.Minute * MINER_UPDATE_MINERS_DB_DURATION)
|
||
|
for {
|
||
|
select {
|
||
|
case <-timer.C:
|
||
|
notify_miners_db(server, DbCtx)
|
||
|
notify_miners_stats_db(server, DbCtx)
|
||
|
//notify_users_db(server, DbCtx)
|
||
|
//notify_users_stats_db(server, DbCtx)
|
||
|
timer.Reset(time.Minute * MINER_UPDATE_MINERS_DB_DURATION)
|
||
|
case <-(server.ExitDbMiners):
|
||
|
log.Println("[server]", "Handle_user_timer exited.")
|
||
|
timer.Stop()
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
func Handle_miners_stats_timer(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
timer := time.NewTimer(time.Minute * MINER_UPDATE_MINERS_STATS_DB_DURATION)
|
||
|
for {
|
||
|
select {
|
||
|
case <-timer.C:
|
||
|
notify_miners_stats_db(server, DbCtx)
|
||
|
timer.Reset(time.Minute * MINER_UPDATE_MINERS_STATS_DB_DURATION)
|
||
|
case <-(server.ExitDbMinersStats):
|
||
|
log.Println("[server]", "Handle_miners_stats_timer exited.")
|
||
|
timer.Stop()
|
||
|
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
/*
|
||
|
func Handle_users_timer(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
timer := time.NewTimer(time.Minute * MINER_UPDATE_USERS_DB_DURATION)
|
||
|
for {
|
||
|
select {
|
||
|
case <-timer.C:
|
||
|
|
||
|
notify_users_db(server, DbCtx)
|
||
|
timer.Reset(time.Minute * MINER_UPDATE_USERS_DB_DURATION)
|
||
|
case <-(server.ExitDbUser):
|
||
|
log.Println("[server]", "Handle_users_timer exited.")
|
||
|
timer.Stop()
|
||
|
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
/*
|
||
|
func Handle_users_stats_timer(server *coin.ServerContext, DbCtx *db.DbContext) {
|
||
|
timer := time.NewTimer(time.Minute * MINER_UPDATE_USERS_STATS_DB_DURATION)
|
||
|
for {
|
||
|
select {
|
||
|
case <-timer.C:
|
||
|
notify_users_stats_db(server, DbCtx)
|
||
|
timer.Reset(time.Minute * MINER_UPDATE_USERS_STATS_DB_DURATION)
|
||
|
case <-(server.ExitDbUserStats):
|
||
|
log.Println("[server]", "Handle_users_stats_timer exited.")
|
||
|
timer.Stop()
|
||
|
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}*/
|