mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
[V3 Sentry] Allow toggling of Sentry logging (#1214)
* Refactor sentry to allow toggle * Rename sentry module * Protect sentry manager * Fix tests * Fix EOF newlines * Add docstrings
This commit is contained in:
parent
e18f94c17d
commit
73c08da037
@ -10,7 +10,6 @@ from redbot.core.data_manager import load_basic_configuration, config_file
|
|||||||
from redbot.core.json_io import JsonIO
|
from redbot.core.json_io import JsonIO
|
||||||
from redbot.core.global_checks import init_global_checks
|
from redbot.core.global_checks import init_global_checks
|
||||||
from redbot.core.events import init_events
|
from redbot.core.events import init_events
|
||||||
from redbot.core.sentry_setup import init_sentry_logging
|
|
||||||
from redbot.core.cli import interactive_config, confirm, parse_cli_flags, ask_sentry
|
from redbot.core.cli import interactive_config, confirm, parse_cli_flags, ask_sentry
|
||||||
from redbot.core.core_commands import Core
|
from redbot.core.core_commands import Core
|
||||||
from redbot.core.dev_commands import Dev
|
from redbot.core.dev_commands import Dev
|
||||||
@ -129,7 +128,7 @@ def main():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
loop.run_until_complete(_get_prefix_and_token(red, tmp_data))
|
loop.run_until_complete(_get_prefix_and_token(red, tmp_data))
|
||||||
if tmp_data['enable_sentry']:
|
if tmp_data['enable_sentry']:
|
||||||
init_sentry_logging(sentry_log)
|
red.enable_sentry()
|
||||||
cleanup_tasks = True
|
cleanup_tasks = True
|
||||||
try:
|
try:
|
||||||
loop.run_until_complete(red.start(token, bot=not cli_flags.not_bot))
|
loop.run_until_complete(red.start(token, bot=not cli_flags.not_bot))
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
|
import logging
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from importlib.machinery import ModuleSpec
|
from importlib.machinery import ModuleSpec
|
||||||
@ -17,7 +18,7 @@ from . import (
|
|||||||
rpc
|
rpc
|
||||||
)
|
)
|
||||||
from .help_formatter import Help, help as help_
|
from .help_formatter import Help, help as help_
|
||||||
|
from .sentry import SentryManager
|
||||||
from .utils import TYPE_CHECKING
|
from .utils import TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@ -102,6 +103,22 @@ class RedBase(BotBase, RpcMethodMixin):
|
|||||||
|
|
||||||
self.add_command(help_)
|
self.add_command(help_)
|
||||||
|
|
||||||
|
self._sentry_mgr = None
|
||||||
|
|
||||||
|
def enable_sentry(self):
|
||||||
|
"""Enable Sentry logging for Red."""
|
||||||
|
if self._sentry_mgr is None:
|
||||||
|
sentry_log = logging.getLogger('red.sentry')
|
||||||
|
sentry_log.setLevel(logging.WARNING)
|
||||||
|
self._sentry_mgr = SentryManager(sentry_log)
|
||||||
|
self._sentry_mgr.enable()
|
||||||
|
|
||||||
|
def disable_sentry(self):
|
||||||
|
"""Disable Sentry logging for Red."""
|
||||||
|
if self._sentry_mgr is None:
|
||||||
|
return
|
||||||
|
self._sentry_mgr.disable()
|
||||||
|
|
||||||
async def _dict_abuse(self, indict):
|
async def _dict_abuse(self, indict):
|
||||||
"""
|
"""
|
||||||
Please blame <@269933075037814786> for this.
|
Please blame <@269933075037814786> for this.
|
||||||
|
|||||||
@ -476,6 +476,23 @@ class Core:
|
|||||||
|
|
||||||
await ctx.send(_("Locale has been set."))
|
await ctx.send(_("Locale has been set."))
|
||||||
|
|
||||||
|
@_set.command()
|
||||||
|
@checks.is_owner()
|
||||||
|
async def sentry(self, ctx: commands.Context, on_or_off: bool):
|
||||||
|
"""Enable or disable Sentry logging.
|
||||||
|
|
||||||
|
Sentry is the service Red uses to manage error reporting. This should
|
||||||
|
be disabled if you have made your own modifications to the redbot
|
||||||
|
package.
|
||||||
|
"""
|
||||||
|
await ctx.bot.db.enable_sentry.set(on_or_off)
|
||||||
|
if on_or_off:
|
||||||
|
ctx.bot.enable_sentry()
|
||||||
|
await ctx.send(_("Done. Sentry logging is now enabled."))
|
||||||
|
else:
|
||||||
|
ctx.bot.disable_sentry()
|
||||||
|
await ctx.send(_("Done. Sentry logging is now disabled."))
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.cooldown(1, 60, commands.BucketType.user)
|
@commands.cooldown(1, 60, commands.BucketType.user)
|
||||||
async def contact(self, ctx, *, message: str):
|
async def contact(self, ctx, *, message: str):
|
||||||
@ -705,4 +722,3 @@ class Core:
|
|||||||
async def rpc_reload(self, request):
|
async def rpc_reload(self, request):
|
||||||
await self.rpc_unload(request)
|
await self.rpc_unload(request)
|
||||||
await self.rpc_load(request)
|
await self.rpc_load(request)
|
||||||
|
|
||||||
|
|||||||
30
redbot/core/sentry.py
Normal file
30
redbot/core/sentry.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import logging
|
||||||
|
from raven import Client
|
||||||
|
from raven.handlers.logging import SentryHandler
|
||||||
|
|
||||||
|
from redbot.core import __version__
|
||||||
|
|
||||||
|
__all__ = ("SentryManager",)
|
||||||
|
|
||||||
|
|
||||||
|
class SentryManager:
|
||||||
|
"""Simple class to manage sentry logging for Red."""
|
||||||
|
|
||||||
|
def __init__(self, logger: logging.Logger):
|
||||||
|
self.client = Client(
|
||||||
|
dsn=("https://62402161d4cd4ef18f83b16f3e22a020:9310ef55a502442598203205a84da2bb@"
|
||||||
|
"sentry.io/253983"),
|
||||||
|
release=__version__,
|
||||||
|
include_paths=['redbot'],
|
||||||
|
enable_breadcrumbs=False
|
||||||
|
)
|
||||||
|
self.handler = SentryHandler(self.client)
|
||||||
|
self.logger = logger
|
||||||
|
|
||||||
|
def enable(self):
|
||||||
|
"""Enable error reporting for Sentry."""
|
||||||
|
self.logger.addHandler(self.handler)
|
||||||
|
|
||||||
|
def disable(self):
|
||||||
|
"""Disable error reporting for Sentry."""
|
||||||
|
self.logger.removeHandler(self.handler)
|
||||||
@ -1,26 +0,0 @@
|
|||||||
from raven import Client
|
|
||||||
from raven.handlers.logging import SentryHandler
|
|
||||||
|
|
||||||
from redbot.core import __version__
|
|
||||||
|
|
||||||
__all__ = ("init_sentry_logging",)
|
|
||||||
|
|
||||||
|
|
||||||
include_paths = (
|
|
||||||
'redbot',
|
|
||||||
)
|
|
||||||
|
|
||||||
client = None
|
|
||||||
|
|
||||||
|
|
||||||
def init_sentry_logging(logger):
|
|
||||||
global client
|
|
||||||
client = Client(
|
|
||||||
dsn=("https://62402161d4cd4ef18f83b16f3e22a020:9310ef55a502442598203205a84da2bb@"
|
|
||||||
"sentry.io/253983"),
|
|
||||||
release=__version__,
|
|
||||||
include_paths=['redbot'],
|
|
||||||
enable_breadcrumbs=False
|
|
||||||
)
|
|
||||||
handler = SentryHandler(client)
|
|
||||||
logger.addHandler(handler)
|
|
||||||
@ -1,12 +1,12 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from redbot.core import sentry_setup
|
from redbot.core import sentry
|
||||||
|
|
||||||
|
|
||||||
def test_sentry_capture(red):
|
def test_sentry_capture(red):
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
sentry_setup.init_sentry_logging(log)
|
mgr = sentry.SentryManager(log)
|
||||||
|
|
||||||
assert sentry_setup.client is not None
|
assert mgr.client is not None
|
||||||
|
|
||||||
sentry_setup.client.captureMessage("Message from test_sentry module.")
|
mgr.client.captureMessage("Message from test_sentry module.")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user