Скрипт-обвязка для stratum-прокси Dwarfpool: различия между версиями
Rain (обсуждение | вклад) (Новая страница: «Обвязка вокруг [https://github.com/Atrides/eth-proxy stratum-прокси], изначально созданная для перезапуска п…») |
Rain (обсуждение | вклад) м |
||
Строка 18: | Строка 18: | ||
fpath="$(readlink -f "${1}")" | fpath="$(readlink -f "${1}")" | ||
dpath="$(dirname "${fpath}")" | dpath="$(dirname "${fpath}")" | ||
efile="$(basename "${fpath}")" | |||
cd "${dpath}" | cd "${dpath}" | ||
python "${ | python "${efile}" 2>&1 | awk ' | ||
BEGIN { | BEGIN { | ||
Строка 54: | Строка 55: | ||
for (i in arr) sum+=arr[i] | for (i in arr) sum+=arr[i] | ||
if (arr[13]=="") col="\033[33m" | if (arr[13]=="") col="\033[33m" | ||
else if (sum*100/length(arr)>'30') system("pkill -f '$ | else if (sum*100/length(arr)>'30') system("pkill -f '$efile'") | ||
} | } | ||
Текущая версия на 19:40, 13 марта 2016
Обвязка вокруг stratum-прокси, изначально созданная для перезапуска прокси в случае обрывов соединения с интернетом. У прокси (тестировалось на v 0.0.4) был баг - при обрыве внешнего канала прокси об этом не знал и продолжал принимать шары от ригов и пытаться отправлять их на пул. Пул про это соединение ничего не знал и вся работа reject'илась. На основе этого и было решено сделать перезапуск. Первая версия скрипта имеет такую структуру. По факту накопления сообщений с reject'ами убивался процесс прокси, а внешний скрипт (бесконечный цикл со sleep'ом) делал новый запуск.
В дальнейшем функционал скрипта был расширен. Теперь, помимо основной функции, он строит статистику по принятой и отброшенной работе в целом, а также по воркерам в отдельности. Статистика по работе дополняет поток сообщений прокси колонкой слева. Статистика по воркерам выводится в потоке раз в 100 секунд.
Было также добавлено цветовое выделение шар. Сообщения с принятыми шарами выделяются зеленым, с отброшенными шарами - красным. При запуске прокси, для исключения ложных срабатываний (когда, например, одна из первых полученных шар отбрасывается, что дает высокий процент reject'ов по отношению к общей работе), сделано окно в 14 сообщений, в течение которого будет игнорироваться высокий процент reject'ов. Такие сообщения выделяются желтым.
Как и раньше, скрипт необходимо запускать в бесконечном цикле для перезапуска прокси.
while sleep 3 ; do /path/to/script /path/to/eth-proxy.py ; done
#!/bin/bash
[ -z "${1}" ] && exit 1
fpath="$(readlink -f "${1}")"
dpath="$(dirname "${fpath}")"
efile="$(basename "${fpath}")"
cd "${dpath}"
python "${efile}" 2>&1 | awk '
BEGIN {
sum=0
w=0
rej=0
oldtime=0
}
{
col="\033[0;0m"
}
/eth_submitWork/&&/protocol/{
nl+=1
w+=1
sum=0
wname=$9
gsub(/'\''/, "", wname)
if (nl>15) nl=0
if ($0 ~ /REJECT/) {
rstat[wname]+=1
arr[nl]=1
rej+=1
col="\033[31m"
} else {
astat[wname]+=1
arr[nl]=0
col="\033[32m"
}
for (i in arr) sum+=arr[i]
if (arr[13]=="") col="\033[33m"
else if (sum*100/length(arr)>'30') system("pkill -f '$efile'")
}
{
CONVFMT="%.2f"
if (w=="0") st="na"
else {
st=rej*100/w
if (systime()-oldtime > 100) {
oldtime=systime()
print " ** Workers statistic ** "
for (s in astat)
printf "%-24s %-15s %-8s %-8s %-6s\n", " ", "| "s":", "A:"astat[s], "R:"rstat[s]*100/(astat[s]+rstat[s])"%", "P:"(astat[s]+rstat[s])*100/w"%"
}
}
printf "%-8s %-8s %-6s | %s\033[0;0m\n", "A:"w, "R:" st "%", "WD:" sum, col $0
}'