Skip to content

Commit

Permalink
Make logs more informative, add connected{,_at} to Player (#88)
Browse files Browse the repository at this point in the history
* Semi-pointless PR which will crease more verbose logs.

* Semi-pointless PR which will crease more verbose logs + Black

* *sigh* who knew how badly i would break shit with 2 simple commits ....

* Fix tests

* Ensure Cog-Creators/Red-DiscordBot#5042 (comment) cannot ever happen.

* make `active_players` only return non paused players,  add new `all_live_players` which returns only connected players which are alive (not marked as disconnected)

* stop ussing fstrings for logs

* Apply suggestions from code review

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* this is 100% because of jack

* Update lavalink/player_manager.py

* missed this

* Apply suggestions from code review

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* update jacks comments.

* fine lets rename this

* lets not miss this

* Update lavalink/lavalink.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* thanks jack .......

....

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
  • Loading branch information
Drapersniper and Jackenmen committed May 18, 2021
1 parent 0b0473d commit 6e649bc
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 72 deletions.
50 changes: 37 additions & 13 deletions lavalink/__init__.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,6 @@
import logging
from .log import set_logging_level, log, socket_log, ws_discord_log, ws_ll_log, ws_rll_log

log = logging.getLogger("red.core.RLL")
socket_log = logging.getLogger("red.core.RLL.socket")
socket_log.setLevel(logging.INFO)

ws_discord_log = logging.getLogger("red.Audio.WS.discord")
ws_ll_log = logging.getLogger("red.Audio.WS.LLServer")
ws_rll_log = logging.getLogger("red.Audio.WS.RLL")
log.setLevel(logging.INFO)
ws_discord_log.setLevel(logging.INFO)
ws_ll_log.setLevel(logging.INFO)
ws_rll_log.setLevel(logging.INFO)
set_logging_level()

from .lavalink import *
from .node import Node, NodeStats, Stats
Expand All @@ -19,4 +9,38 @@
from .rest_api import Track
from . import utils

__version__ = "0.8.0"
__all__ = [
"set_logging_level",
"log",
"socket_log",
"ws_discord_log",
"ws_ll_log",
"ws_rll_log",
"utils",
"Track",
"NodeState",
"PlayerState",
"TrackEndReason",
"LavalinkEvents",
"Node",
"NodeStats",
"Stats",
"user_id",
"channel_finder_func",
"Player",
"PlayerManager",
"initialize",
"connect",
"get_player",
"close",
"register_event_listener",
"unregister_event_listener",
"register_update_listener",
"unregister_update_listener",
"register_stats_listener",
"unregister_stats_listener",
"all_players",
"all_connected_players",
"active_players",
]
__version__ = "0.8.1"
1 change: 1 addition & 0 deletions lavalink/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ class NodeState(enum.Enum):


class PlayerState(enum.Enum):
CREATED = -1
CONNECTING = 0
READY = 1
NODE_BUSY = 2
Expand Down
11 changes: 9 additions & 2 deletions lavalink/lavalink.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"register_stats_listener",
"unregister_stats_listener",
"all_players",
"all_connected_players",
"active_players",
]

Expand Down Expand Up @@ -358,6 +359,12 @@ def all_players() -> Tuple[player_manager.Player]:
return ret


def all_connected_players() -> Tuple[player_manager.Player]:
nodes = node._nodes
ret = tuple(p for n in nodes for p in n.player_manager.players if p.connected)
return ret


def active_players() -> Tuple[player_manager.Player]:
ps = all_players()
return tuple(p for p in ps if p.current is not None)
ps = all_connected_players()
return tuple(p for p in ps if p.is_playing)
16 changes: 16 additions & 0 deletions lavalink/log.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import logging

log = logging.getLogger("red.core.RLL")
socket_log = logging.getLogger("red.core.RLL.socket")
socket_log.setLevel(logging.INFO)

ws_discord_log = logging.getLogger("red.Audio.WS.discord")
ws_ll_log = logging.getLogger("red.Audio.WS.LLServer")
ws_rll_log = logging.getLogger("red.Audio.WS.RLL")


def set_logging_level(level=logging.INFO):
log.setLevel(level)
ws_discord_log.setLevel(level)
ws_ll_log.setLevel(level)
ws_rll_log.setLevel(level)
32 changes: 27 additions & 5 deletions lavalink/node.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from __future__ import annotations
import asyncio
import contextlib
import secrets
Expand All @@ -17,7 +18,7 @@

__all__ = ["Stats", "Node", "NodeStats", "get_node", "get_nodes_stats", "join_voice"]

_nodes = [] # type: List[Node]
_nodes: List[Node] = []

PlayerState = namedtuple("PlayerState", "position time")
MemoryInfo = namedtuple("MemoryInfo", "reservable used free allocated")
Expand Down Expand Up @@ -82,6 +83,17 @@ def __init__(self, data: dict):
self.frames_nulled = frame_stats.get("nulled", -1)
self.frames_deficit = frame_stats.get("deficit", -1)

def __repr__(self):
return (
"<NoteStats: "
f"uptime={self.uptime}, "
f"players={self.players}, "
f"playing_players={self.playing_players}, "
f"memory_free={self.memory_free}, memory_used={self.memory_used}, "
f"cpu_cores={self.cpu_cores}, system_load={self.system_load}, "
f"lavalink_load={self.lavalink_load}>"
)


class Node:

Expand Down Expand Up @@ -171,6 +183,16 @@ def __init__(
aiohttp.WSMsgType.CLOSED,
)

def __repr__(self):
return (
"<Node: "
f"state={self.state.name}, "
f"host={self.host}, "
f"port={self.port}, "
f"password={'*' * len(self.password)}, resume_key={self._resume_key}, "
f"shards={self.num_shards}, user={self.user_id}, stats={self.stats}>"
)

@property
def headers(self) -> dict:
return self._get_connect_headers()
Expand Down Expand Up @@ -289,7 +311,7 @@ async def _multi_try_connect(self, uri):
else:
self.session_resumed = ws._response.headers.get("Session-Resumed", False)
if self._ws is not None and self.session_resumed:
ws_ll_log.info(f"WEBSOCKET Resumed Session with key: {self._resume_key}")
ws_ll_log.info("WEBSOCKET Resumed Session with key: %s", self._resume_key)
self._ws = ws
return self._ws

Expand Down Expand Up @@ -330,7 +352,7 @@ async def listener(self):
)
if self.state != NodeState.RECONNECTING:
ws_ll_log.warning(
"[NODE] | WS %s SHUTDOWN %s.", not self._ws.closed, self._is_shutdown
"[NODE] | %s - WS %s SHUTDOWN %s.", self, not self._ws.closed, self._is_shutdown
)
self.update_state(NodeState.RECONNECTING)
self.loop.create_task(self._reconnect())
Expand Down Expand Up @@ -358,7 +380,7 @@ async def _handle_op(self, op: LavalinkIncomingOp, data):
self.stats = NodeStats(data)
self.event_handler(op, stats, data)
else:
ws_ll_log.info("Unknown op type: {}".format(data))
ws_ll_log.info("Unknown op type: %r", data)

async def _reconnect(self):
self._ready_event.clear()
Expand Down Expand Up @@ -408,7 +430,7 @@ def update_state(self, next_state: NodeState):
if next_state == self.state:
return

ws_ll_log.debug(f"Changing node state: {self.state.name} -> {next_state.name}")
ws_ll_log.debug("Changing node state: %s -> %s", self.state.name, next_state.name)
old_state = self.state
self.state = next_state
if self.loop.is_closed():
Expand Down
Loading

0 comments on commit 6e649bc

Please sign in to comment.