view src/luan/modules/http/LuanDomainHandler.java @ 1328:55b8210b4ec0

add MDC host
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 09 Feb 2019 21:49:42 -0700
parents 307e76ccd0d6
children 5a39b006acd1
line wrap: on
line source

package luan.modules.http;

import org.apache.log4j.MDC;
import luan.webserver.Request;
import luan.webserver.Response;
import luan.webserver.Handler;
import luan.webserver.handlers.DomainHandler;
import luan.LuanState;
import luan.LuanTable;
import luan.LuanCloner;
import luan.LuanException;
import luan.modules.logging.LuanLogger;


public final class LuanDomainHandler implements Handler {

	private final LuanState luanInit;

	private final DomainHandler.Factory factory = new DomainHandler.Factory() {
		public Handler newHandler(String domain) {
			LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
			LuanState luan = (LuanState)cloner.clone(luanInit);
			try {
				LuanLogger.newLoggerRepository(luan);
				LuanTable Http = (LuanTable)luan.require("luan:http/Http.luan");
				Http.put( "domain", domain );
			} catch(LuanException e) {
				throw new RuntimeException(e);
			}
			return new LuanHandler(luan);
		}
	};

	private final DomainHandler domainHandler = new DomainHandler(factory);

	public LuanDomainHandler(LuanState luanInit) {
		LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
		this.luanInit = (LuanState)cloner.clone(luanInit);
	}

	@Override public Response handle(Request request) {
		String host = (String)request.headers.get("host");
		MDC.put("host",host);
		try {
			return domainHandler.handle(request);
		} finally {
			MDC.remove("host");
		}
	}
}