Skip to content
This repository was archived by the owner on Mar 11, 2019. It is now read-only.

Commit aacf70b

Browse files
committed
feat: update scala version (2.12) and libraries
1 parent 422850e commit aacf70b

File tree

270 files changed

+2049
-1881
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

270 files changed

+2049
-1881
lines changed

.travis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ services:
66
env:
77
global:
88
- secure: "BfP5e/OPM62e3ktm4RD2nuBJls2u8zdXg/YjNyght5dpD2vCjL6ZHWhgDM2mNFpzgYPiE3DPsSE7g2ZlsBUJCuK8a7lB5r+OiWFcWkilC1E9QX6OMcDTpEKb5A9InFGcpt0xbjY5+8qaIbaN8TJcdxaxeit0TZEvxeirQa5OOEY=" # COVERALLS_REPO_TOKEN
9-
- secure: "ldIw526YR2Fe6FlfIPlbbOojEeg7etbO4dqiL4TLm00SBhVkKG+DuckhFixVAvAJx1Q1LuVyUPsXaR77OjqiTxSkaH+GbsmR5VIM4qA/kBheD4IiV4wTamg679d+AldRNWcGtLpefgwqlCJ53FcMzUT9TH/MJcbEaOJ5GKW9v+s=" # CODACY_PROJECT_TOKEN
9+
# - secure: "ldIw526YR2Fe6FlfIPlbbOojEeg7etbO4dqiL4TLm00SBhVkKG+DuckhFixVAvAJx1Q1LuVyUPsXaR77OjqiTxSkaH+GbsmR5VIM4qA/kBheD4IiV4wTamg679d+AldRNWcGtLpefgwqlCJ53FcMzUT9TH/MJcbEaOJ5GKW9v+s=" # CODACY_PROJECT_TOKEN
1010
- secure: "MLFJWju96LymkPNIsUeJelNN5J3BK55OV/RXVMONC5kDr4N7T4JyhT6KUa4k+FSJ0S1GTPQMWQQEkWDF1MlZXv5yGwW4h5rN3tt//vqyHk968SyqlhTdygqzx6tO6t3OsfQ2F1AqVWAWsHQckL+VmhEo53VqVXpsqLy9DyLYGjs=" # DOCKER_EMAIL
1111
- secure: "FbLHLKNAtpj7ZVgSobOPgAgdLK3/P4sR6RcaOmpVRsgaqodTPx7VkzGpkf4rOqPwxKU3+96vr0TlIdPRYWAE39Y3gMb1dyZ34+CxsrJ3avJYc2+9NT3kmAuU33Iy1DCo3IEnR7pWVVEyR80ob0c1ASfPAW1JN8DhBRRERpkMyn4=" # DOCKER_USER
1212
- secure: "VLK9NI4yE+hLV8rgjiB0hOfQn1uFO7cEHHL4sEDZKNu1TgvwfTrEWEzMMLvG8pwK/7eG78xfNB489m/Imj7Y52xK6sZuY7Y78Y06mkepZS8PisAJiW59kHWH1Ci84DYHZ0y07NAgvCOSLS9l0ncgLdlGvRboR9KBYDMEWycwEn8=" # DOCKER_PWD
@@ -24,7 +24,7 @@ cache:
2424
language: scala
2525

2626
scala:
27-
- 2.11.7
27+
- 2.12.1
2828

2929
jdk:
3030
- oraclejdk8
@@ -51,7 +51,7 @@ before_install:
5151

5252
after_success:
5353
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then sbt "project powerapi-core" coverageReport; fi'
54-
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then sbt "project powerapi-core" codacyCoverage; fi'
54+
# - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then sbt "project powerapi-core" codacyCoverage; fi'
5555
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then sbt "project powerapi-core" coveralls; fi'
5656

5757
before_deploy:

README.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0)
66
[![Build Status](https://travis-ci.org/Spirals-Team/powerapi.svg)](https://travis-ci.org/Spirals-Team/powerapi)
77
[![Coverage Status](https://coveralls.io/repos/Spirals-Team/powerapi/badge.svg)](https://coveralls.io/r/Spirals-Team/powerapi)
8-
[![Codacy Badge](https://www.codacy.com/project/badge/31f7762213c340fbb5fe1463a5b871d4)](https://www.codacy.com/app/mcolmant/powerapi)
98

109
PowerAPI is a middleware toolkit for building software-defined power meters.
1110
Software-defined power meters are configurable software libraries that can estimate the power consumption of software in real-time.
@@ -46,20 +45,20 @@ PowerAPI is used in a variety of projects to address key challenges of GreenIT:
4645
* [Greenspector](http://greenspector.com) optimises the power consumption of software by identifying potential energy leaks in the source code.
4746

4847
## Acknowledgments
49-
We all stand on the shoulders of giants and get by with a little help from our friends. PowerAPI is written in [Scala](http://www.scala-lang.org) (version 2.11.7 under [3-clause BSD license](http://www.scala-lang.org/license.html)) and built on top of:
50-
* [Akka](http://akka.io) (version 2.3.14 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for asynchronous processing
51-
* [Typesafe Config](https://github.com/typesafehub/config) (version 1.2.1 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for reading configuration files.
52-
* [Apache log4j2](http://logging.apache.org/log4j/2.x) (version 2.5 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for logging outside actors.
53-
* [powerspy.scala](https://github.com/Spirals-Team/powerspy.scala) (version 1.2 under [AGPL license](http://www.gnu.org/licenses/agpl-3.0.html)), for using the [PowerSpy powermeter](http://www.alciom.com/en/products/powerspy2-en-gb-2.html).
48+
We all stand on the shoulders of giants and get by with a little help from our friends. PowerAPI is written in [Scala](http://www.scala-lang.org) (version 2.12.1 under [3-clause BSD license](http://www.scala-lang.org/license.html)) and built on top of:
49+
* [Akka](http://akka.io) (version 2.4.14 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for asynchronous processing.
50+
* [Typesafe Config](https://github.com/typesafehub/config) (version 1.3.1 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for reading configuration files.
51+
* [scala-logging](https://github.com/typesafehub/scala-logging) (version 3.5.0 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for Scala wrapping SL4J.
52+
* [logback](https://github.com/qos-ch/logback) (version 1.1.7 under [LGPL 2.1 license](https://github.com/qos-ch/logback/blob/master/LICENSE.txt)), for logging purpose.
53+
* [powerspy.scala](https://github.com/Spirals-Team/powerspy.scala) (version 1.2 under [AGPL license](http://www.gnu.org/licenses/agpl-3.0.html)), for using the [PowerSpy](http://www.alciom.com/en/products/powerspy2-en-gb-2.html) power meter.
5454
* [BridJ](https://code.google.com/p/bridj/) (version 0.7.0 under [3-clause BSD license](https://github.com/ochafik/nativelibs4java/blob/master/libraries/BridJ/LICENSE)), for system or C calls.
55-
* [JNA](https://github.com/twall/jna) (version 4.2.1 under [LGPL 2.1 license](https://github.com/twall/jna/blob/master/LGPL2.1)), for system or C calls.
56-
* [perfmon2](http://sourceforge.net/p/perfmon2/libpfm4/ci/master/tree) (version 4.6.0 under [MIT license](http://sourceforge.net/p/perfmon2/libpfm4/ci/master/tree/COPYING)), for accessing hardware performance counters.
55+
* [JNA](https://github.com/twall/jna) (version 4.2.2 under [LGPL 2.1 license](https://github.com/twall/jna/blob/master/LGPL2.1)), for system or C calls.
56+
* [perfmon2](http://sourceforge.net/p/perfmon2/libpfm4/ci/master/tree) (version 4.7.0 under [MIT license](http://sourceforge.net/p/perfmon2/libpfm4/ci/master/tree/COPYING)), for accessing hardware performance counters.
5757
* [JFreeChart](http://www.jfree.org/jfreechart/) (version 1.0.19 under [LGPL license](https://www.gnu.org/licenses/lgpl.html)), for creation of interactive and animated charts.
58-
* [Scala IO](http://jesseeichar.github.io/scala-io-doc/0.4.3/index.html#!/overview) (version 0.4.3 under [3-clause BSD license](http://www.scala-lang.org/license.html)), for an extensions of IO.
59-
* [Saddle](http://saddle.github.io/) (version 1.3.4 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for data manipulation.
58+
* [grizzled-scala](http://software.clapper.org/grizzled-scala/) (version 4.0.0 under [3-clause BSD license](https://github.com/bmc/grizzled-scala/blob/master/LICENSE.md)), for new utility classes and objects.
6059
* [Sigar](https://support.hyperic.com/display/SIGAR/Home) (version 1.6.5 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for providing a portable interface for gathering system information.
6160
* [spray-json](http://spray.io/) (version 1.3.2 under [Apache 2 license](http://www.apache.org/licenses/LICENSE-2.0)), for (de)serializing JSON.
62-
* [scala-influxdb-client](https://github.com/paulgoldbaum/scala-influxdb-client) (version 0.4.5 under [MIT license](https://github.com/paulgoldbaum/scala-influxdb-client/blob/master/LICENSE)), for using an asynchronous scala API for InfluxDB.
61+
* [scala-influxdb-client](https://github.com/paulgoldbaum/scala-influxdb-client) (version 0.5.2 under [MIT license](https://github.com/paulgoldbaum/scala-influxdb-client/blob/master/LICENSE)), for using an asynchronous scala API for InfluxDB.
6362

6463
# License
6564
This software is licensed under the *GNU Affero General Public License*, quoted below.

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ name := "powerapi"
22

33
// Logging
44
libraryDependencies in ThisBuild ++= Seq(
5-
"org.apache.logging.log4j" % "log4j-api" % "2.5",
6-
"org.apache.logging.log4j" % "log4j-core" % "2.5"
5+
"com.typesafe.scala-logging" %% "scala-logging" % "3.5.0",
6+
"ch.qos.logback" % "logback-classic" % "1.1.7"
77
)

docker/sampling/Dockerfile-sampling

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM alpine:latest
22

3-
ENV POWERAPI_PACKAGE powerapi-sampling
3+
ENV POWERAPI_PACKAGE powerapi-sampling-cpu
44
ENV LIBPFM_PACKAGE libpfm-4.6.0
55

66
ENV INSTALL_PACKAGES ca-certificates linux-headers libc-dev make gcc patch

powerapi-cli/src/main/scala/org/powerapi/app/PowerAPI.scala

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import org.powerapi.{PowerDisplay, PowerMeter, PowerMonitoring}
5050
*/
5151
object PowerAPI extends App {
5252
val modulesR = """(procfs-cpu-simple|sigar-cpu-simple|cpu-dvfs|libpfm|libpfm-process|libpfm-core|libpfm-core-process|powerspy|g5k-omegawatt|rapl|disk-simple)(,(procfs-cpu-simple|sigar-cpu-simple|cpu-dvfs|libpfm|libpfm-process|libpfm-core|libpfm-core-process|powerspy|g5k-omegawatt|rapl|disk-simple))*""".r
53-
val aggR = """max|min|geomean|logsum|mean|median|stdev|sum|variance""".r
53+
val aggR = """max|min|mean|median|sum""".r
5454
val durationR = """\d+""".r
5555
val pidsR = """(\d+)(,(\d+))*""".r
5656
val appsR = """([^,]+)(,([^,]+))*""".r
@@ -76,13 +76,9 @@ object PowerAPI extends App {
7676
str match {
7777
case "max" => MAX
7878
case "min" => MIN
79-
case "geomean" => GEOMEAN
80-
case "logsum" => LOGSUM
8179
case "mean" => MEAN
8280
case "median" => MEDIAN
83-
case "stdev" => STDEV
8481
case "sum" => SUM
85-
case "variance" => VARIANCE
8682
}
8783
}
8884

powerapi-core/build.sbt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,24 @@ resolvers ++= Seq(
1212

1313
// App
1414
libraryDependencies ++= Seq(
15-
"com.typesafe.akka" %% "akka-actor" % "2.3.14",
16-
"com.typesafe" % "config" % "1.2.1",
15+
"com.typesafe.akka" %% "akka-actor" % "2.4.14",
16+
"com.typesafe" % "config" % "1.3.1",
1717
"fr.inria.powerspy" % "powerspy-core_2.11" % "1.2",
1818
"com.nativelibs4java" % "bridj" % "0.7.0",
19-
"com.github.scala-incubator.io" %% "scala-io-core" % "0.4.3",
20-
"com.github.scala-incubator.io" %% "scala-io-file" % "0.4.3",
2119
"org.jfree" % "jfreechart" % "1.0.19",
22-
"org.scala-saddle" %% "saddle-core" % "1.3.4",
20+
"org.clapper" %% "grizzled-scala" % "4.0.0",
2321
"org.hyperic" % "sigar" % "1.6.5.132",
24-
"net.java.dev.jna" % "jna" % "4.2.1",
22+
"net.java.dev.jna" % "jna" % "4.2.2",
2523
"io.spray" %% "spray-json" % "1.3.2",
26-
"com.paulgoldbaum" %% "scala-influxdb-client" % "0.4.5"
24+
"com.paulgoldbaum" %% "scala-influxdb-client" % "0.5.2",
25+
"joda-time" % "joda-time" % "2.9.6"
2726
)
2827

2928
// Tests
3029
libraryDependencies ++= Seq(
31-
"com.typesafe.akka" %% "akka-testkit" % "2.3.14" % "test",
32-
"org.scalatest" %% "scalatest" % "2.2.5" % "test",
33-
"org.scalamock" %% "scalamock-scalatest-support" % "3.2.2" % "test"
30+
"com.typesafe.akka" %% "akka-testkit" % "2.4.14" % "test",
31+
"org.scalatest" %% "scalatest" % "3.0.1" % "test",
32+
"org.scalamock" %% "scalamock-scalatest-support" % "3.4.2" % "test"
3433
)
3534

3635
startYear := Some(2014)

powerapi-core/src/main/scala/org/powerapi/core/OSHelper.scala

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ package org.powerapi.core
2424

2525
import java.io.{File, IOException}
2626

27-
import scala.collection.JavaConversions._
27+
import scala.collection.JavaConverters._
2828
import scala.io.Source
2929
import scala.sys.process.stringSeqToProcess
30-
3130
import com.typesafe.config.Config
32-
import org.apache.logging.log4j.LogManager
31+
import com.typesafe.scalalogging.Logger
3332
import org.hyperic.sigar.ptql.ProcessFinder
3433
import org.hyperic.sigar.{SigarException, SigarProxy}
3534
import org.powerapi.core.FileHelper.using
@@ -255,8 +254,8 @@ class LinuxHelper extends Configuration(None) with OSHelper {
255254
* CPU's topology.
256255
*/
257256
lazy val topology: Map[Int, Set[Int]] = load { conf =>
258-
(for (item: Config <- conf.getConfigList("powerapi.cpu.topology"))
259-
yield (item.getInt("core"), item.getIntList("indexes").map(_.toInt).toSet)).toMap
257+
(for (item: Config <- conf.getConfigList("powerapi.cpu.topology").asScala)
258+
yield (item.getInt("core"), item.getIntList("indexes").asScala.map(_.toInt).toSet)).toMap
260259
} match {
261260
case ConfigValue(values) => values
262261
case _ => Map()
@@ -271,7 +270,7 @@ class LinuxHelper extends Configuration(None) with OSHelper {
271270
case _ => "/proc/mounts"
272271
}
273272

274-
private val log = LogManager.getLogger
273+
private val log = Logger(classOf[OSHelper])
275274
private val PSFormat = """^\s*(\d+)\s*""".r
276275
private val GlobalStatFormat = """cpu\s+([\d\s]+)""".r
277276
private val TimeInStateFormat = """(\d+)\s+(\d+)""".r
@@ -394,7 +393,7 @@ class LinuxHelper extends Configuration(None) with OSHelper {
394393
using(timeInStatePath.replace("%?index", s"$core"))(source => {
395394
log.debug("using {} as a sysfs timeinstates path", timeInStatePath)
396395

397-
for (line <- source.getLines) {
396+
for (line: String <- source.getLines) {
398397
line match {
399398
case TimeInStateFormat(freq, t) => result += (freq.toLong -> (t.toLong + result.getOrElse(freq.toLong, 0l)))
400399
case _ => log.warn("unable to parse line {} from file {}", line, timeInStatePath)
@@ -515,7 +514,7 @@ trait SigarHelperConfiguration extends Configuration {
515514
*/
516515
class SigarHelper(sigar: SigarProxy) extends OSHelper {
517516
lazy val cores = sigar.getCpuInfoList()(0).getTotalCores
518-
private val log = LogManager.getLogger
517+
private val log = Logger(classOf[SigarHelper])
519518

520519
def getCPUFrequencies: Set[Long] = throw new SigarException("sigar cannot be able to get CPU frequencies")
521520

powerapi-core/src/main/scala/org/powerapi/core/power/Power.scala

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
package org.powerapi.core.power
2424

2525
import scala.concurrent.duration.{DurationInt, FiniteDuration}
26-
27-
import org.apache.logging.log4j.LogManager
2826
import org.powerapi.core.power.RawPower._
2927

3028
object Power {
@@ -113,8 +111,6 @@ object RawPower {
113111
* @author Romain Rouvoy <romain.rouvoy@univ-lille1.fr>
114112
*/
115113
final class RawPower(val value: Double, val unit: PowerUnit) extends Power {
116-
private val log = LogManager.getLogger
117-
118114
def toWatts: Double = unit.toWatts(value)
119115

120116
require(unit match {
@@ -133,7 +129,7 @@ final class RawPower(val value: Double, val unit: PowerUnit) extends Power {
133129

134130
def toUnit(u: PowerUnit): Double = toMilliWatts / MILLIWATTS.convert(1, u)
135131

136-
override def toString(): String = s"$value $unit"
132+
override def toString: String = s"$value $unit"
137133

138134
def compare(other: Power): Int = toMilliWatts compare other.toMilliWatts
139135

powerapi-core/src/main/scala/org/powerapi/core/power/package.scala

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
*/
2323
package org.powerapi.core
2424

25-
import org.saddle.Vec
25+
import Numeric._
26+
import grizzled.math.stats._
2627

2728
package object power {
2829
type PowerUnit = org.powerapi.core.power.PowerConverter.PowerUnitVal
@@ -31,29 +32,15 @@ package object power {
3132
final val KILOWATTS = org.powerapi.core.power.PowerConverter.KILOWATTS
3233
final val MEGAWATTS = org.powerapi.core.power.PowerConverter.MEGAWATTS
3334

34-
def MAX(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).max match {
35-
case Some(max) => max.mW
36-
case None => 0.mW
37-
}
38-
39-
def MIN(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).min match {
40-
case Some(min) => min.mW
41-
case None => 0.mW
42-
}
43-
44-
def GEOMEAN(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).geomean.mW
45-
46-
def LOGSUM(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).logsum.mW
47-
48-
def MEAN(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).mean.mW
35+
def MAX(s: Seq[Power]): Power = s.map(_.value).max.mW
4936

50-
def MEDIAN(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).median.mW
37+
def MIN(s: Seq[Power]): Power = s.map(_.value).min.mW
5138

52-
def STDEV(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).stdev.mW
39+
def SUM(s : Seq[Power]): Power = s.map(_.value).sum.mW
5340

54-
def SUM(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).sum.mW
41+
def MEAN(s: Seq[Power]): Power = mean(s.map(_.value): _*).mW
5542

56-
def VARIANCE(s: Seq[Power]): Power = Vec(s.map(_.toMilliWatts): _*).variance.mW
43+
def MEDIAN(s: Seq[Power]): Power = median(s.map(_.value): _*).mW
5744

5845
implicit final class DoublePower(private val value: Double) extends AnyVal {
5946
def mW: Power = Power(value, MILLIWATTS)

powerapi-core/src/main/scala/org/powerapi/module/cpu/dvfs/CpuDvfsFormulaConfiguration.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
*/
2323
package org.powerapi.module.cpu.dvfs
2424

25-
import scala.collection.JavaConversions
25+
import scala.collection.JavaConverters
2626

2727
import com.typesafe.config.Config
2828
import org.powerapi.core.ConfigValue
@@ -37,7 +37,7 @@ trait CpuDvfsFormulaConfiguration extends org.powerapi.module.cpu.simple.CpuSimp
3737
* Map of frequencies and their associated voltages.
3838
*/
3939
lazy val frequencies = load { conf =>
40-
(for (item <- JavaConversions.asScalaBuffer(conf.getConfigList("powerapi.cpu.frequencies")))
40+
(for (item <- JavaConverters.asScalaBuffer(conf.getConfigList("powerapi.cpu.frequencies")))
4141
yield (item.asInstanceOf[Config].getInt("value"), item.asInstanceOf[Config].getDouble("voltage"))).toMap
4242
} match {
4343
case ConfigValue(freqs) => freqs

0 commit comments

Comments
 (0)