def run(): global logger parser = argparse.ArgumentParser(description="NZBHydra") parser.add_argument("--config", action="store", help="Settings file to load", default="settings.cfg") parser.add_argument("--database", action="store", help="Database file to load", default="nzbhydra.db") parser.add_argument("--host", action="store", help="Host to run on") parser.add_argument("--port", action="store", help="Port to run on", type=int) parser.add_argument("--nobrowser", action="store_true", help="Don't open URL on startup", default=False) args = parser.parse_args() parser.print_help() settings_file = args.config database_file = args.database print("Loading settings from %s" % settings_file) config.load(settings_file) config.save(settings_file) # Write any new settings back to the file logger = log.setup_custom_logger("root") logger.info("Started") logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.mainSettings.debug.get(): logger.info("Debug mode enabled") host = config.mainSettings.host.get() if args.host is None else args.host port = config.mainSettings.port.get() if args.port is None else args.port logger.info("Starting web app on %s:%d" % (host, port)) f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.mainSettings.ssl.get() else "http" if not args.nobrowser and config.mainSettings.startup_browser.get(): logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.info("Go to %s for the frontend (or whatever your public IP is)" % f.url) check_for_new_version() web.run(host, port)
def setUp(self): init_db("tests.db") TvIdCache().delete().execute()
def run(arguments): arguments.config = arguments.config if os.path.isabs(arguments.config) else os.path.join(nzbhydra.getBasePath(), arguments.config) arguments.database = arguments.database if os.path.isabs(arguments.database) else os.path.join(nzbhydra.getBasePath(), arguments.database) nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print("An error occured during migrating the old config. Sorry about that...: ") traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() if arguments.clearloganddb: logger.warning("Deleting log file and database now as requested") try: logger.warning("Deleting database file %s" % database_file) os.unlink(database_file) except Exception as e: logger.error("Unable to close or delete log file: %s" % e) try: handler = logger.handlers[1] if len(logger.handlers) == 2 else logger.handlers[0] filename = handler.stream.name if filename and os.path.exists(filename): logger.warn("Deleting file %s" % filename) handler.flush() handler.close() logger.removeHandler(handler) os.unlink(filename) logger.addHandler(handler) except Exception as e: print("Unable to close or delete log file: %s" % e) try: import _sqlite3 logger.debug("SQLite3 version: %s" % _sqlite3.sqlite_version) except: logger.error("Unable to log SQLite version") logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) logger.info("Starting db") indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug("Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn("Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy if socksproxy: webaccess.set_proxies(socksproxy) elif config.settings.main.httpProxy: webaccess.set_proxies(config.settings.main.httpProxy, config.settings.main.httpsProxy) logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" if config.settings.main.host == "0.0.0.0" else config.settings.main.host f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
def run(arguments): nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print("An error occured during migrating the old config. Sorry about that...: ") traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug("Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn("Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy # SOCKS proxy settings if socksproxy: try: sockshost, socksport = socksproxy.split(':') # FWIW: this won't work for literal IPv6 addresses except: logger.error('Incorrect SOCKS proxy settings "%s"' % socksproxy) sockshost, socksport = [None, None] if sockshost: logger.info("Using SOCKS proxy at host %s and port %s" % (sockshost, socksport)) publicip = socks_proxy.setSOCKSproxy(sockshost, int(socksport)) if publicip: logger.info("Public IP address via SOCKS proxy: %s" % publicip) else: logger.error("Could not get public IP address. Is the proxy working?") logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import datetime import random import arrow from nzbhydra import database database.init_db("nzbhydra.db") database.db.start() onlySearches = True before = arrow.now() database.db.begin() for z in range(0, 100): print(z) for x in range(0, 10): search = database.Search.create(internal=random.randint(0, 1) == 0, time=datetime.datetime.fromtimestamp(random.randint(1477501069, arrow.utcnow().timestamp))) if not onlySearches: for y in range(0, random.randint(1, 26)): indexer_id = y # Create API access for search apiaccess = database.IndexerApiAccess.create(indexer_id=indexer_id, time=datetime.datetime.fromtimestamp(random.randint(1312677738, arrow.utcnow().timestamp)), response_successful=True, type="nzb", url="hallo", response_time=random.randint(50, 10000)) # Create search resultsCount = random.randint(0, 500) uniqueResults = random.randint(0, resultsCount) processedResults = random.randint(max(int((resultsCount + 1) / 2), 1), max(resultsCount, 1))
from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import random import threading from time import sleep import datetime import arrow from nzbhydra import database database.init_db("nzbhydra.db") database.db.start() with database.db.atomic(): for x in range(0, 500): apiaccess = database.IndexerApiAccess.create(indexer_id=random.randint(1,36), time=datetime.datetime.utcnow(), response_successful=True, type="nzb", url="hallo", response_time=random.randint(50, 10000)) download = database.IndexerNzbDownload.create(searchResult_id = 472, apiAccess_id=apiaccess.id, time=datetime.datetime.fromtimestamp(random.randint(1412677738, 1475836139)), title="Hallo", mode="redirect", internal=True) search = database.Search.create(internal=True, time=datetime.datetime.fromtimestamp(random.randint(1412677738, 1475836139))) database.db.stop()
def run(arguments): arguments.config = arguments.config if os.path.isabs( arguments.config) else os.path.join(nzbhydra.getBasePath(), arguments.config) arguments.database = arguments.database if os.path.isabs( arguments.database) else os.path.join(nzbhydra.getBasePath(), arguments.database) nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print( "An error occured during migrating the old config. Sorry about that...: " ) traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() if arguments.clearloganddb: logger.warning("Deleting log file and database now as requested") try: logger.warning("Deleting database file %s" % database_file) os.unlink(database_file) except Exception as e: logger.error("Unable to close or delete log file: %s" % e) try: handler = logger.handlers[1] if len( logger.handlers) == 2 else logger.handlers[0] filename = handler.stream.name if filename and os.path.exists(filename): logger.warn("Deleting file %s" % filename) handler.flush() handler.close() logger.removeHandler(handler) os.unlink(filename) logger.addHandler(handler) except Exception as e: print("Unable to close or delete log file: %s" % e) try: import _sqlite3 logger.debug("SQLite3 version: %s" % _sqlite3.sqlite_version) except: logger.error("Unable to log SQLite version") logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) logger.info("Starting db") indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug( "Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn( "Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port nzbhydra.urlBase = config.settings.main.urlBase if arguments.urlbase is None else arguments.urlbase socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy if socksproxy: webaccess.set_proxies(socksproxy) elif config.settings.main.httpProxy: webaccess.set_proxies(config.settings.main.httpProxy, config.settings.main.httpsProxy) # Download a very small file from github to get a good estimate how many instances of hydra are running. Only executed once per installation (well, per settings.cfg instance) if not config.settings.main.downloadCounterExecuted and not config.settings.main.isFirstStart: try: webaccess.get( "https://github.com/theotherp/apitests/releases/download/v5.0.0/downloadcounter2.zip" ) except: pass config.settings.main.downloadCounterExecuted = True config.save() if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) logger.notice("Starting web app on %s:%d" % (host, port)) else: f = furl() if config.settings.main.host == "0.0.0.0": f.host = "127.0.0.1" elif config.settings.main.host == "::": f.host = "[::1]" elif ":" in config.settings.main.host: f.host = "[%s]" % config.settings.main.host else: f.host = config.settings.main.host f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if nzbhydra.urlBase is not None: f.path = nzbhydra.urlBase + "/" logger.notice("Starting web app on %s:%d" % (f.host, port)) if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) if config.settings.main.isFirstStart: config.settings.main.isFirstStart = False config.save() web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
def run(arguments): global logger settings_file = arguments.config database_file = arguments.database print("Loading settings from %s" % settings_file) config.load(settings_file) config.save(settings_file) # Write any new settings back to the file logger = log.setup_custom_logger('root', arguments.logfile) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") #Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug("Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn("Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port logger.info("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.info("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
def run(arguments): nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print( "An error occured during migrating the old config. Sorry about that...: " ) traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug( "Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn( "Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy # SOCKS proxy settings if socksproxy: try: sockshost, socksport = socksproxy.split( ':') # FWIW: this won't work for literal IPv6 addresses except: logger.error('Incorrect SOCKS proxy settings "%s"' % socksproxy) sockshost, socksport = [None, None] if sockshost: logger.info("Using SOCKS proxy at host %s and port %s" % (sockshost, socksport)) publicip = socks_proxy.setSOCKSproxy(sockshost, int(socksport)) if publicip: logger.info("Public IP address via SOCKS proxy: %s" % publicip) else: logger.error( "Could not get public IP address. Is the proxy working?" ) logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")