aboutsummaryrefslogtreecommitdiff
path: root/src/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon')
-rw-r--r--src/daemon/command_line_args.h5
-rw-r--r--src/daemon/main.cpp4
-rw-r--r--src/daemon/rpc_command_executor.cpp60
3 files changed, 55 insertions, 14 deletions
diff --git a/src/daemon/command_line_args.h b/src/daemon/command_line_args.h
index 2dca5e3e7..1fe2ddcf6 100644
--- a/src/daemon/command_line_args.h
+++ b/src/daemon/command_line_args.h
@@ -59,6 +59,11 @@ namespace daemon_args
"os-version"
, "OS for which this executable was compiled"
};
+ const command_line::arg_descriptor<unsigned> arg_max_concurrency = {
+ "max-concurrency"
+ , "Max number of threads to use for a parallel job"
+ , 0
+ };
} // namespace daemon_args
#endif // DAEMON_COMMAND_LINE_ARGS_H
diff --git a/src/daemon/main.cpp b/src/daemon/main.cpp
index 8684b5d09..2e2f8936c 100644
--- a/src/daemon/main.cpp
+++ b/src/daemon/main.cpp
@@ -82,6 +82,7 @@ int main(int argc, char const * argv[])
bf::path default_log = default_data_dir / std::string(CRYPTONOTE_NAME ".log");
command_line::add_arg(core_settings, daemon_args::arg_log_file, default_log.string());
command_line::add_arg(core_settings, daemon_args::arg_log_level);
+ command_line::add_arg(core_settings, daemon_args::arg_max_concurrency);
daemonizer::init_options(hidden_options, visible_options);
daemonize::t_executor::init_options(core_settings);
@@ -262,6 +263,9 @@ int main(int argc, char const * argv[])
tools::set_stack_trace_log(log_file_path.filename().string());
}
+ if (command_line::has_arg(vm, daemon_args::arg_max_concurrency))
+ tools::set_max_concurrency(command_line::get_arg(vm, daemon_args::arg_max_concurrency));
+
_note_c("dbg/main", "Moving from main() into the daemonize now.");
return daemonizer::daemonize(argc, argv, daemonize::t_executor{}, vm);
diff --git a/src/daemon/rpc_command_executor.cpp b/src/daemon/rpc_command_executor.cpp
index 933c93ed7..ae9492111 100644
--- a/src/daemon/rpc_command_executor.cpp
+++ b/src/daemon/rpc_command_executor.cpp
@@ -70,6 +70,23 @@ namespace {
<< "difficulty: " << boost::lexical_cast<std::string>(header.difficulty) << std::endl
<< "reward: " << boost::lexical_cast<std::string>(header.reward);
}
+
+ std::string get_human_time_ago(time_t t, time_t now)
+ {
+ if (t == now)
+ return "now";
+ time_t dt = t > now ? t - now : now - t;
+ std::string s;
+ if (dt < 90)
+ s = boost::lexical_cast<std::string>(dt) + " seconds";
+ else if (dt < 90 * 60)
+ s = boost::lexical_cast<std::string>(dt/60) + " minutes";
+ else if (dt < 36 * 3600)
+ s = boost::lexical_cast<std::string>(dt/3600) + " hours";
+ else
+ s = boost::lexical_cast<std::string>(dt/(3600*24)) + " days";
+ return s + " " + (t > now ? "in the future" : "ago");
+ }
}
t_rpc_command_executor::t_rpc_command_executor(
@@ -575,16 +592,26 @@ bool t_rpc_command_executor::print_transaction(crypto::hash transaction_hash) {
}
}
- if (1 == res.txs_as_hex.size())
+ if (1 == res.txs.size() || 1 == res.txs_as_hex.size())
{
+ if (1 == res.txs.size())
+ {
+ // only available for new style answers
+ if (res.txs.front().in_pool)
+ tools::success_msg_writer() << "Found in pool";
+ else
+ tools::success_msg_writer() << "Found in blockchain at height " << res.txs.front().block_height;
+ }
+
// first as hex
- tools::success_msg_writer() << res.txs_as_hex.front();
+ const std::string &as_hex = (1 == res.txs.size()) ? res.txs.front().as_hex : res.txs_as_hex.front();
+ tools::success_msg_writer() << as_hex;
// then as json
crypto::hash tx_hash, tx_prefix_hash;
cryptonote::transaction tx;
cryptonote::blobdata blob;
- if (!string_tools::parse_hexstr_to_binbuff(res.txs_as_hex.front(), blob))
+ if (!string_tools::parse_hexstr_to_binbuff(as_hex, blob))
{
tools::fail_msg_writer() << "Failed to parse tx";
}
@@ -669,6 +696,7 @@ bool t_rpc_command_executor::print_transaction_pool_long() {
}
if (! res.transactions.empty())
{
+ const time_t now = time(NULL);
tools::msg_writer() << "Transactions: ";
for (auto & tx_info : res.transactions)
{
@@ -676,7 +704,7 @@ bool t_rpc_command_executor::print_transaction_pool_long() {
<< tx_info.tx_json << std::endl
<< "blob_size: " << tx_info.blob_size << std::endl
<< "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
- << "receive_time: " << tx_info.receive_time << std::endl
+ << "receive_time: " << tx_info.receive_time << " (" << get_human_time_ago(tx_info.receive_time, now) << ")" << std::endl
<< "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
<< "max_used_block_height: " << tx_info.max_used_block_height << std::endl
<< "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
@@ -747,17 +775,21 @@ bool t_rpc_command_executor::print_transaction_pool_short() {
{
tools::msg_writer() << "Pool is empty" << std::endl;
}
- for (auto & tx_info : res.transactions)
+ else
{
- tools::msg_writer() << "id: " << tx_info.id_hash << std::endl
- << "blob_size: " << tx_info.blob_size << std::endl
- << "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
- << "receive_time: " << tx_info.receive_time << std::endl
- << "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
- << "max_used_block_height: " << tx_info.max_used_block_height << std::endl
- << "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
- << "last_failed_height: " << tx_info.last_failed_height << std::endl
- << "last_failed_id: " << tx_info.last_failed_id_hash << std::endl;
+ const time_t now = time(NULL);
+ for (auto & tx_info : res.transactions)
+ {
+ tools::msg_writer() << "id: " << tx_info.id_hash << std::endl
+ << "blob_size: " << tx_info.blob_size << std::endl
+ << "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
+ << "receive_time: " << tx_info.receive_time << " (" << get_human_time_ago(tx_info.receive_time, now) << ")" << std::endl
+ << "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
+ << "max_used_block_height: " << tx_info.max_used_block_height << std::endl
+ << "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
+ << "last_failed_height: " << tx_info.last_failed_height << std::endl
+ << "last_failed_id: " << tx_info.last_failed_id_hash << std::endl;
+ }
}
return true;