闪亮 Jmeter 板数据刷新触发器

6ojccjat  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(367)

我正在从一个mysql表导入一些数据,但到目前为止,为了检查数据更新,我只是在重新加载应用程序。我希望这是动态发生的,但我不知道如何在我的代码中实现invalidaterater函数,或者我是否应该这样做,因为我看到有人推荐reactivepoll。基本上,我接收到的数据进入我的数据库从5到5分钟,我想检查数据库在一定的间隔太和更新数字显示在我的值框。
谢谢!

shinyServer(function(input, output, session) {

      conn <- dbConnect(RMySQL::MySQL(), 
                        dbname="db", 
                        host="localhost", 
                        user="root", 
                        password="password")

      table<- dbReadTable(conn = conn, name ='table1', value= as.data.frame(table))

      prd_number <- dbFetch(dbSendQuery(conn, "SELECT obj FROM table1 ORDER BY id DESC LIMIT 1"))

      output$prdnumber <- shinydashboard::renderValueBox({
        shinydashboard::valueBox(prd_number, "Number of products", icon=icon("tags"), color="purple"
        )
      })
   })

更新
我实现了我想要的,但现在我做到了:
好奇:有必要为每个不同的查询定义一个新的reactivepoll吗(例如:一个reactivepoll函数用于从数据库获取某个字段,另一个reactivepoll函数用于从数据库获取整个表)
错误:列0中更确切地说是无法识别的mysql字段类型7作为字符导入。我知道这是因为我的表中有时间戳,但我不知道如何处理它们。我看到一种解决方案可能是将其转换为unix时间戳,但我希望将日期打印到 Jmeter 板,因此这不是一个好的选择。
服务器.r

prd_number <- reactivePoll(20000, session, checkFunc = function(){  

  conn <- dbConnect(RMySQL::MySQL(), 
                    dbname="db", 
                    host="localhost", 
                    user="root", 
                    password="password")

  val1 <- dbGetQuery(conn, "SELECT obj FROM table ORDER BY id DESC LIMIT 1")

  val2 <- dbGetQuery(conn, "SELECT date FROM table ORDER BY id DESC LIMIT 1")

  output$prdnumber <- shinydashboard::renderValueBox({
    shinydashboard::valueBox(val1, "Number of items", icon=icon("tags"), color="purple"
    )
  })

  output$update <- shinydashboard::renderValueBox({
    shinydashboard::valueBox(val2, "Last update", icon=icon("tags"), color="lime"
    )
      })
 dbDisconnect(conn)
  })
j91ykkif

j91ykkif1#

这不是你用的方法 reactivePoll 我相信, reactivePoll 是的,好吧 reactive . reactivePollcheckFuncintervalMillis ,如果 checkFunc 返回与以前不同的值 valueFunc 正在运行。
也从不更新你的 output 在你的React物里面,把它们移到React物外面。

server <- function(input, output, session){
  prd_number <- reactivePoll(
    20000, # checkFunc is ran very 2 min
    session,
    checkFunc = function(){
      Sys.time() ## CHANGE THIS (see below)
    },
    valueFunc = function(){
      conn <- dbConnect(
        RMySQL::MySQL(), 
        dbname="db", 
        host="localhost", 
        user="root", 
        password="password"
      )

      val1 <- dbGetQuery(conn, "SELECT obj FROM table ORDER BY id DESC LIMIT 1")

      val2 <- dbGetQuery(conn, "SELECT date FROM table ORDER BY id DESC LIMIT 1")

      dbDisconnect(conn)
      return(list(val1 = val1, val2 = val2)) # return both values
    }
  )

  output$prdnumber <- shinydashboard::renderValueBox({
    shinydashboard::valueBox(prd_number()$val1, "Number of items", icon=icon("tags"), color="purple")
  })

  output$update <- shinydashboard::renderValueBox({
    shinydashboard::valueBox(prd_number()$val2, "Last update", icon=icon("tags"), color="lime")
  }) 
}

在上面,更改 checkFunc . 它现在每2分钟返回一次当前时间 valueFunc 正在运行。你不想那样。
valueFunc ,您应该使用廉价的sql语句ping数据库,以检查感兴趣的表是否已更新:即:return last row=>if the last row has changed, valueFunc 运行和输出(使用 prd_number )将更新。

相关问题