1. 程式人生 > >區塊鏈教程btcpool礦池源碼分析slparser

區塊鏈教程btcpool礦池源碼分析slparser

day 日期 間隔 c++ 源碼 char RKE eat log文件

btcpool礦池-slparser(share log parser)模塊解析

核心機制總結

  • 支持三種功能:
    ?? 指定Date和UID,將打印指定日期指定用戶的share信息到stdout
    ????
    UID=0時,將打印指定日期所有用戶的share信息
    ?? 指定Date但未指定UID,讀取指定日期sharelog,統計數據並寫入數據庫
    ????
    按Worker、user、pool三個維度統計:Accept1h、Accept1d、score1h、score1d、Reject1h、Reject1d
    ???? 數據庫僅保留最近3個月統計數據
    ??
    如果Date和UID均未指定,將監聽文件變化,讀取share並統計數據,每15秒寫入數據庫
    ????* 同時啟動Httpd服務,開放ServerStatus和WorkerStatus

slparser命令使用

slparser -c slparser.cfg -l log_dir
slparser -c slparser.cfg -l log_dir2 -d 20160830
slparser -c slparser.cfg -l log_dir3 -d 20160830 -u puid
#-c指定slparser配置文件
#-l指定日誌目錄
#-d指定日期
#-u指定PUID(即userId),userId為0時dump all, >0時僅輸出指定userId的sharelog

slparser.cfg配置文件

slparserhttpd = {
#指定IP和端口
ip = "0.0.0.0";
port = 8081;

#每間隔15s寫庫
flush_db_interval = 15;
};

#指定sharelog文件路徑
sharelog = {
data_dir = "/data/sharelog";
};

#數據庫配置,表為table.stats_xxxx
pooldb = {
host = "";
port = 3306;
username = "dbusername";
password = "dbpassword";
dbname = "";
};

slparser流程圖

技術分享圖片

bpool_local_stats_db數據庫結構

bpool_local_stats_db.txt

``c++<br/>DROP TABLE IF EXISTSstats_pool_day;<br/>CREATE TABLEstats_pool_day(<br/>dayint(11) NOT NULL,<br/>share_acceptbigint(20) NOT NULL DEFAULT ‘0‘,<br/>share_rejectbigint(20) NOT NULL DEFAULT ‘0‘,<br/>reject_ratedouble NOT NULL DEFAULT ‘0‘,<br/>scoredecimal(35,25) NOT NULL DEFAULT ‘0.0000000000000000000000000‘,<br/>earnbigint(20) NOT NULL DEFAULT ‘0‘,<br/>luckydouble NOT NULL DEFAULT ‘0‘,<br/>created_attimestamp NULL DEFAULT NULL,<br/>updated_attimestamp NULL DEFAULT NULL,<br/>UNIQUE KEYday(day`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS stats_pool_hour;
CREATE TABLE stats_pool_hour (
hour int(11) NOT NULL,
share_accept bigint(20) NOT NULL DEFAULT ‘0‘,
share_reject bigint(20) NOT NULL DEFAULT ‘0‘,
reject_rate double NOT NULL DEFAULT ‘0‘,
score decimal(35,25) NOT NULL DEFAULT ‘0.0000000000000000000000000‘,
earn bigint(20) NOT NULL DEFAULT ‘0‘,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
UNIQUE KEY hour (hour)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS stats_users_day;
CREATE TABLE stats_users_day (
puid int(11) NOT NULL,
day int(11) NOT NULL,
share_accept bigint(20) NOT NULL DEFAULT ‘0‘,
share_reject bigint(20) NOT NULL DEFAULT ‘0‘,
reject_rate double NOT NULL DEFAULT ‘0‘,
score decimal(35,25) NOT NULL DEFAULT ‘0.0000000000000000000000000‘,
earn bigint(20) NOT NULL DEFAULT ‘0‘,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
UNIQUE KEY puid_day (puid,day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS stats_users_hour;
CREATE TABLE stats_users_hour (
puid int(11) NOT NULL,
hour int(11) NOT NULL,
share_accept bigint(20) NOT NULL DEFAULT ‘0‘,
share_reject bigint(20) NOT NULL DEFAULT ‘0‘,
reject_rate double NOT NULL DEFAULT ‘0‘,
score decimal(35,25) NOT NULL DEFAULT ‘0.0000000000000000000000000‘,
earn bigint(20) NOT NULL DEFAULT ‘0‘,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
UNIQUE KEY puid_hour (puid,hour),
KEY hour (hour)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS stats_workers_day;
CREATE TABLE stats_workers_day (
puid int(11) NOT NULL,
worker_id bigint(20) NOT NULL,
day int(11) NOT NULL,
share_accept bigint(20) NOT NULL DEFAULT ‘0‘,
share_reject bigint(20) NOT NULL DEFAULT ‘0‘,
reject_rate double NOT NULL DEFAULT ‘0‘,
score decimal(35,25) NOT NULL DEFAULT ‘0.0000000000000000000000000‘,
earn bigint(20) NOT NULL DEFAULT ‘0‘,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
UNIQUE KEY puid_worker_id_day (puid,worker_id,day),
KEY day (day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS stats_workers_hour;
CREATE TABLE stats_workers_hour (
puid int(11) NOT NULL,
worker_id bigint(20) NOT NULL,
hour int(11) NOT NULL,
share_accept bigint(20) NOT NULL DEFAULT ‘0‘,
share_reject bigint(20) NOT NULL DEFAULT ‘0‘,
reject_rate double NOT NULL DEFAULT ‘0‘,
score decimal(35,25) NOT NULL DEFAULT ‘0.0000000000000000000000000‘,
earn bigint(20) NOT NULL DEFAULT ‘0‘,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
UNIQUE KEY puid_worker_id_hour (puid,worker_id,hour),
KEY hour (hour)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

區塊鏈教程btcpool礦池源碼分析slparser