mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Tidy up Validators logging
This commit is contained in:
@@ -45,12 +45,12 @@ public:
|
|||||||
virtual ~Source () { }
|
virtual ~Source () { }
|
||||||
|
|
||||||
/** The name of the source, used in diagnostic output. */
|
/** The name of the source, used in diagnostic output. */
|
||||||
virtual String name () = 0;
|
virtual std::string to_string () const = 0;
|
||||||
|
|
||||||
/** An identifier that uniquely describes the source.
|
/** An identifier that uniquely describes the source.
|
||||||
This is used for identification in the database.
|
This is used for identification in the database.
|
||||||
*/
|
*/
|
||||||
virtual String uniqueID () = 0;
|
virtual String uniqueID () const = 0;
|
||||||
|
|
||||||
/** A string that is used to recreate the source from the database entry. */
|
/** A string that is used to recreate the source from the database entry. */
|
||||||
virtual String createParam () = 0;
|
virtual String createParam () = 0;
|
||||||
@@ -77,6 +77,8 @@ public:
|
|||||||
/** @} */
|
/** @} */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<< (std::ostream& os, Source const& v);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,16 @@ struct Count
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Output to PropertyStream. */
|
||||||
|
void onWrite (PropertyStream::Map& map)
|
||||||
|
{
|
||||||
|
map["received"] = received;
|
||||||
|
map["expected"] = expected;
|
||||||
|
map["closed"] = closed;
|
||||||
|
map["percent"] = percent ();
|
||||||
|
map["percent_orphan"] = percent_orphaned();
|
||||||
|
}
|
||||||
|
|
||||||
std::size_t received; // Count of validations without a closed ledger
|
std::size_t received; // Count of validations without a closed ledger
|
||||||
std::size_t expected; // Count of closed ledgers without a validation
|
std::size_t expected; // Count of closed ledgers without a validation
|
||||||
std::size_t closed; // Number of validations with closed ledgers
|
std::size_t closed; // Number of validations with closed ledgers
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ public:
|
|||||||
Store& m_store;
|
Store& m_store;
|
||||||
Journal m_journal;
|
Journal m_journal;
|
||||||
|
|
||||||
|
// A small integer assigned to each closed ledger
|
||||||
|
//
|
||||||
|
int m_ledgerID;
|
||||||
|
|
||||||
// The chosen set of trusted validators (formerly the "UNL")
|
// The chosen set of trusted validators (formerly the "UNL")
|
||||||
//
|
//
|
||||||
bool m_rebuildChosenList;
|
bool m_rebuildChosenList;
|
||||||
@@ -87,6 +91,7 @@ public:
|
|||||||
explicit Logic (Store& store, Journal journal = Journal ())
|
explicit Logic (Store& store, Journal journal = Journal ())
|
||||||
: m_store (store)
|
: m_store (store)
|
||||||
, m_journal (journal)
|
, m_journal (journal)
|
||||||
|
, m_ledgerID (0)
|
||||||
, m_rebuildChosenList (false)
|
, m_rebuildChosenList (false)
|
||||||
, m_seenValidations (seenValidationsCacheSize)
|
, m_seenValidations (seenValidationsCacheSize)
|
||||||
, m_seenLedgerHashes (seenLedgersCacheSize)
|
, m_seenLedgerHashes (seenLedgersCacheSize)
|
||||||
@@ -133,11 +138,13 @@ public:
|
|||||||
{
|
{
|
||||||
if (findSourceByID (source->uniqueID()))
|
if (findSourceByID (source->uniqueID()))
|
||||||
{
|
{
|
||||||
m_journal.error << "Duplicate static " << source->name();
|
m_journal.error <<
|
||||||
|
"Duplicate static " << *source;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_journal.info << "Addding static " << source->name();
|
m_journal.trace <<
|
||||||
|
"Addding static " << *source;
|
||||||
|
|
||||||
Source::Results results;
|
Source::Results results;
|
||||||
source->fetch (results, m_journal);
|
source->fetch (results, m_journal);
|
||||||
@@ -145,8 +152,9 @@ public:
|
|||||||
if (results.success)
|
if (results.success)
|
||||||
{
|
{
|
||||||
std::size_t const numAdded (merge (results.list, source));
|
std::size_t const numAdded (merge (results.list, source));
|
||||||
m_journal.info << "Added " << numAdded
|
m_journal.trace <<
|
||||||
<< " trusted validators from " << source->name();
|
"Added " << numAdded <<
|
||||||
|
" trusted validators from " << *source;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -161,11 +169,13 @@ public:
|
|||||||
if (findSourceByID (source->uniqueID()))
|
if (findSourceByID (source->uniqueID()))
|
||||||
{
|
{
|
||||||
std::unique_ptr <Source> object (source);
|
std::unique_ptr <Source> object (source);
|
||||||
m_journal.error << "Duplicate " << source->name();
|
m_journal.error <<
|
||||||
|
"Duplicate " << *source;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_journal.info << "Adding " << source->name();
|
m_journal.info <<
|
||||||
|
"Adding " << *source;
|
||||||
|
|
||||||
{
|
{
|
||||||
m_sources.resize (m_sources.size() + 1);
|
m_sources.resize (m_sources.size() + 1);
|
||||||
@@ -331,20 +341,20 @@ public:
|
|||||||
m_journal.info <<
|
m_journal.info <<
|
||||||
"Fetched " << numFetched <<
|
"Fetched " << numFetched <<
|
||||||
"(" << (numAdded - numRemoved) << " new) " <<
|
"(" << (numAdded - numRemoved) << " new) " <<
|
||||||
" trusted validators from " << source->name();
|
" trusted validators from " << *source;
|
||||||
}
|
}
|
||||||
else if (numRemoved > numAdded)
|
else if (numRemoved > numAdded)
|
||||||
{
|
{
|
||||||
m_journal.info <<
|
m_journal.info <<
|
||||||
"Fetched " << numFetched <<
|
"Fetched " << numFetched <<
|
||||||
"(" << numRemoved - numAdded << " removed) " <<
|
"(" << numRemoved - numAdded << " removed) " <<
|
||||||
" trusted validators from " << source->name();
|
" trusted validators from " << *source;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_journal.info <<
|
m_journal.debug <<
|
||||||
"Fetched " << numFetched <<
|
"Fetched " << numFetched <<
|
||||||
" trusted validators from " << source->name();
|
" trusted validators from " << *source;
|
||||||
}
|
}
|
||||||
|
|
||||||
// See if we need to rebuild
|
// See if we need to rebuild
|
||||||
@@ -359,7 +369,8 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_journal.error << "Failed to fetch " << source->name();
|
m_journal.error <<
|
||||||
|
"Failed to fetch " << *source;
|
||||||
|
|
||||||
++desc.numberOfFailures;
|
++desc.numberOfFailures;
|
||||||
desc.status = SourceDesc::statusFailed;
|
desc.status = SourceDesc::statusFailed;
|
||||||
@@ -429,6 +440,16 @@ public:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
iter->second.receiveValidation (rv.ledgerHash);
|
iter->second.receiveValidation (rv.ledgerHash);
|
||||||
|
|
||||||
|
m_journal.trace <<
|
||||||
|
"New trusted validation for " << rv.ledgerHash <<
|
||||||
|
" from " << rv.publicKey;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_journal.trace <<
|
||||||
|
"Untrusted validation for " << rv.ledgerHash <<
|
||||||
|
" from " << rv.publicKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,6 +461,11 @@ public:
|
|||||||
if (! m_seenLedgerHashes.insert (ledgerHash))
|
if (! m_seenLedgerHashes.insert (ledgerHash))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
++m_ledgerID;
|
||||||
|
|
||||||
|
m_journal.trace <<
|
||||||
|
"Closed ledger " << m_ledgerID;
|
||||||
|
|
||||||
for (ValidatorTable::iterator iter (m_validators.begin());
|
for (ValidatorTable::iterator iter (m_validators.begin());
|
||||||
iter != m_validators.end(); ++iter)
|
iter != m_validators.end(); ++iter)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -158,6 +158,12 @@ public:
|
|||||||
, m_checkTimer (this)
|
, m_checkTimer (this)
|
||||||
, m_checkSources (false)
|
, m_checkSources (false)
|
||||||
{
|
{
|
||||||
|
m_journal.trace <<
|
||||||
|
"Validators constructed";
|
||||||
|
m_journal.debug <<
|
||||||
|
"Validators constructed (debug)";
|
||||||
|
m_journal.info <<
|
||||||
|
"Validators constructed (info)";
|
||||||
}
|
}
|
||||||
|
|
||||||
~ManagerImp ()
|
~ManagerImp ()
|
||||||
@@ -199,12 +205,8 @@ public:
|
|||||||
|
|
||||||
void addStaticSource (Validators::Source* source)
|
void addStaticSource (Validators::Source* source)
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
&Logic::addStatic, &m_logic, source)));
|
&Logic::addStatic, &m_logic, source)));
|
||||||
#else
|
|
||||||
delete source;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void addURL (URL const& url)
|
void addURL (URL const& url)
|
||||||
@@ -214,32 +216,24 @@ public:
|
|||||||
|
|
||||||
void addSource (Validators::Source* source)
|
void addSource (Validators::Source* source)
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
&Logic::add, &m_logic, source)));
|
&Logic::add, &m_logic, source)));
|
||||||
#else
|
|
||||||
delete source;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
void receiveValidation (ReceivedValidation const& rv)
|
void receiveValidation (ReceivedValidation const& rv)
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
if (! isStopping())
|
if (! isStopping())
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
&Logic::receiveValidation, &m_logic, rv)));
|
&Logic::receiveValidation, &m_logic, rv)));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ledgerClosed (RippleLedgerHash const& ledgerHash)
|
void ledgerClosed (RippleLedgerHash const& ledgerHash)
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
if (! isStopping())
|
if (! isStopping())
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
&Logic::ledgerClosed, &m_logic, ledgerHash)));
|
&Logic::ledgerClosed, &m_logic, ledgerHash)));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
@@ -250,42 +244,23 @@ public:
|
|||||||
|
|
||||||
void onPrepare ()
|
void onPrepare ()
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
m_journal.info << "Validators preparing";
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onStart ()
|
void onStart ()
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
m_journal.info << "Validators starting";
|
|
||||||
|
|
||||||
// Do this late so the sources have a chance to be added.
|
// Do this late so the sources have a chance to be added.
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
&ManagerImp::setCheckSources, this)));
|
&ManagerImp::setCheckSources, this)));
|
||||||
|
|
||||||
startThread();
|
startThread();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onStop ()
|
void onStop ()
|
||||||
{
|
{
|
||||||
#if RIPPLE_USE_VALIDATORS
|
|
||||||
m_journal.info << "Validators stopping";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_logic.stop ();
|
m_logic.stop ();
|
||||||
|
|
||||||
if (this->Thread::isThreadRunning())
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
{
|
&Thread::signalThreadShouldExit, this)));
|
||||||
m_journal.debug << "Signaling thread exit";
|
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
|
||||||
&Thread::signalThreadShouldExit, this)));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
stopped();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
@@ -306,7 +281,7 @@ public:
|
|||||||
PropertyStream::Set items ("sources", map);
|
PropertyStream::Set items ("sources", map);
|
||||||
for (Logic::SourceTable::const_iterator iter (m_logic.m_sources.begin());
|
for (Logic::SourceTable::const_iterator iter (m_logic.m_sources.begin());
|
||||||
iter != m_logic.m_sources.end(); ++iter)
|
iter != m_logic.m_sources.end(); ++iter)
|
||||||
items.add (iter->source->name().toStdString());
|
items.add (iter->source->to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -314,6 +289,11 @@ public:
|
|||||||
for (Logic::ValidatorTable::iterator iter (m_logic.m_validators.begin());
|
for (Logic::ValidatorTable::iterator iter (m_logic.m_validators.begin());
|
||||||
iter != m_logic.m_validators.end(); ++iter)
|
iter != m_logic.m_validators.end(); ++iter)
|
||||||
{
|
{
|
||||||
|
RipplePublicKey const& publicKey (iter->first);
|
||||||
|
Validator const& validator (iter->second);
|
||||||
|
PropertyStream::Map item (items);
|
||||||
|
item["public_key"] = publicKey.to_string();
|
||||||
|
validator.count().onWrite (item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -326,21 +306,11 @@ public:
|
|||||||
|
|
||||||
void init ()
|
void init ()
|
||||||
{
|
{
|
||||||
m_journal.debug << "Initializing";
|
|
||||||
|
|
||||||
File const file (File::getSpecialLocation (
|
File const file (File::getSpecialLocation (
|
||||||
File::userDocumentsDirectory).getChildFile ("validators.sqlite"));
|
File::userDocumentsDirectory).getChildFile ("validators.sqlite"));
|
||||||
|
|
||||||
m_journal.debug << "Opening database at '" << file.getFullPathName() << "'";
|
|
||||||
|
|
||||||
Error error (m_store.open (file));
|
Error error (m_store.open (file));
|
||||||
|
|
||||||
if (error)
|
|
||||||
{
|
|
||||||
m_journal.fatal <<
|
|
||||||
"Failed to open '" << file.getFullPathName() << "'";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! error)
|
if (! error)
|
||||||
{
|
{
|
||||||
m_logic.load ();
|
m_logic.load ();
|
||||||
@@ -351,7 +321,7 @@ public:
|
|||||||
{
|
{
|
||||||
if (timer == m_checkTimer)
|
if (timer == m_checkTimer)
|
||||||
{
|
{
|
||||||
m_journal.debug << "Check timer expired";
|
m_journal.trace << "Check timer expired";
|
||||||
m_queue.dispatch (m_context.wrap (bind (
|
m_queue.dispatch (m_context.wrap (bind (
|
||||||
&ManagerImp::setCheckSources, this)));
|
&ManagerImp::setCheckSources, this)));
|
||||||
}
|
}
|
||||||
@@ -359,7 +329,7 @@ public:
|
|||||||
|
|
||||||
void setCheckSources ()
|
void setCheckSources ()
|
||||||
{
|
{
|
||||||
m_journal.debug << "Checking sources";
|
m_journal.trace << "Checking sources";
|
||||||
m_checkSources = true;
|
m_checkSources = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,14 +339,14 @@ public:
|
|||||||
{
|
{
|
||||||
if (m_logic.fetch_one () == 0)
|
if (m_logic.fetch_one () == 0)
|
||||||
{
|
{
|
||||||
m_journal.debug << "All sources checked";
|
m_journal.trace << "All sources checked";
|
||||||
|
|
||||||
// Made it through the list without interruption!
|
// Made it through the list without interruption!
|
||||||
// Clear the flag and set the deadline timer again.
|
// Clear the flag and set the deadline timer again.
|
||||||
//
|
//
|
||||||
m_checkSources = false;
|
m_checkSources = false;
|
||||||
|
|
||||||
m_journal.debug << "Next check timer expires in " <<
|
m_journal.trace << "Next check timer expires in " <<
|
||||||
RelativeTime::seconds (checkEverySeconds);
|
RelativeTime::seconds (checkEverySeconds);
|
||||||
|
|
||||||
m_checkTimer.setExpiration (checkEverySeconds);
|
m_checkTimer.setExpiration (checkEverySeconds);
|
||||||
|
|||||||
@@ -26,5 +26,11 @@ Source::Results::Results ()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::ostream& operator<< (std::ostream& os, Source const& v)
|
||||||
|
{
|
||||||
|
os << v.to_string();
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,12 +34,15 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String name ()
|
std::string to_string () const
|
||||||
{
|
{
|
||||||
return "File: '" + m_file.getFullPathName () + "'";
|
std::stringstream ss;
|
||||||
|
ss <<
|
||||||
|
"File: '" << m_file.getFullPathName().toStdString() + "'";
|
||||||
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
String uniqueID ()
|
String uniqueID () const
|
||||||
{
|
{
|
||||||
return "File," + m_file.getFullPathName ();
|
return "File," + m_file.getFullPathName ();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,13 +36,14 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String name ()
|
std::string to_string () const
|
||||||
{
|
{
|
||||||
return m_name;
|
return m_name.toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
String uniqueID ()
|
String uniqueID () const
|
||||||
{
|
{
|
||||||
|
// VFALCO TODO This can't be right...?
|
||||||
return String::empty;
|
return String::empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,12 +37,15 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String name ()
|
std::string to_string () const
|
||||||
{
|
{
|
||||||
return "URL: '" + m_url.toString() + "'";
|
std::stringstream ss;
|
||||||
|
ss <<
|
||||||
|
"URL: '" << m_url.to_string() << "'";
|
||||||
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
String uniqueID ()
|
String uniqueID () const
|
||||||
{
|
{
|
||||||
return "URL," + m_url.toString();
|
return "URL," + m_url.toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,12 +33,19 @@ Error StoreSqdb::open (File const& file)
|
|||||||
{
|
{
|
||||||
Error error (m_session.open (file.getFullPathName ()));
|
Error error (m_session.open (file.getFullPathName ()));
|
||||||
|
|
||||||
|
m_journal.info <<
|
||||||
|
"Opening " << file.getFullPathName();
|
||||||
|
|
||||||
if (!error)
|
if (!error)
|
||||||
error = init ();
|
error = init ();
|
||||||
|
|
||||||
if (!error)
|
if (!error)
|
||||||
error = update ();
|
error = update ();
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
m_journal.error <<
|
||||||
|
"Failed opening database: " << error.what();
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,8 +213,8 @@ bool StoreSqdb::select (SourceDesc& desc)
|
|||||||
|
|
||||||
if (st.execute_and_fetch (error))
|
if (st.execute_and_fetch (error))
|
||||||
{
|
{
|
||||||
m_journal.debug << "Found record for " <<
|
m_journal.debug <<
|
||||||
desc.source->name ();
|
"Found record for " << *desc.source;
|
||||||
|
|
||||||
found = true;
|
found = true;
|
||||||
desc.lastFetchTime = Utilities::stringToTime (lastFetchTime);
|
desc.lastFetchTime = Utilities::stringToTime (lastFetchTime);
|
||||||
@@ -215,8 +222,8 @@ bool StoreSqdb::select (SourceDesc& desc)
|
|||||||
}
|
}
|
||||||
else if (! error)
|
else if (! error)
|
||||||
{
|
{
|
||||||
m_journal.info << "No previous record for " <<
|
m_journal.info <<
|
||||||
desc.source->name ();
|
"No previous record for " << *desc.source;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
@@ -296,16 +303,18 @@ void StoreSqdb::selectList (SourceDesc& desc)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_journal.error << "Invalid public key '" <<
|
m_journal.error <<
|
||||||
publicKeyString << "' found in database";
|
"Invalid public key '" << publicKeyString <<
|
||||||
|
"' found in database";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (st.fetch (error));
|
while (st.fetch (error));
|
||||||
|
|
||||||
if (! error)
|
if (! error)
|
||||||
{
|
{
|
||||||
m_journal.info << "Loaded " << desc.results.list.size() <<
|
m_journal.info <<
|
||||||
" trusted validators for " << desc.source->name ();
|
"Loaded " << desc.results.list.size() <<
|
||||||
|
" trusted validators for " << *desc.source;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,12 +104,12 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String name ()
|
std::string to_string () const
|
||||||
{
|
{
|
||||||
return uniqueID ();
|
return uniqueID().toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
String uniqueID ()
|
String uniqueID () const
|
||||||
{
|
{
|
||||||
return String ("Test,") + m_name + "," +
|
return String ("Test,") + m_name + "," +
|
||||||
String::fromNumber (m_start) + "," +
|
String::fromNumber (m_start) + "," +
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace Validators {
|
|||||||
//
|
//
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
#if 0
|
#if 1
|
||||||
// We will fetch a source at this interval
|
// We will fetch a source at this interval
|
||||||
hoursBetweenFetches = 24
|
hoursBetweenFetches = 24
|
||||||
,secondsBetweenFetches = hoursBetweenFetches * 60 * 60
|
,secondsBetweenFetches = hoursBetweenFetches * 60 * 60
|
||||||
|
|||||||
Reference in New Issue
Block a user