Created
November 27, 2017 09:48
-
-
Save ranedk/3ae556dd10ab5c854c36d6897f6248ab to your computer and use it in GitHub Desktop.
File read and parsing in kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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