X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fperiodicdbmaintenance.cpp;fp=src%2Ffreenet%2Fperiodicdbmaintenance.cpp;h=22a4ccff800b30097c0a0e456d5c8f24151fa264;hb=b9c3763a932cebaa015a27fe111017f6f34dfbaa;hp=0000000000000000000000000000000000000000;hpb=37a8d59548287dcad78ef00e7b18058721eb9935;p=fms.git diff --git a/src/freenet/periodicdbmaintenance.cpp b/src/freenet/periodicdbmaintenance.cpp new file mode 100644 index 0000000..22a4ccf --- /dev/null +++ b/src/freenet/periodicdbmaintenance.cpp @@ -0,0 +1,99 @@ +#include "../../include/freenet/periodicdbmaintenance.h" + +#ifdef XMEM + #include +#endif + +PeriodicDBMaintenance::PeriodicDBMaintenance() +{ + m_check10mins.SetToGMTime(); + m_check30mins.SetToGMTime(); + m_check1hour.SetToGMTime(); + m_check6hours.SetToGMTime(); + m_check1day.SetToGMTime(); + + // set back times so they will do their first maintenance soon ( within the next hour ) - stagger so not all run at once + m_check1hour.Add(0,-45); + m_check6hours.Add(0,0,-5); + m_check1day.Add(0,0,-23); + +} + +void PeriodicDBMaintenance::Do10MinuteMaintenance() +{ + + m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do10MinuteMaintenance"); +} + +void PeriodicDBMaintenance::Do30MinuteMaintenance() +{ + + m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do30MinuteMaintenance"); +} + +void PeriodicDBMaintenance::Do1HourMaintenance() +{ + // recalculate all trust levels - this is CPU instensive + // TODO - will probably have to change this to do 1 identity at a time as this locks that database for the duration + m_db->Execute("UPDATE tblIdentity SET PeerMessageTrust=(SELECT PeerMessageTrust FROM vwCalculatedPeerTrust WHERE TargetIdentityID=IdentityID), PeerTrustListTrust=(SELECT PeerTrustListTrust FROM vwCalculatedPeerTrust WHERE TargetIdentityID=IdentityID);"); + + m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do1HourMaintenance"); +} + +void PeriodicDBMaintenance::Do6HourMaintenance() +{ + + m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do6HourMaintenance"); +} + +void PeriodicDBMaintenance::Do1DayMaintenance() +{ + DateTime date; + + // delete all puzzles 2 or more days old + date.SetToGMTime(); + date.Add(0,0,0,-2); + m_db->Execute("DELETE FROM tblIntroductionPuzzleInserts WHERE Day<='"+date.Format("%Y-%m-%d")+"';"); + m_db->Execute("DELETE FROM tblIntroductionPuzzleRequests WHERE Day<='"+date.Format("%Y-%m-%d")+"';"); + + m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do1DayMaintenance"); + +} + +void PeriodicDBMaintenance::Process() +{ + DateTime now; + now.SetToGMTime(); + + if(m_check10mins<=(now-((1.0/1440.0)*10.0))) + { + Do10MinuteMaintenance(); + m_check10mins=now; + } + if(m_check30mins<=(now-((1.0/1440.0)*30.0))) + { + Do30MinuteMaintenance(); + m_check30mins=now; + } + if(m_check1hour<=(now-(1.0/24.0))) + { + Do1HourMaintenance(); + m_check1hour=now; + } + if(m_check6hours<=(now-(1.0/4.0))) + { + Do6HourMaintenance(); + m_check6hours=now; + } + if(m_check1day<=(now-(1.0))) + { + Do1DayMaintenance(); + m_check1day=now; + } + +} + +void PeriodicDBMaintenance::RegisterWithThread(FreenetMasterThread *thread) +{ + thread->RegisterPeriodicProcessor(this); +}