#!bin/python from run_local import log from light9 import showconfig from light9.namespaces import L9 from urllib.parse import urlparse from urllib.parse import splitport 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) print("listen %s;" % splitport(urlparse(webServer).netloc)[1]) def location(path, server): print(f""" location /{path}/ {{ # for websocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_pass {server}; proxy_buffering off; rewrite /[^/]+/(.*) /$1 break; }}""") for role, server in sorted(graph.predicate_objects(netHome)): if not server.startswith('http') or role == L9['webServer']: continue path = graph.value(role, L9['urlPath']) if not path: continue server = server.rstrip('/') if 'collector' in path: continue location(path, server) print(''' location /collector/metrics { rewrite "/collector(/.*)" "$1" break; proxy_pass http://localhost:8202; } location /collector/ { proxy_pass http://localhost:8302; } ''') showPath = showconfig.showUri().split('/', 3)[-1] root = showconfig.root()[:-len(showPath)].decode('ascii') print(f""" location /{showPath} {{ root {root}; }}""")