#!/usr/bin/python import datetime import libs.queries as queries import libs.mappings as mappings import libs.stalker_video as stalker_video from libs.logger import logger logger = logger.getChild('ifc_media') class IfcMedia(): def __init__(self, dbisnt): self.db = dbisnt def SyncToPlex(self): "syncronise the interface ifc_media table with latest data from Plex" plexMedia = self.db.queryPlex(queries.Plex.getMediaData) ifcPlexMedia = self.db.queryIfcDB(queries.Ifc.allPlexMediaData) #media_id = [0] #metadata_id = [1] #media_last_update = [2] #metadata_last_update = [3] logger.info("write new plex records") nRecords = 0 for p in plexMedia: if not any(im[1] == p[1] for im in ifcPlexMedia):
from flask import Blueprint, render_template, request, Response from pygtail import Pygtail import os, sys, time, errno from zipfile import ZipFile from io import BytesIO from libs.logger import logger, LOG_FILE logger = logger.getChild('webapp') from libs.nrgreader import Reader main = Blueprint('main', __name__) @main.route('/') def index(): #togeher with read_from_end parameter for Pygtail, below ensures Pygtail does not load logfile history when loading web console remove_pygtail_offset() #time.sleep(0.5) logger.info("Application console open") return render_template('index.html') @main.route('/log') def progress_log(): def generate(): for line in Pygtail(LOG_FILE, every_n=1, read_from_end=True): yield "data:" + str(line) + "\n\n" time.sleep(0.2) return Response(generate(), mimetype= 'text/event-stream')
#!/usr/bin/python from libs.db import DB from libs.stalker_video import StalkerVideo from libs.ifc_seasons import IfcSeasons from libs.ifc_media import IfcMedia from libs.stalker_seasons import StalkerSeasons from libs.ifc_episodes import IfcEpisodes import libs.mappings as mappings from libs.logger import logger logger = logger.getChild('interface') class Interface: def __init__(self, app_dir, plex_dir, stalker_db_host,stalker_db_user, stalker_db_pass): dbinst = DB(app_dir, plex_dir, stalker_db_host, stalker_db_user, stalker_db_pass) self.db = dbinst self.ifcm = IfcMedia(dbinst) self.stvd = StalkerVideo(dbinst) self.ifcs = IfcSeasons(dbinst) self.stsn = StalkerSeasons(dbinst) self.ifep = IfcEpisodes(dbinst) def Execute(self): logger.info("syncronising Plex genres to Stalker") movies = self.stvd.SyncVideoGenres() logger.info("updating ifc_media table with Plex data") md = self.ifcm.SyncToPlex() logger.info("updating stalker video table")
#!/usr/bin/python import datetime import libs.queries as queries import libs.mappings as mappings import libs.interface as ifc from libs.logger import logger logger = logger.getChild('stalker_video') class StalkerVideo(): "Opreations related to update and sync of the video table in Stalker database" def __init__(self, dbisnt): self.db = dbisnt def SyncVideoGenres(self): "add any new media genres from Plex to Stalker" genres = self.db.queryPlex(queries.Plex.getCategories) genresList = [] for g in genres: categoryAlias = mappings.Common.getStalkerCategoryAlias(g[1]) if len(g[0]) == 0: continue if '|' in g[0]: genresList.append((categoryAlias, g[0].split('|')[0])) genresList.append((categoryAlias, g[0].split('|')[1])) else: genresList.append((categoryAlias, g[0].split('|')[0]))
# Generic imports import json # used when storing nrg readings into local json from datetime import datetime # used to capture time when meter readings are stored import os # used for file operations # Establish logging from libs.logger import logger, LOG_FILE logger = logger.getChild('nrgreader') # Pymodbus object from pymodbus.client.sync import ModbusTcpClient from pymodbus.payload import BinaryPayloadDecoder from pymodbus.constants import Endian # Client to work with influx database from influxdb import InfluxDBClient # IP and port of the Modbus TCP gateway MODBUS_GW = dict(host='192.168.2.222', port=502) # Energy meters METERS = [ dict(meter_id=10, influx_measure_base_name='line0'), dict(meter_id=11, influx_measure_base_name='line1'), dict(meter_id=2, influx_measure_base_name='line2'), dict(meter_id=3, influx_measure_base_name='line3'), dict(meter_id=4, influx_measure_base_name='line4'), dict(meter_id=5, influx_measure_base_name='line5') ] # filename of the json where the readings from previous run are stored
from waitress import serve from libs.logger import logger, LOG_FILE logger = logger.getChild('run') import webapp if __name__ == '__main__': try: app = webapp.create_app() logger.info("Starting web conosole at 0.0.0.0:5000") serve(app, host="0.0.0.0", port=5000) except (KeyboardInterrupt, SystemExit): exit pass