Browse Source

better error handling and feedback when node is unavailable

fix-133-memory-crash
Dan Janosik 7 years ago
parent
commit
80500d2e8a
  1. 49
      app/rpcApi.js
  2. 21
      routes/baseActionsRouter.js
  3. 47
      views/blocks.pug
  4. 22
      views/index.pug

49
app/rpcApi.js

@ -39,7 +39,11 @@ function getInfo() {
return new Promise(function(resolve, reject) {
client.cmd('getinfo', function(err, result, resHeaders) {
if (err) {
return console.log("Error 3207fh0f: " + err);
console.log("Error 3207fh0f: " + err);
reject(err);
return;
}
resolve(result);
@ -51,7 +55,11 @@ function getMempoolInfo() {
return new Promise(function(resolve, reject) {
client.cmd('getmempoolinfo', function(err, result, resHeaders) {
if (err) {
return console.log("Error 23407rhwe07fg: " + err);
console.log("Error 23407rhwe07fg: " + err);
reject(err);
return;
}
resolve(result);
@ -63,10 +71,12 @@ function getMempoolStats() {
return new Promise(function(resolve, reject) {
client.cmd('getrawmempool', true, function(err, result, resHeaders) {
if (err) {
return console.log("Error 428thwre0ufg: " + err);
}
console.log("Error 428thwre0ufg: " + err);
console.log("abc: " + JSON.stringify(result).substring(0, 100));
reject(err);
return;
}
var compiledResult = {};
compiledResult.count = 0;
@ -128,12 +138,20 @@ function getBlockByHeight(blockHeight) {
client.cmd('getblockhash', blockHeight, function(err, result, resHeaders) {
if (err) {
return console.log("Error 0928317yr3w: " + err);
console.log("Error 0928317yr3w: " + err);
reject(err);
return;
}
client.cmd('getblock', result, function(err2, result2, resHeaders2) {
if (err2) {
return console.log("Error 320fh7e0hg: " + err2);
console.log("Error 320fh7e0hg: " + err2);
reject(err2);
return;
}
resolve({ success:true, getblockhash:result, getblock:result2 });
@ -192,6 +210,10 @@ function getBlockByHash(blockHash) {
client.cmd('getblock', blockHash, function(err, result, resHeaders) {
if (err) {
console.log("Error 0u2fgewue: " + err);
reject(err);
return;
}
resolve(result);
@ -206,8 +228,8 @@ function getTransactionInputs(rpcClient, transaction, inputLimit=0) {
var txids = [];
for (var i = 0; i < transaction.vin.length; i++) {
if (i < inputLimit || inputLimit == 0) {
txids.push(transaction.vin[i].txid);
}
txids.push(transaction.vin[i].txid);
}
}
getRawTransactions(txids).then(function(inputTransactions) {
@ -232,6 +254,10 @@ function getRawTransaction(txid) {
client.cmd('getrawtransaction', txid, 1, function(err, result, resHeaders) {
if (err) {
console.log("Error 329813yre823: " + err);
reject(err);
return;
}
resolve(result);
@ -256,6 +282,11 @@ function getRawTransactions(txids) {
result.confirmations = blockZeroResult.getblock.confirmations;
resolve([result]);
}).catch(function(err) {
reject(err);
return;
});
return;

21
routes/baseActionsRouter.js

@ -44,6 +44,10 @@ router.get("/", function(req, res) {
res.render("index");
});
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("index");
});
});
@ -53,6 +57,11 @@ router.get("/node-info", function(req, res) {
rpcApi.getInfo().then(function(getinfo) {
res.locals.getinfo = getinfo;
res.render("node-info");
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("node-info");
});
});
@ -68,6 +77,10 @@ router.get("/mempool", function(req, res) {
res.render("mempool");
});
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("mempool");
});
});
@ -145,6 +158,10 @@ router.get("/blocks", function(req, res) {
res.render("blocks");
});
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("blocks");
});
});
@ -193,6 +210,10 @@ router.post("/search", function(req, res) {
res.redirect("/");
});
});
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("index");
});
});

47
views/blocks.pug

@ -4,29 +4,32 @@ block content
h1(class="h2") Blocks
hr
nav(aria-label="Page navigation")
ul(class="pagination justify-content-center")
li(class="page-item", class=(sort == "asc" ? "active" : false))
a(class="page-link", href=(sort == "asc" ? "javascript:void(0)" : "/blocks?limit=" + limit + "&offset=0" + "&sort=asc"))
span(aria-hidden="true") Oldest blocks first
li(class="page-item", class=(sort == "desc" ? "active" : false))
a(class="page-link", href=(sort == "desc" ? "javascript:void(0)" : "/blocks?limit=" + limit + "&offset=0" + "&sort=desc"))
span(aria-hidden="true") Newest blocks first
if (blocks)
nav(aria-label="Page navigation")
ul(class="pagination justify-content-center")
li(class="page-item", class=(sort == "asc" ? "active" : false))
a(class="page-link", href=(sort == "asc" ? "javascript:void(0)" : "/blocks?limit=" + limit + "&offset=0" + "&sort=asc"))
span(aria-hidden="true") Oldest blocks first
li(class="page-item", class=(sort == "desc" ? "active" : false))
a(class="page-link", href=(sort == "desc" ? "javascript:void(0)" : "/blocks?limit=" + limit + "&offset=0" + "&sort=desc"))
span(aria-hidden="true") Newest blocks first
include includes/blocks-list.pug
include includes/blocks-list.pug
hr
if (blockCount > limit)
- var pageNumber = offset / limit + 1;
- var pageCount = Math.floor(blockCount / limit);
- if (pageCount * limit < blockCount) {
- pageCount++;
- }
- var paginationUrlFunction = function(x) {
- return paginationBaseUrl + "?limit=" + limit + "&offset=" + ((x - 1) * limit + "&sort=" + sort);
- }
hr
include includes/pagination.pug
if (blockCount > limit)
- var pageNumber = offset / limit + 1;
- var pageCount = Math.floor(blockCount / limit);
- if (pageCount * limit < blockCount) {
- pageCount++;
- }
- var paginationUrlFunction = function(x) {
- return paginationBaseUrl + "?limit=" + limit + "&offset=" + ((x - 1) * limit + "&sort=" + sort);
- }
hr
include includes/pagination.pug
else
p No blocks found

22
views/index.pug

@ -11,13 +11,25 @@ block content
**BTC Explorer** is [open-source](https://github.com/janoside/btc-rpc-explorer). If you run your own [Bitcoin Full Node](https://bitcoin.org/en/full-node), **BTC Explorer** can easily run alongside it, communicating via RPC calls. See the project [ReadMe](https://github.com/janoside/btc-rpc-explorer) for a list of features and instructions for running.
if (latestBlocks)
h3 Latest Blocks
h3 Latest Blocks
- var blocks = latestBlocks;
- var blockOffset = 0;
- var blocks = latestBlocks;
- var blockOffset = 0;
include includes/blocks-list.pug
include includes/blocks-list.pug
hr
a(href="/blocks", class="btn btn-primary btn-block") See more
hr
a(href="/blocks", class="btn btn-primary btn-block") See more
div(class="text-center")
:markdown-it
Public instance maintained at [https://btc-explorer.com](https://btc-explorer.com)
Donate bitcoin: [3NPGpNyLLmVKCEcuipBs7G4KpQJoJXjDGe](bitcoin:3NPGpNyLLmVKCEcuipBs7G4KpQJoJXjDGe) / zCash: [t1bEGh8eABmZu8Ned3awCgBdkAhz2mKzJxP](zcash:t1bEGh8eABmZu8Ned3awCgBdkAhz2mKzJxP)
Source code available on github: [https://github.com/janoside/btc-rpc-explorer](https://github.com/janoside/btc-rpc-explorer)
&copy; 2017 Dan Janosik
Loading…
Cancel
Save