Influxdb2 (#3)

* #203

* Update docker compose to specify influxdb:1.8.4

* Update requirements to use urllib3==1.26.5

* updated to support Radarr and Sonarr V3 Api

* bump requirements for requests

* Fix Sonarr & Radarr V3 API /queue endpoint (#220)

* Fix lint issues

* More lint fixes

* Update Sonarr structures

* Add Overseerr Support (#210)

* Remove duplicate structures

* update changelog to reflect v1.7.7 changes

* Add IP data to tautulli #202

* add missing ip address in tautulli

* Fixed: Streamlined API calls to Radarr and Sonarr (#221)

* Fixed: Sonarr Data pull issues (#222)

* Fix Sonarrr calendar

* Update lidarr structure (#225)

Added missing arguments to Lidarr structure

Fixes #223

* Clean up request totals. Upstream change sct/overseerr#2426

* Cleanup blank space

* Fix requested_date syntax.

* Fix requested_date for Overseerr tv and movie

* Fix overseerr config refernces

* Fix overseerr structures

* Update intparser to accommodate changes to config structure

* Cleanup overseerr data collection

* Fix SERVICES_ENABLED in varken.py to acomidate overseerr

* Fixed: Sonarr/Lidarr Queues (#227)

* Change sonarr queue structures to str

* Fixed: Multipage queue fetching

* Update historical tautulli import (#226)

* Fixed: Sonarr perams ordering

* Fixed: Proper warnings for missing data in sonarr and radarr

* Added: Overseerr ENVs to docker compose.

* Added: Logging to empty/no data returns

* Update Sonarr & Lidarr Structs to match latest API changes (#231)

* Add support for estimatedCompletionTime in LidarrQueue

* Add support for tvdbId in SonarrEpisode struct

* Fix typo in docker yml

* Rename example url for overseerr in docker yml

* Update radarr structures to inclue originalLanguage

* Update radarr structures to include addOptions

* Update radarr structures to include popularity

* fix(ombi): Update structures.py (#238)

* feat(docker): remove envs from example

* fix(logging): remove depreciation warning. Var for debug mode (#240)

* fix(build): bump schedule version to 1.1

* fix(build): bump docker python version

* fix(dep): update requests and urllib3

* fix(sonarr): ensure invalid sonarr queue items are just skipped over - fixes #239 (#243)

* add branch to build inputs

* update pipeline badge

* Update automation

* Add influxdb 2 client

* Add structure for influxdb 2 params

This contains all the data needed for connecting and writing to an InfluxDB2 server

* Parse influxdb 2 config data

* Add influxdb2 manager class

This stores the data needed for InfluxDB2, and has a single `write_points` function on this that takes an array of points to add to the database

* Use the correct db manager for varken

* Add influxdb2 to the example varken config file

* Create influx bucket if it doesn't exist

* Update InfluxDB type on README

* Clean up linting errors

* Wrap create bucket in try/catch

* Use bucket given in ini file

* Log exception to troubleshoot errors

* Allow configured influx2 address as URL (no port)

* Bypass validity check to troubleshoot

---------

Co-authored-by: mal5305 <malcolm.e.rogers@gmail.com>
Co-authored-by: samwiseg0 <2241731+samwiseg0@users.noreply.github.com>
Co-authored-by: Robin <19610103+RobinDadswell@users.noreply.github.com>
Co-authored-by: tigattack <10629864+tigattack@users.noreply.github.com>
Co-authored-by: Stewart Thomson <stewartthomson3@gmail.com>
Co-authored-by: Cameron Stephen <mail@cajs.co.uk>
Co-authored-by: MDHMatt <10845262+MDHMatt@users.noreply.github.com>
Co-authored-by: Nathan Adams <dinnerbone@dinnerbone.com>
Co-authored-by: Nicholas St. Germain <nick@cajun.pro>
Co-authored-by: Gabe Revells <gcrevell@mtu.edu>
This commit is contained in:
d-mcknight 2023-06-22 21:58:21 -07:00 committed by GitHub
parent b5a83f0d34
commit 7e03144365
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 578 additions and 194 deletions

View file

@ -20,6 +20,16 @@ class InfluxServer(NamedTuple):
verify_ssl: bool = False
class Influx2Server(NamedTuple):
url: str = 'localhost'
org: str = 'server'
token: str = 'TOKEN'
bucket: str = 'varken'
timeout: int = 10000
ssl: bool = False
verify_ssl: bool = False
class SonarrServer(NamedTuple):
api_key: str = None
future_days: int = 0
@ -57,6 +67,17 @@ class OmbiServer(NamedTuple):
verify_ssl: bool = False
class OverseerrServer(NamedTuple):
api_key: str = None
id: int = None
url: str = None
verify_ssl: bool = False
get_request_total_counts: bool = False
request_total_run_seconds: int = 30
num_latest_requests_to_fetch: int = 10
num_latest_requests_seconds: int = 30
class TautulliServer(NamedTuple):
api_key: str = None
fallback_ip: str = None
@ -91,22 +112,13 @@ class UniFiServer(NamedTuple):
# Shared
class Queue(NamedTuple):
downloadId: str = None
episode: dict = None
estimatedCompletionTime: str = None
id: int = None
movie: dict = None
protocol: str = None
quality: dict = None
series: dict = None
size: float = None
sizeleft: float = None
status: str = None
statusMessages: list = None
timeleft: str = None
title: str = None
trackedDownloadStatus: str = None
class QueuePages(NamedTuple):
page: int = None
pageSize: int = None
sortKey: str = None
sortDirection: str = None
totalRecords: str = None
records: list = None
# Ombi Structures
@ -127,8 +139,10 @@ class OmbiTVRequest(NamedTuple):
childRequests: list = None
denied: bool = None
deniedReason: None = None
externalProviderId: str = None
id: int = None
imdbId: str = None
languageProfile: str = None
markedAsDenied: str = None
overview: str = None
posterPath: str = None
@ -145,72 +159,159 @@ class OmbiTVRequest(NamedTuple):
class OmbiMovieRequest(NamedTuple):
approved: bool = None
approved4K: bool = None
available: bool = None
available4K: bool = None
background: str = None
canApprove: bool = None
denied: bool = None
denied4K: None = None
deniedReason: None = None
deniedReason4K: None = None
digitalRelease: bool = None
digitalReleaseDate: None = None
has4KRequest: bool = None
id: int = None
imdbId: str = None
is4kRequest: bool = None
issueId: None = None
issues: None = None
langCode: str = None
languageCode: str = None
markedAsApproved: str = None
markedAsApproved4K: str = None
markedAsAvailable: None = None
markedAsAvailable4K: None = None
markedAsDenied: str = None
markedAsDenied4K: str = None
overview: str = None
posterPath: str = None
qualityOverride: int = None
released: bool = None
releaseDate: str = None
requestedByAlias: str = None
requestedDate: str = None
requestedDate4k: str = None
requestedUser: dict = None
requestedUserId: str = None
requestStatus: str = None
requestType: int = None
rootPathOverride: int = None
showSubscribe: bool = None
source: int = None
status: str = None
subscribed: bool = None
theMovieDbId: int = None
title: str = None
langCode: str = None
languageCode: str = None
requestedByAlias: str = None
requestStatus: str = None
# Overseerr
class OverseerrRequestCounts(NamedTuple):
pending: int = None
approved: int = None
processing: int = None
available: int = None
total: int = None
movie: int = None
tv: int = None
declined: int = None
# Sonarr
class SonarrTVShow(NamedTuple):
added: str = None
airTime: str = None
alternateTitles: list = None
certification: str = None
cleanTitle: str = None
ended: bool = None
firstAired: str = None
genres: list = None
id: int = None
images: list = None
imdbId: str = None
languageProfileId: int = None
monitored: bool = None
nextAiring: str = None
network: str = None
overview: str = None
path: str = None
previousAiring: str = None
qualityProfileId: int = None
ratings: dict = None
rootFolderPath: str = None
runtime: int = None
seasonFolder: bool = None
seasons: list = None
seriesType: str = None
sortTitle: str = None
statistics: dict = None
status: str = None
tags: list = None
title: str = None
titleSlug: str = None
tvdbId: int = None
tvMazeId: int = None
tvRageId: int = None
useSceneNumbering: bool = None
year: int = None
class SonarrEpisode(NamedTuple):
absoluteEpisodeNumber: int = None
airDate: str = None
airDateUtc: str = None
episodeFile: dict = None
episodeFileId: int = None
episodeNumber: int = None
grabbed: bool = None
hasFile: bool = None
id: int = None
lastSearchTime: str = None
monitored: bool = None
overview: str = None
sceneAbsoluteEpisodeNumber: int = None
sceneEpisodeNumber: int = None
sceneSeasonNumber: int = None
seasonNumber: int = None
series: dict = None
seriesId: int = None
title: str = None
unverifiedSceneNumbering: bool = None
sceneAbsoluteEpisodeNumber: int = None
sceneEpisodeNumber: int = None
sceneSeasonNumber: int = None
series: SonarrTVShow = None
tvdbId: int = None
class SonarrQueue(NamedTuple):
downloadClient: str = None
downloadId: str = None
episodeId: int = None
id: int = None
indexer: str = None
language: dict = None
protocol: str = None
quality: dict = None
size: float = None
sizeleft: float = None
status: str = None
statusMessages: list = None
title: str = None
trackedDownloadState: str = None
trackedDownloadStatus: str = None
seriesId: int = None
errorMessage: str = None
outputPath: str = None
series: SonarrTVShow = None
episode: SonarrEpisode = None
timeleft: str = None
estimatedCompletionTime: str = None
# Radarr
class RadarrMovie(NamedTuple):
added: str = None
addOptions: str = None
alternativeTitles: list = None
alternateTitles: list = None
certification: str = None
cleanTitle: str = None
downloaded: bool = None
collection: dict = None
digitalRelease: str = None
folderName: str = None
genres: list = None
hasFile: bool = None
@ -219,32 +320,58 @@ class RadarrMovie(NamedTuple):
imdbId: str = None
inCinemas: str = None
isAvailable: bool = None
lastInfoSync: str = None
minimumAvailability: str = None
monitored: bool = None
movieFile: dict = None
originalTitle: str = None
overview: str = None
path: str = None
pathState: str = None
physicalRelease: str = None
physicalReleaseNote: str = None
profileId: int = None
qualityProfileId: int = None
ratings: dict = None
runtime: int = None
secondaryYear: str = None
secondaryYear: int = None
secondaryYearSourceId: int = None
sizeOnDisk: int = None
sizeOnDisk: float = None
sortTitle: str = None
status: str = None
studio: str = None
tags: list = None
title: str = None
titleSlug: str = None
tmdbId: int = None
website: str = None
year: int = None
youTubeTrailerId: str = None
title: str = None
originalLanguage: str = None
addOptions: str = None
popularity: str = None
# Radarr Queue
class RadarrQueue(NamedTuple):
customFormats: list = None
downloadClient: str = None
downloadId: str = None
id: int = None
indexer: str = None
languages: list = None
movieId: int = None
protocol: str = None
quality: dict = None
size: float = None
sizeleft: float = None
status: str = None
statusMessages: list = None
title: str = None
trackedDownloadState: str = None
trackedDownloadStatus: str = None
timeleft: str = None
estimatedCompletionTime: str = None
errorMessage: str = None
outputPath: str = None
movie: RadarrMovie = None
timeleft: str = None
# Sickchill
@ -364,6 +491,7 @@ class TautulliStream(NamedTuple):
reference_id: int = None
relay: int = None
relayed: int = None
row_id: int = None
section_id: str = None
secure: str = None
selected: int = None
@ -402,6 +530,7 @@ class TautulliStream(NamedTuple):
stream_video_codec: str = None
stream_video_codec_level: str = None
stream_video_decision: str = None
stream_video_dynamic_range: str = None
stream_video_framerate: str = None
stream_video_full_resolution: str = None
stream_video_height: str = None
@ -461,6 +590,7 @@ class TautulliStream(NamedTuple):
video_codec: str = None
video_codec_level: str = None
video_decision: str = None
video_dynamic_range: str = None
video_frame_rate: str = None
video_framerate: str = None
video_full_resolution: str = None
@ -491,7 +621,9 @@ class LidarrQueue(NamedTuple):
sizeleft: float = None
status: str = None
trackedDownloadStatus: str = None
trackedDownloadState: str = None
statusMessages: list = None
errorMessage: str = None
downloadId: str = None
protocol: str = None
downloadClient: str = None
@ -499,6 +631,7 @@ class LidarrQueue(NamedTuple):
outputPath: str = None
downloadForced: bool = None
id: int = None
estimatedCompletionTime: str = None
class LidarrAlbum(NamedTuple):