From 0249f582471aca1b7a7c90f4e29d5254a9b047e9 Mon Sep 17 00:00:00 2001 From: "Nicholas St. Germain" Date: Sat, 1 Dec 2018 23:15:12 -0600 Subject: [PATCH] created and assigned basic dbmanager --- README.md | 11 +++++++---- Varken/dbmanager.py | 15 +++++++++++++++ Varken/ombi.py | 12 ++++-------- Varken/radarr.py | 12 ++++-------- Varken/sonarr.py | 15 +++++---------- Varken/tautulli.py | 12 ++++-------- requirements.txt | 1 + varken.py | 10 ++++++---- 8 files changed, 46 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 94aebb8..c6e7198 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ -# Grafana Scripts -Repo for api scripts written (both pushing and pulling) to aggregate data into influxdb for grafana +# Varken +Dutch for PIG. PIG is an Acronym for PlexDB/Influx/Grafana + +Varken is a standalone commmandline utility that will aggregate date +from the plex ecosystem into influxdb to be displayed in grafana Requirements /w install links: [Grafana](http://docs.grafana.org/installation/), [Python3](https://www.python.org/downloads/), [InfluxDB](https://docs.influxdata.com/influxdb/v1.5/introduction/installation/) @@ -7,8 +10,8 @@ Requirements /w install links: [Grafana](http://docs.grafana.org/installation/), ## Quick Setup 1. Install requirements `pip3 install -r requirements.txt` -1. Make a copy of `configuration.example.py` to `configuration.py` -2. Make the appropriate changes to `configuration.py` +1. Make a copy of `varken.example.ini` to `varken.ini` in the `data` folder +2. Make the appropriate changes to `varken.ini` 1. Create your plex database in influx ```sh user@server: ~$ influx diff --git a/Varken/dbmanager.py b/Varken/dbmanager.py index e69de29..a7c7109 100644 --- a/Varken/dbmanager.py +++ b/Varken/dbmanager.py @@ -0,0 +1,15 @@ +from influxdb import InfluxDBClient + +class DBManager(object): + def __init__(self, server): + self.server = server + self.influx = InfluxDBClient(self.server.url, self.server.port, self.server.username, self.server.password, + 'plex2') + databases = [db['name'] for db in self.influx.get_list_database()] + + if 'varken' not in databases: + self.influx.create_database('varken') + self.influx.create_retention_policy('Varken 30d/1h', '30d', '1', 'varken', False, '1h') + + def write_points(self, data): + self.influx.write_points(data) \ No newline at end of file diff --git a/Varken/ombi.py b/Varken/ombi.py index 47c620c..e1a632d 100644 --- a/Varken/ombi.py +++ b/Varken/ombi.py @@ -6,18 +6,14 @@ from Varken.helpers import OmbiRequestCounts from Varken.logger import logging class OmbiAPI(object): - def __init__(self, server, influx_server): + def __init__(self, server, dbmanager): self.now = datetime.now(timezone.utc).astimezone().isoformat() - self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, - influx_server.password, 'plex2') + self.dbmanager = dbmanager self.server = server # Create session to reduce server web thread load, and globally define pageSize for all requests self.session = Session() self.session.headers = {'Apikey': self.server.api_key} - def influx_push(self, payload): - self.influx.write_points(payload) - @logging def get_total_requests(self): self.now = datetime.now(timezone.utc).astimezone().isoformat() @@ -44,7 +40,7 @@ class OmbiAPI(object): } ] - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) @logging def get_request_counts(self): @@ -67,4 +63,4 @@ class OmbiAPI(object): } ] - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) diff --git a/Varken/radarr.py b/Varken/radarr.py index d385ed7..2582197 100644 --- a/Varken/radarr.py +++ b/Varken/radarr.py @@ -7,17 +7,13 @@ from Varken.helpers import Movie, Queue class RadarrAPI(object): - def __init__(self, server, influx_server): + def __init__(self, server, dbmanager): self.now = datetime.now(timezone.utc).astimezone().isoformat() - self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, - influx_server.password, 'plex2') + self.dbmanager = dbmanager self.server = server # Create session to reduce server web thread load, and globally define pageSize for all requests self.session = Session() - def influx_push(self, payload): - self.influx.write_points(payload) - @logging def get_missing(self): endpoint = '/api/movie' @@ -55,7 +51,7 @@ class RadarrAPI(object): } ) - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) @logging def get_queue(self): @@ -100,4 +96,4 @@ class RadarrAPI(object): } ) - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) diff --git a/Varken/sonarr.py b/Varken/sonarr.py index 8967564..ae09c2e 100644 --- a/Varken/sonarr.py +++ b/Varken/sonarr.py @@ -1,5 +1,4 @@ from requests import Session -from influxdb import InfluxDBClient from datetime import datetime, timezone, date, timedelta from Varken.logger import logging @@ -7,12 +6,11 @@ from Varken.helpers import TVShow, Queue class SonarrAPI(object): - def __init__(self, server, influx_server): + def __init__(self, server, dbmanager): # Set Time of initialization self.now = datetime.now(timezone.utc).astimezone().isoformat() + self.dbmanager = dbmanager self.today = str(date.today()) - self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, - influx_server.password, 'plex') self.server = server # Create session to reduce server web thread load, and globally define pageSize for all requests self.session = Session() @@ -58,7 +56,7 @@ class SonarrAPI(object): } ) - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) @logging def get_future(self): @@ -98,7 +96,7 @@ class SonarrAPI(object): } ) - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) @logging def get_queue(self): @@ -142,7 +140,4 @@ class SonarrAPI(object): } ) - self.influx_push(influx_payload) - - def influx_push(self, payload): - self.influx.write_points(payload) + self.dbmanager.write_points(influx_payload) diff --git a/Varken/tautulli.py b/Varken/tautulli.py index 03aaa6d..6ec6d7e 100644 --- a/Varken/tautulli.py +++ b/Varken/tautulli.py @@ -7,18 +7,14 @@ from Varken.logger import logging class TautulliAPI(object): - def __init__(self, server, influx_server): + def __init__(self, server, dbmanager): # Set Time of initialization self.now = datetime.now(timezone.utc).astimezone().isoformat() - self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, - influx_server.password, 'plex2') + self.dbmanager = dbmanager self.server = server self.session = Session() self.endpoint = '/api/v2' - def influx_push(self, payload): - self.influx.write_points(payload) - @logging def get_activity(self): self.now = datetime.now(timezone.utc).astimezone().isoformat() @@ -48,7 +44,7 @@ class TautulliAPI(object): } ) - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) @logging def get_sessions(self): @@ -144,4 +140,4 @@ class TautulliAPI(object): } ) - self.influx_push(influx_payload) + self.dbmanager.write_points(influx_payload) diff --git a/requirements.txt b/requirements.txt index ceb78c6..4a24667 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ requests geoip2 influxdb +schedule \ No newline at end of file diff --git a/varken.py b/varken.py index dbe72b7..2d68b86 100644 --- a/varken.py +++ b/varken.py @@ -7,6 +7,7 @@ from Varken.sonarr import SonarrAPI from Varken.tautulli import TautulliAPI from Varken.radarr import RadarrAPI from Varken.ombi import OmbiAPI +from Varken.dbmanager import DBManager def threaded(job): thread = threading.Thread(target=job) @@ -15,10 +16,11 @@ def threaded(job): if __name__ == "__main__": CONFIG = INIParser() + DBMANAGER = DBManager(CONFIG.influx_server) if CONFIG.sonarr_enabled: for server in CONFIG.sonarr_servers: - SONARR = SonarrAPI(server, CONFIG.influx_server) + SONARR = SonarrAPI(server, DBMANAGER) if server.queue: schedule.every(server.queue_run_seconds).seconds.do(threaded, SONARR.get_queue) if server.missing_days > 0: @@ -28,7 +30,7 @@ if __name__ == "__main__": if CONFIG.tautulli_enabled: for server in CONFIG.tautulli_servers: - TAUTULLI = TautulliAPI(server, CONFIG.influx_server) + TAUTULLI = TautulliAPI(server, DBMANAGER) if server.get_activity: schedule.every(server.get_activity_run_seconds).seconds.do(threaded, TAUTULLI.get_activity) if server.get_sessions: @@ -36,7 +38,7 @@ if __name__ == "__main__": if CONFIG.radarr_enabled: for server in CONFIG.radarr_servers: - RADARR = RadarrAPI(server, CONFIG.influx_server) + RADARR = RadarrAPI(server, DBMANAGER) if server.get_missing: schedule.every(server.get_missing_run_seconds).seconds.do(threaded, RADARR.get_missing) if server.queue: @@ -44,7 +46,7 @@ if __name__ == "__main__": if CONFIG.ombi_enabled: for server in CONFIG.ombi_servers: - OMBI = OmbiAPI(server, CONFIG.influx_server) + OMBI = OmbiAPI(server, DBMANAGER) if server.request_type_counts: schedule.every(server.request_type_run_seconds).seconds.do(threaded, OMBI.get_request_counts) if server.request_total_counts: