मैं ईमेल के माध्यम से django त्रुटि रिपोर्टिंग का उपयोग करता हूं। यह आमतौर पर एक बहुत उपयोगी सुविधा है, सिवाय इसके कि अब हमारे पास 5 मिनट का डाटाबेस डाउनटाइम है और मुझे 2000 ईमेल मिल गए हैं। क्या कोई मिडलवेयर है जो मुझे ईमेल की संख्या को थ्रॉटल करने में मदद करेगा django प्रति मिनट भेज सकता है?Django त्रुटि ईमेल को कैसे थ्रॉटल करें
उत्तर
एक उदाहरण के रूप Gattster के महान उत्तर का उपयोग करना, मैं Django में निर्मित कैश कार्यों के आधार पर एक सरल कार्यान्वयन लिखा था।
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'fully.qualified.path.to.handler.ThrottledAdminEmailHandler'
}
},
'loggers': {
'django': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
जहां परिवर्तन केवल परिवर्तन के लिए है:
# -*- coding: utf-8 -*-
from django.utils.log import AdminEmailHandler
from django.core.cache import cache
class ThrottledAdminEmailHandler(AdminEmailHandler):
PERIOD_LENGTH_IN_SECONDS = 10
MAX_EMAILS_IN_PERIOD = 1
COUNTER_CACHE_KEY = "email_admins_counter"
def increment_counter(self):
try:
cache.incr(self.COUNTER_CACHE_KEY)
except ValueError:
cache.set(self.COUNTER_CACHE_KEY, 1, self.PERIOD_LENGTH_IN_SECONDS)
return cache.get(self.COUNTER_CACHE_KEY)
def emit(self, record):
try:
counter = self.increment_counter()
except Exception:
pass
else:
if counter > self.MAX_EMAILS_IN_PERIOD:
return
super(ThrottledAdminEmailHandler, self).emit(record)
और लॉगिंग विन्यास काम करने के लिए इस हैंडलर के लिए Django 1.9 में बदल दिया गया है और साथ ही, इसलिए क्रम में, आप लॉगिंग कॉन्फ़िगर करने के लिए के रूप में की जरूरत है django.request
से django
से लॉगर का नाम। यदि आप लॉगिंग सिस्टम प्रलेखन में देखते हैं, तो यह शायद logging filter को कार्यान्वित करके क्लीनर (?) तरीके से हासिल किया जा सकता है।
मुझे लगता है डेटाबेस डाउनटाइम जानबूझकर नहीं किया गया था, जो मामले में आप शायद maintenance mode किसी तरह का में अपने Django प्रक्रिया रख सकते हैं या इसे ऑफ़लाइन ले लिया है चाहिए?
अन्यथा, हमेशा की तरह मेल एप्लिकेशन django-mailer है बस आप मदद की है हो सकता है, क्योंकि यह आपके डेटाबेस में जाने वाली मेल को संग्रहीत करता है और इस तरह विफल रही है | :)
तुम सच में की सीमा यह सबसे अच्छा करने के लिए किया जाएगा रेट करने के लिए की जरूरत है तो आपके एमटीए में। यह सिर्फ एमटीए प्रक्रिया के हिस्से के फड़फड़ाने पर this patch for qmail to throttle incoming connections as a means of fighting spam
शायद Nagios' page का उपयोग कर की तरह मेल या कुछ और विदेशी भेजने के लिए उत्तरदायी लायक है पढ़ने
एक विकल्प को बंद करने की क्षमता के लिए अर्थ हो सकता है ErrorStack की तरह कुछ करने के लिए स्विच करने के लिए है त्रुटि की सूचना देना। मैंने आपके प्रोजेक्ट में एकीकृत करने के लिए बेवकूफ-सरल बनाने के लिए django app लिखा था।
यह एक अच्छा दृष्टिकोण की तरह लगता है। क्या आपने hoptoad.com का भी मूल्यांकन किया था? मुझे यह तय करने की ज़रूरत है कि कौन सी सेवा चुननी है। – Gattster
नहीं, मैंने विस्तार से हॉपटैड को नहीं देखा है। –
मैंने निम्नलिखित करके 10 मिनट प्रति मिनट तक ईमेल सीमित कर दिया। यह मेरे इंस्टॉलेशन के लिए अद्वितीय एक लाल कनेक्शन कनेक्शन का उपयोग करता है। मैं आपकी आवश्यकताओं के अनुरूप incr_counter फ़ंक्शन को संशोधित करने का सुझाव देता हूं। सुरक्षित होने के लिए, इसके लिए सीधे लाल या मेमकैच कनेक्शन का उपयोग करें और किसी भी django.cache wrappers नहीं।
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'error_email_limiter.handler.MyAdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
error_email_limiter/handlers.py
class MyAdminEmailHandler(AdminEmailHandler):
def incr_counter(self):
c = get_redis_connection()
key = self._redis_key()
res = c.incr(key)
c.expire(key, 300)
return res
def _redis_key(self):
return time.strftime('error_email_limiter:%Y-%m-%d_%H:%M',
datetime.datetime.now().timetuple())
def emit(self, record):
try:
ctr = self.incr_counter()
except Exception:
pass
else:
if ctr >= 10:
return
super(MyAdminEmailHandler, self).emit(record)
- 1. जावा वेबपैप में लॉगिन प्रयासों को कैसे थ्रॉटल करें?
- 2. django-पंजीकरण ऐप में ईमेल सक्रियण को अक्षम कैसे करें?
- 3. Django ईमेल
- 4. जावा वेब एप्लिकेशन में webservice कॉल को कैसे थ्रॉटल करें
- 5. Django ईमेल digest
- 6. django- पंजीकरण प्रमाणीकरण ईमेल
- 7. log4j SMTPAppender - एकाधिक त्रुटि संदेशों को ईमेल करें
- 8. Django: अद्वितीय त्रुटि संदेश को ओवरराइड कैसे करें?
- 9. डब्ल्यूसीएफ थ्रॉटल सेटिंग्स
- 10. .NET थ्रॉटल एल्गोरिदम
- 11. Django पासवर्ड रीसेट ईमेल विषय
- 12. Django में 10,000 उपयोगकर्ताओं को ईमेल कैसे भेजता है?
- 13. Django auth उपयोगकर्ता ईमेल क्षेत्र
- 14. Django: [ईमेल संरक्षित] व्यवस्थापक में
- 15. ईमेल सर्वर प्रमाणीकरण त्रुटि
- 16. उल्का ईमेल त्रुटि
- 17. कोडनिर्देशक ईमेल त्रुटि हैंडलिंग
- 18. ईमेल लिंक को अक्षम कैसे करें?
- 19. "थ्रॉटल" एसिंक डाउनलोड F #
- 20. थ्रॉटल Rx.Observable मूल्यों को छोड़ दिए बिना
- 21. Django को Heroku (Psycopg2 त्रुटि)
- 22. मैं अपनी साइट के एपीआई उपयोगकर्ताओं को कैसे थ्रॉटल करूं?
- 23. ओपनशफ्ट पर Django को कैसे कॉन्फ़िगर करें?
- 24. एक Django FileField को अटैचमेंट के रूप में कैसे ईमेल करें?
- 25. फ़ॉर्म में ईमेल पते के डोमेन को कैसे सत्यापित करें?
- 26. django ट्रेसबैक त्रुटि में django लॉग इन उपयोगकर्ता शामिल करें
- 27. क्रॉस धागा अपवाद RX थ्रॉटल
- 28. Django: व्यवस्थापक सत्यापन त्रुटि
- 29. Django, ReportLab पीडीएफ जेनरेशन ईमेल से जुड़े
- 30. django-पंजीकरण - मैं ईमेल में example.com कैसे बदलूं?
अच्छा। मुझे यह पसंद है कि यह रेडिस कनेक्शन पर निर्भर नहीं है और django के कोर कैश फ्रेमवर्क का उपयोग करता है – Gattster
'get_cache' अब हटा दिया गया है (Django 1.9 के रूप में)। 'django.core.cache आयात कैश' से' का उपयोग कर - लेकिन कई धागे या प्रक्रियाओं में एक समस्या प्रतीत होती है ... अभी भी काम कर रहा है ... – sebhaase
Django 1.9 डिफ़ॉल्ट लॉगिंग कॉन्फ़िगरेशन बदल गया ताकि Django संबंधित सामग्री है 'django' लॉगर और ** ** ** django.request' लॉगर के माध्यम से लॉग इन के रूप में लॉग इन के रूप में लॉग इन किया गया है। सुनिश्चित करें कि आप इसे ठीक करते हैं यदि आप प्रदान की गई config @Gattster को कॉपी/पेस्ट करने जा रहे हैं। '' ' 'वालों': लॉगिंग अनुभाग की तरह दिखना चाहिए { 'Django': { 'संचालकों': [ 'mail_admins'], 'स्तर': 'त्रुटि', 'का प्रचार': यह सच है , }, } '' – miha