I'm trying to track user activity as they go through my shiny app. I have functions placed at specific locations which write lines to a temporary file. What I want is to have a function which is called when the user session ends.
According to the documentation:
> ?session
> onSessionEnded(callback)
Registers a function to be called after the client has disconnected. Returns a function that can be called with no arguments to cancel the registration.
I tried to use this:
session$onSessionEnded(function(x){
a = read_csv(shinyActivityTmpFile_000)
write_csv(a,'C:\\Users\\xxxx\\Desktop\\test.csv')
})
But nothing happened. shinyActivityTmpFile_000
is a global file reference. As the user clicks buttons and does stuff, the app is writing out to this file in a CSV format. I'm just trying to move it from temporary storage to permanent storage. Ultimately I'd like the function to write it to a database but for testing I'm just trying to get a function that will run when the app is closed.
What am I missing here?
Shiny server functions can optionally include session as a parameter (e.g. function(input, output, session) ). The session object is an environment that can be used to access information and functionality relating to the session.
To add an input in a Shiny app, we need to place an input function *Input() in the ui object. Each input function requires several arguments. The first two are inputId , an id necessary to access the input value, and label which is the text that appears next to the input in the app.
Hi I don't know how you construct the shinyActivityTmpFile
file, but for using onSessionEnded
you can look at this exemple, it write in a file the datetime when an app is launched and when the app is closed :
library("shiny")
ui <- fluidPage(
"Nothing here"
)
server <- function(input, output, session) {
# This code will be run once per user
users_data <- data.frame(START = Sys.time())
# This code will be run after the client has disconnected
session$onSessionEnded(function() {
users_data$END <- Sys.time()
# Write a file in your working directory
write.table(x = users_data, file = file.path(getwd(), "users_data.txt"),
append = TRUE, row.names = FALSE, col.names = FALSE, sep = "\t")
})
}
shinyApp(ui = ui, server = server)
If you use a server with authentication, you can retrieve the username with :
users_data <- data.frame(USERS = session$user, START = Sys.time())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With