Files @ 891c380afcc1
Branch filter:

Location: light9/light9/homepage/write_config.py

drewp@bigasterisk.com
move py code under light9, add import test
import sys
from urllib.parse import urlparse

from light9 import showconfig
from light9.namespaces import L9
from light9.run_local import log


def main():
    [outPath] = sys.argv[1:]

    log.info('generating config')
    graph = showconfig.getGraph()
    netHome = graph.value(showconfig.showUri(), L9['networking'])
    webServer = graph.value(netHome, L9['webServer'])
    if not webServer:
        raise ValueError('no %r :webServer' % netHome)

    with open(outPath, 'wt') as out:
        line = "listen %s;" % urlparse(str(webServer)).port
        print(line, file=out)
        log.info(line)

        def location(path, server, viteServer):
            print(f"""

        location = /{path}/metrics {{
          rewrite ^/{path}(/.*) $1 break;
          proxy_pass {server}; 
        }}

        location /{path}/api/ {{
          # just the tail part for services
          rewrite ^/{path}/api(/.*) $1 break;
          proxy_pass {server}; 

          # for websocket
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_set_header Host $host;

          proxy_buffering off;

        }}
        location /{path}/ {{
          # vite has 'base' to deal with the /{path}/ part of the request
          proxy_pass {viteServer}; 
        }}

        """,
                  file=out)

        for role, server in sorted(graph.predicate_objects(netHome)):
            if not str(server).startswith('http') or role == L9['webServer']:
                continue
            path = graph.value(role, L9['urlPath'])
            if not path:
                continue
            server = str(server).rstrip('/')
            viteServer = server.replace('82', '83')  # rewrite this please
            location(path, server, viteServer)

        showPath = showconfig.showUri().split('/', 3)[-1]
        root = showconfig.root()[:-len(showPath)].decode('ascii')
        print(f"""
        location /{showPath} {{
          root {root};
        }}""", file=out)


if __name__ == '__main__':
    main()