我正在尝试创建一个可以执行某些操作的函数。首先,它将检查几个表以查看工作流是否已完成,然后以某种方式返回状态消息。这很容易。但是,如果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变量。
答案 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)
};