Блестящая контрольная функция не запускает valueFunc

#r #shiny

#r #блестящий

Вопрос:

Я создаю панель мониторинга, чтобы оставаться на телевизоре. Сеансы пользователей не потребуются, и развертывание будет осуществляться на частном сервере (не shiny.io ). Основная идея — обновление самой панели мониторинга каждые 15 секунд.

Моя проблема заключается в функции сервера, на самом деле в checkFun и valueFunc из reactivePoll() . Вот что я сделал:

  • Я создал функцию с именем checkUpdateData() , которая проверяет, увеличился ли общий доход за текущий месяц (переменная decFat ниже). Эта функция выводит на консоль журнал, показывающий разницу между старым значением и текущим значением, возвращенным для decFat .
  • Я создал функцию с именем getData() , которая извлекает JSON() объект из REST GET вызова.
  • Я создал функцию с именем etl(input = getData()) , передающую в JSON качестве входного параметра. Эта функция выполняет весь процесс ETL и выводит очищенный / обработанный list() объект с data.frame прикрепленными к нему объектами.

Если checkUpdateData() возвращаются различия между decFat и предыдущими decFat , то вызовы valueFunc reactivePoll() , верно?

 server <- function(input, output, session) {

  pollData <- reactivePoll(
            intervalMillis = 15000,
            session = NULL,
            
            checkFunc = function() {
              checkUpdateData(ambiente = pAmbiente)
            },
            
            valueFunc = function() {

              etl(listObj = getData(ambiente = pAmbiente,
                                    dataI    = pDataI,
                                    dataF    = pDataF))  
        
              print("************************ check")

            }
          )

  output$dataReq <- renderTable({ pollData() })

  output$tabela <- renderDataTable({
    DT::datatable(dataReq$tbRepresent %>%
                    filter(Mes == format(Sys.Date(), format="%m")) %>%
                    select(" " = emoji, "Rep" = Representante, "Fat" = Faturamento2, "Região" = Regiao, "% Met Bat." = percMetaBatida, "% Fat" = percFaturamento),
                  options = list(pageLength = 20, dom = ''), rownames = FALSE)
  })

  output$updateTime <- renderText(dataReq$updateTime$children[[1]] %>%
                                    as.character() %>%
                                    stringr::str_replace_all(., "n", "") %>%
                                    stringr::str_replace_all(., "   ", " "))

}
  

print("***check") Никогда не печатался при запуске.
Ниже журнала при запуске приложения:

 Listening on http://127.0.0.1:567
13/11/2020 10:37:08
Last decFat: 9209947.53363352 | Previous decFat: 430074.858996368
13/11/2020 10:37:08
Last decFat: 9213301.07789995 | Previous decFat: 430074.858996368
13/11/2020 10:37:24
Last decFat: 9206235.81931037 | Previous decFat: 430074.858996368
  

Я не могу понять, как принудительно dataReq обновить себя.
Любые мысли были бы очень признательны.

Заранее спасибо.

Комментарии:

1.Что checkUpdateData возвращает?

2. @r2evans Возвращает текущее значение для decFat десятичной дроби. В журнале есть Last decFat: 9209947.53363352 , т.е.

3. печать чего-либо в журнал и возврат значения — это две разные вещи, первое не подразумевает второе. Кроме того, etl работает ли полностью в побочном эффекте? Вы намеренно вызываете его и отбрасываете его возвращаемое значение? Из текущего кода valueFunc всегда будет либо NULL (еще не вызванный), либо строка "*** check" , и никогда ничего другого.

4. Пожалуйста, сделайте этот вопрос воспроизводимым, включив соответствующий источник этих функций. Кстати: elt возврат listObj абсолютно бесполезен для вас valueFunc , если вы что-то не сделаете с его возвращаемым значением. Как есть, return(listObj) здесь абсолютно ничего не делает.

5. Почему вы передаете NULL вместо сеанса?