Trying to make script error logging cleaner... no success
parent
f8a94890d9
commit
c0255bae0c
|
@ -1,6 +1,7 @@
|
|||
package net.okennedy.shingle
|
||||
|
||||
import net.okennedy.shingle.module.Module
|
||||
import java.io.StringWriter
|
||||
|
||||
object Webserver extends cask.Routes
|
||||
{
|
||||
|
@ -21,12 +22,14 @@ object Webserver extends cask.Routes
|
|||
|
||||
@cask.get("api/modules/:id/load")
|
||||
def saveModule(id: String) = {
|
||||
val logger = new StringWriter()
|
||||
try {
|
||||
Module.reload(id)
|
||||
"Success"
|
||||
val result = Module.reload(id, logger = logger)
|
||||
"Success\n"
|
||||
} catch {
|
||||
case t: Throwable =>
|
||||
t.toString()
|
||||
// for some bizarre reason, ScriptEngine doesn't respect the logger argument
|
||||
"Error: Check the Shingle logs to see the error\n"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ import java.io.File
|
|||
import scala.io.Source
|
||||
import java.io.FileWriter
|
||||
import net.okennedy.shingle.stream._
|
||||
import java.io.StringWriter
|
||||
import java.io.Writer
|
||||
|
||||
object Module
|
||||
{
|
||||
|
@ -28,13 +30,15 @@ object Module
|
|||
def init(): Unit =
|
||||
{
|
||||
for(module <- list){
|
||||
val logger = new StringWriter()
|
||||
println(s"... installing $module")
|
||||
try {
|
||||
install(module, read(module))
|
||||
install(module, read(module), logger)
|
||||
} catch {
|
||||
case t: Throwable =>
|
||||
println(s"Error installing $module")
|
||||
t.printStackTrace()
|
||||
println(logger.getBuffer())
|
||||
// t.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,9 +73,9 @@ object Module
|
|||
new File(SCRIPTS, module+SUFFIX).delete()
|
||||
}
|
||||
|
||||
def reload(module: String): Unit =
|
||||
def reload(module: String, logger: Writer = null): Unit =
|
||||
{
|
||||
install(module, read(module))
|
||||
install(module, read(module), logger)
|
||||
}
|
||||
|
||||
def unload(module: String): Unit =
|
||||
|
@ -79,18 +83,31 @@ object Module
|
|||
activeModules.remove(module).foreach { _.cleanup() }
|
||||
}
|
||||
|
||||
def install(module: String, script: String): Unit =
|
||||
def install(module: String, script: String, logger: Writer = null): Unit =
|
||||
{
|
||||
val engine = new ScriptEngine()
|
||||
engine.eval(
|
||||
s"""net.okennedy.shingle.module.Module("$module") { implicit ctx =>
|
||||
| import net.okennedy.shingle._;
|
||||
| import net.okennedy.shingle.component._;
|
||||
| import net.okennedy.shingle.cron.Cron;
|
||||
| import scala.concurrent.duration._;
|
||||
| $script
|
||||
|}
|
||||
|""".stripMargin,
|
||||
)
|
||||
if(logger != null){
|
||||
val ctx = engine.getContext()
|
||||
println(s"Replacing: ${ctx.getErrorWriter()}")
|
||||
ctx.setWriter(logger)
|
||||
ctx.setErrorWriter(logger)
|
||||
engine.setContext(ctx)
|
||||
}
|
||||
println(s"Replaced with: ${engine.getContext().getErrorWriter()}")
|
||||
try {
|
||||
val result = engine.eval(
|
||||
s"""net.okennedy.shingle.module.Module("$module") { implicit ctx =>
|
||||
| import net.okennedy.shingle._;
|
||||
| import net.okennedy.shingle.component._;
|
||||
| import net.okennedy.shingle.cron.Cron;
|
||||
| import scala.concurrent.duration._;
|
||||
| $script
|
||||
|}
|
||||
|""".stripMargin,
|
||||
)
|
||||
} catch {
|
||||
case e:javax.script.ScriptException =>
|
||||
println("Script exception")
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue