01a76c7dd1087dfa67db052ac2eba870512c30cb
[fms.git] / src / freenet / periodicdbmaintenance.cpp
1 #include "../../include/freenet/periodicdbmaintenance.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 PeriodicDBMaintenance::PeriodicDBMaintenance()\r
8 {\r
9         m_check10mins.SetToGMTime();\r
10         m_check30mins.SetToGMTime();\r
11         m_check1hour.SetToGMTime();\r
12         m_check6hours.SetToGMTime();\r
13         m_check1day.SetToGMTime();\r
14 \r
15         // set back times so they will do their first maintenance soon ( within the next hour ) - stagger so not all run at once\r
16         m_check30mins.Add(0,-5);\r
17         m_check1hour.Add(0,-42);\r
18         m_check6hours.Add(0,-1,-5);\r
19         m_check1day.Add(0,0,-23);\r
20 \r
21 }\r
22 \r
23 void PeriodicDBMaintenance::Do10MinuteMaintenance()\r
24 {\r
25 \r
26         m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do10MinuteMaintenance");\r
27 }\r
28 \r
29 void PeriodicDBMaintenance::Do30MinuteMaintenance()\r
30 {\r
31 \r
32         m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do30MinuteMaintenance");\r
33 }\r
34 \r
35 void PeriodicDBMaintenance::Do1HourMaintenance()\r
36 {\r
37         // recalculate all trust levels - this is CPU instensive\r
38         // TODO - will probably have to change this to do 1 identity at a time as this locks that database for the duration\r
39         m_db->Execute("UPDATE tblIdentity SET PeerMessageTrust=(SELECT PeerMessageTrust FROM vwCalculatedPeerTrust WHERE TargetIdentityID=IdentityID), PeerTrustListTrust=(SELECT PeerTrustListTrust FROM vwCalculatedPeerTrust WHERE TargetIdentityID=IdentityID);");\r
40 \r
41         m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do1HourMaintenance");\r
42 }\r
43 \r
44 void PeriodicDBMaintenance::Do6HourMaintenance()\r
45 {\r
46 \r
47         m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do6HourMaintenance");\r
48 }\r
49 \r
50 void PeriodicDBMaintenance::Do1DayMaintenance()\r
51 {\r
52         DateTime date;\r
53 \r
54         // delete all puzzles 2 or more days old\r
55         date.SetToGMTime();\r
56         date.Add(0,0,0,-2);\r
57         m_db->Execute("DELETE FROM tblIntroductionPuzzleInserts WHERE Day<='"+date.Format("%Y-%m-%d")+"';");\r
58         m_db->Execute("DELETE FROM tblIntroductionPuzzleRequests WHERE Day<='"+date.Format("%Y-%m-%d")+"';");\r
59 \r
60         m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"PeriodicDBMaintenance::Do1DayMaintenance");\r
61 \r
62         // delete all identities we've never seen and were added more than 20 days ago\r
63         date.SetToGMTime();\r
64         date.Add(0,0,0,-20);\r
65         m_db->Execute("DELETE FROM tblIdentity WHERE LastSeen IS NULL AND DateAdded<'"+date.Format("%Y-%m-%d")+"';");\r
66 \r
67         // delete old identity requests - we don't need them anymore\r
68         date.SetToGMTime();\r
69         date.Add(0,0,0,-2);\r
70         m_db->Execute("DELETE FROM tblIdentityRequests WHERE Day<'"+date.Format("%Y-%m-%d")+"';");\r
71 \r
72         // delete old local identity inserts - we don't need them anymore\r
73         date.SetToGMTime();\r
74         date.Add(0,0,0,-2);\r
75         m_db->Execute("DELETE FROM tblLocalIdentityInserts WHERE Day<'"+date.Format("%Y-%m-%d")+"';");\r
76 \r
77         // delete old message list inserts/requests - we don't need them anymore\r
78         date.SetToGMTime();\r
79         date.Add(0,0,0,-2);\r
80         m_db->Execute("DELETE FROM tblMessageListInserts WHERE Day<'"+date.Format("%Y-%m-%d")+"';");\r
81         m_db->Execute("DELETE FROM tblMessageListRequests WHERE Day<'"+date.Format("%Y-%m-%d")+"';");\r
82 \r
83         // delete old trust list inserts/requests - we don't need them anymore\r
84         date.SetToGMTime();\r
85         date.Add(0,0,0,-2);\r
86         m_db->Execute("DELETE FROM tblTrustListInserts WHERE Day<'"+date.Format("%Y-%m-%d")+"';");\r
87         m_db->Execute("DELETE FROM tblTrustListRequests WHERE Day<'"+date.Format("%Y-%m-%d")+"';");\r
88 \r
89         // delete trust lists from identities we aren't trusting anymore\r
90         m_db->Execute("DELETE FROM tblPeerTrust WHERE IdentityID NOT IN (SELECT IdentityID FROM tblIdentity WHERE (LocalTrustListTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalTrustListTrust')) AND (PeerTrustListTrust IS NULL OR PeerTrustListTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerTrustListTrust')));");\r
91 \r
92 }\r
93 \r
94 void PeriodicDBMaintenance::Process()\r
95 {\r
96         DateTime now;\r
97         now.SetToGMTime();\r
98         \r
99         if(m_check10mins<=(now-((1.0/1440.0)*10.0)))\r
100         {\r
101                 Do10MinuteMaintenance();\r
102                 m_check10mins=now;\r
103         }\r
104         if(m_check30mins<=(now-((1.0/1440.0)*30.0)))\r
105         {\r
106                 Do30MinuteMaintenance();\r
107                 m_check30mins=now;\r
108         }\r
109         if(m_check1hour<=(now-(1.0/24.0)))\r
110         {\r
111                 Do1HourMaintenance();\r
112                 m_check1hour=now;\r
113         }\r
114         if(m_check6hours<=(now-(1.0/4.0)))\r
115         {\r
116                 Do6HourMaintenance();\r
117                 m_check6hours=now;\r
118         }\r
119         if(m_check1day<=(now-(1.0)))\r
120         {\r
121                 Do1DayMaintenance();\r
122                 m_check1day=now;\r
123         }\r
124 \r
125 }\r
126 \r
127 void PeriodicDBMaintenance::RegisterWithThread(FreenetMasterThread *thread)\r
128 {\r
129         thread->RegisterPeriodicProcessor(this);\r
130 }\r