Skip to content

Commit

Permalink
Release 0.7.4 (#454)
Browse files Browse the repository at this point in the history
* logs: begin moving logs to handle scrape results

* Partial state handling (#455)

* Feat: Better handling of partially complete state

* Tidy: remove verify_futures test func

* tidy: Remove all self.futures references

* Tidy: remove unneeded imports and excess whitespace

* Fix: yield then return incomplete children

* Tidy: remove from Counter from collections

* Tidy: whitespace

---------

Co-authored-by: Administrator <[email protected]>

* Fix: jacket-prowlarr params based on what indexer reports (#456)

Co-authored-by: Administrator <[email protected]>

* Fix Collections (#457)

* Revert "Fix Collections (#457)" (#458)

This reverts commit 27ceab9.

* feat: update scrapers for series packs. enhanced parsing!

* feat: add boilerplate metrics endpoint

* Fix: Remove timeout for slow scrapers, prevents race condition (#460)

Co-authored-by: Administrator <[email protected]>

* Fixed Collections Again (#459)

* fix collections 2

* fix, im dumb

* fix: removed metrics endpoint for now. updated version log message

---------

Co-authored-by: Spoked <Spoked@localhost>
Co-authored-by: Matthew Adams <[email protected]>
Co-authored-by: Administrator <[email protected]>
Co-authored-by: FlashLightning67 <[email protected]>
  • Loading branch information
5 people authored Jun 22, 2024
1 parent cb296f5 commit 7c1b32f
Show file tree
Hide file tree
Showing 19 changed files with 635 additions and 487 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.7.3
0.7.4
31 changes: 31 additions & 0 deletions backend/controllers/metrics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# from fastapi import APIRouter, Response

# from opentelemetry.exporter.prometheus import PrometheusMetricReader
# from opentelemetry.sdk.metrics import MeterProvider
# from opentelemetry.sdk.resources import Resource
# from prometheus_client import CONTENT_TYPE_LATEST, generate_latest

# from program.settings.manager import settings_manager

# # Initialize OpenTelemetry MeterProvider with PrometheusMetricReader
# resource = Resource.create({"app.name": "Riven", "app.version": settings_manager.settings.version})
# prometheus_exporter = PrometheusMetricReader()
# meter_provider = MeterProvider(resource=resource, metric_readers=[prometheus_exporter])
# metrics.set_meter_provider(meter_provider)

# # Create a meter
# meter = metrics.get_meter(__name__)

# # Example metric
# counter = meter.create_counter(
# name="example_counter",
# description="An example counter",
# unit="1",
# )

# router = APIRouter()

# @router.get("/metrics")
# async def get_metrics():
# data = generate_latest()
# return Response(content=data, media_type=CONTENT_TYPE_LATEST)
3 changes: 2 additions & 1 deletion backend/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import argparse
import contextlib
import os
import signal
import sys
import threading
Expand All @@ -10,6 +9,7 @@
import uvicorn
from controllers.default import router as default_router
from controllers.items import router as items_router
# from controllers.metrics import router as metrics_router
from controllers.settings import router as settings_router
from controllers.tmdb import router as tmdb_router
from controllers.webhooks import router as webhooks_router
Expand Down Expand Up @@ -73,6 +73,7 @@ async def dispatch(self, request: Request, call_next):
app.include_router(items_router)
app.include_router(webhooks_router)
app.include_router(tmdb_router)
# app.include_router(metrics_router)


class Server(uvicorn.Server):
Expand Down
6 changes: 4 additions & 2 deletions backend/program/content/overseerr.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ def run(self):
"""Fetch new media from `Overseerr`"""
if self.settings.use_webhook and not self.run_once:
logger.info("Webhook is enabled, but running Overseerr once before switching to webhook.")
self.run_once = True


if self.run_once:
return

Expand Down Expand Up @@ -100,6 +99,9 @@ def run(self):
logger.error(f"Error processing item {item}: {str(e)}")
continue

if self.settings.use_webhook:
self.run_once = True

def get_imdb_id(self, data) -> str:
"""Get imdbId for item from overseerr"""
if data.mediaType == "show":
Expand Down
2 changes: 1 addition & 1 deletion backend/program/content/plex_watchlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def _get_items_from_watchlist(self) -> Generator[MediaItem, None, None]:
return
media_container = getattr(response.data, "MediaContainer", None)
if not media_container or not hasattr(media_container, "Metadata"):
logger.error("MediaContainer is missing Metadata attribute.")
logger.log("NOT_FOUND", "MediaContainer is missing Metadata attribute.")
return
for item in media_container.Metadata:
if hasattr(item, "ratingKey") and item.ratingKey:
Expand Down
2 changes: 2 additions & 0 deletions backend/program/content/trakt.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,8 @@ def _fetch_data(url, headers, params):
if not data:
break
all_data.extend(data)
if "X-Pagination-Page-Count" not in response.response.headers:
break
if params.get("limit") and len(all_data) >= params["limit"]:
break
page += 1
Expand Down
2 changes: 1 addition & 1 deletion backend/program/indexers/trakt.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ def find_first(preferred_types, data):
return d
return None

data = find_first(["movie", "show", "season", "episode"], response.data)
data = find_first(["show", "movie", "season", "episode"], response.data)
if data:
return _map_item_from_data(getattr(data, data.type), data.type)
return None
Expand Down
15 changes: 13 additions & 2 deletions backend/program/program.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import threading
import time
import traceback
from collections import Counter
from concurrent.futures import Future, ThreadPoolExecutor
from datetime import datetime
from multiprocessing import Lock
Expand All @@ -20,6 +19,7 @@
from program.media.state import States
from program.scrapers import Scraping
from program.settings.manager import settings_manager
from program.settings.models import get_version
from program.updaters.plex import PlexUpdater
from utils import data_dir_path
from utils.logger import logger, scrub_logs
Expand Down Expand Up @@ -107,7 +107,14 @@ def validate(self) -> bool:
)

def start(self):
logger.log("PROGRAM", f"Riven v{settings_manager.settings.version} starting!")
latest_version = get_version()
user_version = settings_manager.settings.version

if latest_version != user_version:
logger.log("PROGRAM", f"Riven v{user_version} starting! (Update Available: v{latest_version})")
else:
logger.log("PROGRAM", f"Riven v{user_version} starting!")

settings_manager.register_observer(self.initialize_services)
os.makedirs(data_dir_path, exist_ok=True)

Expand Down Expand Up @@ -262,6 +269,10 @@ def _process_future_item(self, future: Future, service: Service, orig_item: Medi
timeout_seconds = int(
os.environ[service.__name__.upper() +"_WORKER_TIMEOUT"]
) if service.__name__.upper() + "_WORKER_TIMEOUT" in os.environ else 60 * 3
fut_except = future.exception()
if fut_except != None:
logger.error(f"{fut_except}")
self._remove_from_running_items(item)
for item in future.result(timeout=timeout_seconds):
if isinstance(item, list):
all_media_items = True
Expand Down
Loading

0 comments on commit 7c1b32f

Please sign in to comment.