从函数返回文本状态

时间:2017-03-16 23:25:36

标签: r function loops time

我正在尝试创建一个可以执行某些操作的函数。首先,它将检查几个表以查看工作流是否已完成,然后以某种方式返回状态消息。这很容易。但是,如果ETL被中断,则状态表不会更新。因此,如果脚本手动启动,它将失败。

我想在函数中插入逻辑以检查系统时间,如果是在上午7:00之后,请跳过检查并运行脚本的其余部分。这就是我现在所拥有的。它在我的截止时间之后工作正常,但是当我将变量设置为小于7以进行测试时,我得不到状态消息。

run_time <- as.numeric(format(Sys.time(),"%H"));
run_time <- 4

wrkflw_check <- function(m) {
    bk <- 36
    msg <- "stoped checking"

    if (run_time > 7) {
        msg <- "Complete"
    }
    else {
      # loop until workflows complete or 3 hours. Which ever comes first
      for (i in 1:bk) {
      if ((etl_check$status == "wait") | (dl_check$status == "wait")) {
        Sys.sleep(300)
        etl_status <- paste0("etl status: ", etl_check$status)
        dl_status <- paste0(" dl status: ", dl_check$status)
        print(etl_status)
        print(dl_status)
        etl_check <- dbGetQuery(fm01, etl_sql)
        dl_check <- dbGetQuery(dl, dl_sql)
        i <- i + 1
      } else {
        i <- bk
        msg <- "Complete"
      }
    }
}}

msg <- wrkflw_check(m);

etl_check <- dbGetQuery(fm01, etl_sql)
dl_check <- dbGetQuery(dl, dl_sql)

我需要得到的是msg变量。

1 个答案:

答案 0 :(得分:0)

为了得到我想要的东西,我不得不把事情搞得一团糟。但这现在有效。

wrkflw_check <- function(m){
    bk <- 36
    msg <- "stoped checking"
# loop until workflows complete or 3 hours. Which ever comes first
    for (i in 1:bk) {
        if ((etl_check$status == "wait") | (dl_check$status == "wait")) {
            Sys.sleep(300)
            etl_status <- paste0("etl status: ", etl_check$status)
            dl_status <- paste0(" dl status: ", dl_check$status)
            print(etl_status)
            print(dl_status)
            etl_check <- dbGetQuery(fm01, etl_sql)
            dl_check <- dbGetQuery(dl, dl_sql)
            i <- i + 1
        } else {
            i <- bk
            msg <- "Complete"
            return(msg)
        }
    }
}


run_time <- as.numeric(format(Sys.time(),"%H"));
#run_time <- 4
run_time

if (run_time > 7) {
    msg <- "Complete"
} else {
    msg <- "incomplete"
    msg <- wrkflw_check(m)
};