blob: 254b718a1bdd703820b456e903d99ca1c9d1a053 [file] [log] [blame]
Jeremy Ronquillo6df87812017-08-28 16:17:36 +00001# Copyright 2017 Open Networking Foundation (ONF)
2#
3# Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
4# the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
5# or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
6#
7# TestON is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 2 of the License, or
10# (at your option) any later version.
11#
12# TestON is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with TestON. If not, see <http://www.gnu.org/licenses/>.
19#
20# If you have any questions, or if you don't understand R,
Jeremy Ronquillob6268842017-10-03 13:02:58 -070021# please contact Jeremy Ronquillo: j_ronquillo@u.pacific.edu
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000022
23# **********************************************************
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070024# STEP 1: Data management.
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000025# **********************************************************
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070026print( "**********************************************************" )
27print( "STEP 1: Data management." )
28print( "**********************************************************" )
Devin Lim0e967162017-11-03 15:59:53 -070029database_host = 1
30database_port = 2
31database_u_id = 3
32database_pw = 4
33test_name = 5
34branch_name = 6
35save_directory = 7
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000036
Jeremy Ronquillob6268842017-10-03 13:02:58 -070037# Command line arguments are read.
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000038print( "Reading commmand-line args." )
39args <- commandArgs( trailingOnly=TRUE )
40
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070041# ----------------
42# Import Libraries
43# ----------------
44
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000045print( "Importing libraries." )
46library( ggplot2 )
47library( reshape2 )
48library( RPostgreSQL ) # For databases
49
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070050# -------------------
51# Check CLI Arguments
52# -------------------
53
54print( "Verifying CLI args." )
55
Devin Lim0e967162017-11-03 15:59:53 -070056if ( is.na( args[ save_directory ] ) ){
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070057
58 print( paste( "Usage: Rscript SCPFportLat",
59 "<database-host>",
60 "<database-port>",
61 "<database-user-id>",
62 "<database-password>",
63 "<test-name>",
64 "<branch-name>",
65 "<directory-to-save-graphs>",
66 sep=" " ) )
67
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000068 q() # basically exit(), but in R
69}
70
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070071# -----------------
72# Create File Names
73# -----------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000074
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070075print( "Creating filenames and title of graph." )
Devin Lim0e967162017-11-03 15:59:53 -070076errBarOutputFileUp <- paste( args[ save_directory ],
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070077 "SCPFportLat_",
Devin Lim0e967162017-11-03 15:59:53 -070078 args[ branch_name ],
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070079 "_UpErrBarWithStack.jpg",
80 sep = "" )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000081
Devin Lim0e967162017-11-03 15:59:53 -070082errBarOutputFileDown <- paste( args[ save_directory ],
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070083 "SCPFportLat_",
Devin Lim0e967162017-11-03 15:59:53 -070084 args[ branch_name ],
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070085 "_DownErrBarWithStack.jpg",
86 sep = "" )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +000087
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070088# ------------------
89# SQL Initialization
90# ------------------
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070091print( "Initializing SQL" )
92
93con <- dbConnect( dbDriver( "PostgreSQL" ),
94 dbname = "onostest",
Devin Lim0e967162017-11-03 15:59:53 -070095 host = args[ database_host ],
96 port = strtoi( args[ database_port ] ),
97 user = args[ database_u_id ],
98 password = args[ database_pw ] )
Jeremy Ronquillo7673f802017-10-30 09:42:44 -070099
100# ------------------------
101# Port Latency SQL Command
102# ------------------------
103
104print( "Generating Port Latency SQL Command" )
105
106command <- paste( "SELECT * FROM port_latency_details WHERE branch = '",
Devin Lim0e967162017-11-03 15:59:53 -0700107 args[ branch_name ],
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700108 "' AND date IN ( SELECT MAX( date ) FROM port_latency_details WHERE branch = '",
Devin Lim0e967162017-11-03 15:59:53 -0700109 args[ branch_name ],
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700110 "' ) ",
111 sep = "" )
112
113print( "Sending SQL command:" )
114print( command )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000115
116fileData <- dbGetQuery( con, command )
117
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000118# **********************************************************
119# STEP 2: Organize data.
120# **********************************************************
121
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700122print( "**********************************************************" )
123print( "STEP 2: Organize Data." )
124print( "**********************************************************" )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000125
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700126# -----------------------------
127# Port Up Averages Data Sorting
128# -----------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000129
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700130print( "Sorting data for Port Up Averages." )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000131
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700132upAvgs <- c( fileData[ 'up_ofp_to_dev_avg' ],
133 fileData[ 'up_dev_to_link_avg' ],
134 fileData[ 'up_link_to_graph_avg' ] )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000135
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700136# ----------------------------
137# Port Up Construct Data Frame
138# ----------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000139
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700140print( "Constructing Port Up data frame." )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000141
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700142upAvgsDataFrame <- melt( upAvgs )
143upAvgsDataFrame$scale <- fileData$scale
144upAvgsDataFrame$up_std <- fileData$up_std
145
146colnames( upAvgsDataFrame ) <- c( "ms",
147 "type",
148 "scale",
149 "stds" )
150
151upAvgsDataFrame <- na.omit( upAvgsDataFrame )
152
153upAvgsDataFrame$type <- as.character( upAvgsDataFrame$type )
154upAvgsDataFrame$type <- factor( upAvgsDataFrame$type, levels=unique( upAvgsDataFrame$type ) )
155
156sumOfUpAvgs <- fileData[ 'up_ofp_to_dev_avg' ] +
157 fileData[ 'up_dev_to_link_avg' ] +
158 fileData[ 'up_link_to_graph_avg' ]
Jeremy Ronquillo2d2649d2017-09-14 12:53:06 -0700159
160print( "Up Averages Results:" )
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700161print( upAvgsDataFrame )
162
163# -------------------------------
164# Port Down Averages Data Sorting
165# -------------------------------
166
167print( "Sorting data for Port Down Averages." )
168
169downAvgs <- c( fileData[ 'down_ofp_to_dev_avg' ],
170 fileData[ 'down_dev_to_link_avg' ],
171 fileData[ 'down_link_to_graph_avg' ] )
172
173# ------------------------------
174# Port Down Construct Data Frame
175# ------------------------------
176
177print( "Constructing Port Down data frame." )
178
179downAvgsDataFrame <- melt( downAvgs )
180downAvgsDataFrame$scale <- fileData$scale
181downAvgsDataFrame$down_std <- fileData$down_std
182
183colnames( downAvgsDataFrame ) <- c( "ms",
184 "type",
185 "scale",
186 "stds" )
187
188downAvgsDataFrame <- na.omit( downAvgsDataFrame )
189
190downAvgsDataFrame$type <- as.character( downAvgsDataFrame$type )
191downAvgsDataFrame$type <- factor( downAvgsDataFrame$type, levels=unique( downAvgsDataFrame$type ) )
192
193sumOfDownAvgs <- fileData[ 'down_ofp_to_dev_avg' ] +
194 fileData[ 'down_dev_to_link_avg' ] +
195 fileData[ 'down_link_to_graph_avg' ]
Jeremy Ronquillo2d2649d2017-09-14 12:53:06 -0700196
197print( "Down Averages Results:" )
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700198print( downAvgsDataFrame )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000199
200# **********************************************************
201# STEP 3: Generate graphs.
202# **********************************************************
203
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700204print( "**********************************************************" )
205print( "STEP 3: Generate Graph." )
206print( "**********************************************************" )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000207
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700208# ------------------------------------
209# Initialize Variables For Both Graphs
210# ------------------------------------
211
212print( "Initializing variables used in both graphs." )
213
Jeremy Ronquillo0e27b912017-10-21 14:34:24 -0700214theme_set( theme_grey( base_size = 22 ) ) # set the default text size of the graph.
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700215barWidth <- 1
216xScaleConfig <- scale_x_continuous( breaks=c( 1, 3, 5, 7, 9 ) )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000217xLabel <- xlab( "Scale" )
218yLabel <- ylab( "Latency (ms)" )
219fillLabel <- labs( fill="Type" )
Jeremy Ronquillo0e27b912017-10-21 14:34:24 -0700220wrapLegend <- guides( fill=guide_legend( nrow=1, byrow=TRUE ) )
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700221imageWidth <- 15
222imageHeight <- 10
223imageDPI <- 200
224errorBarColor <- rgb( 140, 140, 140, maxColorValue=255 )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000225
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700226theme <- theme( plot.title=element_text( hjust = 0.5, size = 32, face='bold' ),
227 legend.position="bottom",
228 legend.text=element_text( size=22 ),
229 legend.title = element_blank(),
230 legend.key.size = unit( 1.5, 'lines' ) )
231
232colors <- scale_fill_manual( values=c( "#F77670",
233 "#619DFA",
234 "#18BA48" ) )
235
236# --------------------------
237# Port Up Generate Main Plot
238# --------------------------
239
240print( "Generating main plot (Port Up Latency)." )
241
242mainPlot <- ggplot( data = upAvgsDataFrame, aes( x = scale,
243 y = ms,
244 fill = type,
245 ymin = fileData[ 'up_end_to_end_avg' ],
246 ymax = fileData[ 'up_end_to_end_avg' ] + stds ) )
247
248# --------------------------------------
249# Port Up Fundamental Variables Assigned
250# --------------------------------------
251
252print( "Generating fundamental graph data (Port Up Latency)." )
253
254title <- ggtitle( "Port Up Latency" )
255
256fundamentalGraphData <- mainPlot +
257 xScaleConfig +
258 xLabel +
259 yLabel +
260 fillLabel +
261 theme +
262 wrapLegend +
263 title +
264 colors
265
266# -----------------------------------
267# Port Up Generating Bar Graph Format
268# -----------------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000269
270print( "Generating bar graph with error bars (Port Up Latency)." )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000271
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700272barGraphFormat <- geom_bar( stat = "identity",
273 width = barWidth )
274errorBarFormat <- geom_errorbar( width = barWidth,
275 color = errorBarColor )
276
277values <- geom_text( aes( x = upAvgsDataFrame$scale,
278 y = sumOfUpAvgs + 0.03 * max( sumOfUpAvgs ),
279 label = format( sumOfUpAvgs,
280 digits=3,
281 big.mark = ",",
282 scientific = FALSE ) ),
283 size = 7.0,
284 fontface = "bold" )
285
286result <- fundamentalGraphData +
287 barGraphFormat +
288 errorBarFormat +
289 values
290
291# -------------------------------
292# Port Up Exporting Graph to File
293# -------------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000294
295print( paste( "Saving bar chart with error bars (Port Up Latency) to", errBarOutputFileUp ) )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000296
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700297ggsave( errBarOutputFileUp,
298 width = imageWidth,
299 height = imageHeight,
300 dpi = imageDPI )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000301
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700302print( paste( "[SUCCESS] Successfully wrote bar chart with error bars (Port Up Latency) out to", errBarOutputFileUp ) )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000303
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700304# ----------------------------
305# Port Down Generate Main Plot
306# ----------------------------
307
308print( "Generating main plot (Port Down Latency)." )
309
310mainPlot <- ggplot( data = downAvgsDataFrame, aes( x = scale,
311 y = ms,
312 fill = type,
313 ymin = fileData[ 'down_end_to_end_avg' ],
314 ymax = fileData[ 'down_end_to_end_avg' ] + stds ) )
315
316# ----------------------------------------
317# Port Down Fundamental Variables Assigned
318# ----------------------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000319
320print( "Generating fundamental graph data (Port Down Latency)." )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000321
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700322title <- ggtitle( "Port Down Latency" )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000323
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700324fundamentalGraphData <- mainPlot +
325 xScaleConfig +
326 xLabel +
327 yLabel +
328 fillLabel +
329 theme +
330 wrapLegend +
331 title +
332 colors
333
334# -------------------------------------
335# Port Down Generating Bar Graph Format
336# -------------------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000337
338print( "Generating bar graph with error bars (Port Down Latency)." )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000339
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700340barGraphFormat <- geom_bar( stat = "identity",
341 width = barWidth )
342errorBarFormat <- geom_errorbar( width = barWidth,
343 color = errorBarColor )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000344
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700345values <- geom_text( aes( x = downAvgsDataFrame$scale,
346 y = sumOfDownAvgs + 0.03 * max( sumOfDownAvgs ),
347 label = format( sumOfDownAvgs,
348 digits=3,
349 big.mark = ",",
350 scientific = FALSE ) ),
351 size = 7.0,
352 fontface = "bold" )
353
354result <- fundamentalGraphData +
355 barGraphFormat +
356 errorBarFormat +
357 values
358
359# ---------------------------------
360# Port Down Exporting Graph to File
361# ---------------------------------
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000362
363print( paste( "Saving bar chart with error bars (Port Down Latency) to", errBarOutputFileDown ) )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000364
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700365ggsave( errBarOutputFileDown,
366 width = imageWidth,
367 height = imageHeight,
368 dpi = imageDPI )
Jeremy Ronquillo6df87812017-08-28 16:17:36 +0000369
Jeremy Ronquillo7673f802017-10-30 09:42:44 -0700370print( paste( "[SUCCESS] Successfully wrote bar chart with error bars (Port Down Latency) out to", errBarOutputFileDown ) )