require(jsonlite, quietly=T)
LOG.exec <- function(desc, FUN, ...) {
tryCatch({
LOG.info("EXEC", desc)
r <- FUN(...)
LOG.info("EXEC OK", desc)
r
}, error=function(e) {
LOG.error(e, "EXEC ERROR", desc)
stop(e)
})
}
LOG.error <- function(e, ...) {
errMsg <- NULL
if ("simpleError" %in% attr(e,"class")) errMsg <- e$message
cat(paste(Sys.time(), "ERROR", ..., gsub("[[:space:]]", " ", errMsg), sep="\t", "\n"))
}
LOG.info <- function(...) cat(paste(Sys.time(), "INFO", sep="\t", ..., "\n"))
LOG.object <- function(o, ...) cat(paste(Sys.time(), "OBJECT", ifelse(is.character(o),o,toJSON(o)), sep="\t", ..., "\n"))
ROBUST <- function(FUN, ..., retry=3, delay=0) {
while(retry > 0) {
retry <- retry - 1
err <- F
ret <- tryCatch(FUN(...), error=function(e) {
err <<- T
if (retry <= 0) stop(e)
NULL
})
if (!err) return(ret)
Sys.sleep(delay)
}
NULL
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.