Skip to content

Instantly share code, notes, and snippets.

@ranedk
Created November 27, 2017 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ranedk/3ae556dd10ab5c854c36d6897f6248ab to your computer and use it in GitHub Desktop.
Save ranedk/3ae556dd10ab5c854c36d6897f6248ab to your computer and use it in GitHub Desktop.
File read and parsing in kotlin
/**
* Created by rane on 21/11/17.
*/
import java.io.File
import java.io.BufferedReader
import java.util.Date
import khronos.*
fun main(args: Array<String>) {
val bufferedReader = File("/home/rane/tmp/datafile").bufferedReader()
val lineList = mutableListOf<String>()
//Data format 10.50.50.188 20/Nov/2017:06:46:42
var data = mutableListOf<Pair<String, Date>>();
bufferedReader.useLines { lines -> lines.forEach { lineList.add(it) } }
println("Total records: ${lineList.count()}")
lineList.forEach {
var dt:String = it.split(" ")[1]
data.add(Pair(it.split(" ")[0], dt.toDate("dd/MMM/yyyy:HH:mm:ss")));
}
var perMinCluster = mutableMapOf<String, MutableList<Pair<String, Date>>>()
data.filterNotNull().forEach {
var dt:String = it.second.toString("dd/MMM/YYYY:HH:mm")
if(perMinCluster.containsKey(dt)) {
perMinCluster.get(dt)?.apply {
add(it)
}
} else {
perMinCluster.put(dt, mutableListOf(it))
}
if(perMinCluster.count() % 10000 == 0) {
println("Evaluated records: ${perMinCluster.count()}")
}
}
println("Created perMinCluster: ${perMinCluster.count()}")
var perMinuteCount = mutableListOf<Pair<String, Int>>()
for((k, v) in perMinCluster) {
perMinuteCount.add(Pair(k, v.count()))
}
println("Create perMinCount: ${perMinuteCount.count()}")
var perMinAverage = (perMinuteCount.map {
it.second
}.sum()) / perMinuteCount.count()
println("perMinAverage is $perMinAverage")
var offenders = perMinuteCount.filter {
it.second > perMinAverage * 5
}
offenders.forEach {
println("${it.first} : ${it.second}")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment