Using MongoHQ to build a Shiny Hit Counter
[This article was first published on Econometrics by Simulation, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
In serveral previous posts I have posted shiny applications which temporarily store data on shiny servers such as hit counters or the survey tool which I created, These do not work in the long term since shiny will restart its servers without warning when needed. In addition, saving data to a shiny server is not an ideal method since special database specific commands should be set up to handle the simultaneous write requirements of web applications.
In this post I will show how to add an effective hit counter to shiny applications using a remote database server (MongoHQ). Much of my code follows the MongoHQ package demo found at http://docs.mongohq.com/languages/r.html
Start and account with MongoHQ. A Sandbox free database account with 512 MB of memory should be more than sufficient.
Once you have started an account you need to log into app.mongohq.com and start a database as well as a collection. Within a database you will need to select the admin tab as well in order to create a user id which you can use to log into the collection.
The following code is what I use to create a hit counter.
# Load the CRAN library
library(rmongodb)
# You can find the host information for the collection under the admin tab.
host <- "myarea.mongohq.com:myport"
username <- "mycreateduser"
password <- "mycreatedpassword"
db <- "mydatabase"
mongo <- mongo.create(host=host , db=db, username=username, password=password)
# Load the collection. In this case the collection is.
collection <- "OLS-app"
namespace <- paste(db, collection, sep=".")
# Insert a simple entry into the collection at the time of log in
# listing the date that the collection was accessed.
b <- mongo.bson.from.list(list(platform="MongoHQ",
app="counter", date=toString(Sys.Date())))
ok <- mongo.insert(mongo, namespace, b)
# Now we query the database for the number of hits
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "app", "counter")
query <- mongo.bson.from.buffer(buf)
counter <- mongo.count(mongo, namespace, query)
# I am not really sure if this is a good way of doing this
# at all.
# I send the number of hits to the shiny counter as a renderText
# reactive function
paste0("Hits: ", counter)The now database run hit counter can be seen at:
http://econometricsbysimulation.shinyapps.io/OLS-App/
You can find the updated code at github
https://github.com/EconometricsBySimulation/OLS-demo-App/blob/master/server.R
To leave a comment for the author, please follow the link and comment on their blog: Econometrics by Simulation.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.