Async update on Bitcoin sync page
This commit is contained in:
parent
3b0f5eecca
commit
2dcbf819bf
|
@ -13,6 +13,8 @@ sleep 60s
|
||||||
|
|
||||||
# Give admin the ability to access the BTC cookie
|
# Give admin the ability to access the BTC cookie
|
||||||
chmod 640 /mnt/hdd/mynode/bitcoin/.cookie
|
chmod 640 /mnt/hdd/mynode/bitcoin/.cookie
|
||||||
|
cp -f /mnt/hdd/mynode/bitcoin/.cookie /home/admin/.bitcoin/.cookie
|
||||||
|
chown admin:admin /home/admin/.bitcoin/.cookie
|
||||||
|
|
||||||
if [ -f /mnt/hdd/mynode/bitcoin/testnet3/.cookie ]; then
|
if [ -f /mnt/hdd/mynode/bitcoin/testnet3/.cookie ]; then
|
||||||
mkdir -p /mnt/hdd/mynode/bitcoin/testnet3
|
mkdir -p /mnt/hdd/mynode/bitcoin/testnet3
|
||||||
|
|
|
@ -11,6 +11,7 @@ from whirlpool import get_whirlpool_status
|
||||||
from thread_functions import *
|
from thread_functions import *
|
||||||
from systemctl_info import *
|
from systemctl_info import *
|
||||||
from application_info import *
|
from application_info import *
|
||||||
|
from messages import *
|
||||||
import qrcode
|
import qrcode
|
||||||
import cStringIO
|
import cStringIO
|
||||||
import json
|
import json
|
||||||
|
@ -28,6 +29,7 @@ def api_get_bitcoin_info():
|
||||||
|
|
||||||
data = {}
|
data = {}
|
||||||
data["current_block"] = get_mynode_block_height()
|
data["current_block"] = get_mynode_block_height()
|
||||||
|
data["block_height"] = get_bitcoin_block_height()
|
||||||
data["peer_count"] = get_bitcoin_peer_count()
|
data["peer_count"] = get_bitcoin_peer_count()
|
||||||
#data["difficulty"] = get_bitcoin_difficulty() # Dont send difficulty, it causes errors in jsonify
|
#data["difficulty"] = get_bitcoin_difficulty() # Dont send difficulty, it causes errors in jsonify
|
||||||
data["mempool_size"] = get_bitcoin_mempool_size()
|
data["mempool_size"] = get_bitcoin_mempool_size()
|
||||||
|
@ -181,4 +183,16 @@ def api_get_qr_code_image():
|
||||||
img = generate_qr_code(url)
|
img = generate_qr_code(url)
|
||||||
img.save(img_buf)
|
img.save(img_buf)
|
||||||
img_buf.seek(0)
|
img_buf.seek(0)
|
||||||
return send_file(img_buf, mimetype='image/png')
|
return send_file(img_buf, mimetype='image/png')
|
||||||
|
|
||||||
|
@mynode_api.route("/api/get_message")
|
||||||
|
def api_get_message():
|
||||||
|
check_logged_in()
|
||||||
|
|
||||||
|
funny = False
|
||||||
|
if request.args.get("funny"):
|
||||||
|
funny = True
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
data["message"] = get_message(funny)
|
||||||
|
return jsonify(data)
|
|
@ -442,19 +442,19 @@ def index():
|
||||||
# Display sync info if not synced
|
# Display sync info if not synced
|
||||||
if not is_bitcoin_synced():
|
if not is_bitcoin_synced():
|
||||||
subheader = Markup("Syncing...")
|
subheader = Markup("Syncing...")
|
||||||
if bitcoin_block_height != None:
|
if bitcoin_block_height == None:
|
||||||
message = "<div class='small_message'>{}</<div>".format( get_message(include_funny=True) )
|
bitcoin_block_height = 0
|
||||||
|
if mynode_block_height == None:
|
||||||
remaining = bitcoin_block_height - mynode_block_height
|
mynode_block_height = 0
|
||||||
subheader = Markup("Syncing...<br/>Block {} of {}{}".format(mynode_block_height, bitcoin_block_height, message))
|
|
||||||
templateData = {
|
templateData = {
|
||||||
"title": "myNode Sync",
|
"title": "myNode Sync",
|
||||||
"header_text": "Bitcoin Blockchain",
|
"header_text": "Bitcoin Blockchain",
|
||||||
"subheader_text": subheader,
|
"bitcoin_block_height": bitcoin_block_height,
|
||||||
"refresh_rate": 10,
|
"mynode_block_height": mynode_block_height,
|
||||||
|
"message": get_message(include_funny=True),
|
||||||
"ui_settings": read_ui_settings()
|
"ui_settings": read_ui_settings()
|
||||||
}
|
}
|
||||||
return render_template('state.html', **templateData)
|
return render_template('syncing.html', **templateData)
|
||||||
|
|
||||||
# Find tor status
|
# Find tor status
|
||||||
tor_status_color = get_service_status_color("tor@default")
|
tor_status_color = get_service_status_color("tor@default")
|
||||||
|
@ -851,7 +851,7 @@ def start_threads():
|
||||||
app.logger.info("STARTING THREADS")
|
app.logger.info("STARTING THREADS")
|
||||||
|
|
||||||
# Start threads
|
# Start threads
|
||||||
btc_thread1 = BackgroundThread(update_bitcoin_main_info_thread, 15)
|
btc_thread1 = BackgroundThread(update_bitcoin_main_info_thread, 60) # Restart after 60, thread manages timing
|
||||||
btc_thread1.start()
|
btc_thread1.start()
|
||||||
threads.append(btc_thread1)
|
threads.append(btc_thread1)
|
||||||
btc_thread2 = BackgroundThread(update_bitcoin_other_info_thread, 60)
|
btc_thread2 = BackgroundThread(update_bitcoin_other_info_thread, 60)
|
||||||
|
|
76
rootfs/standard/var/www/mynode/templates/syncing.html
Normal file
76
rootfs/standard/var/www/mynode/templates/syncing.html
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
<!DOCTYPE html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>{{ title }}</title>
|
||||||
|
{% include 'includes/head.html' %}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
current_block = {{mynode_block_height}};
|
||||||
|
block_height = {{bitcoin_block_height}};
|
||||||
|
|
||||||
|
function update_counts() {
|
||||||
|
// Update Bitcoin Info
|
||||||
|
$.getJSON("/api/get_bitcoin_info", function( data ) {
|
||||||
|
//console.log("Bitcoin Data: " + JSON.stringify(data))
|
||||||
|
if ("current_block" in data && data["current_block"] != null &&
|
||||||
|
"block_height" in data && data["block_height"] != null) {
|
||||||
|
if (current_block != parseInt(data["current_block"])) {
|
||||||
|
$("#current_block").fadeOut(250, function() {
|
||||||
|
$(this).text(data["current_block"]);
|
||||||
|
}).fadeIn(250);
|
||||||
|
current_block = parseInt(data["current_block"]);
|
||||||
|
}
|
||||||
|
if (block_height != parseInt(data["block_height"])) {
|
||||||
|
$("#block_height").fadeOut(250, function() {
|
||||||
|
$(this).text(data["block_height"]);
|
||||||
|
}).fadeIn(250);
|
||||||
|
block_height = parseInt(data["block_height"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We're close, so do a full refresh to get to home page faster
|
||||||
|
if (current_block > (block_height - 5)) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_message() {
|
||||||
|
// Update message
|
||||||
|
if (update_count % 12 == 0) {
|
||||||
|
$.getJSON("/api/get_message", function( data ) {
|
||||||
|
if ("message" in data && data["message"] != null) {
|
||||||
|
$("#message").fadeOut(250, function() {
|
||||||
|
$(this).text(data["message"]);
|
||||||
|
}).fadeIn(250);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update info
|
||||||
|
const update_block_interval = setInterval(update_counts, 5000);
|
||||||
|
const update_message_interval = setInterval(update_message, 60000);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Refresh in 15 min, other updates async -->
|
||||||
|
<meta http-equiv="refresh" content="900">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
{% include 'includes/logo_header.html' %}
|
||||||
|
|
||||||
|
<div class="state_header">{{ header_text }}</div>
|
||||||
|
|
||||||
|
<div class="state_subheader">
|
||||||
|
Syncing... <br/>
|
||||||
|
<span id="current_block">{{mynode_block_height}}</span> of <span id="block_height">{{bitcoin_block_height}}</span>
|
||||||
|
|
||||||
|
<div id="message" class='small_message'>{{ message }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="height: 40px;"> </div>
|
||||||
|
{% include 'includes/footer.html' %}
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -92,21 +92,35 @@ def update_bitcoin_main_info_thread():
|
||||||
global has_updated_btc_info
|
global has_updated_btc_info
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Get bitcoin info
|
synced = False
|
||||||
if update_bitcoin_main_info():
|
while True:
|
||||||
# Mark on update complete
|
# Get bitcoin info
|
||||||
has_updated_btc_info = True
|
if update_bitcoin_main_info():
|
||||||
|
# Mark on update complete
|
||||||
|
has_updated_btc_info = True
|
||||||
|
|
||||||
# Calculate sync status
|
# Calculate sync status
|
||||||
bitcoin_block_height = get_bitcoin_block_height()
|
bitcoin_block_height = get_bitcoin_block_height()
|
||||||
mynode_block_height = get_mynode_block_height()
|
mynode_block_height = get_mynode_block_height()
|
||||||
remaining = bitcoin_block_height - mynode_block_height
|
remaining = bitcoin_block_height - mynode_block_height
|
||||||
if remaining == 0 and bitcoin_block_height > 670000:
|
if remaining == 0 and bitcoin_block_height > 680000:
|
||||||
if not os.path.isfile(BITCOIN_SYNCED_FILE):
|
synced = True
|
||||||
open(BITCOIN_SYNCED_FILE, 'a').close() # touch file
|
if not os.path.isfile(BITCOIN_SYNCED_FILE):
|
||||||
elif remaining > 18:
|
open(BITCOIN_SYNCED_FILE, 'a').close() # touch file
|
||||||
if os.path.isfile(BITCOIN_SYNCED_FILE):
|
elif remaining > 18:
|
||||||
os.remove(BITCOIN_SYNCED_FILE)
|
synced = False
|
||||||
|
if os.path.isfile(BITCOIN_SYNCED_FILE):
|
||||||
|
os.remove(BITCOIN_SYNCED_FILE)
|
||||||
|
|
||||||
|
# Poll slower if synced
|
||||||
|
if synced:
|
||||||
|
time.sleep(15)
|
||||||
|
else:
|
||||||
|
time.sleep(3)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Failed - try again in 10s
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("CAUGHT update_bitcoin_main_info_thread EXCEPTION: " + str(e))
|
print("CAUGHT update_bitcoin_main_info_thread EXCEPTION: " + str(e))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user