From 2cb09ece1f4e0828da1480fd25e01ac8c6909c9f Mon Sep 17 00:00:00 2001
From: Pradyumna Kaushik <pkaushi1@binghamton.edu>
Date: Tue, 26 Sep 2017 00:26:01 -0400
Subject: [PATCH] fixed importing issues in power-capping strategies. Changed
 names of power-capping strategies to extrema.go and progressive-extrema.go

---
 pcp/utils.go                                    |  4 ++--
 .../extrema.go                                  | 17 +++++++++--------
 .../progressive-extrema.go                      | 15 ++++++++-------
 3 files changed, 19 insertions(+), 17 deletions(-)
 rename pcp/loganddynamiccap.go => power-capping/extrema.go (90%)
 rename pcp/logAndProgressiveExtrema.go => power-capping/progressive-extrema.go (95%)

diff --git a/pcp/utils.go b/pcp/utils.go
index 1e0a260..7d7bd65 100644
--- a/pcp/utils.go
+++ b/pcp/utils.go
@@ -7,7 +7,7 @@ import (
 
 var RAPLUnits = math.Pow(2, -32)
 
-func averageNodePowerHistory(history *ring.Ring) float64 {
+func AverageNodePowerHistory(history *ring.Ring) float64 {
 
 	total := 0.0
 	count := 0.0
@@ -29,7 +29,7 @@ func averageNodePowerHistory(history *ring.Ring) float64 {
 }
 
 // TODO: Figure a way to merge this and avgpower
-func averageClusterPowerHistory(history *ring.Ring) float64 {
+func AverageClusterPowerHistory(history *ring.Ring) float64 {
 
 	total := 0.0
 	count := 0.0
diff --git a/pcp/loganddynamiccap.go b/power-capping/extrema.go
similarity index 90%
rename from pcp/loganddynamiccap.go
rename to power-capping/extrema.go
index 09dc435..a4c3dea 100644
--- a/pcp/loganddynamiccap.go
+++ b/power-capping/extrema.go
@@ -2,6 +2,7 @@ package pcp
 
 import (
 	"bitbucket.org/sunybingcloud/elektron/rapl"
+	"bitbucket.org/sunybingcloud/elektron/pcp"
 	"bufio"
 	"container/ring"
 	"log"
@@ -92,34 +93,34 @@ func StartPCPLogAndExtremaDynamicCap(quit chan struct{}, logging *bool, prefix s
 					powerHistories[host].Value = power
 					powerHistories[host] = powerHistories[host].Next()
 
-					log.Printf("Host: %s, Power: %f", indexToHost[powerIndex], (power * RAPLUnits))
+					log.Printf("Host: %s, Power: %f", indexToHost[powerIndex], (power * pcp.RAPLUnits))
 
 					totalPower += power
 				}
-				clusterPower := totalPower * RAPLUnits
+				clusterPower := totalPower * pcp.RAPLUnits
 
 				clusterPowerHist.Value = clusterPower
 				clusterPowerHist = clusterPowerHist.Next()
 
-				clusterMean := averageClusterPowerHistory(clusterPowerHist)
+				clusterMean := pcp.AverageClusterPowerHistory(clusterPowerHist)
 
 				log.Printf("Total power: %f, %d Sec Avg: %f", clusterPower, clusterPowerHist.Len(), clusterMean)
 
 				if clusterMean > hiThreshold {
 					log.Printf("Need to cap a node")
 					// Create statics for all victims and choose one to cap
-					victims := make([]Victim, 0, 8)
+					victims := make([]pcp.Victim, 0, 8)
 
 					// TODO: Just keep track of the largest to reduce fron nlogn to n
 					for name, history := range powerHistories {
 
-						histMean := averageNodePowerHistory(history)
+						histMean := pcp.AverageNodePowerHistory(history)
 
 						// Consider doing mean calculations using go routines if we need to speed up
-						victims = append(victims, Victim{Watts: histMean, Host: name})
+						victims = append(victims, pcp.Victim{Watts: histMean, Host: name})
 					}
 
-					sort.Sort(VictimSorter(victims)) // Sort by average wattage
+					sort.Sort(pcp.VictimSorter(victims)) // Sort by average wattage
 
 					// From  best victim to worst, if everyone is already capped NOOP
 					for _, victim := range victims {
@@ -127,7 +128,7 @@ func StartPCPLogAndExtremaDynamicCap(quit chan struct{}, logging *bool, prefix s
 						if !cappedHosts[victim.Host] {
 							cappedHosts[victim.Host] = true
 							orderCapped = append(orderCapped, victim.Host)
-							log.Printf("Capping Victim %s Avg. Wattage: %f", victim.Host, victim.Watts*RAPLUnits)
+							log.Printf("Capping Victim %s Avg. Wattage: %f", victim.Host, victim.Watts*pcp.RAPLUnits)
 							if err := rapl.Cap(victim.Host, "rapl", 50); err != nil {
 								log.Print("Error capping host")
 							}
diff --git a/pcp/logAndProgressiveExtrema.go b/power-capping/progressive-extrema.go
similarity index 95%
rename from pcp/logAndProgressiveExtrema.go
rename to power-capping/progressive-extrema.go
index 2b48f95..03a80bc 100644
--- a/pcp/logAndProgressiveExtrema.go
+++ b/power-capping/progressive-extrema.go
@@ -3,6 +3,7 @@ package pcp
 import (
 	"bitbucket.org/sunybingcloud/elektron/constants"
 	"bitbucket.org/sunybingcloud/elektron/rapl"
+	"bitbucket.org/sunybingcloud/elektron/pcp"
 	"bitbucket.org/sunybingcloud/elektron/utilities"
 	"bufio"
 	"container/ring"
@@ -110,16 +111,16 @@ func StartPCPLogAndProgressiveExtremaCap(quit chan struct{}, logging *bool, pref
 					powerHistories[host].Value = power
 					powerHistories[host] = powerHistories[host].Next()
 
-					log.Printf("Host: %s, Power: %f", indexToHost[powerIndex], (power * RAPLUnits))
+					log.Printf("Host: %s, Power: %f", indexToHost[powerIndex], (power * pcp.RAPLUnits))
 
 					totalPower += power
 				}
-				clusterPower := totalPower * RAPLUnits
+				clusterPower := totalPower * pcp.RAPLUnits
 
 				clusterPowerHist.Value = clusterPower
 				clusterPowerHist = clusterPowerHist.Next()
 
-				clusterMean := averageClusterPowerHistory(clusterPowerHist)
+				clusterMean := pcp.AverageClusterPowerHistory(clusterPowerHist)
 
 				log.Printf("Total power: %f, %d Sec Avg: %f", clusterPower, clusterPowerHist.Len(), clusterMean)
 
@@ -128,18 +129,18 @@ func StartPCPLogAndProgressiveExtremaCap(quit chan struct{}, logging *bool, pref
 					log.Printf("Cap values of capped victims: %v", cappedVictims)
 					log.Printf("Cap values of victims to uncap: %v", orderCappedVictims)
 					// Create statics for all victims and choose one to cap
-					victims := make([]Victim, 0, 8)
+					victims := make([]pcp.Victim, 0, 8)
 
 					// TODO: Just keep track of the largest to reduce fron nlogn to n
 					for name, history := range powerHistories {
 
-						histMean := averageNodePowerHistory(history)
+						histMean := pcp.AverageNodePowerHistory(history)
 
 						// Consider doing mean calculations using go routines if we need to speed up
-						victims = append(victims, Victim{Watts: histMean, Host: name})
+						victims = append(victims, pcp.Victim{Watts: histMean, Host: name})
 					}
 
-					sort.Sort(VictimSorter(victims)) // Sort by average wattage
+					sort.Sort(pcp.VictimSorter(victims)) // Sort by average wattage
 
 					// Finding the best victim to cap in a round robin manner
 					newVictimFound := false