”R” code kata
July 25, 2013 Leave a comment
This started as a ‘R’ code kata. I came across some Nmon reports from a AIX machine.
There is an nmon analyzer too available in IBM’s website.
The goal here is to learn to write ‘R’ code to ‘grep’ for lines that have information for CPU’s like this
CPU01,T0001,7.6,28.9,1.3,62.1
CPU02,T0001,4.9,6.5,1.1,87.5
CPU03,T0001,2.4,2.1,0.4,95.1
CPU04,T0001,2.9,1.4,0.8,94.9
Not only that. I also want to draw graphs for individual CPU’s and find if there are correlations between different CPU utilizations. This type of analysis is described in some papers published by ‘Computer Measurement Group’. I don’t have the links now but I plan to post more about this along with the graphs.
At this time this is not a serious performance planning measure. But it should be possible to use ‘R’ code to create a good nmon analyzer report.
This initial version of the code executes but it is not complete.
YAML configuration
path: input : D:\R\R-3.0.0\bin\MACHINE_130525_0000.csv output : D:\R\R-3.0.0\bin
Main code
library(yaml) library(stringr) # Set to load the configuration file. # It might be set elsewhere also. this.dir <- dirname(parent.frame(2)$ofile) setwd(this.dir) # Read nmon report and filter CPU utilization filelist.read <- function(){ config = yaml.load_file("config.yml") print(config$path$input) output <-(config$path$output) nmon <-file(config$path$input, "r") fileConn<-file(paste(output,"\\output.txt", sep = ""),"w") files <- NULL while(length(line <- readLines(nmon, 1)) > 0) { files <- line.filter( line ) if (length(files) != 0) { writeLines(files, fileConn) #print(files) files <- NULL } } close(nmon) close(fileConn) } #filter based on a regular expression line.filter <- function(line){ filteredline <- grep("^CPU", line, value = TRUE) return (filteredline) } #Write each CPU's utilization data into a #separate file filelist.array <- function(n){ cpufile <- list() length(cpufile) <- n for (i in 1:n) { cpufile[[i]] <- paste("output", i, ".txt", sep = "") print(cpufile[i]) } } #Write each CPU's utilization into a #separate file filelist.array <- function(n){ cpufile <- list() length(cpufile) <- n for (i in 1:n) { cpufile[[i]] <- paste("output", i, sep = "") print(cpufile[i]) } }
RUnit
library(RUnit) #Sample test test.filelist.array <- function() { filelist.array(3) }
RUnit test runner
library(RUnit) # Set to load sources and test code # properly. this.dir <- dirname(parent.frame(2)$ofile) setwd(this.dir) source('nmon.R') source('unitTests/nmontestcase.R') test.filelist.array()