knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
{dockerstats}
is a small wrapper around docker stats
that returns the output of this command as an R data.frame.
Note that this package calls system("docker stats")
so you should be able to do this from your R command line. I'll probably refactor that at some point.
You can install the released version of {dockerstats}
from GitHub with:
remotes::install_github("ColinFay/dockerstats")
library(dockerstats)
By default, dockerstats()
returns the stats for running containers.
dockerstats()
You can return stats for all containers (not just running)
dockerstats(all = TRUE)
Or from a subset of containers:
dockerstats("mongo", "proxy")
The extra
param is used to add extra information to the recording, which can be usefull is you want to tag the specific recording.
For example, here we mimic a connection on the hexmake
container
system("docker run --name hexmake --rm -p 2811:80 colinfay/hexmake", wait = FALSE) Sys.sleep(5)
system("docker run --name hexmake --rm -p 2811:80 colinfay/hexmake", wait = FALSE)
library(crrri) chrome <- Chrome$new( bin = pagedown::find_chrome(), debug_port = httpuv::randomPort() ) client <- chrome$connect(callback = function(client) { Page <- client$Page Page$navigate(url = "http://localhost:2811") print({ dockerstats::dockerstats("hexmake", extra = "Connection via chrome") }) }) chrome$close()
dockerstats_recurse()
is a wrapper around dockerstats()
that runs every every
seconds, calling the callback
function everytime a loop is completed.
By default, the callback is print
, but you can define your own. For example, this function will run the dockerstats()
fun every 2 seconds and save it to a file.
dockerstats_recurse( "hexmake", callback = function(res){ print( paste("Mem usage: ", res$MemUsage) ) write.table( res, "dockerstats.csv", append = TRUE, col.names = FALSE, row.names = FALSE, sep = "," ) } )
As this is a pretty common use-case, a wrapper for this is implemented:
dockerstats_recurse( "hexmake", callback = append_csv("dockerstats.csv", print = TRUE) )
Kill the container once done
system("docker kill hexmake")
To handle the MemUsage
columns, expressed as byte
, {dockerstats}
provides a series of functions to convert to byte, kib, mib or gib.
The unit is kept in attr("units")
of the result
dock_stats <- dockerstats() dock_stats$MemUsag # Convert to kib to_kib(dock_stats$MemUsag)
CPUPerc
and MemPerc
are stripped from the trailing %
, and are turned into numeric
MEM USAGE / LIMIT
is splitted into two columns, MemUsage
and `MemLimit
NET I/O
and BLOCK I/O
are splitted into two columns, respectively NetI
& NetO
, and BlockI
& BlockO
You can call as_fs_byte()
from the {fs}
package to manipulate the columns which are expressed in bytes.
dock_stats <- dockerstats() dock_stats$MemUsage <- to_kib(dock_stats$MemUsag)
library(ggplot2) ggplot( dock_stats, aes( reorder(Name, MemUsage), MemUsage ) ) + geom_col() + scale_y_continuous(labels = scales::label_bytes(units = "kiB")) + coord_flip() + labs( title = "MemUsage of running containers", y = "MemUsage in kiB", x = "Containers" )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.