reworked scheduler to pass server to instance to remove duplication
This commit is contained in:
		
							parent
							
								
									bf1db64b82
								
							
						
					
					
						commit
						7be718751b
					
				
					 6 changed files with 270 additions and 291 deletions
				
			
		|  | @ -116,7 +116,7 @@ class TautulliServer(NamedTuple): | ||||||
|     id: int = None |     id: int = None | ||||||
|     url: str = None |     url: str = None | ||||||
|     fallback_ip: str = None |     fallback_ip: str = None | ||||||
|     apikey: str = None |     api_key: str = None | ||||||
|     verify_ssl: bool = None |     verify_ssl: bool = None | ||||||
|     get_activity: bool = False |     get_activity: bool = False | ||||||
|     get_activity_run_seconds: int = 30 |     get_activity_run_seconds: int = 30 | ||||||
|  | @ -319,7 +319,6 @@ class TautulliStream(NamedTuple): | ||||||
|     transcode_progress: int = None |     transcode_progress: int = None | ||||||
|     subtitle_language: str = None |     subtitle_language: str = None | ||||||
|     stream_subtitle_container: str = None |     stream_subtitle_container: str = None | ||||||
|     _cache_time: int = None |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def geoip_download(): | def geoip_download(): | ||||||
|  |  | ||||||
|  | @ -7,11 +7,11 @@ from Varken.helpers import Movie, Queue | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class RadarrAPI(object): | class RadarrAPI(object): | ||||||
|     def __init__(self, servers, influx_server): |     def __init__(self, server, influx_server): | ||||||
|         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.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, | ||||||
|                                      influx_server.password, 'plex2') |                                      influx_server.password, 'plex2') | ||||||
|         self.servers = servers |         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 = requests.Session() |         self.session = requests.Session() | ||||||
| 
 | 
 | ||||||
|  | @ -20,19 +20,18 @@ class RadarrAPI(object): | ||||||
|         self.influx.write_points(payload) |         self.influx.write_points(payload) | ||||||
| 
 | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_missing(self, notimplemented): |     def get_missing(self): | ||||||
|         endpoint = '/api/movie' |         endpoint = '/api/movie' | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
| 
 | 
 | ||||||
|         for server in self.servers: |  | ||||||
|         missing = [] |         missing = [] | ||||||
|             headers = {'X-Api-Key': server.api_key} |         headers = {'X-Api-Key': self.server.api_key} | ||||||
|             get = self.session.get(server.url + endpoint, headers=headers, verify=server.verify_ssl).json() |         get = self.session.get(self.server.url + endpoint, headers=headers, verify=self.server.verify_ssl).json() | ||||||
|         movies = [Movie(**movie) for movie in get] |         movies = [Movie(**movie) for movie in get] | ||||||
| 
 | 
 | ||||||
|         for movie in movies: |         for movie in movies: | ||||||
|                 if server.get_missing: |             if self.server.get_missing: | ||||||
|                 if not movie.downloaded and movie.isAvailable: |                 if not movie.downloaded and movie.isAvailable: | ||||||
|                     ma = True |                     ma = True | ||||||
|                 else: |                 else: | ||||||
|  | @ -48,7 +47,7 @@ class RadarrAPI(object): | ||||||
|                         "Missing": True, |                         "Missing": True, | ||||||
|                         "Missing_Available": ma, |                         "Missing_Available": ma, | ||||||
|                         "tmdbId": mid, |                         "tmdbId": mid, | ||||||
|                             "server": server.id |                         "server": self.server.id | ||||||
|                     }, |                     }, | ||||||
|                     "time": self.now, |                     "time": self.now, | ||||||
|                     "fields": { |                     "fields": { | ||||||
|  | @ -60,15 +59,14 @@ class RadarrAPI(object): | ||||||
|         self.influx_push(influx_payload) |         self.influx_push(influx_payload) | ||||||
| 
 | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_queue(self, notimplemented): |     def get_queue(self): | ||||||
|         endpoint = '/api/queue' |         endpoint = '/api/queue' | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
| 
 | 
 | ||||||
|         for server in self.servers: |  | ||||||
|         queue = [] |         queue = [] | ||||||
|             headers = {'X-Api-Key': server.api_key} |         headers = {'X-Api-Key': self.server.api_key} | ||||||
|             get = self.session.get(server.url + endpoint, headers=headers, verify=server.verify_ssl).json() |         get = self.session.get(self.server.url + endpoint, headers=headers, verify=self.server.verify_ssl).json() | ||||||
|         for movie in get: |         for movie in get: | ||||||
|             movie['movie'] = Movie(**movie['movie']) |             movie['movie'] = Movie(**movie['movie']) | ||||||
|         download_queue = [Queue(**movie) for movie in get] |         download_queue = [Queue(**movie) for movie in get] | ||||||
|  | @ -91,7 +89,7 @@ class RadarrAPI(object): | ||||||
|                     "tags": { |                     "tags": { | ||||||
|                         "type": "Queue", |                         "type": "Queue", | ||||||
|                         "tmdbId": qid, |                         "tmdbId": qid, | ||||||
|                             "server": server.id |                         "server": self.server.id | ||||||
|                     }, |                     }, | ||||||
|                     "time": self.now, |                     "time": self.now, | ||||||
|                     "fields": { |                     "fields": { | ||||||
|  |  | ||||||
|  | @ -7,31 +7,29 @@ from Varken.helpers import TVShow, Queue | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SonarrAPI(object): | class SonarrAPI(object): | ||||||
|     def __init__(self, servers, influx_server): |     def __init__(self, server, influx_server): | ||||||
|         # 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.today = str(date.today()) |         self.today = str(date.today()) | ||||||
|         self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, |         self.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, | ||||||
|                                      influx_server.password, 'plex') |                                      influx_server.password, 'plex') | ||||||
|         self.servers = servers |         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 = requests.Session() |         self.session = requests.Session() | ||||||
|         self.session.params = {'pageSize': 1000} |         self.session.params = {'pageSize': 1000} | ||||||
| 
 | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_missing(self, days_past): |     def get_missing(self): | ||||||
|         endpoint = '/api/calendar' |         endpoint = '/api/calendar' | ||||||
|         last_days = str(date.today() + timedelta(days=-days_past)) |         last_days = str(date.today() + timedelta(days=-self.server.missing_days)) | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
|         params = {'start': last_days, 'end': self.today} |         params = {'start': last_days, 'end': self.today} | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
| 
 |  | ||||||
|         for server in self.servers: |  | ||||||
|         missing = [] |         missing = [] | ||||||
|             headers = {'X-Api-Key': server.api_key} |         headers = {'X-Api-Key': self.server.api_key} | ||||||
| 
 | 
 | ||||||
|             get = self.session.get(server.url + endpoint, params=params, headers=headers, |         get = self.session.get(self.server.url + endpoint, params=params, headers=headers, | ||||||
|                                    verify=server.verify_ssl).json() |                                verify=self.server.verify_ssl).json() | ||||||
|         # Iteratively create a list of TVShow Objects from response json |         # Iteratively create a list of TVShow Objects from response json | ||||||
|         tv_shows = [TVShow(**show) for show in get] |         tv_shows = [TVShow(**show) for show in get] | ||||||
| 
 | 
 | ||||||
|  | @ -48,7 +46,7 @@ class SonarrAPI(object): | ||||||
|                     "tags": { |                     "tags": { | ||||||
|                         "type": "Missing", |                         "type": "Missing", | ||||||
|                         "sonarrId": sonarr_id, |                         "sonarrId": sonarr_id, | ||||||
|                             "server": server.id |                         "server": self.server.id | ||||||
|                     }, |                     }, | ||||||
|                     "time": self.now, |                     "time": self.now, | ||||||
|                     "fields": { |                     "fields": { | ||||||
|  | @ -62,21 +60,19 @@ class SonarrAPI(object): | ||||||
| 
 | 
 | ||||||
|         self.influx_push(influx_payload) |         self.influx_push(influx_payload) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_future(self, future_days): |     def get_future(self): | ||||||
|         endpoint = '/api/calendar/' |         endpoint = '/api/calendar/' | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
|         future = str(date.today() + timedelta(days=future_days)) |         future = str(date.today() + timedelta(days=self.server.future_days)) | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
| 
 |  | ||||||
|         for server in self.servers: |  | ||||||
|         air_days = [] |         air_days = [] | ||||||
| 
 |         headers = {'X-Api-Key': self.server.api_key} | ||||||
|             headers = {'X-Api-Key': server.api_key} |  | ||||||
|         params = {'start': self.today, 'end': future} |         params = {'start': self.today, 'end': future} | ||||||
| 
 | 
 | ||||||
|             get = self.session.get(server.url + endpoint, params=params, headers=headers, |         get = self.session.get(self.server.url + endpoint, params=params, headers=headers, | ||||||
|                                    verify=server.verify_ssl).json() |                                verify=self.server.verify_ssl).json() | ||||||
|         tv_shows = [TVShow(**show) for show in get] |         tv_shows = [TVShow(**show) for show in get] | ||||||
| 
 | 
 | ||||||
|         for show in tv_shows: |         for show in tv_shows: | ||||||
|  | @ -90,7 +86,7 @@ class SonarrAPI(object): | ||||||
|                     "tags": { |                     "tags": { | ||||||
|                         "type": "Future", |                         "type": "Future", | ||||||
|                         "sonarrId": sonarr_id, |                         "sonarrId": sonarr_id, | ||||||
|                             "server": server.id |                         "server": self.server.id | ||||||
|                     }, |                     }, | ||||||
|                     "time": self.now, |                     "time": self.now, | ||||||
|                     "fields": { |                     "fields": { | ||||||
|  | @ -106,16 +102,14 @@ class SonarrAPI(object): | ||||||
|         self.influx_push(influx_payload) |         self.influx_push(influx_payload) | ||||||
| 
 | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_queue(self, notimplemented): |     def get_queue(self): | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
|         endpoint = '/api/queue' |         endpoint = '/api/queue' | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
| 
 |  | ||||||
|         for server in self.servers: |  | ||||||
|         queue = [] |         queue = [] | ||||||
|             headers = {'X-Api-Key': server.api_key} |         headers = {'X-Api-Key': self.server.api_key} | ||||||
| 
 | 
 | ||||||
|             get = self.session.get(server.url + endpoint, headers=headers, verify=server.verify_ssl).json() |         get = self.session.get(self.server.url + endpoint, headers=headers, verify=self.server.verify_ssl).json() | ||||||
|         download_queue = [Queue(**show) for show in get] |         download_queue = [Queue(**show) for show in get] | ||||||
| 
 | 
 | ||||||
|         for show in download_queue: |         for show in download_queue: | ||||||
|  | @ -135,7 +129,7 @@ class SonarrAPI(object): | ||||||
|                     "tags": { |                     "tags": { | ||||||
|                         "type": "Queue", |                         "type": "Queue", | ||||||
|                         "sonarrId": sonarr_id, |                         "sonarrId": sonarr_id, | ||||||
|                             "server": server.id |                         "server": self.server.id | ||||||
| 
 | 
 | ||||||
|                     }, |                     }, | ||||||
|                     "time": self.now, |                     "time": self.now, | ||||||
|  |  | ||||||
|  | @ -7,12 +7,12 @@ from Varken.logger import logging | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TautulliAPI(object): | class TautulliAPI(object): | ||||||
|     def __init__(self, servers, influx_server): |     def __init__(self, server, influx_server): | ||||||
|         # 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.influx = InfluxDBClient(influx_server.url, influx_server.port, influx_server.username, | ||||||
|                                      influx_server.password, 'plex2') |                                      influx_server.password, 'plex2') | ||||||
|         self.servers = servers |         self.server = server | ||||||
|         self.session = requests.Session() |         self.session = requests.Session() | ||||||
|         self.endpoint = '/api/v2' |         self.endpoint = '/api/v2' | ||||||
| 
 | 
 | ||||||
|  | @ -21,14 +21,12 @@ class TautulliAPI(object): | ||||||
|         self.influx.write_points(payload) |         self.influx.write_points(payload) | ||||||
| 
 | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_activity(self, notimplemented): |     def get_activity(self): | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
|         params = {'cmd': 'get_activity'} |         params = {'cmd': 'get_activity'} | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
| 
 |         params['apikey'] = self.server.api_key | ||||||
|         for server in self.servers: |         g = self.session.get(self.server.url + self.endpoint, params=params, verify=self.server.verify_ssl) | ||||||
|             params['apikey'] = server.apikey |  | ||||||
|             g = self.session.get(server.url + self.endpoint, params=params, verify=server.verify_ssl) |  | ||||||
|         get = g.json()['response']['data'] |         get = g.json()['response']['data'] | ||||||
| 
 | 
 | ||||||
|         influx_payload.append( |         influx_payload.append( | ||||||
|  | @ -36,7 +34,7 @@ class TautulliAPI(object): | ||||||
|                 "measurement": "Tautulli", |                 "measurement": "Tautulli", | ||||||
|                 "tags": { |                 "tags": { | ||||||
|                     "type": "current_stream_stats", |                     "type": "current_stream_stats", | ||||||
|                         "server": server.id |                     "server": self.server.id | ||||||
|                 }, |                 }, | ||||||
|                 "time": self.now, |                 "time": self.now, | ||||||
|                 "fields": { |                 "fields": { | ||||||
|  | @ -54,14 +52,12 @@ class TautulliAPI(object): | ||||||
|         self.influx_push(influx_payload) |         self.influx_push(influx_payload) | ||||||
| 
 | 
 | ||||||
|     @logging |     @logging | ||||||
|     def get_sessions(self, notimplemented): |     def get_sessions(self): | ||||||
|         self.now = datetime.now(timezone.utc).astimezone().isoformat() |         self.now = datetime.now(timezone.utc).astimezone().isoformat() | ||||||
|         params = {'cmd': 'get_activity'} |         params = {'cmd': 'get_activity'} | ||||||
|         influx_payload = [] |         influx_payload = [] | ||||||
| 
 |         params['apikey'] = self.server.api_key | ||||||
|         for server in self.servers: |         g = self.session.get(self.server.url + self.endpoint, params=params, verify=self.server.verify_ssl) | ||||||
|             params['apikey'] = server.apikey |  | ||||||
|             g = self.session.get(server.url + self.endpoint, params=params, verify=server.verify_ssl) |  | ||||||
|         get = g.json()['response']['data']['sessions'] |         get = g.json()['response']['data']['sessions'] | ||||||
|         sessions = [TautulliStream(**session) for session in get] |         sessions = [TautulliStream(**session) for session in get] | ||||||
| 
 | 
 | ||||||
|  | @ -69,8 +65,8 @@ class TautulliAPI(object): | ||||||
|             try: |             try: | ||||||
|                 geodata = geo_lookup(session.ip_address_public) |                 geodata = geo_lookup(session.ip_address_public) | ||||||
|             except (ValueError, AddressNotFoundError): |             except (ValueError, AddressNotFoundError): | ||||||
|                     if server.fallback_ip: |                 if self.server.fallback_ip: | ||||||
|                         geodata = geo_lookup(server.fallback_ip) |                     geodata = geo_lookup(self.server.fallback_ip) | ||||||
|                 else: |                 else: | ||||||
|                     my_ip = requests.get('http://ip.42.pl/raw').text |                     my_ip = requests.get('http://ip.42.pl/raw').text | ||||||
|                     geodata = geo_lookup(my_ip) |                     geodata = geo_lookup(my_ip) | ||||||
|  | @ -135,7 +131,7 @@ class TautulliAPI(object): | ||||||
|                         "longitude": longitude, |                         "longitude": longitude, | ||||||
|                         "player_state": player_state, |                         "player_state": player_state, | ||||||
|                         "device_type": session.platform, |                         "device_type": session.platform, | ||||||
|                             "server": server.id |                         "server": self.server.id | ||||||
|                     }, |                     }, | ||||||
|                     "time": self.now, |                     "time": self.now, | ||||||
|                     "fields": { |                     "fields": { | ||||||
|  |  | ||||||
|  | @ -61,7 +61,6 @@ verify_ssl = true | ||||||
| queue = true | queue = true | ||||||
| queue_run_seconds = 300 | queue_run_seconds = 300 | ||||||
| get_missing = true | get_missing = true | ||||||
| get_missing_available = true |  | ||||||
| get_missing_run_seconds = 300 | get_missing_run_seconds = 300 | ||||||
| 
 | 
 | ||||||
| [radarr-2] | [radarr-2] | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								varken.py
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								varken.py
									
										
									
									
									
								
							|  | @ -8,8 +8,8 @@ from Varken.tautulli import TautulliAPI | ||||||
| from Varken.radarr import RadarrAPI | from Varken.radarr import RadarrAPI | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def threaded(job, days=None): | def threaded(job): | ||||||
|     thread = threading.Thread(target=job, args=([days])) |     thread = threading.Thread(target=job) | ||||||
|     thread.start() |     thread.start() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -17,38 +17,31 @@ if __name__ == "__main__": | ||||||
|     CONFIG = INIParser() |     CONFIG = INIParser() | ||||||
| 
 | 
 | ||||||
|     if CONFIG.sonarr_enabled: |     if CONFIG.sonarr_enabled: | ||||||
|         SONARR = SonarrAPI(CONFIG.sonarr_servers, CONFIG.influx_server) |  | ||||||
| 
 |  | ||||||
|         for server in CONFIG.sonarr_servers: |         for server in CONFIG.sonarr_servers: | ||||||
|  |             SONARR = SonarrAPI(server, CONFIG.influx_server) | ||||||
|             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: | ||||||
|                 schedule.every(server.missing_days_run_seconds).seconds.do(threaded, SONARR.get_missing, |                 schedule.every(server.missing_days_run_seconds).seconds.do(threaded, SONARR.get_missing) | ||||||
|                                                                            server.missing_days) |  | ||||||
|             if server.future_days > 0: |             if server.future_days > 0: | ||||||
|                 schedule.every(server.future_days_run_seconds).seconds.do(threaded, SONARR.get_future, |                 schedule.every(server.future_days_run_seconds).seconds.do(threaded, SONARR.get_future) | ||||||
|                                                                           server.future_days) |  | ||||||
| 
 | 
 | ||||||
|     if CONFIG.tautulli_enabled: |     if CONFIG.tautulli_enabled: | ||||||
|         TAUTULLI = TautulliAPI(CONFIG.tautulli_servers, CONFIG.influx_server) |  | ||||||
| 
 |  | ||||||
|         for server in CONFIG.tautulli_servers: |         for server in CONFIG.tautulli_servers: | ||||||
|  |             TAUTULLI = TautulliAPI(server, CONFIG.influx_server) | ||||||
|             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: | ||||||
|                 schedule.every(server.get_sessions_run_seconds).seconds.do(threaded, TAUTULLI.get_sessions) |                 schedule.every(server.get_sessions_run_seconds).seconds.do(threaded, TAUTULLI.get_sessions) | ||||||
| 
 | 
 | ||||||
|     if CONFIG.radarr_enabled: |     if CONFIG.radarr_enabled: | ||||||
|         RADARR = RadarrAPI(CONFIG.radarr_servers, CONFIG.influx_server) |  | ||||||
| 
 |  | ||||||
|         for server in CONFIG.radarr_servers: |         for server in CONFIG.radarr_servers: | ||||||
|             if any([server.get_missing, server.get_missing_available]): |             RADARR = RadarrAPI(server, CONFIG.influx_server) | ||||||
|  |             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: | ||||||
|                 schedule.every(server.queue_run_seconds).seconds.do(threaded, RADARR.get_queue) |                 schedule.every(server.queue_run_seconds).seconds.do(threaded, RADARR.get_queue) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     while True: |     while True: | ||||||
|         schedule.run_pending() |         schedule.run_pending() | ||||||
|         sleep(1) |         sleep(1) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue