Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Service Nodes Fix Endpoints To Use stdout #185

Merged
merged 1 commit into from
Aug 24, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 73 additions & 61 deletions src/daemon/rpc_command_executor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2007,10 +2007,10 @@ bool t_rpc_command_executor::get_service_node_registration_cmd(const std::vector
tools::fail_msg_writer() << make_error(fail_message, error_resp.message);
return true;
}

tools::success_msg_writer() << res.registration_cmd;
}

tools::success_msg_writer() << res.registration_cmd;

return true;
}

Expand Down Expand Up @@ -2097,93 +2097,105 @@ bool t_rpc_command_executor::print_sn(const std::vector<std::string> &args)
epee::json_rpc::error error_resp;
req.service_node_pubkeys = args;

cryptonote::COMMAND_RPC_GET_INFO::request get_info_req;
cryptonote::COMMAND_RPC_GET_INFO::response get_info_res;

cryptonote::network_type nettype = cryptonote::UNDEFINED;
uint64_t *curr_height = nullptr;
if (m_is_rpc)
{
if (!m_rpc_client->json_rpc_request(req, res, "get_service_node", fail_message.c_str()))
if (!m_rpc_client->rpc_request(get_info_req, get_info_res, "/getinfo", fail_message.c_str()))
{
tools::fail_msg_writer() << make_error(fail_message, res.status);
return true;
tools::fail_msg_writer() << make_error(fail_message, get_info_res.status);
return true;
}

if (!m_rpc_client->json_rpc_request(req, res, "get_service_nodes", fail_message.c_str()))
{
tools::fail_msg_writer() << make_error(fail_message, res.status);
return true;
}

if (get_info_res.mainnet) nettype = cryptonote::MAINNET;
else if (get_info_res.stagenet) nettype = cryptonote::STAGENET;
else if (get_info_res.testnet) nettype = cryptonote::TESTNET;
curr_height = &get_info_res.height;
}
else
{
if (m_rpc_server->on_get_info(get_info_req, get_info_res) || get_info_res.status == CORE_RPC_STATUS_OK)
curr_height = &get_info_res.height;

if (!m_rpc_server->on_get_service_nodes(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
{
tools::fail_msg_writer() << make_error(fail_message, error_resp.message);
return true;
}
nettype = m_rpc_server->nettype();
}

std::vector<cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *> unregistered;
std::vector<cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *> registered;
registered.reserve (res.service_node_states.size());
unregistered.reserve(res.service_node_states.size() * 0.5f);
std::vector<cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *> unregistered;
std::vector<cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *> registered;
registered.reserve (res.service_node_states.size());
unregistered.reserve(res.service_node_states.size() * 0.5f);

for (auto &entry : res.service_node_states)
for (auto &entry : res.service_node_states)
{
if (entry.total_contributed == entry.staking_requirement)
{
if (entry.total_contributed == entry.staking_requirement)
{
registered.push_back(&entry);
}
else
{
unregistered.push_back(&entry);
}
registered.push_back(&entry);
}
else
{
unregistered.push_back(&entry);
}
}

std::sort(unregistered.begin(), unregistered.end(),
[](const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *a, const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *b) {
uint64_t a_remaining = a->staking_requirement - a->total_reserved;
uint64_t b_remaining = b->staking_requirement - b->total_reserved;

if (b_remaining == a_remaining)
return b->portions_for_operator < a->portions_for_operator;

return b_remaining < a_remaining;
});
std::sort(unregistered.begin(), unregistered.end(),
[](const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *a, const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *b) {
uint64_t a_remaining = a->staking_requirement - a->total_reserved;
uint64_t b_remaining = b->staking_requirement - b->total_reserved;

std::stable_sort(registered.begin(), registered.end(),
[](const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *a, const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *b) {
if (a->last_reward_block_height == b->last_reward_block_height)
return a->last_reward_transaction_index < b->last_reward_transaction_index;
if (b_remaining == a_remaining)
return b->portions_for_operator < a->portions_for_operator;

return a->last_reward_block_height < b->last_reward_block_height;
});
return b_remaining < a_remaining;
});

uint64_t *curr_height = nullptr;
cryptonote::COMMAND_RPC_GET_HEIGHT::request height_req = {};
cryptonote::COMMAND_RPC_GET_HEIGHT::response height_res = {};
m_rpc_server->on_get_height(height_req, height_res);
std::stable_sort(registered.begin(), registered.end(),
[](const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *a, const cryptonote::COMMAND_RPC_GET_SERVICE_NODES::response::entry *b) {
if (a->last_reward_block_height == b->last_reward_block_height)
return a->last_reward_transaction_index < b->last_reward_transaction_index;

if (res.status == CORE_RPC_STATUS_OK)
curr_height = &height_res.height;
return a->last_reward_block_height < b->last_reward_block_height;
});

if (unregistered.size() > 0)
{
tools::msg_writer() << "Service Node Unregistered State[" << unregistered.size()<< "]";
print_service_node_list_state(m_rpc_server->nettype(), curr_height, unregistered);
}
if (unregistered.size() > 0)
{
tools::msg_writer() << "Service Node Unregistered State[" << unregistered.size()<< "]";
print_service_node_list_state(nettype, curr_height, unregistered);
}

if (registered.size() > 0)
{
tools::msg_writer() << "Service Node Registration State[" << registered.size()<< "]";
print_service_node_list_state(m_rpc_server->nettype(), curr_height, registered);
}
if (registered.size() > 0)
{
tools::msg_writer() << "Service Node Registration State[" << registered.size()<< "]";
print_service_node_list_state(nettype, curr_height, registered);
}

if (unregistered.size() == 0 && registered.size() == 0)
if (unregistered.size() == 0 && registered.size() == 0)
{
if (args.size() > 0)
{
if (args.size() > 0)
tools::msg_writer() << "No service node is currently known on the network for: ";
for (const std::string &arg : args)
{
tools::msg_writer() << "No service node is currently known on the network for: ";
for (const std::string &arg : args)
{
tools::msg_writer() << arg;
}
}
else
{
tools::msg_writer() << "No service node is currently known on the network";
tools::msg_writer() << arg;
}
}
else
{
tools::msg_writer() << "No service node is currently known on the network";
}
}

return true;
Expand Down