#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 вместо сеанса?