created and assigned basic dbmanager
This commit is contained in:
		
							parent
							
								
									818f4bea7c
								
							
						
					
					
						commit
						0249f58247
					
				
					 8 changed files with 46 additions and 42 deletions
				
			
		
							
								
								
									
										11
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
										
									
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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) |  | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -5,3 +5,4 @@ | ||||||
| requests | requests | ||||||
| geoip2 | geoip2 | ||||||
| influxdb | influxdb | ||||||
|  | schedule | ||||||
							
								
								
									
										10
									
								
								varken.py
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								varken.py
									
										
									
									
									
								
							|  | @ -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: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue