adblock_extract <- function(x) {
# Load the package required to read JSON files.
library("jsonlite")
library(data.table)
# Give the input file name to the function.
result <- fromJSON(txt = x)
#Extracting Timings Data
entries <- flatten(result$log$entries)
#Extracting Average Stats
#Average Wall time - each time in millisecond.
avg_time <- mean(entries$time)
#Computing Number of Cookies Requested
avg_cookies <- vector(mode = "numeric", length = nrow(entries))
for (i in 1:nrow(entries)) {
avg_cookies[i] <- length(entries$request.cookies[[i]])
}
num_avg_cookies <- mean(avg_cookies)
#Computing Number of Distinct URLs requested
distinct_urls <- length(unique(entries$request.url))
#Average eadersize requested
avg_request_headersize <- mean(entries$request.headersSize)
#Average Receive Time for Request Data - Download time
avg_receivetime <- mean(entries$timings.receive)
#Average Send Time for Request Data - Upload time
avg_sendtime <- mean(entries$timings.send)
#Average Timing of Successful SSL requests
avg_ssl <- vector(mode = "numeric", length = nrow(entries))
for (i in 1:nrow(entries)) {
if(entries$timings.ssl[[i]] == -1){
avg_ssl[i] <- 0
}
else{
avg_ssl[i] <- length(entries$timings.ssl[[i]])
}
}
num_avg_ssl <- mean(avg_ssl)
#Average Connection Time when connecting to Website using Adblocker
avg_connection_time <- vector(mode = "numeric", length = nrow(entries))
for (i in 1:nrow(entries)) {
if(entries$timings.connect[[i]] == -1){
avg_connection_time[i] <- 0
}
else{
avg_connection_time[i] <- length(entries$timings.connect[[i]])
}
}
num_avg_connection_time <- mean(avg_connection_time)
#Average DNS Time when connecting to Website using Adblocker
avg_dns <- vector(mode = "numeric", length = nrow(entries))
for (i in 1:nrow(entries)) {
if(entries$timings.dns[[i]] == -1){
avg_dns[i] <- 0
}
else{
avg_dns[i] <- length(entries$timings.dns[[i]])
}
}
num_avg_dns <- mean(avg_dns)
#Average Wait Time when connecting to Website using Adblocker
avg_wait_time <- vector(mode = "numeric", length = nrow(entries))
for (i in 1:nrow(entries)) {
if(entries$timings.wait[[i]] == -1){
avg_wait_time[i] <- 0
}
else{
avg_wait_time[i] <- length(entries$timings.wait[[i]])
}
}
num_avg_wait_time <- mean(avg_wait_time)
#Number of URLs blocked when connecting to Website using Adblocker
num_urls_blocked <- length(which(entries$timings.blocked == -1))
#Number of URLs that succeeding in connecting, when using Adblocker
num_urls_conn_success <- length(which(entries$response.status == 200))
#Average Headersize when connecting to Website using Adblocker
avg_response_headersize <- mean(which(entries$response.headersSize != -1))
#Average Bodysize when connecting to Website using Adblocker
avg_response_bodysize <- mean(which(entries$response.bodySize != -1))
#Output Vector
out_dat <- cbind(avg_time, num_avg_cookies, distinct_urls, avg_request_headersize, avg_receivetime, avg_sendtime, num_avg_ssl, num_avg_connection_time,
num_avg_dns, num_avg_wait_time, num_urls_blocked, num_urls_conn_success, avg_response_headersize, avg_response_bodysize)
return(out_dat)
}