-
Notifications
You must be signed in to change notification settings - Fork 0
/
multyviz.js
131 lines (113 loc) · 4.27 KB
/
multyviz.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// --------- Настройки программы -----------------
// --- необходимые библиотеки устанавливаются через npm
const viz = require("viz-js-lib")
// Подключение api-node
const VIZNODE = "wss://viz.lexai.host/ws" // public node
//const VIZNODE = "ws://192.168.1.245:8191" // local node
viz.config.set('websocket', VIZNODE)
// Настройки скрипта
var timeout=28 // sec период проверки работоспособности (учитывайте нагрузку на паблик-ноду)
var timewait=10*60 // sec время ожидания восстановления работоспособности до активации
var keyoff="VIZ1111111111111111111111111111111114T1Anm"
var urloff="Disable via js"
// Ноды для мониторинга
var users= {
"retroscope": [
"5Asdfgh...", // Активный ключ
"https://control.viz.world/witnesses/", // URL заявления о намерениях
"VIZ5m14X9UrUkZUM67A546ak6CezBKce3TbYrMJQFXqGKDSmQNN9B", // Публичный ключ подписи
0,
0
],
"jackvote": [
"5Qwerty...",
"https://control.viz.world/witnesses/",
"VIZ5Cs3hmjaHF5Mm744D9Ed56ikcNovYHAH4wBM15K9xuDphuxZAA",
0,
0
]
}
// =======================================================================
console.log("Start monitoring")
function checkAll() {
let delay=0
for (let owner in users) {
setTimeout(checkMissed, delay, owner) // разносим по времени запросы к апи-ноде
delay+=1000
}
}
function checkMissed(owner) {
viz.api.getWitnessByAccount(owner, function(err,result){
if (err) {
console.log(err)
return
}
if (result==null) {
console.log(owner, "not witness - deleted from list")
delete users[owner]
return
}
let time=parseInt(new Date().getTime()/1000) // unixtimestamp
if (result.signing_key==keyoff) { // отключена ли нода
disable=true
} else {
disable=false
}
let [wif, url, keyon, missed, timeoff] = users[owner]
if (users[owner][3]==0) { // начальная инициализация счётчика при запуске скрипта
users[owner][3]=result.total_missed
console.log(owner, Date(), "Set current:", result.total_missed)
return
}
if (result.total_missed>missed && disable==false) { // если счётчик увеличился, а нода не отключена
users[owner][3]=result.total_missed
setkey(disable, owner) // отключаем
users[owner][4]=time // заносим время отключения
return
}
if (result.total_missed>missed && disable && (time-timeoff)<timewait) { // если счётчик увеличился, а нода отключена
users[owner][3]=result.total_missed
console.log(Date(), "Disable now:", missed)
return
}
if (result.total_missed==missed && disable && time-timeoff>=timewait) { // счётчик не изменился с момента проверки - включай
setkey(disable, owner) // включаем
users[owner][4]=0 // пофиг
return
}
});
}
function setkey(action, owner) {
try {
let [wif, urluser, keyon, missed, timeoff] = users[owner]
let key=keyoff
let url=urloff
if (action) {
key=keyon
url=urluser
func="Enable"
} else {
func="Disable"
}
viz.broadcast.witnessUpdate(wif,owner,url,key,function(err,result){
if (err) {
console.log(err)
return
}
console.log(Date(), owner+" | "+func+" witness:", missed)
});
} catch (err) {
console.log("SetKey >>>", e.name)
}
}
/// Основной цикл
const startCheck = () => {
timerCheckOff = setInterval(()=>{
checkAll()
}, timeout*1000)
}
const startBot = () => {
checkAll()
startCheck()
}
startBot() // запуск скрипта