123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package handler
- import (
- "fmt"
- "math"
- "time"
- tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
- ethmineapi "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/api/ethermineapi"
- "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/internal/database"
- log "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/internal/logger"
- "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/cmd/settings"
- )
- func (ah ActionHandler) getActualDataFromDatabaseHandler(chatId int64) (msgs []tgbotapi.MessageConfig) {
- mT := tgbotapi.NewMessage(chatId, "")
- errMsgToUser := "An exception occurred on sending messages while executing /actual command"
- var wallet string
- result := ah.dbconn.GormDb.Model(&database.User{}).
- Where("chat_id = ?", chatId).
- Select("wallet").
- Scan(&wallet)
- if result.Error != nil {
- log.LogError.Println(result.Error)
- mT.Text = errMsgToUser
- return []tgbotapi.MessageConfig{ mT }
- }
- if wallet == "" {
- mT.Text = "Set wallet at first! Use /setwallet"
- return []tgbotapi.MessageConfig{ mT }
- }
- var lastMinerRecord database.Miner
- result = ah.dbconn.GormDb.
- Where(&database.Miner{Wallet: wallet}).
- Order("time desc").
- Limit(1).
- Find(&lastMinerRecord)
- if result.Error != nil {
- log.LogError.Println(result.Error)
- mT.Text = "No miner data for now!"
- return []tgbotapi.MessageConfig{ mT }
- }
- var lastTime int64
- result = ah.dbconn.GormDb.
- Model(&database.Worker{}).
- Where("wallet = ?", wallet).
- Select("MAX(time)").
- Scan(&lastTime)
- if result.Error != nil {
- log.LogError.Println(result.Error)
- mT.Text = errMsgToUser
- return []tgbotapi.MessageConfig{ mT }
- }
- var lastWorkerRecord []database.Worker
- result = ah.dbconn.GormDb.
- Where(&database.Worker{Wallet: wallet, Time: lastTime}).
- Find(&lastWorkerRecord)
- if result.Error != nil {
- log.LogError.Println(result.Error)
- mT.Text = errMsgToUser
- return []tgbotapi.MessageConfig{ mT }
- }
- if len(lastWorkerRecord) == 0 {
- mT.Text = "No workers data for now!"
- return []tgbotapi.MessageConfig{ mT }
- }
- mT.Text = fmt.Sprintf("Miner %s stats:\n", lastMinerRecord.Wallet)
- mT.Text += fmt.Sprintf("Updated: %s\n", time.Unix(lastMinerRecord.Time, 0).Format("Monday, January 2, 2006 3:04 PM"))
- mT.Text += fmt.Sprintf("Reported Hashrate: %.3f MH/s\n", math.Round(float64(lastMinerRecord.ReportedHashrate)/1000)/1000)
- mT.Text += fmt.Sprintf("Current Hashrate: %.3f MH/s\n", math.Round(float64(lastMinerRecord.CurrentHashrate)/1000)/1000)
- mT.Text += fmt.Sprintf("Valid Shares: %d\n", lastMinerRecord.ValidShares)
- mT.Text += fmt.Sprintf("Stale Shares: %d\n", lastMinerRecord.StaleShares)
- mT.Text += fmt.Sprintf("Workers: %d\n", lastMinerRecord.Workers)
- mT.Text += fmt.Sprintf("Unpaid Balance: %.5f ETH\n", float64(lastMinerRecord.Unpaid)/math.Pow10(18)) //TODO ETH = AppSettings.currency
- msgs = append(msgs, mT)
- for i := range lastWorkerRecord {
- // Per worker message
- // Anti spam filter
- if i != 0 && i%20 == 0 { //TODO SOMETIHNG BETTER THAN USUAL TIMER
- time.Sleep(30 * time.Second)
- }
- msgText := fmt.Sprintf("Worker %s stats:\n", lastWorkerRecord[i].Worker)
- msgText += fmt.Sprintf("Updated: %s\n", time.Unix(lastWorkerRecord[i].Time, 0).Format("Monday, January 2, 2006 3:04 PM"))
- msgText += fmt.Sprintf("Reported Hashrate: %.3f MH/s\n", math.Round(float64(lastWorkerRecord[i].ReportedHashrate)/1000)/1000)
- msgText += fmt.Sprintf("Current Hashrate: %.3f MH/s\n", math.Round(float64(lastWorkerRecord[i].CurrentHashrate)/1000)/1000)
- msgText += fmt.Sprintf("Valid Shares: %d\n", lastWorkerRecord[i].ValidShares)
- msgText += fmt.Sprintf("Stale Shares: %d\n", lastWorkerRecord[i].StaleShares)
- msgText += fmt.Sprintf("Unpaid Balance: %.5f ETH\n", float64(lastWorkerRecord[i].WorkerUnpaid)/math.Pow10(18)) //TODO ETH = AppSettings.currency
- mW := tgbotapi.NewMessage(chatId, msgText)
- msgs = append(msgs, mW)
- }
- return msgs
- }
- func (ah ActionHandler) getActualDataHandler(chatId int64, miner string) []tgbotapi.MessageConfig {
- getActualData := func(miner string) string {
- url := fmt.Sprintf("%s/miner/%s/currentStats", settings.ApiUrl(), miner)
- var currentStats ethmineapi.JsonCurrentStats
- err := ethmineapi.UnmasrshalFromUrl(url, ¤tStats)
- if err != nil {
- // As in original...
- return "An exception occurred while executing this command."
- // return fmt.Sprintf("No data for specified wallet\n")
- }
- data := currentStats.Data
- actualData := fmt.Sprintf("Stats of miner\n%s\n", miner)
- actualData += fmt.Sprintf("Updated: %s\n", time.Unix(data.Time, 0).Format("Monday, January 2, 2006 3:04 PM"))
- actualData += fmt.Sprintf("Reported Hashrate: %.3f MH/s\n", math.Round(float64(data.ReportedHashrate)/1000)/1000)
- actualData += fmt.Sprintf("Current Hashrate: %.3f MH/s\n", math.Round(data.CurrentHashrate/1000)/1000)
- actualData += fmt.Sprintf("Valid Shares: %d\n", data.ValidShares)
- actualData += fmt.Sprintf("Stale Shares: %d\n", data.StaleShares)
- actualData += fmt.Sprintf("Workers: %d\n", data.ActiveWorkers)
- actualData += fmt.Sprintf("Unpaid Balance: %.5f ETH\n", float64(data.Unpaid)/math.Pow10(18))
- return actualData
- }
- return []tgbotapi.MessageConfig{
- tgbotapi.NewMessage(chatId, getActualData(miner))}
- }
- func (ah ActionHandler) ActualHandler(chatId int64, params []string) []tgbotapi.MessageConfig {
- if len(params) == 0 {
- return ah.getActualDataFromDatabaseHandler(chatId)
- }
- if len(params) == 1 {
- return ah.getActualDataHandler(chatId, params[0])
- }
- return []tgbotapi.MessageConfig{tgbotapi.NewMessage(chatId, "usage: /actual [wallet]")}
- }
|