Files
poky/bitbake/bin/bitbake-hashserv
Joshua Watt cfbb1d2cc0 bitbake: hashserv: Add SQLalchemy backend
Adds an SQLAlchemy backend to the server. While this database backend is
slower than the more direct sqlite backend, it easily supports just
about any SQL server, which is useful for large scale deployments.

(Bitbake rev: e0b73466dd7478c77c82f46879246c1b68b228c0)

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-11-09 17:33:02 +00:00

3.2 KiB
Executable File

#! /usr/bin/env python3

Copyright (C) 2018 Garmin Ltd.

SPDX-License-Identifier: GPL-2.0-only

import os import sys import logging import argparse import sqlite3 import warnings

warnings.simplefilter("default")

sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(file)), "lib"))

import hashserv

VERSION = "1.0.0"

DEFAULT_BIND = "unix://./hashserve.sock"

def main(): parser = argparse.ArgumentParser( description="Hash Equivalence Reference Server. Version=%s" % VERSION, formatter_class=argparse.RawTextHelpFormatter, epilog=""" The bind address may take one of the following formats: unix://PATH - Bind to unix domain socket at PATH ws://ADDRESS:PORT - Bind to websocket on ADDRESS:PORT ADDRESS:PORT - Bind to raw TCP socket on ADDRESS:PORT

To bind to all addresses, leave the ADDRESS empty, e.g. "--bind :8686" or "--bind ws://:8686". To bind to a specific IPv6 address, enclose the address in "[]", e.g. "--bind [::1]:8686" or "--bind ws://[::1]:8686" """, )

parser.add_argument(
    "-b",
    "--bind",
    default=os.environ.get("HASHSERVER_BIND", DEFAULT_BIND),
    help='Bind address (default $HASHSERVER_BIND, "%(default)s")',
)
parser.add_argument(
    "-d",
    "--database",
    default=os.environ.get("HASHSERVER_DB", "./hashserv.db"),
    help='Database file (default $HASHSERVER_DB, "%(default)s")',
)
parser.add_argument(
    "-l",
    "--log",
    default=os.environ.get("HASHSERVER_LOG_LEVEL", "WARNING"),
    help='Set logging level (default $HASHSERVER_LOG_LEVEL, "%(default)s")',
)
parser.add_argument(
    "-u",
    "--upstream",
    default=os.environ.get("HASHSERVER_UPSTREAM", None),
    help="Upstream hashserv to pull hashes from ($HASHSERVER_UPSTREAM)",
)
parser.add_argument(
    "-r",
    "--read-only",
    action="store_true",
    help="Disallow write operations from clients ($HASHSERVER_READ_ONLY)",
)
parser.add_argument(
    "--db-username",
    default=os.environ.get("HASHSERVER_DB_USERNAME", None),
    help="Database username ($HASHSERVER_DB_USERNAME)",
)
parser.add_argument(
    "--db-password",
    default=os.environ.get("HASHSERVER_DB_PASSWORD", None),
    help="Database password ($HASHSERVER_DB_PASSWORD)",
)

args = parser.parse_args()

logger = logging.getLogger("hashserv")

level = getattr(logging, args.log.upper(), None)
if not isinstance(level, int):
    raise ValueError("Invalid log level: %s" % args.log)

logger.setLevel(level)
console = logging.StreamHandler()
console.setLevel(level)
logger.addHandler(console)

read_only = (os.environ.get("HASHSERVER_READ_ONLY", "0") == "1") or args.read_only

server = hashserv.create_server(
    args.bind,
    args.database,
    upstream=args.upstream,
    read_only=read_only,
    db_username=args.db_username,
    db_password=args.db_password,
)
server.serve_forever()
return 0

if name == "main": try: ret = main() except Exception: ret = 1 import traceback

    traceback.print_exc()
sys.exit(ret)