Shiny Server - how to use session$onSessionEnded()

后端 未结 2 915
忘掉有多难
忘掉有多难 2020-12-16 04:47

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

相关标签:
2条回答
  • 2020-12-16 04:55

    Based on @Victorp answer and reply to the comment about arguments to session$onSessionEnded. It is possible to add an argument to the function using a default parameter:

    server <- function(input, output, session) {
      # This code will be run once per user
      users_data <- data.frame(USERS = session$user, START = Sys.time())
    
      # This code will be run after the client has disconnected
      session$onSessionEnded(function(userID = users_data$USERS) {
          if(userID==1){
              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)
    
    0 讨论(0)
  • 2020-12-16 05:05

    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())
    
    0 讨论(0)
提交回复
热议问题