better logging in template engine: shows filename of servlets where

errors in templates occur
This commit is contained in:
orbiter 2014-04-04 10:55:46 +02:00
parent 3c1274057d
commit 41730c8048
3 changed files with 28 additions and 26 deletions

View File

@ -797,13 +797,13 @@ public class YaCyDefaultServlet extends HttpServlet {
}
} catch (InvocationTargetException e) {
ConcurrentLog.logException(e);
throw new ServletException();
throw new ServletException(targetFile.getAbsolutePath());
} catch (IllegalArgumentException e) {
ConcurrentLog.logException(e);
throw new ServletException();
throw new ServletException(targetFile.getAbsolutePath());
} catch (IllegalAccessException e) {
ConcurrentLog.logException(e);
throw new ServletException();
throw new ServletException(targetFile.getAbsolutePath());
}
if (tmp instanceof RasterPlotter || tmp instanceof EncodedImage || tmp instanceof Image) {
@ -894,8 +894,10 @@ public class YaCyDefaultServlet extends HttpServlet {
templatePatterns.putHTML("newpeer_peerhash", myPeer.hash);
templatePatterns.put("navigation-p2p", sb.getConfigBool(SwitchboardConstants.DHT_ENABLED, true) || !sb.isRobinsonMode() ? 1 : 0);
String submitted = sb.getConfig("server.servlets.submitted", "");
templatePatterns.put("navigation-crawlmonitor", submitted.indexOf("Crawler_p") >= 0);
templatePatterns.put("navigation-advanced", submitted.indexOf("ConfigBasic") >= 0 || submitted.indexOf("CrawlStart") >= 0);
boolean crawler_enabled = submitted.indexOf("Crawler_p") >= 0;
boolean advanced_enabled = crawler_enabled || submitted.indexOf("ConfigBasic") >= 0 || submitted.indexOf("CrawlStart") >= 0;
templatePatterns.put("navigation-crawlmonitor", crawler_enabled);
templatePatterns.put("navigation-advanced", advanced_enabled);
templatePatterns.put(SwitchboardConstants.GREETING_HOMEPAGE, sb.getConfig(SwitchboardConstants.GREETING_HOMEPAGE, ""));
templatePatterns.put(SwitchboardConstants.GREETING_SMALL_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, ""));
@ -916,7 +918,7 @@ public class YaCyDefaultServlet extends HttpServlet {
response.setStatus(HttpServletResponse.SC_OK);
ByteArrayOutputStream bas = new ByteArrayOutputStream(4096);
// apply templates
TemplateEngine.writeTemplate(fis, bas, templatePatterns, "-UNRESOLVED_PATTERN-".getBytes("UTF-8"));
TemplateEngine.writeTemplate(targetFile.getName(), fis, bas, templatePatterns);
fis.close();
// handle SSI
parseSSI (bas.toByteArray(),request,response);

View File

@ -380,10 +380,10 @@ public final class HTTPDemon {
final File htRootPath = new File(switchboard.getAppPath(), switchboard.getConfig(SwitchboardConstants.HTROOT_PATH,SwitchboardConstants.HTROOT_PATH_DEFAULT));
TemplateEngine.writeTemplate(
"/proxymsg/error.html",
fis = new FileInputStream(new File(htRootPath, "/proxymsg/error.html")),
o = new ByteArrayOutputStream(512),
tp,
ASCII.getBytes("-UNRESOLVED_PATTERN-")
tp
);
final byte[] result = o.toByteArray();
o.close(); o = null;

View File

@ -155,6 +155,7 @@ public final class TemplateEngine {
private final static byte[] hash_brackopen_slash = "#(/".getBytes();
private final static byte[] brackclose_hash = ")#".getBytes();
private final static byte[] UNRESOLVED_PATTERN = "-UNRESOLVED_PATTERN-".getBytes();
/**
* transfer until a specified pattern is found; everything but the pattern is transfered so far
@ -192,18 +193,18 @@ public final class TemplateEngine {
return false;
}
public final static void writeTemplate(final InputStream in, final OutputStream out, final serverObjects pattern, final byte[] dflt) throws IOException {
public final static void writeTemplate(final String servletname, final InputStream in, final OutputStream out, final serverObjects pattern) throws IOException {
if (pattern == null) {
FileUtils.copy(in, out);
} else {
writeTemplate(in, out, pattern, dflt, new byte[0]);
writeTemplate(servletname, in, out, pattern, new byte[0]);
}
}
/**
* Reads a input stream, and writes the data with replaced templates on a output stream
*/
private final static byte[] writeTemplate(final InputStream in, final OutputStream out, final serverObjects pattern, final byte[] dflt, final byte[] prefix) throws IOException {
private final static byte[] writeTemplate(final String servletname, final InputStream in, final OutputStream out, final serverObjects pattern, final byte[] prefix) throws IOException {
final PushbackInputStream pis = new PushbackInputStream(in, 100);
final ByteArrayOutputStream keyStream = new ByteArrayOutputStream(4048);
byte[] key;
@ -254,11 +255,11 @@ public final class TemplateEngine {
final PushbackInputStream pis2 = new PushbackInputStream(new ByteArrayInputStream(text));
//System.out.println("recursing with text(prefix="+ multi_key + "_" + i + "_" +"):"); //DEBUG
//System.out.println(text);
structure.append(writeTemplate(pis2, out, pattern, dflt, newPrefix(prefix,multi_key,i)));
structure.append(writeTemplate(servletname, pis2, out, pattern, newPrefix(prefix,multi_key,i)));
}//for
structure.append(open_endtag).append(multi_key).append(close_tagn);
} else {//transferUntil
ConcurrentLog.severe("TEMPLATE", "No Close Key found for #{"+UTF8.String(multi_key)+"}#"); //prefix here?
ConcurrentLog.severe("TEMPLATE", "No Close Key found for #{"+UTF8.String(multi_key)+"}#" + " in " + servletname); //prefix here?
}
}
@ -292,10 +293,9 @@ public final class TemplateEngine {
keyStream.reset(); //reset stream
PushbackInputStream pis2;
if (byName) {
//TODO: better Error Handling
transferUntil(pis, keyStream, appendBytes(PP, patternName, null, null));
if(pis.available()==0){
ConcurrentLog.severe("TEMPLATE", "No such Template: %%" + UTF8.String(patternName));
ConcurrentLog.severe("TEMPLATE", "No such Template: \"" + UTF8.String(patternName) + "\" in " + servletname);
final byte[] sb = structure.getBytes();
structure.close();
text.close();
@ -304,10 +304,10 @@ public final class TemplateEngine {
keyStream.reset();
transferUntil(pis, keyStream, dpdpa);
pis2 = new PushbackInputStream(new ByteArrayInputStream(keyStream.toByteArray()));
structure.append(writeTemplate(pis2, out, pattern, dflt, newPrefix(prefix,key)));
structure.append(writeTemplate(servletname, pis2, out, pattern, newPrefix(prefix,key)));
transferUntil(pis, keyStream, appendBytes(hash_brackopen_slash, key, brackclose_hash, null));
if(pis.available()==0){
ConcurrentLog.severe("TEMPLATE", "No Close Key found for #("+UTF8.String(key)+")# (by Name)");
ConcurrentLog.severe("TEMPLATE", "No Close Key found for #("+UTF8.String(key)+")# (by Name) in " + servletname);
}
} else {
while(!found){
@ -322,7 +322,7 @@ public final class TemplateEngine {
pis2 = new PushbackInputStream(new ByteArrayInputStream(text.getBytes()));
//this maybe the wrong, but its the last
structure.append('<').append(key).append(alternative_which).append(ASCII.getBytes(Integer.toString(whichPattern))).append(ASCII.getBytes("\" found=\"0\">\n"));
structure.append(writeTemplate(pis2, out, pattern, dflt, newPrefix(prefix,key)));
structure.append(writeTemplate(servletname, pis2, out, pattern, newPrefix(prefix,key)));
structure.append(open_endtag).append(key).append(close_tagn);
found=true;
}else if(others >0 && keyStream.toString().startsWith("/")){ //close nested
@ -344,7 +344,7 @@ public final class TemplateEngine {
if(currentPattern == whichPattern){ //found the pattern
pis2 = new PushbackInputStream(new ByteArrayInputStream(text.getBytes()));
structure.append('<').append(key).append(alternative_which).append(ASCII.getBytes(Integer.toString(whichPattern))).append(ASCII.getBytes("\" found=\"0\">\n"));
structure.append(writeTemplate(pis2, out, pattern, dflt, newPrefix(prefix,key)));
structure.append(writeTemplate(servletname, pis2, out, pattern, newPrefix(prefix,key)));
structure.append(open_endtag).append(key).append(close_tagn);
transferUntil(pis, keyStream, appendBytes(hash_brackopen_slash, key, brackclose_hash,null));//to #(/key)#.
@ -373,7 +373,7 @@ public final class TemplateEngine {
// pattern detected, write replacement
key = keyStream.toByteArray();
final String patternKey = getPatternKey(prefix, key);
replacement = replacePattern(patternKey, pattern, dflt); //replace
replacement = replacePattern(patternKey, pattern); //replace
structure.append('<').append(key)
.append(ASCII.getBytes(" type=\"normal\">\n"));
structure.append(replacement);
@ -401,9 +401,9 @@ public final class TemplateEngine {
final byte[] newFilename = new byte[filename.length-2];
System.arraycopy(filename, 1, newFilename, 0, newFilename.length);
final String patternkey = getPatternKey(prefix, newFilename);
filename= replacePattern(patternkey, pattern, dflt);
filename= replacePattern(patternkey, pattern);
}
if (filename.length > 0 && !java.util.Arrays.equals(filename, dflt)) {
if (filename.length > 0 && !java.util.Arrays.equals(filename, UNRESOLVED_PATTERN)) {
final ByteBuffer include = new ByteBuffer();
BufferedReader br = null;
try{
@ -422,7 +422,7 @@ public final class TemplateEngine {
}
final PushbackInputStream pis2 = new PushbackInputStream(new ByteArrayInputStream(include.getBytes()));
structure.append(ASCII.getBytes("<fileinclude file=\"")).append(filename).append(close_tagn);
structure.append(writeTemplate(pis2, out, pattern, dflt, new byte[0])); //clear pattern prefix for include
structure.append(writeTemplate(servletname, pis2, out, pattern, new byte[0])); //clear pattern prefix for include
structure.append(ASCII.getBytes("</fileinclude>\n"));
include.close();
}
@ -438,7 +438,7 @@ public final class TemplateEngine {
return sb;
}
private final static byte[] replacePattern(final String key, final serverObjects pattern, final byte dflt[]) {
private final static byte[] replacePattern(final String key, final serverObjects pattern) {
byte[] replacement;
Object value;
if (pattern.containsKey(key)) {
@ -453,7 +453,7 @@ public final class TemplateEngine {
replacement = UTF8.getBytes(value.toString());
}
} else {
replacement = dflt;
replacement = UNRESOLVED_PATTERN;
}
return replacement;
}
@ -515,7 +515,7 @@ public final class TemplateEngine {
final InputStream i = new ByteArrayInputStream(UTF8.getBytes(args[0]));
final serverObjects h = new serverObjects();
h.put("test", args[1]);
writeTemplate(new PushbackInputStream(i, 100), System.out, h, UTF8.getBytes(args[2]));
writeTemplate("test", new PushbackInputStream(i, 100), System.out, h, UTF8.getBytes(args[2]));
System.out.flush();
} catch (final Exception e) {
ConcurrentLog.logException(e);