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

Commit 8becf42

Browse files
committed
Merge remote-tracking branch 'upstream/master' into fix-docker-conf
2 parents 0ba35cc + 41914b4 commit 8becf42

File tree

4 files changed

+29
-7
lines changed

4 files changed

+29
-7
lines changed

powerapi-cli/build.sbt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
name := "powerapi-cli"
22

3+
libraryDependencies ++= Seq(
4+
"com.spotify" % "docker-client" % "8.11.1"
5+
)
6+
37
mappings in Universal ++= {
48
val dir = baseDirectory.value.getParentFile
59

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@ package org.powerapi.app
2424

2525
import java.lang.management.ManagementFactory
2626

27+
import com.spotify.docker.client.exceptions.{ContainerNotFoundException, DockerException}
28+
import com.spotify.docker.client.messages.ContainerInfo
29+
import com.spotify.docker.client.{DefaultDockerClient, DockerClient}
30+
2731
import scala.concurrent.Await
2832
import scala.concurrent.duration.DurationInt
2933
import scala.sys
3034
import scala.sys.process.stringSeqToProcess
3135
import scala.util.matching.Regex
32-
3336
import org.powerapi.core.power._
3437
import org.powerapi.core.target._
3538
import org.powerapi.module.cpu.dvfs.CpuDvfsModule
@@ -39,7 +42,7 @@ import org.powerapi.module.extpowermeter.g5komegawatt.G5kOmegaWattModule
3942
import org.powerapi.module.extpowermeter.powerspy.PowerSpyModule
4043
import org.powerapi.module.extpowermeter.rapl.RAPLModule
4144
import org.powerapi.module.libpfm.{LibpfmCoreModule, LibpfmCoreProcessModule, LibpfmHelper, LibpfmModule, LibpfmProcessModule}
42-
import org.powerapi.reporter.{InfluxDisplay, ConsoleDisplay, FileDisplay, JFreeChartDisplay}
45+
import org.powerapi.reporter.{ConsoleDisplay, FileDisplay, InfluxDisplay, JFreeChartDisplay}
4346
import org.powerapi.{PowerDisplay, PowerMeter, PowerMonitoring}
4447

4548
/**
@@ -59,6 +62,8 @@ object PowerAPI extends App {
5962
@volatile var powerMeters = Seq[PowerMeter]()
6063
@volatile var monitors = Seq[PowerMonitoring]()
6164

65+
lazy val docker: DockerClient = new DefaultDockerClient("unix:///var/run/docker.sock")
66+
6267
val shutdownHookThread = scala.sys.ShutdownHookThread {
6368
println("PowerAPI is shutting down ...")
6469
monitors.foreach(monitor => monitor.cancel())
@@ -94,7 +99,7 @@ object PowerAPI extends App {
9499
|usage: ./powerapi modules procfs-cpu-simple|sigar-cpu-simple|cpu-dvfs|libpfm|libpfm-process|libpfm-core|libpfm-core-process|powerspy|g5k-omegawatt|rapl|disk-simple (1, *) *--prefix [name]*
95100
| monitor (1, *)
96101
| --frequency $MILLISECONDS
97-
| --self (0, 1) --pids [pid, ...] (0, *) --apps [app, ...] (0, *) --containers [id, ...] (0, *) | all (0, 1)
102+
| --self (0, 1) --pids [pid, ...] (0, *) --apps [app, ...] (0, *) --containers [name or ID, ...] (0, *) | all (0, 1)
98103
| --agg max|min|mean|median|sum
99104
| --console (0, 1) --file $FILEPATH (0, *) --chart (0, 1) --influx $HOST $PORT $USER $PWD $DB $MEASUREMENT (0, *)
100105
| duration [s]
@@ -153,7 +158,22 @@ object PowerAPI extends App {
153158
), tail)
154159
case "--containers" :: value :: tail if validate(containersR, value) =>
155160
cliMonitorsSubcommand(options, currentMonitor + ('targets ->
156-
(currentMonitor.getOrElse('targets, Set[Any]()).asInstanceOf[Set[Any]] ++ value.split(",").map(container => Container(container)))
161+
(currentMonitor.getOrElse('targets, Set[Any]()).asInstanceOf[Set[Any]] ++ value.split(",").map {
162+
container =>
163+
try {
164+
val targetInformation: ContainerInfo = docker.inspectContainer(container)
165+
Container(targetInformation.id(), targetInformation.name())
166+
}
167+
catch {
168+
case _: ContainerNotFoundException =>
169+
println("Container '" + container + "' does not exist")
170+
sys.exit(1)
171+
172+
case _: DockerException =>
173+
println("The Docker socket is unavailable, please check if Docker daemon is running and its socket exists at the following path : '/var/run/docker.sock'")
174+
sys.exit(1)
175+
}
176+
})
157177
), tail)
158178
case "--all" :: tail =>
159179
cliMonitorsSubcommand(options, currentMonitor + ('targets ->

powerapi-core/src/main/scala/org/powerapi/core/target/Target.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ case class Application(name: String) extends Target {
6060
* @author <a href="mailto:l.huertas.pro@gmail.com">Loïc Huertas</a>
6161
*/
6262
case class Container(id: String, name: String = "unknown") extends Target {
63-
override def toString: String = id
63+
override def toString: String = name.substring(1)
6464
}
6565

6666
/**

powerapi-core/src/main/scala/org/powerapi/module/cpu/simple/CpuSimpleModule.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ class CpuSimpleModule(osHelper: OSHelper, tdp: Double, tdpFactor: Double) extend
3434
object ProcFSCpuSimpleModule extends CpuSimpleFormulaConfiguration {
3535
def apply(): CpuSimpleModule = {
3636
val linuxHelper = new LinuxHelper
37-
3837
new CpuSimpleModule(linuxHelper, tdp, tdpFactor)
3938
}
4039
}
@@ -47,7 +46,6 @@ object SigarCpuSimpleModule extends CpuSimpleFormulaConfiguration with SigarHelp
4746

4847
def apply(): CpuSimpleModule = {
4948
val sigarHelper = new SigarHelper(sigar)
50-
5149
new CpuSimpleModule(sigarHelper, tdp, tdpFactor)
5250
}
5351
}

0 commit comments

Comments
 (0)