Mercurial Hosting > luan
comparison src/luan/modules/http/LuanHandler.java @ 1454:219f2b937f2b
remove log4j
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 08 Mar 2020 14:11:30 -0600 |
parents | 56fb5cd8228d |
children | b89212fd04b5 |
comparison
equal
deleted
inserted
replaced
1453:928be2a4d565 | 1454:219f2b937f2b |
---|---|
33 import luan.modules.BasicLuan; | 33 import luan.modules.BasicLuan; |
34 import luan.modules.logging.LuanLogger; | 34 import luan.modules.logging.LuanLogger; |
35 | 35 |
36 | 36 |
37 public final class LuanHandler implements Handler, Closeable { | 37 public final class LuanHandler implements Handler, Closeable { |
38 private static final Logger sysLogger = LoggerFactory.getLogger(LuanHandler.class); | 38 private static final Logger logger = LoggerFactory.getLogger(LuanHandler.class); |
39 | 39 |
40 private static final Set<LuanHandler> dontGc = Collections.newSetFromMap(new ConcurrentHashMap<LuanHandler,Boolean>()); | 40 private static final Set<LuanHandler> dontGc = Collections.newSetFromMap(new ConcurrentHashMap<LuanHandler,Boolean>()); |
41 | 41 |
42 private final Luan luanInit; | 42 private final Luan luanInit; |
43 private final String domain; | 43 private final String domain; |
44 private final Logger luanLogger; | |
45 private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); | 44 private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); |
46 private volatile Luan currentLuan; | 45 private volatile Luan currentLuan; |
47 private volatile boolean isDisabled = false; | 46 private volatile boolean isDisabled = false; |
48 | 47 |
49 private static final Method resetLuanMethod; | 48 private static final Method resetLuanMethod; |
62 } | 61 } |
63 | 62 |
64 public LuanHandler(Luan luanInit,String domain) { | 63 public LuanHandler(Luan luanInit,String domain) { |
65 this.luanInit = luanInit; | 64 this.luanInit = luanInit; |
66 this.domain = domain; | 65 this.domain = domain; |
67 this.luanLogger = luanInit.getLogger(LuanHandler.class); | |
68 try { | 66 try { |
69 Fns fns = new Fns(this); | 67 Fns fns = new Fns(this); |
70 LuanTable Http = (LuanTable)luanInit.require("luan:http/Http.luan"); | 68 LuanTable Http = (LuanTable)luanInit.require("luan:http/Http.luan"); |
71 if( Http.get("reset_luan") == null ) | 69 if( Http.get("reset_luan") == null ) |
72 Http.put( "reset_luan", new LuanJavaFunction(luanInit,resetLuanMethod,fns) ); | 70 Http.put( "reset_luan", new LuanJavaFunction(luanInit,resetLuanMethod,fns) ); |
75 Http.put( "dont_gc", new LuanJavaFunction(luanInit,dontGcMethod,fns) ); | 73 Http.put( "dont_gc", new LuanJavaFunction(luanInit,dontGcMethod,fns) ); |
76 } catch(LuanException e) { | 74 } catch(LuanException e) { |
77 throw new RuntimeException(e); | 75 throw new RuntimeException(e); |
78 } | 76 } |
79 if( domain != null ) | 77 if( domain != null ) |
80 sysLogger.info("new "+domain); | 78 logger.info("new "+domain); |
81 currentLuan = newLuan(); | 79 currentLuan = newLuan(); |
82 } | 80 } |
83 | 81 |
84 protected void finalize() throws Throwable { | 82 protected void finalize() throws Throwable { |
85 if( domain != null ) | 83 if( domain != null ) |
86 sysLogger.info("gc "+domain); | 84 logger.info("gc "+domain); |
87 } | 85 } |
88 | 86 |
89 private Luan newLuan() { | 87 private Luan newLuan() { |
90 Luan luan; | 88 Luan luan; |
91 synchronized(luanInit) { | 89 synchronized(luanInit) { |
92 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); | 90 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); |
93 luan = (Luan)cloner.clone(luanInit); | 91 luan = (Luan)cloner.clone(luanInit); |
94 } | 92 } |
93 LuanLogger.startThreadLogging(luan); | |
95 try { | 94 try { |
96 PackageLuan.load(luan,"site:/init.luan"); | 95 PackageLuan.load(luan,"site:/init.luan"); |
97 } catch(LuanException e) { | 96 } catch(LuanException e) { |
98 //e.printStackTrace(); | 97 //e.printStackTrace(); |
99 String err = e.getLuanStackTraceString(); | 98 String err = e.getLuanStackTraceString(); |
100 luanLogger.error(err); | 99 logger.error(err); |
100 } finally { | |
101 LuanLogger.endThreadLogging(); | |
101 } | 102 } |
102 return luan; | 103 return luan; |
103 } | 104 } |
104 | 105 |
105 /* | |
106 public Luan getLuan() { | |
107 return luan; | |
108 } | |
109 */ | |
110 static final String NOT_FOUND = "luan-not-found"; | 106 static final String NOT_FOUND = "luan-not-found"; |
111 | 107 |
112 @Override public Response handle(Request request) { | 108 @Override public Response handle(Request request) { |
113 if( isDisabled ) | 109 if( isDisabled ) |
114 return null; | 110 return null; |
120 private Response handle(Request request,boolean notFound) { | 116 private Response handle(Request request,boolean notFound) { |
121 Thread thread = Thread.currentThread(); | 117 Thread thread = Thread.currentThread(); |
122 String oldName = thread.getName(); | 118 String oldName = thread.getName(); |
123 thread.setName(request.headers.get("host")+request.path); | 119 thread.setName(request.headers.get("host")+request.path); |
124 rwLock.readLock().lock(); | 120 rwLock.readLock().lock(); |
121 LuanLogger.startThreadLogging(currentLuan); | |
125 try { | 122 try { |
126 return service(request,notFound); | 123 return service(request,notFound); |
127 } catch(LuanException e) { | 124 } catch(LuanException e) { |
128 String err = e.getLuanStackTraceString(); | 125 String err = e.getLuanStackTraceString(); |
129 luanLogger.error(err+"\n"+request.rawHead.trim()+"\n"); | 126 logger.error(err+"\n"+request.rawHead.trim()+"\n"); |
130 String msg = "Internel Server Error\n\n" + err; | 127 String msg = "Internel Server Error\n\n" + err; |
131 return Response.errorResponse( Status.INTERNAL_SERVER_ERROR, msg ); | 128 return Response.errorResponse( Status.INTERNAL_SERVER_ERROR, msg ); |
132 } finally { | 129 } finally { |
130 LuanLogger.endThreadLogging(); | |
133 rwLock.readLock().unlock(); | 131 rwLock.readLock().unlock(); |
134 thread.setName(oldName); | 132 thread.setName(oldName); |
135 } | 133 } |
136 } | 134 } |
137 | 135 |
138 public void close() { | 136 public void close() { |
139 Object obj = dontGc.remove(this); | 137 Object obj = dontGc.remove(this); |
140 //sysLogger.info("close "+domain+" "+(obj!=null)); | 138 //logger.info("close "+domain+" "+(obj!=null)); |
141 } | 139 } |
142 | 140 |
143 public Object call_rpc(String fnName,Object... args) throws LuanException { | 141 public Object call_rpc(String fnName,Object... args) throws LuanException { |
144 rwLock.readLock().lock(); | 142 rwLock.readLock().lock(); |
143 LuanLogger.startThreadLogging(currentLuan); | |
145 try { | 144 try { |
146 LuanFunction fn; | 145 LuanFunction fn; |
147 synchronized(luanInit) { | 146 synchronized(luanInit) { |
148 enableLoad("luan:Rpc.luan"); | 147 enableLoad("luan:Rpc.luan"); |
149 LuanTable rpc = (LuanTable)currentLuan.require("luan:Rpc.luan"); | 148 LuanTable rpc = (LuanTable)currentLuan.require("luan:Rpc.luan"); |
154 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); | 153 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); |
155 fn = (LuanFunction)cloner.get(fn); | 154 fn = (LuanFunction)cloner.get(fn); |
156 } | 155 } |
157 return fn.call(args); | 156 return fn.call(args); |
158 } finally { | 157 } finally { |
158 LuanLogger.endThreadLogging(); | |
159 rwLock.readLock().unlock(); | 159 rwLock.readLock().unlock(); |
160 } | 160 } |
161 } | 161 } |
162 | 162 |
163 public static void start(Server server) throws Exception { | 163 public static void start(Server server) throws Exception { |
194 currentLuan = luan; | 194 currentLuan = luan; |
195 } | 195 } |
196 | 196 |
197 private void dont_gc() { | 197 private void dont_gc() { |
198 dontGc.add(this); | 198 dontGc.add(this); |
199 //sysLogger.info("dont_gc "+domain); | 199 //logger.info("dont_gc "+domain); |
200 } | 200 } |
201 | 201 |
202 public static final class Fns { | 202 public static final class Fns { |
203 private final Reference<LuanHandler> ref; | 203 private final Reference<LuanHandler> ref; |
204 | 204 |