From ed3e2e7bd48191177c21955a22e51696ebd93737 Mon Sep 17 00:00:00 2001 From: Cecil Singh <54638818+Cecilsingh@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:21:02 +1000 Subject: [PATCH] Create memoryBalancing.R --- loadBalancing/memoryBalancing.R | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 loadBalancing/memoryBalancing.R diff --git a/loadBalancing/memoryBalancing.R b/loadBalancing/memoryBalancing.R new file mode 100644 index 0000000..82cee07 --- /dev/null +++ b/loadBalancing/memoryBalancing.R @@ -0,0 +1,44 @@ +#!/usr/bin/Rscript + +get_nodes <- function(nodes = Sys.getenv("RSTUDIO_NODES")) { + unlist(strsplit(nodes, ",", fixed = TRUE)) +} + +get_health_check <- function(node_address) { + con <- url(sprintf("http://%s/health-check", node_address)) + on.exit(close(con)) + readLines(con) +} + +parse_health_check <- function(health_check) { + fields <- unlist(strsplit(health_check, "\n|,")) + + keys <- sub( + ":", + "", + regmatches(fields, regexpr("^[a-z\\-]+:", fields)) + ) + + values <- sub( + ": ", + "", + regmatches(fields, regexpr(":.+$", fields)) + ) + data.frame(keys, values, stringsAsFactors = FALSE) +} + +get_value <- function(hc_table, hc_value) { + as.double(hc_table[hc_table[["keys"]] == hc_value, "values"]) +} + +main <- function() { + nodes <- get_nodes() + named_hc <- setNames(lapply(nodes, get_health_check), nodes) + parsed_hc <- lapply(named_hc, parse_health_check) + mem_percent <- lapply(parsed_hc, get_value, "memory-percent") + least_mem <- names(which.min(unlist(mem_percent))) + + least_mem +} + +cat(main())