p-hueber/prefetcharr

plex/tautulli support?

Closed this issue · 15 comments

What's the chances of adding in plex support or tautulli for tracking watched episodes?

@kysersoze81 I just pushed #19, it would be great to get some feedback on it before I merge this. I don't use plex myself, so it didn't get much testing.

Just grabbed this now. (docker for testing)

Edit, set a log location. will it work if its set to jellyfin? because it doesn't like being set to plex
Edit, Sorry I still have the main repo how do i swap to the plex version?

@kysersoze81 if you use the docker-compose example from the readme, just replace #latest with #plex and build the image again.
use the server token as api key and make sure you got the url right - error reporting isn't ideal yet and an incorrect url goes unnoticed.

if everything is set up correctly, you should be able to see something like this in the logs if there's an active playback session

 INFO prefetcharr::process: title="The Bear" now_playing=NowPlaying { series: Tvdb(403294), episode: 1, season: 1 } 

For some reason i can't seem to pull the #plex build
Docker version 26.0.0, build 2ae903e
Docker Compose version v2.26.0
I've had to modify the compose.yml to get it to work at all

name: prefetcharr
services:
    prefetcharr:
        build: https://github.com/p-hueber/prefetcharr.git#plex
        environment:
            - MEDIA_SERVER_TYPE=plex
            - MEDIA_SERVER_URL=http://local.ip.address.home
            - MEDIA_SERVER_API_KEY=redacted
            - SONARR_URL=http://lan.ip.address.home/sonarr
            - SONARR_API_KEY=redacted
            - LOG_DIR=/log
            - RUST_LOG=prefetcharr
            - INTERVAL=900
            - REMAINING_EPISODES=2
        volumes:
            - /home/prefetcharr:/log
        image: prefetcharr

Did you mean to write "pull"? Because there is no image to pull, you have to build it. I can only guess what issues you are running into, but the error message might already suggest you to run something likedocker compose build prefetcharr.
If that's not the problem, please post the error message you are facing and I can try to help

Sorry you were right. I needed to run docker-compose build in the docker-compose.yml folder to get it running
Now i have this:

2024-04-01T08:20:02.577142Z  INFO prefetcharr: Start watching Plex sessions
2024-04-01T08:20:02.592275Z ERROR prefetcharr::media_server::plex: cannot fetch sessions from plex: error sending request for url (https://192.168.1.X:32400/status/sessions): error trying to connect: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (IP address mismatch)
2024-04-01T08:22:38.194173Z  INFO prefetcharr: Start watching Plex sessions
2024-04-01T08:22:39.971797Z ERROR prefetcharr::media_server::plex: cannot fetch sessions from plex: HTTP status client error (401 Unauthorized) for url (http://192.168.1.X:32400/status/sessions)

It doesn't seem to want to connect to plex as http or https
I have network connectivity and everything else is communicating fine. what i have read online is about certificate issues with letsencrypt. which i think plex uses

Should i be using a client api key like the arr's?

First attempt is a certificate problem because your server cert cannot be used for an IP address. You'd have to use the domain your certificate was signed for.
But it should work with http, as your second attempt shows. Double check you use the right token as suggested in a previous comment #18 (comment)

Sorry to open this up again.
The issue that i was having before was that you can't use "" for field in the docker-compose.yaml
also the url's need to be "http://i.p.add.ress:port/baseurl"
just wanted to confirm if this was an issue that needs solving before moving forward

2024-04-03T08:47:17.961702Z ERROR prefetcharr::process: Failed to process err=error decoding response body: missing field `statistics` at line 50759 column 7

Caused by:
    missing field `statistics` at line 50759 column 7

Thanks in advance

no problem at all, please keep commenting! I just closed this issue because plex support landed in the current 0.5.0 release.
the error you are facing is not related to plex but to sonarr giving a response I did not anticipate. I'll make a quick fix to make this more resilient.
could you tell me which version of sonarr you are using?

@kysersoze81 could you please build your container from main branch? just change #plex to #main in the yaml, stop the container, re-build and start it again.
the error message should be gone, ignoring the offending series entry during lookup.

Sonar version 4.0.3.1413
Plex version 1.40.1.8227-c0dd5a73e

it built

[+] Building 57.5s (6/6) FINISHED                                                                                                                   docker:default
 => [prefetcharr internal] load git source https://github.com/p-hueber/prefetcharr.git#main                                                                 1.6s
 => [prefetcharr internal] load metadata for docker.io/library/rust:1.75.0                                                                                    1.8s
 => CACHED [prefetcharr 1/3] FROM docker.io/library/rust:1.75.0@sha256:87f3b2f93b82995443a1a558c234212dafe79cfdc3af956539610560369ddcd0                       0.0s 
 => [prefetcharr 2/3] COPY ./ ./                                                                                                                              0.1s 
 => [prefetcharr 3/3] RUN cargo build --release                                                                                                              50.9s 
 => [prefetcharr] exporting to image                                                                                                                          2.8s 
 => => exporting layers                                                                                                                                       2.8s 
 => => writing image sha256:f154b7cb1700e5d6e7a668e0ebd0c995b722e68a1dfe2fcc9e994ed0aaf92b55                                                                  0.0s 
 => => naming to docker.io/library/prefetcharr 

but this is the log output


Caused by:
    missing field `statistics` at line 50759 column 7
2024-04-03T11:06:31.596906Z  INFO prefetcharr: prefetcharr 0.5.0
2024-04-03T11:06:31.597061Z  INFO prefetcharr: Start watching Plex sessions

docker-compose.yml

name: prefetcharr
services:
    prefetcharr:
        build: https://github.com/p-hueber/prefetcharr.git#main
        environment:
            - MEDIA_SERVER_TYPE=plex
            - MEDIA_SERVER_URL=http://1.2.3.4:32400
            - MEDIA_SERVER_API_KEY=key
            - SONARR_URL=http://w.x.y.z:8989/sonarr
            - SONARR_API_KEY=other key
            - LOG_DIR=/log
            - RUST_LOG=prefetcharr
            - INTERVAL=900
            - REMAINING_EPISODES=2
        volumes:
            - /home/prefetcharr:/log
        image: prefetcharr

seems good so far!
you don't see much in the log because the log level defaults to ERROR and the corresponding entry is not quite right in the yaml file. change it to RUST_LOG=prefetcharr=debug to see more than just errors.

Yeah ok. I changed it just to have a look.
I'm getting some results like this on the ERROR level log

2024-04-03T12:06:31.851725Z DEBUG prefetcharr::sonarr: ignoring malformed series entry: missing field `statistics` series=Object {"added": String("2024-03-29T09:33:03Z"), "airTime": String("03:00"), "alternateTitles": Array [], "certification": String("12"), "cleanTitle": String("murdaughmurderssouthernscandal"), "ended": Bool(true), "firstAired": String("2023-02-22T00:00:00Z"), "genres": Array [String("Crime"), String("Documentary"), String("Mini-Series")], "id": Number(469), "images": Array [Object {"coverType": String("banner"), "remoteUrl": String("https://artworks.thetvdb.com/banners/v4/series/429854/banners/63d54e2f22912.jpg"), "url": String("/sonarr/MediaCover/469/banner.jpg?lastWrite=638473015835835484")}, Object {"coverType": String("poster"), "remoteUrl": String("https://artworks.thetvdb.com/banners/v4/series/429854/posters/63f109a4eb4b5.jpg"), "url": String("/sonarr/MediaCover/469/poster.jpg?lastWrite=638473015835915483")}, Object {"coverType": String("fanart"), "remoteUrl": String("https://artworks.thetvdb.com/banners/v4/series/429854/backgrounds/63fcc15fdda0d.jpg"), "url": String("/sonarr/MediaCover/469/fanart.jpg?lastWrite=638473015835995482")}], "imdbId": String("tt26340238"), "languageProfileId": Number(1), "lastAired": String("2023-09-20T00:00:00Z"), "monitorNewItems": String("all"), "monitored": Bool(true), "network": String("Netflix"), "originalLanguage": Object {"id": Number(1), "name": String("English")}, "overview": String("Shocking tragedies shatter a tight-knit South Carolina community and expose the horrifying secrets of its most powerful family."), "path": String("/mnt/share/TV Shows/Murdaugh Murders - A Southern Scandal (2023) - 429854"), "previousAiring": String("2023-09-20T08:22:00Z"), "qualityProfileId": Number(6), "ratings": Object {"value": Number(0), "votes": Number(0)}, "rootFolderPath": String("/mnt/share/TV Shows/"), "runtime": Number(41), "seasonFolder": Bool(true), "seasons": Array [Object {"monitored": Bool(false), "seasonNumber": Number(0)}, Object {"monitored": Bool(true), "seasonNumber": Number(1), "statistics": Object {"episodeCount": Number(3), "episodeFileCount": Number(3), "percentOfEpisodes": Number(100), "previousAiring": String("2023-02-22T09:22:00Z"), "releaseGroups": Array [String("NTb")], "sizeOnDisk": Number(7503346713), "totalEpisodeCount": Number(3)}}, Object {"monitored": Bool(true), "seasonNumber": Number(2), "statistics": Object {"episodeCount": Number(3), "episodeFileCount": Number(3), "percentOfEpisodes": Number(100), "previousAiring": String("2023-09-20T08:22:00Z"), "releaseGroups": Array [String("EDITH")], "sizeOnDisk": Number(4757850712), "totalEpisodeCount": Number(3)}}], "seriesType": String("standard"), "sortTitle": String("murdaugh murders a southern scandal"), "statistics": Object {"episodeCount": Number(6), "episodeFileCount": Number(6), "percentOfEpisodes": Number(100), "releaseGroups": Array [String("NTb"), String("EDITH")], "seasonCount": Number(2), "sizeOnDisk": Number(12261197425), "totalEpisodeCount": Number(6)}, "status": String("ended"), "tags": Array [Number(15)], "title": String("Murdaugh Murders: A Southern Scandal"), "titleSlug": String("murdaugh-murders-a-southern-scandal"), "tvMazeId": Number(66494), "tvRageId": Number(0), "tvdbId": Number(429854), "useSceneNumbering": Bool(false), "year": Number(2023)}
2024-04-03T12:06:31.854359Z  INFO prefetcharr::process: title="The Rookie" now_playing=NowPlaying { series: Tvdb(350665), episode: 4, season: 6 }
2024-04-03T12:06:31.854368Z DEBUG prefetcharr::process: ignoring early episode now_playing=NowPlaying { series: Tvdb(350665), episode: 4, season: 6 } season=SeasonResource { season_number: 6, monitored: true, statistics: SeasonStatisticsResource { size_on_disk: 15779141696, episode_count: 5, total_episode_count: 6, other: Object {"episodeFileCount": Number(5), "nextAiring": String("2024-04-10T01:00:00Z"), "percentOfEpisodes": Number(100), "previousAiring": String("2024-04-03T01:00:00Z"), "releaseGroups": Array [String("FLUX")]} }, other: Object {} }

great, works as expected. thank you!

with REMAINING_EPISODES=2, prefetcharr would attempt to search for the next season while you watch "The Rookie" S06E05. but as there's no S07 yet, it will only make sure that "The Rookie" is monitored in sonarr.

the first message complains about "Murdaugh Murders" having a season 0 without any episode counts. I assume it's some sort of special, so instead of filtering the whole series, I should rather ignore such seasons.