Я создал на своем сервере Linux замечательное приложение, которое подключается к SQLSERVER и получает от него тысячи данных, а затем делает несколько шагов, чтобы получить окончательный результат.Но у меня есть проблема с этим приложением ... Когда я пытаюсь получить доступ к этому отчету через блестящий сервер, открытие страницы занимает много времени, и иногда я получаю сообщение об ошибке с подключением Страница нене отправлять данные , поэтому я хочу создать расписание для получения данных из SQL только каждый день или даже создать кнопку обновления для получения новых данных.
Я пробовал что-то вроде invalidateLater
Но я получаю пустые данные после попытки таким образом, так что может кто-нибудь дать мне решение этой проблемы Пожалуйста?
Это мой код приложения:
Получение данных из SQL> DF <- dbGetQuery(con,Query1)
Пользовательский интерфейс
ui <- fluidPage(
theme = shinytheme("cerulean"),
titlePanel("Audit Logs"),
sidebarLayout(
sidebarPanel(
pickerInput("Action", "Select Action Type", choices = DF %>% distinct(Action), selected = "Update", options = list(`actions-box` = TRUE,
`live-search` = TRUE,
`deselect-all-text` = "None...",
`select-all-text` = "Yeah, all !",
`none-selected-text` = "None"),multiple = T),br(),br(),
pickerInput("SourceTable", "Select Table", choices= DF %>% distinct(SourceTable) , selected = "Sales.DocumentDetails", options = list(`actions-box` = TRUE,
`live-search` = TRUE,
`deselect-all-text` = "None...",
`select-all-text` = "Yeah, all !",
`none-selected-text` = "None"),multiple = T),br(),br(),
pickerInput("ActionUserID", "Select ActionUserID", choices= DF %>% distinct(ActionUserID), options = list(`actions-box` = TRUE,
`live-search` = TRUE,
`deselect-all-text` = "None...",
`select-all-text` = "Yeah, all !",
`none-selected-text` = "None"),multiple = T),br(),br(),
pickerInput("`Attribute Name`", "Select Attribute Name", choices= AttributeName, options = list(`actions-box` = TRUE,
`live-search` = TRUE,
`deselect-all-text` = "None...",
`select-all-text` = "Yeah, all !",
`none-selected-text` = "None"),multiple = T),br(),br(),
downloadButton('downloadData', 'Download Data as CSV'), br(),
width = 3
),
mainPanel(
tabsetPanel(
tabPanel("Logs",DT::dataTableOutput("Log"))
)
)
)
)
Серверная сторона
server <- function(input, output) {
Data <- reactive({
DF %>% filter(SourceTable %in% input$SourceTable, ActionUserID %in% input$ActionUserID)
})
Data2 <-reactive({
result <- lapply(Data()$RowVersion , function(x) {
xml <- read_xml(x)
xml_attrs(xml)
})
allNames <- unique(unlist(lapply(result, names)))
placeholder <- rep(NA, length(allNames))
names(placeholder) <- allNames
matrixRes <- t(sapply(result, function(x) {
# fill values with existing attributes
tmp <- placeholder
tmp[names(x)] <- x
tmp
}))
dataFrameRes <-as.data.frame(matrixRes) %>% mutate_all(parse_guess)
Final <-bind_cols(Data(), dataFrameRes)[,-which(names(Data()) %in% "RowVersion")]
gathered_data <- gather(Final, "Attribute Name", "Value",-c(1,2,3,4,5,"ID","DocumentID")) %>%
arrange(as.numeric(VersionID)) # %>% na.omit
# FF <- data.table(Final)
# s <- melt.data.table(FF,id.vars = c(1,2,3,4,5,"ID","DocumentID"),variable.name = "Attribute Name", value.names = "Value",variable.factor= TRUE,value.factor = TRUE)
#Handeling Data
gathered_data <- plyr::rename(gathered_data,c("ID" = "Common Entity Id","DocumentID" = "Header Entity Id"))
#Get Lag Values
gathered_data.table <- data.table(gathered_data)
StartTime <- Sys.time()
Row1 <- gathered_data.table[,Was:=shift(Value, 1) , by=c("`Attribute Name`")]
Row1 <- Row1[!is.na(Row1$Value), ] %>%
filter(Value != Was)
Row1 %>% filter(Action %in% input$Action)
})
output$Log = DT::renderDataTable({Data2()
})
output$Test <- reactive({
Data2$`Attribute Name`
})
output$downloadData <- downloadHandler(
filename = 'AuditLog.csv',
content = function(file) {
write.csv(Data2(), file)
}
)
}