Quota for domain posts per minute

main
Bob Mottram 2020-03-25 10:36:37 +00:00
parent 57306c798c
commit 05ef1933b4
2 changed files with 26 additions and 2 deletions

View File

@ -5973,7 +5973,7 @@ def runDaemon(blogsInstance: bool,mediaInstance: bool, \
noreply=False,nolike=False,nopics=False, \ noreply=False,nolike=False,nopics=False, \
noannounce=False,cw=False,ocapAlways=False, \ noannounce=False,cw=False,ocapAlways=False, \
useTor=False,maxReplies=64, \ useTor=False,maxReplies=64, \
domainMaxPostsPerDay=8640,accountMaxPostsPerDay=8640, \ domainMaxPostsPerDay=8640,accountMaxPostsPerDay=864, \
allowDeletion=False,debug=False,unitTest=False, \ allowDeletion=False,debug=False,unitTest=False, \
instanceOnlySkillsSearch=False,sendThreads=[], \ instanceOnlySkillsSearch=False,sendThreads=[], \
useBlurHash=False) -> None: useBlurHash=False) -> None:

View File

@ -2042,6 +2042,11 @@ def runInboxQueue(recentPostsCache: {},maxRecentPosts: int, \
'domains': {}, 'domains': {},
'accounts': {} 'accounts': {}
} }
quotasLastUpdatePerMin=int(time.time())
quotasPerMin={
'domains': {},
'accounts': {}
}
heartBeatCtr=0 heartBeatCtr=0
queueRestoreCtr=0 queueRestoreCtr=0
@ -2105,13 +2110,21 @@ def runInboxQueue(recentPostsCache: {},maxRecentPosts: int, \
} }
quotasLastUpdateDaily=currTime quotasLastUpdateDaily=currTime
# clear the per minute quotas for maximum numbers of received posts
if currTime-quotasLastUpdatePerMin>60:
quotasPerMin={
'domains': {},
'accounts': {}
}
quotasLastUpdatePerMin=currTime
# limit the number of posts which can arrive per domain per day # limit the number of posts which can arrive per domain per day
postDomain=queueJson['postDomain'] postDomain=queueJson['postDomain']
if postDomain: if postDomain:
if domainMaxPostsPerDay>0: if domainMaxPostsPerDay>0:
if quotasDaily['domains'].get(postDomain): if quotasDaily['domains'].get(postDomain):
if quotasDaily['domains'][postDomain]>domainMaxPostsPerDay: if quotasDaily['domains'][postDomain]>domainMaxPostsPerDay:
print('DEBUG: Quota - Maximum posts for '+postDomain+' reached') print('DEBUG: Quota per day - Maximum posts for '+postDomain+' reached')
if len(queue)>0: if len(queue)>0:
queue.pop(0) queue.pop(0)
continue continue
@ -2119,6 +2132,17 @@ def runInboxQueue(recentPostsCache: {},maxRecentPosts: int, \
else: else:
quotasDaily['domains'][postDomain]=1 quotasDaily['domains'][postDomain]=1
if quotasPerMin['domains'].get(postDomain):
domainMaxPostsPerMin=int(domainMaxPostsPerDay/(24*60))
if quotasPerMin['domains'][postDomain]>domainMaxPostsPerMin:
print('DEBUG: Quota per min - Maximum posts for '+postDomain+' reached')
if len(queue)>0:
queue.pop(0)
continue
quotasPerMin['domains'][postDomain]+=1
else:
quotasPerMin['domains'][postDomain]=1
if accountMaxPostsPerDay>0: if accountMaxPostsPerDay>0:
postHandle=queueJson['postNickname']+'@'+postDomain postHandle=queueJson['postNickname']+'@'+postDomain
if quotasDaily['accounts'].get(postHandle): if quotasDaily['accounts'].get(postHandle):