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