Sentry removal (#2439)

Resolves #2430.
This commit is contained in:
Twentysix 2019-02-11 01:19:02 +01:00 committed by Toby Harradine
parent dae75521d3
commit 889fa63aff
10 changed files with 7 additions and 199 deletions

1
.github/CODEOWNERS vendored
View File

@ -18,7 +18,6 @@ redbot/core/i18n.py @tekulvw
redbot/core/json_io.py @tekulvw
redbot/core/modlog.py @palmtree5
redbot/core/rpc.py @tekulvw
redbot/core/sentry_setup.py @Kowlin @tekulvw
redbot/core/utils/chat_formatting.py @tekulvw
redbot/core/utils/mod.py @palmtree5
redbot/core/utils/data_converter.py @mikeshardmind

28
Pipfile.lock generated
View File

@ -251,20 +251,6 @@
],
"version": "==3.13"
},
"raven": {
"hashes": [
"sha256:3fa6de6efa2493a7c827472e984ce9b020797d0da16f1db67197bcc23c8fae54",
"sha256:44a13f87670836e153951af9a3c80405d36b43097db869a36e92809673692ce4"
],
"version": "==6.10.0"
},
"raven-aiohttp": {
"hashes": [
"sha256:1444a49c93a85b8bb57c6ee649e512368dce7a26ad64ac3a01d86aa5669d77f3",
"sha256:6a34b6a9841ad0fd827eeb158edb5826c5c5bd7babe2cde2a3f23eb85313af04"
],
"version": "==0.7.0"
},
"red-discordbot": {
"editable": true,
"extras": [
@ -683,20 +669,6 @@
],
"version": "==3.13"
},
"raven": {
"hashes": [
"sha256:3fa6de6efa2493a7c827472e984ce9b020797d0da16f1db67197bcc23c8fae54",
"sha256:44a13f87670836e153951af9a3c80405d36b43097db869a36e92809673692ce4"
],
"version": "==6.10.0"
},
"raven-aiohttp": {
"hashes": [
"sha256:1444a49c93a85b8bb57c6ee649e512368dce7a26ad64ac3a01d86aa5669d77f3",
"sha256:6a34b6a9841ad0fd827eeb158edb5826c5c5bd7babe2cde2a3f23eb85313af04"
],
"version": "==0.7.0"
},
"red-discordbot": {
"editable": true,
"extras": [

View File

@ -10,7 +10,7 @@ from redbot.core.data_manager import create_temp_config, load_basic_configuratio
from redbot.core.json_io import JsonIO
from redbot.core.global_checks import init_global_checks
from redbot.core.events import init_events
from redbot.core.cli import interactive_config, confirm, parse_cli_flags, ask_sentry
from redbot.core.cli import interactive_config, confirm, parse_cli_flags
from redbot.core.core_commands import Core
from redbot.core.dev_commands import Dev
from redbot.core import __version__
@ -77,11 +77,7 @@ def init_loggers(cli_flags):
logger.addHandler(fhandler)
logger.addHandler(stdout_handler)
# Sentry stuff
sentry_logger = logging.getLogger("red.sentry")
sentry_logger.setLevel(logging.WARNING)
return logger, sentry_logger
return logger
async def _get_prefix_and_token(red, indict):
@ -92,7 +88,6 @@ async def _get_prefix_and_token(red, indict):
"""
indict["token"] = await red.db.token()
indict["prefix"] = await red.db.prefix()
indict["enable_sentry"] = await red.db.enable_sentry()
def list_instances():
@ -136,7 +131,7 @@ def main():
cli_flags.instance_name = "temporary_red"
create_temp_config()
load_basic_configuration(cli_flags.instance_name)
log, sentry_log = init_loggers(cli_flags)
log = init_loggers(cli_flags)
red = Red(cli_flags=cli_flags, description=description, pm_help=None)
init_global_checks(red)
init_events(red, cli_flags)
@ -166,8 +161,6 @@ def main():
if cli_flags.dry_run:
loop.run_until_complete(red.http.close())
sys.exit(0)
if tmp_data["enable_sentry"]:
red.enable_sentry()
try:
loop.run_until_complete(red.start(token, bot=True))
except discord.LoginFailure:
@ -184,7 +177,6 @@ def main():
red._shutdown_mode = ExitCodes.SHUTDOWN
except Exception as e:
log.critical("Fatal exception", exc_info=e)
sentry_log.critical("Fatal Exception", exc_info=e)
loop.run_until_complete(red.logout())
finally:
pending = asyncio.Task.all_tasks(loop=red.loop)

View File

@ -16,7 +16,6 @@ from . import Config, i18n, commands, errors
from .cog_manager import CogManager
from .help_formatter import Help, help as help_
from .rpc import RPCMixin
from .sentry import SentryManager
from .utils import common_filters
@ -47,7 +46,6 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
owner=None,
whitelist=[],
blacklist=[],
enable_sentry=None,
locale="en",
embeds=True,
color=15158332,
@ -120,23 +118,8 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
self.add_command(help_)
self._sentry_mgr = None
self._permissions_hooks: List[commands.CheckPredicate] = []
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):
"""
Please blame <@269933075037814786> for this.
@ -516,8 +499,6 @@ class Red(RedBase, discord.AutoShardedClient):
async def logout(self):
"""Logs out of Discord and closes all connections."""
if self._sentry_mgr:
await self._sentry_mgr.close()
await super().logout()

View File

@ -1,8 +1,6 @@
import argparse
import asyncio
from redbot.core.bot import Red
def confirm(m=""):
return input(m).lower().strip() in ("y", "yes")
@ -42,26 +40,9 @@ def interactive_config(red, token_set, prefix_set):
if prefix:
loop.run_until_complete(red.db.prefix.set([prefix]))
ask_sentry(red)
return token
def ask_sentry(red: Red):
loop = asyncio.get_event_loop()
print(
"\nThank you for installing Red V3! Red is constantly undergoing\n"
" improvements, and we would like to ask if you are comfortable with\n"
" the bot automatically submitting fatal error logs to the development\n"
' team. If you wish to opt into the process please type "yes":\n'
)
if not confirm("> "):
loop.run_until_complete(red.db.enable_sentry.set(False))
else:
loop.run_until_complete(red.db.enable_sentry.set(True))
print("\nThank you for helping us with the development process!")
def parse_cli_flags(args):
parser = argparse.ArgumentParser(
description="Red - Discord Bot", usage="redbot <instance_name> [arguments]"

View File

@ -1015,23 +1015,6 @@ class Core(commands.Cog, CoreLogic):
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."))
@_set.command()
@checks.is_owner()
async def custominfo(self, ctx: commands.Context, *, text: str = None):

View File

@ -19,34 +19,18 @@ from .utils.chat_formatting import inline, bordered, format_perms_list
from .utils import fuzzy_command_search, format_fuzzy_results
log = logging.getLogger("red")
sentry_log = logging.getLogger("red.sentry")
init()
INTRO = """
______ _ ______ _ _ ______ _
| ___ \ | | | _ (_) | | | ___ \ | |
| |_/ /___ __| | ______ | | | |_ ___ ___ ___ _ __ __| | | |_/ / ___ | |_
______ _ ______ _ _ ______ _
| ___ \ | | | _ (_) | | | ___ \ | |
| |_/ /___ __| | ______ | | | |_ ___ ___ ___ _ __ __| | | |_/ / ___ | |_
| // _ \/ _` | |______| | | | | / __|/ __/ _ \| '__/ _` | | ___ \/ _ \| __|
| |\ \ __/ (_| | | |/ /| \__ \ (_| (_) | | | (_| | | |_/ / (_) | |_
| |\ \ __/ (_| | | |/ /| \__ \ (_| (_) | | | (_| | | |_/ / (_) | |_
\_| \_\___|\__,_| |___/ |_|___/\___\___/|_| \__,_| \____/ \___/ \__|
"""
def should_log_sentry(exception) -> bool:
e = exception
while e.__cause__ is not None:
e = e.__cause__
tb = e.__traceback__
tb_frame = None
while tb is not None:
tb_frame = tb.tb_frame
tb = tb.tb_next
module = tb_frame.f_globals.get("__name__")
return module is not None and module.startswith("redbot")
def init_events(bot, cli_flags):
@bot.event
async def on_connect():
@ -142,7 +126,6 @@ def init_events(bot, cli_flags):
)
INFO2 = []
sentry = await bot.db.enable_sentry()
mongo_enabled = storage_type() != "JSON"
reqs_installed = {"docs": None, "test": None}
for key in reqs_installed.keys():
@ -155,7 +138,6 @@ def init_events(bot, cli_flags):
reqs_installed[key] = True
options = (
("Error Reporting", sentry),
("MongoDB", mongo_enabled),
("Voice", True),
("Docs", reqs_installed["docs"]),
@ -177,10 +159,6 @@ def init_events(bot, cli_flags):
bot.color = discord.Colour(await bot.db.color())
@bot.event
async def on_error(event_method, *args, **kwargs):
sentry_log.exception("Exception in {}".format(event_method))
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
@ -201,11 +179,6 @@ def init_events(bot, cli_flags):
"Exception in command '{}'".format(ctx.command.qualified_name),
exc_info=error.original,
)
if should_log_sentry(error):
sentry_log.exception(
"Exception in command '{}'".format(ctx.command.qualified_name),
exc_info=error.original,
)
message = "Error in command '{}'. Check your console or logs for details.".format(
ctx.command.qualified_name
@ -245,13 +218,6 @@ def init_events(bot, cli_flags):
)
else:
log.exception(type(error).__name__, exc_info=error)
try:
sentry_error = error.original
except AttributeError:
sentry_error = error
if should_log_sentry(sentry_error):
sentry_log.exception("Unhandled command error.", exc_info=sentry_error)
@bot.event
async def on_message(message):

View File

@ -1,41 +0,0 @@
import asyncio
import logging
from raven import Client
from raven.handlers.logging import SentryHandler
from raven_aiohttp import AioHttpTransport
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,
transport=AioHttpTransport,
)
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)
loop = asyncio.get_event_loop()
loop.create_task(self.close())
async def close(self):
"""Wait for the Sentry client to send pending messages and shut down."""
await self.client.remote.get_transport().close()

View File

@ -4,7 +4,6 @@ from pathlib import Path
import pytest
from unittest.mock import MagicMock
from raven.versioning import fetch_git_sha
from redbot.pytest.downloader import *
@ -60,18 +59,6 @@ async def test_current_branch(bot_repo):
assert branch not in ("WRONG", "")
@pytest.mark.asyncio
async def test_current_hash(bot_repo):
branch = await bot_repo.current_branch()
bot_repo.branch = branch
commit = await bot_repo.current_commit()
sentry_sha = fetch_git_sha(str(bot_repo.folder_path))
assert sentry_sha == commit
@pytest.mark.asyncio
async def test_existing_repo(repo_manager):
repo_manager.does_repo_exist = MagicMock(return_value=True)

View File

@ -1,12 +0,0 @@
import logging
from redbot.core import sentry
def test_sentry_capture(red):
log = logging.getLogger(__name__)
mgr = sentry.SentryManager(log)
assert mgr.client is not None
mgr.client.captureMessage("Message from test_sentry module.")