]> git.openstreetmap.org Git - nominatim.git/commitdiff
take redirects into account for request limits
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 11 May 2018 19:50:22 +0000 (21:50 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 11 May 2018 19:50:22 +0000 (21:50 +0200)
utils/cron_ipanalyse.py

index 1ca2267fa4144081020db88545538fb01e76559c..4c66b001a908635770b1a3b2644e1534c0945d6c 100755 (executable)
@@ -223,6 +223,7 @@ class BlockList:
 class IPstats:
 
     def __init__(self):
 class IPstats:
 
     def __init__(self):
+        self.redirected = 0
         self.short_total = 0
         self.short_api = 0
         self.long_total = 0
         self.short_total = 0
         self.short_api = 0
         self.long_total = 0
@@ -231,6 +232,8 @@ class IPstats:
         self.bad_ua = False
 
     def add_long(self, logentry):
         self.bad_ua = False
 
     def add_long(self, logentry):
+        if logentry.retcode == 301:
+            return
         self.long_total += 1
         if logentry.request is not None:
             self.long_api += 1
         self.long_total += 1
         if logentry.request is not None:
             self.long_api += 1
@@ -240,6 +243,9 @@ class IPstats:
 
     def add_short(self, logentry):
         self.short_total += 1
 
     def add_short(self, logentry):
         self.short_total += 1
+        if logentry.retcode == 301:
+            self.redirected += 1
+            return
         if logentry.request is not None:
             self.short_api += 1
         self.add_long(logentry)
         if logentry.request is not None:
             self.short_api += 1
         self.add_long(logentry)
@@ -255,7 +261,9 @@ class IPstats:
             # deblock only if the IP has been really quiet
             # (properly catches the ones that simply ignore the HTTP error)
             return None if self.long_total < 20 else 'block'
             # deblock only if the IP has been really quiet
             # (properly catches the ones that simply ignore the HTTP error)
             return None if self.long_total < 20 else 'block'
-        if self.long_api > BLOCK_UPPER or self.short_api > BLOCK_UPPER / 3:
+        if self.long_api > BLOCK_UPPER \
+            or self.short_api > BLOCK_UPPER / 3 \
+            or self.short_total == self.redirected:
                 # client totally overdoing it
                 return 'block'
         if was_bulked:
                 # client totally overdoing it
                 return 'block'
         if was_bulked: