From 26c49d4098b25e2c32bb77931989bb15b92dac94 Mon Sep 17 00:00:00 2001 From: Abhishek Jain Date: Thu, 23 Mar 2017 22:09:51 -0400 Subject: [PATCH] Restoring offerUtils. Had deleted this by mistake. --- utilities/offerUtils/offerUtils.go | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 utilities/offerUtils/offerUtils.go diff --git a/utilities/offerUtils/offerUtils.go b/utilities/offerUtils/offerUtils.go new file mode 100644 index 0000000..6f5dc81 --- /dev/null +++ b/utilities/offerUtils/offerUtils.go @@ -0,0 +1,62 @@ +package offerUtils + +import ( + mesos "github.com/mesos/mesos-go/mesosproto" + "strings" +) + +func OfferAgg(offer *mesos.Offer) (float64, float64, float64) { + var cpus, mem, watts float64 + + for _, resource := range offer.Resources { + switch resource.GetName() { + case "cpus": + cpus += *resource.GetScalar().Value + case "mem": + mem += *resource.GetScalar().Value + case "watts": + watts += *resource.GetScalar().Value + } + } + + return cpus, mem, watts +} + +// Determine the power class of the host in the offer +func PowerClass(offer *mesos.Offer) string { + var powerClass string + for _, attr := range offer.GetAttributes() { + if attr.GetName() == "class" { + powerClass = attr.GetText().GetValue() + } + } + return powerClass +} + +// Implements the sort.Sort interface to sort Offers based on CPU. +// TODO: Have a generic sorter that sorts based on a defined requirement (CPU, RAM, DISK or Watts) +type OffersSorter []*mesos.Offer + +func (offersSorter OffersSorter) Len() int { + return len(offersSorter) +} + +func (offersSorter OffersSorter) Swap(i, j int) { + offersSorter[i], offersSorter[j] = offersSorter[j], offersSorter[i] +} + +func (offersSorter OffersSorter) Less(i, j int) bool { + // getting CPU resource availability of offersSorter[i] + cpu1, _, _ := OfferAgg(offersSorter[i]) + // getting CPU resource availability of offersSorter[j] + cpu2, _, _ := OfferAgg(offersSorter[j]) + return cpu1 <= cpu2 +} + +// Is there a mismatch between the task's host requirement and the host corresponding to the offer. +func HostMismatch(offerHost string, taskHost string) bool { + if taskHost != "" && !strings.HasPrefix(offerHost, taskHost) { + return true + } + return false +}