Skip to content

Commit

Permalink
Merge pull request #4 from ajalewis/fix/plexMediaQualityTotal-plexSes…
Browse files Browse the repository at this point in the history
…sionsTotalgrandparentTitle

Fix plex_media_quality_total and plex_sessions_total grandparentTitle issues
  • Loading branch information
ajalewis authored Mar 1, 2024
2 parents 10f3798 + 8c6c447 commit 44b845f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 20 deletions.
55 changes: 36 additions & 19 deletions exporter/plex_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ def __init__(self, token, server, port):
self.server = server
self.port = port
self._initialize()

def _initialize(self):
try:
self.plex = PlexServer(baseurl=self.server, token=self.token, timeout=5)
self.collector = PlexCollector(self.token, self.server)
logging.info(f"Successfully connected to {self.plex.friendlyName}")
logging.info(f"connected to {self.plex.friendlyName}")
except Unauthorized:
logging.error("Plex token is not valid")
exit(1)
Expand Down Expand Up @@ -100,7 +100,7 @@ def __init__(self, token, server) -> None:
self.plex_media_quality = Gauge(
"plex_media_quality_total",
"Total number of media by quality",
labelnames=["type", "quality"],
labelnames=["type", "quality", "server"],
)

def _collect_base(self):
Expand Down Expand Up @@ -145,7 +145,7 @@ def _collect_clients(self):

try:
for session in sessions:
if session.librarySectionTitle == "TV shows":
if type(session).__name__ == "EpisodeSession":
title = f"{session.grandparentTitle} - {session.title}"
else:
title = session.title
Expand Down Expand Up @@ -176,23 +176,40 @@ def _collect_qualities(self):
self.plex_media_quality.clear()

payload = []
medias = self.plex.library.sections()
try:
for movie in self.plex.library.section("Movies").all():
media = movie.media[0] if movie.media else None
video_resolution = media.videoResolution if media else None
payload.append({"type": movie.TYPE, "resolution": video_resolution})

for show in self.plex.library.section("TV Shows").all():
for episode in show.episodes():
media = episode.media[0] if episode.media else None
video_resolution = media.videoResolution if media.videoResolution else "unknown" # Deals with Media not having videoResolution
payload.append(
{"type": episode.TYPE, "resolution": video_resolution}
for media in medias:
if media.TYPE == "movie":
for movie in self.plex.library.sectionByID(media.key).all():
media = movie.media[0] if movie.media else None
video_resolution = (
media.videoResolution
if media.videoResolution
else "undefined"
) # Deals with Media not having videoResolution
payload.append(
{"type": movie.TYPE, "resolution": video_resolution}
)
else:
for show in self.plex.library.sectionByID(media.key).all():
for episode in show.episodes():
media = episode.media[0] if episode.media else None
video_resolution = (
media.videoResolution
if media.videoResolution
else "undefined"
) # Deals with Media not having videoResolution
payload.append(
{"type": episode.TYPE, "resolution": video_resolution}
)

payload = Counter(
(item["type"], item["resolution"]) for item in payload
)

payload = Counter((item["type"], item["resolution"]) for item in payload)
for quality, count in payload.items():
self.plex_media_quality.labels(quality[0], quality[1]).set(count)
for quality, count in payload.items():
self.plex_media_quality.labels(
quality[0], quality[1], self.plex.friendlyName
).set(count)
except Exception as e:
logging.warning(f"Failed to scrape plex_media_quality_metric: {e}")

Expand Down
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from exporter.plex_exporter import PlexExporter
from dotenv import load_dotenv

__version__ = "v1.3.0"
__version__ = "v1.4.0"

logging.basicConfig(
level="INFO",
Expand Down

0 comments on commit 44b845f

Please sign in to comment.