]> jfr.im git - irc/UndernetIRC/gnuworld.git/commitdiff
Issue SETTIME every 30 mins if clock is off by 5+ seconds
authorHidden <redacted>
Sat, 21 Mar 2020 21:32:36 +0000 (17:32 -0400)
committerHidden <redacted>
Sat, 21 Mar 2020 21:48:02 +0000 (17:48 -0400)
mod.ccontrol/ccontrol.cc
mod.ccontrol/ccontrol.h

index 2b689002c79a02ba09f63fbeb3dd2f84a437cce3..755e46ad7d07b16f0bd7ba2f53c37117a710e3f9 100644 (file)
@@ -1277,7 +1277,7 @@ if(st.size() < 2)
                time_t lagTime;
                lagTime = (now.tv_sec - atoi(st[6])) * 1000 + (now.tv_usec - atoi(st[7])) / 1000;
                elog << "ccontrol(rpingCheck)> DEBUG: RPONG from "
-                       << tmpServer->getNetServer().getName()
+                       << tmpServer->getNetServer()->getName()
                        << " lag=" << lagTime
                        << " lastLagRecv (before now)="
                        << tmpServer->getLastLagRecv()
@@ -1285,7 +1285,7 @@ if(st.size() < 2)
                        << endl;
                tmpServer->setLagTime(lagTime);
                tmpServer->setLastLagRecv(::time(0));
-               //if ((lagTime > LAG_TOO_BIG) && ((::time(0) - tmpServer->getLastLagReport()) > LAG_REPORT_INTERVAL)) {
+               //if ((lagTime > MAX_LAG_TIME) && ((::time(0) - tmpServer->getLastLagReport()) > LAG_REPORT_INTERVAL)) {
                //      tmpServer->setLastLagReport(::time(0));
                //      MsgChanLag("[lag] %s is %ds lagged", Server->getName().c_str(), (int) (lagTime / 1000));
                //}
@@ -1323,12 +1323,17 @@ if(st.size() < 2)
                        }
                int lagTime = tmpServer->getLagTime();
                int timeDiff = abs(::time(0) - (atoi(st[3]) - atoi(st[4])));
-               if ((timeDiff >= MAX_TIME_DIFF) && (lagTime < 5000) && ((::time(0) - timediffServersMap[Server]) > TIMEDIFF_REPORT_INTERVAL))
+               if ((timeDiff >= MAX_TIME_DIFF) && (lagTime < 5000) && ((::time(0) - timediffServersMap[Server->getName()]) > TIMEDIFF_REPORT_INTERVAL))
                        {
                        MsgChanLog("Time diff for %s: %ds", tmpServer->getName().c_str(), timeDiff);
-                       timediffServersMap[Server] = ::time(0);
+                       timediffServersMap[Server->getName()] = ::time(0);
                        }
                //MsgChanLog("Message: %s", Message.c_str());
+               if ((lagTime < MAX_LAG_TIME_FOR_SETTIME) && (timeDiff > MAX_TIME_DIFF_FOR_SETTIME) && ((::time(0) - timediffServersMap[Server->getName() + "$td"]) > TIMEDIFF_SETTIME_INTERVAL))
+                       {
+                       Write("%s SE %d %s", getCharYYXXX().c_str(), ::time(0), tmpServer->getNetServer()->getCharYY().c_str());
+                       timediffServersMap[Server->getName() + "$td"] = ::time(0);
+                       }
                }
 
 if(!strcasecmp(st[1],"351"))
@@ -1852,6 +1857,7 @@ else if(timer_id == glineQueueCheck)
        processGlineQueue();
        glineQueueCheck = MyUplink->RegisterTimer(::time(0) + glineBurstInterval,this,NULL);    
        }
+
 else if (timer_id == timeCheck)
        {
        ccServer* TmpServer;
@@ -1909,7 +1915,7 @@ else if (timer_id == rpingCheck)
                                {
                                if ((::time(0) - TmpServer->getLastLagSent()) >= 2)
                                        TmpServer->setLagTime((::time(0) - TmpServer->getLastLagSent()) * 1000);
-                               if ((::time(0) - TmpServer->getLastLagSent()) >= LAG_TOO_BIG)
+                               if ((::time(0) - TmpServer->getLastLagSent()) >= MAX_LAG_TIME)
                                        {
                                        if ((::time(0) - TmpServer->getLastLagReport()) > LAG_REPORT_INTERVAL)
                                                {
@@ -1942,7 +1948,7 @@ else if (timer_id == rpingCheck)
                        Write("%s RI %s %s %d %s :%d %s", getCharYY().c_str(), TmpServer->getNetServer()->getCharYY().c_str(), getCharYYXXX().c_str(), ::time(0), s.str().c_str(), ::time(0), s.str().c_str());
                        TmpServer->setLastLagSent(::time(0));
                        elog << "ccontrol(rpingCheck)> DEBUG: Sending RPING to "
-                               << TmpServer->getNetServer().getName()
+                               << TmpServer->getNetServer()->getName()
                                << " " << ::time(0)
                                << endl;
 
index 5e7f66e4d559c0cdd5fbbf1690d5261b5d495f08..3af0071c8a35a805821282c5aa5614bed3f023ae 100644 (file)
 //Undef this if you want to log to the database
 #define LOGTOHD
 
-// If a server is >LAG_TOO_BIG ms lagged, report it to opers who have GetLag=ON set
-#define LAG_TOO_BIG 45
+// If a server is >MAX_LAG_TIME ms lagged, report it to opers who have GetLag=ON set
+#define MAX_LAG_TIME 45
 // Minimum Interval in seconds between lag reports for those with GetLag=ON
 #define LAG_REPORT_INTERVAL 300
-// Maximum time diff tolerated for a server's clock
+// Maximum time diff tolerated for a server's clock (for reporting in MsgChanLog)
 #define MAX_TIME_DIFF 120
 // Minimum Interval in seconds between Time diff reports
 #define TIMEDIFF_REPORT_INTERVAL 43200
+// Maximum time diff tolerated for a server's clock (for issuing a SETTIME)
+#define MAX_TIME_DIFF_FOR_SETTIME 4
+// Minimum Interval in seconds between SETTIMES for bad clocks
+#define TIMEDIFF_SETTIME_INTERVAL 1800
+// If a server is >MAX_LAG_TIME_FOR_SETTIME ms lagged, do NOT send SETTIME
+#define MAX_LAG_TIME_FOR_SETTIME 3000
 
 
 
@@ -279,7 +285,7 @@ protected:
        
        typedef badChannelsMapType::iterator badChannelsIterator;
 
-       typedef map<iServer*,int>       timediffServersMapType;
+       typedef map<string,int> timediffServersMapType;
        
        timediffServersMapType timediffServersMap;