Refined debuginfo (#5156)

* Oh my gosh Kowlin is finishing work!?

* fix style

* use f-strings

* moar f-strings actually

* Fix style...

* I did a poor job of find-replacing things

* Improve code readability per previous Kowlin's style

* And reformat it in such a way that get jack through the day

* Okay maybe some whitespace

* Update core_commands.py

* Update core_commands.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
This commit is contained in:
Kowlin 2021-06-27 03:54:27 +02:00 committed by GitHub
parent 0fb7c8bdba
commit 3b7f9e24b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 72 additions and 50 deletions

View File

@ -12,10 +12,12 @@ import os
import re import re
import sys import sys
import platform import platform
import psutil
import getpass import getpass
import pip import pip
import traceback import traceback
from pathlib import Path from pathlib import Path
from redbot.core import data_manager
from redbot.core.utils.menus import menu, DEFAULT_CONTROLS from redbot.core.utils.menus import menu, DEFAULT_CONTROLS
from redbot.core.commands import GuildConverter from redbot.core.commands import GuildConverter
from string import ascii_letters, digits from string import ascii_letters, digits
@ -25,7 +27,6 @@ import aiohttp
import discord import discord
from babel import Locale as BabelLocale, UnknownLocaleError from babel import Locale as BabelLocale, UnknownLocaleError
from redbot.core.data_manager import storage_type from redbot.core.data_manager import storage_type
from redbot.core.utils.chat_formatting import box, pagify
from . import ( from . import (
__version__, __version__,
@ -3558,19 +3559,20 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
IS_MAC = sys.platform == "darwin" IS_MAC = sys.platform == "darwin"
IS_LINUX = sys.platform == "linux" IS_LINUX = sys.platform == "linux"
pyver = "{}.{}.{} ({})".format(*sys.version_info[:3], platform.architecture()[0]) python_version = ".".join(map(str, sys.version_info[:3]))
pyver = f"{python_version} ({platform.architecture()[0]})"
pipver = pip.__version__ pipver = pip.__version__
redver = red_version_info redver = red_version_info
dpy_version = discord.__version__ dpy_version = discord.__version__
if IS_WINDOWS: if IS_WINDOWS:
os_info = platform.uname() os_info = platform.uname()
osver = "{} {} (version {})".format(os_info.system, os_info.release, os_info.version) osver = f"{os_info.system} {os_info.release} (version {os_info.version})"
elif IS_MAC: elif IS_MAC:
os_info = platform.mac_ver() os_info = platform.mac_ver()
osver = "Mac OSX {} {}".format(os_info[0], os_info[2]) osver = f"Mac OSX {os_info[0]} {os_info[2]}"
elif IS_LINUX: elif IS_LINUX:
os_info = distro.linux_distribution() os_info = distro.linux_distribution()
osver = "{} {}".format(os_info[0], os_info[1]).strip() osver = f"{os_info[0]} {os_info[1]}".strip()
else: else:
osver = "Could not parse OS, report this on Github." osver = "Could not parse OS, report this on Github."
user_who_ran = getpass.getuser() user_who_ran = getpass.getuser()
@ -3587,51 +3589,69 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
) )
or "None" or "None"
) )
if await ctx.embed_requested():
e = discord.Embed(color=await ctx.embed_colour()) def _datasize(num: int):
e.title = "Debug Info for Red" for unit in ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB"]:
e.add_field(name="Red version", value=redver, inline=True) if abs(num) < 1024.0:
e.add_field(name="Python version", value=pyver, inline=True) return "{0:.1f}{1}".format(num, unit)
e.add_field(name="Discord.py version", value=dpy_version, inline=True) num /= 1024.0
e.add_field(name="Pip version", value=pipver, inline=True) return "{0:.1f}{1}".format(num, "YB")
e.add_field(name="System arch", value=platform.machine(), inline=True)
e.add_field(name="User", value=user_who_ran, inline=True) memory_ram = psutil.virtual_memory()
e.add_field(name="Storage type", value=driver, inline=True) ram_string = "{used}/{total} ({percent}%)".format(
e.add_field(name="Disabled intents", value=disabled_intents, inline=True) used=_datasize(memory_ram.used),
e.add_field(name="OS version", value=osver, inline=False) total=_datasize(memory_ram.total),
e.add_field( percent=memory_ram.percent,
name="Python executable", )
value=escape(sys.executable, formatting=True),
inline=False, owners = []
) for uid in self.bot.owner_ids:
e.add_field( try:
name="Data path", u = await self.bot.get_or_fetch_user(uid)
value=escape(str(data_path), formatting=True), owners.append(f"{u.id} ({u})")
inline=False, except discord.HTTPException:
) owners.append(f"{uid} (Unresolvable)")
e.add_field( owners_string = ", ".join(owners) or "None"
name="Metadata file",
value=escape(str(config_file), formatting=True), resp_intro = "# Debug Info for Red:"
inline=False, resp_system_intro = "## System Metadata:"
) resp_system = (
await ctx.send(embed=e) f"CPU Cores: {psutil.cpu_count()} ({platform.machine()})\nRAM: {ram_string}\n"
else: )
info = ( resp_os_intro = "## OS Variables:"
"Debug Info for Red\n\n" resp_os = f"OS version: {osver}\nUser: {user_who_ran}\n" # Ran where off to?!
+ "Red version: {}\n".format(redver) resp_py_metadata = (
+ "Python version: {}\n".format(pyver) f"Python executable: {sys.executable}\n"
+ "Discord.py version: {}\n".format(dpy_version) f"Python version: {pyver}\n"
+ "Pip version: {}\n".format(pipver) f"Pip version: {pipver}\n"
+ "System arch: {}\n".format(platform.machine()) )
+ "User: {}\n".format(user_who_ran) resp_red_metadata = f"Red version: {redver}\nDiscord.py version: {dpy_version}\n"
+ "OS version: {}\n".format(osver) resp_red_vars_intro = "## Red variables:"
+ "Storage type: {}\n".format(driver) resp_red_vars = (
+ "Disabled intents: {}\n".format(disabled_intents) f"Instance name: {data_manager.instance_name}\n"
+ "Python executable: {}\n".format(sys.executable) f"Owner(s): {owners_string}\n"
+ "Data path: {}\n".format(data_path) f"Storage type: {driver}\n"
+ "Metadata file: {}\n".format(config_file) f"Disabled intents: {disabled_intents}\n"
) f"Data path: {data_path}\n"
await ctx.send(box(info)) f"Metadata file: {config_file}"
)
response = (
box(resp_intro, lang="md"),
"\n",
box(resp_system_intro, lang="md"),
box(resp_system),
"\n",
box(resp_os_intro, lang="md"),
box(resp_os),
box(resp_py_metadata),
box(resp_red_metadata),
"\n",
box(resp_red_vars_intro, lang="md"),
box(resp_red_vars),
)
await ctx.send("".join(response))
@commands.group(aliases=["whitelist"]) @commands.group(aliases=["whitelist"])
@checks.is_owner() @checks.is_owner()

View File

@ -55,6 +55,7 @@ install_requires =
idna==2.10 idna==2.10
Markdown==3.3.3 Markdown==3.3.3
multidict==5.1.0 multidict==5.1.0
psutil==5.8.0
PyNaCl==1.3.0 PyNaCl==1.3.0
Pygments==2.7.4 Pygments==2.7.4
python-dateutil==2.8.1 python-dateutil==2.8.1

View File

@ -18,6 +18,7 @@ install_requires =
distro; sys_platform == "linux" distro; sys_platform == "linux"
fuzzywuzzy fuzzywuzzy
markdown markdown
psutil
python-dateutil python-dateutil
python-Levenshtein-wheels python-Levenshtein-wheels
PyYAML PyYAML