区块链教程btcpool矿池源码分析slparser

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链教程btcpool矿池源码分析slparser相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

btcpool矿池源码分析-slparser

btcpool之stratum协议

区块链教程以太坊源码分析core-state-process源码分析

区块链教程以太坊源码分析core-state源码分析

区块链入门教程以太坊源码分析fast sync算法一

区块链教程以太坊源码分析core-state-process源码分析