created and assigned basic dbmanager

This commit is contained in:
Nicholas St. Germain 2018-12-01 23:15:12 -06:00
parent 818f4bea7c
commit 0249f58247
8 changed files with 46 additions and 42 deletions

View file

@ -1,5 +1,8 @@
# Grafana Scripts # Varken
Repo for api scripts written (both pushing and pulling) to aggregate data into influxdb for grafana 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/) 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 ## Quick Setup
1. Install requirements `pip3 install -r requirements.txt` 1. Install requirements `pip3 install -r requirements.txt`
1. Make a copy of `configuration.example.py` to `configuration.py` 1. Make a copy of `varken.example.ini` to `varken.ini` in the `data` folder
2. Make the appropriate changes to `configuration.py` 2. Make the appropriate changes to `varken.ini`
1. Create your plex database in influx 1. Create your plex database in influx
```sh ```sh
user@server: ~$ influx user@server: ~$ influx

View file

@ -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)

View file

@ -6,18 +6,14 @@ from Varken.helpers import OmbiRequestCounts
from Varken.logger import logging from Varken.logger import logging
class OmbiAPI(object): class OmbiAPI(object):
def __init__(self, server, influx_server): def __init__(self, server, dbmanager):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, self.dbmanager = dbmanager
influx_server.password, 'plex2')
self.server = server self.server = server
# Create session to reduce server web thread load, and globally define pageSize for all requests # Create session to reduce server web thread load, and globally define pageSize for all requests
self.session = Session() self.session = Session()
self.session.headers = {'Apikey': self.server.api_key} self.session.headers = {'Apikey': self.server.api_key}
def influx_push(self, payload):
self.influx.write_points(payload)
@logging @logging
def get_total_requests(self): def get_total_requests(self):
self.now = datetime.now(timezone.utc).astimezone().isoformat() 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 @logging
def get_request_counts(self): def get_request_counts(self):
@ -67,4 +63,4 @@ class OmbiAPI(object):
} }
] ]
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)

View file

@ -7,17 +7,13 @@ from Varken.helpers import Movie, Queue
class RadarrAPI(object): class RadarrAPI(object):
def __init__(self, server, influx_server): def __init__(self, server, dbmanager):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, self.dbmanager = dbmanager
influx_server.password, 'plex2')
self.server = server self.server = server
# Create session to reduce server web thread load, and globally define pageSize for all requests # Create session to reduce server web thread load, and globally define pageSize for all requests
self.session = Session() self.session = Session()
def influx_push(self, payload):
self.influx.write_points(payload)
@logging @logging
def get_missing(self): def get_missing(self):
endpoint = '/api/movie' endpoint = '/api/movie'
@ -55,7 +51,7 @@ class RadarrAPI(object):
} }
) )
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)
@logging @logging
def get_queue(self): def get_queue(self):
@ -100,4 +96,4 @@ class RadarrAPI(object):
} }
) )
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)

View file

@ -1,5 +1,4 @@
from requests import Session from requests import Session
from influxdb import InfluxDBClient
from datetime import datetime, timezone, date, timedelta from datetime import datetime, timezone, date, timedelta
from Varken.logger import logging from Varken.logger import logging
@ -7,12 +6,11 @@ from Varken.helpers import TVShow, Queue
class SonarrAPI(object): class SonarrAPI(object):
def __init__(self, server, influx_server): def __init__(self, server, dbmanager):
# Set Time of initialization # Set Time of initialization
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
self.dbmanager = dbmanager
self.today = str(date.today()) self.today = str(date.today())
self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username,
influx_server.password, 'plex')
self.server = server self.server = server
# Create session to reduce server web thread load, and globally define pageSize for all requests # Create session to reduce server web thread load, and globally define pageSize for all requests
self.session = Session() self.session = Session()
@ -58,7 +56,7 @@ class SonarrAPI(object):
} }
) )
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)
@logging @logging
def get_future(self): def get_future(self):
@ -98,7 +96,7 @@ class SonarrAPI(object):
} }
) )
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)
@logging @logging
def get_queue(self): def get_queue(self):
@ -142,7 +140,4 @@ class SonarrAPI(object):
} }
) )
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)
def influx_push(self, payload):
self.influx.write_points(payload)

View file

@ -7,18 +7,14 @@ from Varken.logger import logging
class TautulliAPI(object): class TautulliAPI(object):
def __init__(self, server, influx_server): def __init__(self, server, dbmanager):
# Set Time of initialization # Set Time of initialization
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, self.dbmanager = dbmanager
influx_server.password, 'plex2')
self.server = server self.server = server
self.session = Session() self.session = Session()
self.endpoint = '/api/v2' self.endpoint = '/api/v2'
def influx_push(self, payload):
self.influx.write_points(payload)
@logging @logging
def get_activity(self): def get_activity(self):
self.now = datetime.now(timezone.utc).astimezone().isoformat() 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 @logging
def get_sessions(self): def get_sessions(self):
@ -144,4 +140,4 @@ class TautulliAPI(object):
} }
) )
self.influx_push(influx_payload) self.dbmanager.write_points(influx_payload)

View file

@ -5,3 +5,4 @@
requests requests
geoip2 geoip2
influxdb influxdb
schedule

View file

@ -7,6 +7,7 @@ from Varken.sonarr import SonarrAPI
from Varken.tautulli import TautulliAPI from Varken.tautulli import TautulliAPI
from Varken.radarr import RadarrAPI from Varken.radarr import RadarrAPI
from Varken.ombi import OmbiAPI from Varken.ombi import OmbiAPI
from Varken.dbmanager import DBManager
def threaded(job): def threaded(job):
thread = threading.Thread(target=job) thread = threading.Thread(target=job)
@ -15,10 +16,11 @@ def threaded(job):
if __name__ == "__main__": if __name__ == "__main__":
CONFIG = INIParser() CONFIG = INIParser()
DBMANAGER = DBManager(CONFIG.influx_server)
if CONFIG.sonarr_enabled: if CONFIG.sonarr_enabled:
for server in CONFIG.sonarr_servers: for server in CONFIG.sonarr_servers:
SONARR = SonarrAPI(server, CONFIG.influx_server) SONARR = SonarrAPI(server, DBMANAGER)
if server.queue: if server.queue:
schedule.every(server.queue_run_seconds).seconds.do(threaded, SONARR.get_queue) schedule.every(server.queue_run_seconds).seconds.do(threaded, SONARR.get_queue)
if server.missing_days > 0: if server.missing_days > 0:
@ -28,7 +30,7 @@ if __name__ == "__main__":
if CONFIG.tautulli_enabled: if CONFIG.tautulli_enabled:
for server in CONFIG.tautulli_servers: for server in CONFIG.tautulli_servers:
TAUTULLI = TautulliAPI(server, CONFIG.influx_server) TAUTULLI = TautulliAPI(server, DBMANAGER)
if server.get_activity: if server.get_activity:
schedule.every(server.get_activity_run_seconds).seconds.do(threaded, TAUTULLI.get_activity) schedule.every(server.get_activity_run_seconds).seconds.do(threaded, TAUTULLI.get_activity)
if server.get_sessions: if server.get_sessions:
@ -36,7 +38,7 @@ if __name__ == "__main__":
if CONFIG.radarr_enabled: if CONFIG.radarr_enabled:
for server in CONFIG.radarr_servers: for server in CONFIG.radarr_servers:
RADARR = RadarrAPI(server, CONFIG.influx_server) RADARR = RadarrAPI(server, DBMANAGER)
if server.get_missing: if server.get_missing:
schedule.every(server.get_missing_run_seconds).seconds.do(threaded, RADARR.get_missing) schedule.every(server.get_missing_run_seconds).seconds.do(threaded, RADARR.get_missing)
if server.queue: if server.queue:
@ -44,7 +46,7 @@ if __name__ == "__main__":
if CONFIG.ombi_enabled: if CONFIG.ombi_enabled:
for server in CONFIG.ombi_servers: for server in CONFIG.ombi_servers:
OMBI = OmbiAPI(server, CONFIG.influx_server) OMBI = OmbiAPI(server, DBMANAGER)
if server.request_type_counts: if server.request_type_counts:
schedule.every(server.request_type_run_seconds).seconds.do(threaded, OMBI.get_request_counts) schedule.every(server.request_type_run_seconds).seconds.do(threaded, OMBI.get_request_counts)
if server.request_total_counts: if server.request_total_counts: