m2pool_core/internal/server/dbif/dbif.go

1177 lines
34 KiB
Go
Raw Normal View History

2025-04-10 07:27:24 +00:00
// 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
}
}
}*/