#' Generate a simple port summary plot
#'
#' @md
#' @param port,protocol,gn_key same as [research_time_series()]
#' @param save if not `NULL`, the full path to save the file (with `.png` extension)
#' @return data and plot (invisibly)
#' @export
gn_port_summary <- function(port, protocol = c("tcp", "udp"),
save = NULL,
gn_key = Sys.getenv("GREYNOISE_API_KEY")) {
research_time_series(
port = port, protocol = protocol, summarise = TRUE, gn_key = gn_key
) -> psum
logo <- png::readPNG(system.file("img", "gn-small.png", package="greynoise"))
ann <- rasterGrob(logo, width=unit(10, "lines"))
ggplot(psum, aes(date, ips)) +
geom_area(color = "white", fill = "#ffffff55") +
scale_x_date(expand=c(0,0)) +
scale_y_continuous(expand = c(0,0), labels=scales::comma) +
labs(
x = NULL, y ="# Unique IPvs",
title = sprintf("Port %s Summary History", port),
caption = "Source: GreyNoise Intelligence"
) +
theme_gn() -> gg
gg <- flush_ticks(gg, cat = FALSE)
gb <- ggplot_build(gg)
gt <- ggplot_gtable(gb)
gt$grobs[[17]] <- ann
plot(gt)
if (!is.null(save)) {
ggsave(
filename = path.expand(save),
plot = gt, device = "png", dpi = "retina",
width = 7.5, height = 4.5, bg = "#131111"
)
message(sprintf("Plot saved to [%s]", path.expand(save)))
}
list(
data = psum,
plot = gt
) -> out
invisible(out)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.