JASERIES is a scala API for time numeric series operations. ( ** project page **)

Latest changes :
  • "implicit format:CSVFormat" now correctly used
  • CSVFormat comes with a default implicit format.
  • CSVFormatHints class removed.
  • CSVFormat class and usage refactoring
  • Support for variable columns csv, example with this following csv file :

    date; A
    20-03-2011 02:00; 2
    20-03-2011 03:00;
    20-03-2011 04:00; 8
    date; A; B; C
    20-03-2011 05:00; 1; 2; 3
    20-03-2011 06:00; 2; ; 5
    date; C; D
    20-03-2011 07:00; 7; 0
  • apache commons 1.8.4 dependency added (for bzip2 implementation)
  • gzip, bzip2 compressed csv file now taken into account in fromFile and fromURL methods

    val s0 = CSV2Series.fromURL(
    "http://dnld.crosson.org/modstatus-totalaccesses.csv.bz2")
    val s1 = CSV2Series.fromFile("samples/modstatus-totalaccesses.jxtcsv.gz")
    val s2 = CSV2Series.fromFile("samples/modstatus-totalaccesses.jxtcsv.bz2")
  • some TimeModel refactoring + adding a new TimeModel implementation : TimeModelCustom
    But would require some refactoring, performance potential problem I think.
  • package series object added : provides helper functions + align : align some series together on common times they share (using a time normalizer)
  • now supports any order for series computation with numbers : "10 + s" or "s + 10"
    (thanks to an implicit conversion defined in series package objet
  • more test cases
  • series now overrides equals & hashCode (series alias field is not taken into acount - alias is a user friendly series name).
  • series times and values methods return IndexedSeq collection instead of Iterable

Apache total accesses counter to hit rate

The following example demonstrates how to convert a global http hit counter, into a hitrate series:

import fr.janalyse.series._
val csv = CSV2Series.fromURL("http://dnld.crosson.org/modstatus-totalaccesses.csv")
val totalaccesses=csv.values.head

val hitrate=
totalaccesses
.delta
.toSeries[AddCell]
.sample("10m")
.toRate()
.rename("http hit rate")

CSV2Series.toFile(hitrate, "hitrate.csv")

JVM processing time to JVM cpu usage

The following example demonstrates how to convert a java process cpu time counter (mbean : java.lang:type=OperatingSystem__ProcessCpuTime), into a cpu usage metric (here I didn't take into account the number of CPU, so max value = cpu count * 100):

import fr.janalyse.series._
val csv = CSV2Series.fromURL("http://dnld.crosson.org/processcputime.csv")
val cputime=csv.values.head

val cpucells =
for(Seq(a,b) <- (cputime / 1000d / 1000d).sliding(2).toIterable )
yield a.time->(b.value-a.value)/(b.time-a.time)*100d

val cpuusage = Series[StatCell]("cpu usage percent", "5m") <<< cpucells

CSV2Series.toFile(cpuusage, "cpuusage.csv")