CRAN stats with metabase and mongodb
Dockerfile
FROM rocker/rstudio
LABEL maintainer="<crazycapivara@gmail.com>"
RUN apt-get update \
&& apt-get install -y libssl-dev libsasl2-dev
RUN install2.r mongolite remotes httr \
&& installGithub.r metacran/cranlogs
COPY ./scripts /home/rstudio/scripts
Docker Compose
Only publish ports from rstudio and metabase to the outer world.
version: "2"
services:
rstudio:
build: .
ports:
- "8787:8787"
metabase:
image: metabase/metabase
ports:
- "3015:3000"
mongodb:
image: mongo
Script
# dl_stats.R
library(cranlogs)
library(mongolite)
argv <- commandArgs(TRUE)
# get logs
cat("Fetch logs\n")
pkgs <- c("shiny", "shinydashboard", "rmarkdown", "leaflet")
if(!is.na(argv[1])) {
pkgs <- argv[1]
}
print(pkgs)
logs <- cran_downloads(pkgs, when = "last-month")
print(tail(logs))
# write logs to db
db <- "rstudio"
collection <- "cranlogs"
cat("insert data\n")
conn <- mongo(collection, db = db, url="mongodb://mongodb")
eat_msg <- conn$insert(logs)
cat("done\n")
Add data
Assuming the containers are running in a network called futurama
and the image build from the Dockerfile
is available as crazycapivara/rstudio
…
$ docker run --rm -v `pwd`/scripts:/scripts \
--network futurama crazycapivara/rstudio Rscript /scripts/dl_stats.R ggplot