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)
  
}