R/sys-utils.R

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
}
emiruz/automata.r documentation built on May 16, 2019, 5:09 a.m.