mirror of
https://git.wownero.com/wownero/onion-wownero-blockchain-explorer.git
synced 2024-08-15 00:33:12 +00:00
add limits to json_mempool
This commit is contained in:
parent
fa168613ae
commit
eac4fa8460
2 changed files with 70 additions and 11 deletions
10
main.cpp
10
main.cpp
|
@ -386,10 +386,16 @@ int main(int ac, const char* av[]) {
|
|||
return r;
|
||||
});
|
||||
|
||||
CROW_ROUTE(app, "/api/mempool")
|
||||
CROW_ROUTE(app, "/api/mempool").methods("GET"_method)
|
||||
([&](const crow::request &req) {
|
||||
|
||||
myxmr::jsonresponse r{xmrblocks.json_mempool()};
|
||||
string page = regex_search(req.raw_url, regex {"page=\\d+"}) ?
|
||||
req.url_params.get("page") : "0";
|
||||
|
||||
string limit = regex_search(req.raw_url, regex {"limit=\\d+"}) ?
|
||||
req.url_params.get("limit") : "25";
|
||||
|
||||
myxmr::jsonresponse r{xmrblocks.json_mempool(page, limit)};
|
||||
|
||||
return r;
|
||||
});
|
||||
|
|
71
src/page.h
71
src/page.h
|
@ -4092,7 +4092,7 @@ namespace xmreg
|
|||
j_data["page"] = page;
|
||||
j_data["limit"] = limit;
|
||||
j_data["current_height"] = height;
|
||||
j_data["total_page_no"] = (height / limit);
|
||||
j_data["total_page_no"] = limit > 0 ? (height / limit) : 0;
|
||||
|
||||
|
||||
j_response["status"] = "success";
|
||||
|
@ -4106,7 +4106,7 @@ namespace xmreg
|
|||
* https://labs.omniti.com/labs/jsend
|
||||
*/
|
||||
json
|
||||
json_mempool()
|
||||
json_mempool(string _page, string _limit)
|
||||
{
|
||||
json j_response {
|
||||
{"status", "fail"},
|
||||
|
@ -4115,6 +4115,23 @@ namespace xmreg
|
|||
|
||||
json& j_data = j_response["data"];
|
||||
|
||||
// parse page and limit into numbers
|
||||
|
||||
uint64_t page {0};
|
||||
uint64_t limit {0};
|
||||
|
||||
try
|
||||
{
|
||||
page = boost::lexical_cast<uint64_t>(_page);
|
||||
limit = boost::lexical_cast<uint64_t>(_limit);
|
||||
}
|
||||
catch (const boost::bad_lexical_cast& e)
|
||||
{
|
||||
j_data["title"] = fmt::format(
|
||||
"Cant parse page and/or limit numbers: {:s}, {:s}", _page, _limit);
|
||||
return j_response;
|
||||
}
|
||||
|
||||
//get current server timestamp
|
||||
server_timestamp = std::time(nullptr);
|
||||
|
||||
|
@ -4136,21 +4153,57 @@ namespace xmreg
|
|||
|
||||
(void) tx_hash_dummy;
|
||||
|
||||
// for each transaction in the memory pool
|
||||
for (const auto& a_pair: mempool_data)
|
||||
uint64_t no_mempool_txs = mempool_data.size();
|
||||
|
||||
// calculate starting and ending block numbers to show
|
||||
int64_t start_height = no_mempool_txs - limit * (page + 1);
|
||||
|
||||
// check if start height is not below range
|
||||
start_height = start_height < 0 ? 0 : start_height;
|
||||
|
||||
int64_t end_height = start_height + limit;
|
||||
|
||||
end_height = end_height > no_mempool_txs ? no_mempool_txs : end_height;
|
||||
|
||||
// loop index
|
||||
int64_t i = end_height;
|
||||
|
||||
json j_txs = json::array();
|
||||
|
||||
// for each transaction in the memory pool in current page
|
||||
while (i > start_height)
|
||||
{
|
||||
const tx_details& txd = get_tx_details(a_pair.second, false, 1, height); // 1 is dummy here
|
||||
const pair<tx_info, transaction>* a_pair {nullptr};
|
||||
|
||||
try
|
||||
{
|
||||
a_pair = &(mempool_data.at(i - 1));
|
||||
}
|
||||
catch (const std::out_of_range& e)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
const tx_details& txd = get_tx_details(a_pair->second, false, 1, height); // 1 is dummy here
|
||||
|
||||
// get basic tx info
|
||||
json j_tx = get_tx_json(a_pair.second, txd);
|
||||
json j_tx = get_tx_json(a_pair->second, txd);
|
||||
|
||||
// we add some extra data, for mempool txs, such as recieve timestamp
|
||||
j_tx["timestamp"] = a_pair.first.receive_time;
|
||||
j_tx["timestamp_utc"] = xmreg::timestamp_to_str_gm(a_pair.first.receive_time);
|
||||
j_tx["timestamp"] = a_pair->first.receive_time;
|
||||
j_tx["timestamp_utc"] = xmreg::timestamp_to_str_gm(a_pair->first.receive_time);
|
||||
|
||||
j_data.push_back(j_tx);
|
||||
j_txs.push_back(j_tx);
|
||||
|
||||
--i;
|
||||
}
|
||||
|
||||
j_data["txs"] = j_txs;
|
||||
j_data["page"] = page;
|
||||
j_data["limit"] = limit;
|
||||
j_data["txs_no"] = no_mempool_txs;
|
||||
j_data["total_page_no"] = limit > 0 ? (no_mempool_txs / limit) : 0;
|
||||
|
||||
j_response["status"] = "success";
|
||||
|
||||
return j_response;
|
||||
|
|
Loading…
Reference in a new issue