[Django] #35364: AdminEmailHandler wastes work when ADMINS isn’t set

15 views
Skip to first unread message

Django

unread,
Apr 9, 2024, 9:38:16 AM4/9/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
------------------------------------------------+------------------------
Reporter: Adam Johnson | Owner: (none)
Type: Cleanup/optimization | Status: new
Component: Error reporting | Version: dev
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------------+------------------------
`AdminEmailHandler.emit()` does a lot of work to assemble the message it
passes to `mail_admins`. If `settings.ADMINS` is empty, `mail_admins()`
returns instantly, wasting all the message-creation work. It’s quite
common to not configure `ADMINS`, whether in lieu of more advanced tools
like Sentry, or during tests.

In a quick benchmark on my M1 Mac Pro on Python 3.11, the overhead is
~2.5ms:

{{{
In [1]: import logging

In [2]: logger = logging.getLogger('django')

In [3]: %timeit logger.error("Yada")
...
2.78 ms ± 75.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [4]: logger = logging.getLogger('example')

In [5]: %timeit logger.error("Yada")
...
8.37 µs ± 38.9 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops
each)
}}}

This can be avoided by adding an initial check to
`AdminEmailHandler.emit()`.
--
Ticket URL: <https://code.djangoproject.com/ticket/35364>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Apr 9, 2024, 9:38:22 AM4/9/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Adam
Type: | Johnson
Cleanup/optimization | Status: assigned
Component: Error reporting | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Adam Johnson):

* owner: (none) => Adam Johnson
* status: new => assigned

--
Ticket URL: <https://code.djangoproject.com/ticket/35364#comment:1>

Django

unread,
Apr 9, 2024, 10:46:13 AM4/9/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Adam
Type: | Johnson
Cleanup/optimization | Status: assigned
Component: Error reporting | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Natalia Bidart):

* stage: Unreviewed => Accepted

Comment:

Makes sense, thank you!
--
Ticket URL: <https://code.djangoproject.com/ticket/35364#comment:2>

Django

unread,
Apr 9, 2024, 10:50:11 AM4/9/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Adam
Type: | Johnson
Cleanup/optimization | Status: assigned
Component: Error reporting | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Adam Johnson):

* has_patch: 0 => 1

--
Ticket URL: <https://code.djangoproject.com/ticket/35364#comment:3>

Django

unread,
Apr 10, 2024, 4:53:44 AM4/10/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Adam
Type: | Johnson
Cleanup/optimization | Status: assigned
Component: Error reporting | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* stage: Accepted => Ready for checkin

Comment:

[https://github.com/django/django/pull/18059 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/35364#comment:4>

Django

unread,
Apr 12, 2024, 4:37:37 AM4/12/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Adam
Type: | Johnson
Cleanup/optimization | Status: assigned
Component: Error reporting | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Sarah Boyce <42296566+sarahboyce@…>):

In [changeset:"b0f2289426d2af0d3f31e50bd8d5e60a49d62710" b0f2289]:
{{{#!CommitTicketReference repository=""
revision="b0f2289426d2af0d3f31e50bd8d5e60a49d62710"
Refs #35364 -- Tested AdminEmailHandler with empty ADMINS.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35364#comment:5>

Django

unread,
Apr 12, 2024, 4:37:38 AM4/12/24
to django-...@googlegroups.com
#35364: AdminEmailHandler wastes work when ADMINS isn’t set
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Adam
Type: | Johnson
Cleanup/optimization | Status: closed
Component: Error reporting | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Sarah Boyce <42296566+sarahboyce@…>):

* resolution: => fixed
* status: assigned => closed

Comment:

In [changeset:"50a702f3fd87e271945aa5e88ae8a39d7a2149fd" 50a702f]:
{{{#!CommitTicketReference repository=""
revision="50a702f3fd87e271945aa5e88ae8a39d7a2149fd"
Fixed #35364 -- Stopped AdminEmailHandler rendering email unnecessarily.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35364#comment:6>
Reply all
Reply to author
Forward
0 new messages