debug_api: Add API call to stream JSON objects to file
This commit is contained in:
parent
c37c2d4543
commit
a7c88be7c7
6 changed files with 120 additions and 5 deletions
|
|
@ -12,6 +12,7 @@
|
|||
#include <graphene/utilities/key_conversion.hpp>
|
||||
|
||||
#include <graphene/debug_witness/debug_api.hpp>
|
||||
#include <graphene/debug_witness/debug_witness.hpp>
|
||||
|
||||
namespace graphene { namespace debug_witness {
|
||||
|
||||
|
|
@ -26,6 +27,9 @@ class debug_api_impl
|
|||
void debug_generate_blocks( const std::string& debug_key, uint32_t count );
|
||||
void debug_update_object( const fc::variant_object& update );
|
||||
//void debug_save_db( std::string db_path );
|
||||
void debug_stream_json_objects( const std::string& filename );
|
||||
void debug_stream_json_objects_flush();
|
||||
std::shared_ptr< graphene::debug_witness_plugin::debug_witness_plugin > get_plugin();
|
||||
|
||||
graphene::app::application& app;
|
||||
};
|
||||
|
|
@ -102,6 +106,21 @@ void debug_api_impl::debug_update_object( const fc::variant_object& update )
|
|||
db->debug_update( update );
|
||||
}
|
||||
|
||||
std::shared_ptr< graphene::debug_witness_plugin::debug_witness_plugin > debug_api_impl::get_plugin()
|
||||
{
|
||||
return app.get_plugin< graphene::debug_witness_plugin::debug_witness_plugin >( "debug_witness" );
|
||||
}
|
||||
|
||||
void debug_api_impl::debug_stream_json_objects( const std::string& filename )
|
||||
{
|
||||
get_plugin()->set_json_object_stream( filename );
|
||||
}
|
||||
|
||||
void debug_api_impl::debug_stream_json_objects_flush()
|
||||
{
|
||||
get_plugin()->flush_json_object_stream();
|
||||
}
|
||||
|
||||
} // detail
|
||||
|
||||
debug_api::debug_api( graphene::app::application& app )
|
||||
|
|
@ -124,4 +143,15 @@ void debug_api::debug_update_object( fc::variant_object update )
|
|||
my->debug_update_object( update );
|
||||
}
|
||||
|
||||
void debug_api::debug_stream_json_objects( std::string filename )
|
||||
{
|
||||
my->debug_stream_json_objects( filename );
|
||||
}
|
||||
|
||||
void debug_api::debug_stream_json_objects_flush()
|
||||
{
|
||||
my->debug_stream_json_objects_flush();
|
||||
}
|
||||
|
||||
|
||||
} } // graphene::debug_witness
|
||||
|
|
|
|||
|
|
@ -98,29 +98,76 @@ void debug_witness_plugin::plugin_startup()
|
|||
|
||||
// connect needed signals
|
||||
|
||||
db.applied_block.connect([this](const graphene::chain::signed_block& b){ on_applied_block(b); });
|
||||
db.changed_objects.connect([this](const std::vector<graphene::db::object_id_type>& ids){ on_changed_objects(ids); });
|
||||
db.removed_objects.connect([this](const std::vector<const graphene::db::object*>& objs){ on_removed_objects(objs); });
|
||||
_applied_block_conn = db.applied_block.connect([this](const graphene::chain::signed_block& b){ on_applied_block(b); });
|
||||
_changed_objects_conn = db.changed_objects.connect([this](const std::vector<graphene::db::object_id_type>& ids){ on_changed_objects(ids); });
|
||||
_removed_objects_conn = db.removed_objects.connect([this](const std::vector<const graphene::db::object*>& objs){ on_removed_objects(objs); });
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void debug_witness_plugin::on_changed_objects( const std::vector<graphene::db::object_id_type>& ids )
|
||||
{
|
||||
|
||||
if( _json_object_stream && (ids.size() > 0) )
|
||||
{
|
||||
const chain::database& db = database();
|
||||
for( const graphene::db::object_id_type& oid : ids )
|
||||
{
|
||||
const graphene::db::object* obj = db.find_object( oid );
|
||||
if( obj == nullptr )
|
||||
{
|
||||
(*_json_object_stream) << "{\"id\":" << fc::json::to_string( oid ) << "}\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
(*_json_object_stream) << fc::json::to_string( obj->to_variant() ) << '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void debug_witness_plugin::on_removed_objects( const std::vector<const graphene::db::object*> objs )
|
||||
{
|
||||
|
||||
/*
|
||||
if( _json_object_stream )
|
||||
{
|
||||
for( const graphene::db::object* obj : objs )
|
||||
{
|
||||
(*_json_object_stream) << "{\"id\":" << fc::json::to_string( obj->id ) << "}\n";
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void debug_witness_plugin::on_applied_block( const graphene::chain::signed_block& b )
|
||||
{
|
||||
if( _json_object_stream )
|
||||
{
|
||||
(*_json_object_stream) << "{\"bn\":" << fc::to_string( b.block_num() ) << "}\n";
|
||||
}
|
||||
}
|
||||
|
||||
void debug_witness_plugin::set_json_object_stream( const std::string& filename )
|
||||
{
|
||||
if( _json_object_stream )
|
||||
{
|
||||
_json_object_stream->close();
|
||||
_json_object_stream.reset();
|
||||
}
|
||||
_json_object_stream = std::make_shared< std::ofstream >( filename );
|
||||
}
|
||||
|
||||
void debug_witness_plugin::flush_json_object_stream()
|
||||
{
|
||||
if( _json_object_stream )
|
||||
_json_object_stream->flush();
|
||||
}
|
||||
|
||||
void debug_witness_plugin::plugin_shutdown()
|
||||
{
|
||||
if( _json_object_stream )
|
||||
{
|
||||
_json_object_stream->close();
|
||||
_json_object_stream.reset();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,6 +71,17 @@ class debug_api
|
|||
// not implemented
|
||||
//void save_db( std::string db_path );
|
||||
|
||||
/**
|
||||
* Stream objects to file. (Hint: Create with mkfifo and pipe it to a script)
|
||||
*/
|
||||
|
||||
void debug_stream_json_objects( std::string filename );
|
||||
|
||||
/**
|
||||
* Flush streaming file.
|
||||
*/
|
||||
void debug_stream_json_objects_flush();
|
||||
|
||||
std::shared_ptr< detail::debug_api_impl > my;
|
||||
};
|
||||
|
||||
|
|
@ -80,4 +91,6 @@ FC_API(graphene::debug_witness::debug_api,
|
|||
(debug_push_blocks)
|
||||
(debug_generate_blocks)
|
||||
(debug_update_object)
|
||||
(debug_stream_json_objects)
|
||||
(debug_stream_json_objects_flush)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ public:
|
|||
virtual void plugin_startup() override;
|
||||
virtual void plugin_shutdown() override;
|
||||
|
||||
void set_json_object_stream( const std::string& filename );
|
||||
void flush_json_object_stream();
|
||||
|
||||
private:
|
||||
|
||||
void on_changed_objects( const std::vector<graphene::db::object_id_type>& ids );
|
||||
|
|
@ -54,6 +57,11 @@ private:
|
|||
boost::program_options::variables_map _options;
|
||||
|
||||
std::map<chain::public_key_type, fc::ecc::private_key> _private_keys;
|
||||
|
||||
std::shared_ptr< std::ofstream > _json_object_stream;
|
||||
boost::signals2::scoped_connection _applied_block_conn;
|
||||
boost::signals2::scoped_connection _changed_objects_conn;
|
||||
boost::signals2::scoped_connection _removed_objects_conn;
|
||||
};
|
||||
|
||||
} } //graphene::debug_witness_plugin
|
||||
|
|
|
|||
|
|
@ -1406,6 +1406,7 @@ class wallet_api
|
|||
void dbg_make_mia(string creator, string symbol);
|
||||
void dbg_push_blocks( std::string src_filename, uint32_t count );
|
||||
void dbg_generate_blocks( std::string debug_wif_key, uint32_t count );
|
||||
void dbg_stream_json_objects( const std::string& filename );
|
||||
void dbg_update_object( fc::variant_object update );
|
||||
|
||||
void flood_network(string prefix, uint32_t number_of_transactions);
|
||||
|
|
@ -1580,6 +1581,7 @@ FC_API( graphene::wallet::wallet_api,
|
|||
(dbg_make_mia)
|
||||
(dbg_push_blocks)
|
||||
(dbg_generate_blocks)
|
||||
(dbg_stream_json_objects)
|
||||
(dbg_update_object)
|
||||
(flood_network)
|
||||
(network_add_nodes)
|
||||
|
|
|
|||
|
|
@ -2343,18 +2343,28 @@ public:
|
|||
{
|
||||
use_debug_api();
|
||||
(*_remote_debug)->debug_push_blocks( src_filename, count );
|
||||
(*_remote_debug)->debug_stream_json_objects_flush();
|
||||
}
|
||||
|
||||
void dbg_generate_blocks( const std::string& debug_wif_key, uint32_t count )
|
||||
{
|
||||
use_debug_api();
|
||||
(*_remote_debug)->debug_generate_blocks( debug_wif_key, count );
|
||||
(*_remote_debug)->debug_stream_json_objects_flush();
|
||||
}
|
||||
|
||||
void dbg_stream_json_objects( const std::string& filename )
|
||||
{
|
||||
use_debug_api();
|
||||
(*_remote_debug)->debug_stream_json_objects( filename );
|
||||
(*_remote_debug)->debug_stream_json_objects_flush();
|
||||
}
|
||||
|
||||
void dbg_update_object( const fc::variant_object& update )
|
||||
{
|
||||
use_debug_api();
|
||||
(*_remote_debug)->debug_update_object( update );
|
||||
(*_remote_debug)->debug_stream_json_objects_flush();
|
||||
}
|
||||
|
||||
void use_network_node_api()
|
||||
|
|
@ -3264,6 +3274,11 @@ void wallet_api::dbg_generate_blocks( std::string debug_wif_key, uint32_t count
|
|||
my->dbg_generate_blocks( debug_wif_key, count );
|
||||
}
|
||||
|
||||
void wallet_api::dbg_stream_json_objects( const std::string& filename )
|
||||
{
|
||||
my->dbg_stream_json_objects( filename );
|
||||
}
|
||||
|
||||
void wallet_api::dbg_update_object( fc::variant_object update )
|
||||
{
|
||||
my->dbg_update_object( update );
|
||||
|
|
|
|||
Loading…
Reference in a new issue