You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by bo...@apache.org on 2015/11/20 23:26:28 UTC
[03/15] storm git commit: [STORM-1198] Web UI to show resource usages
and Total Resources on all supervisors
[STORM-1198] Web UI to show resource usages and Total Resources on all supervisors
Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/400f2154
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/400f2154
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/400f2154
Branch: refs/heads/master
Commit: 400f2154e458b2033299b5be5bde165dfbb57cf8
Parents: 1c07f1d
Author: zhuol <zh...@yahoo-inc.com>
Authored: Tue Nov 10 14:57:14 2015 -0600
Committer: zhuol <zh...@yahoo-inc.com>
Committed: Thu Nov 19 12:35:22 2015 -0600
----------------------------------------------------------------------
.../src/clj/backtype/storm/daemon/nimbus.clj | 7 +-
storm-core/src/clj/backtype/storm/ui/core.clj | 5 +
.../storm/generated/SupervisorSummary.java | 206 ++++++++++++++++++-
.../jvm/backtype/storm/scheduler/Cluster.java | 15 +-
.../resource/ResourceAwareScheduler.java | 16 ++
storm-core/src/py/storm/ttypes.py | 28 ++-
storm-core/src/storm.thrift | 2 +
.../public/templates/index-page-template.html | 24 +++
8 files changed, 296 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/clj/backtype/storm/daemon/nimbus.clj
----------------------------------------------------------------------
diff --git a/storm-core/src/clj/backtype/storm/daemon/nimbus.clj b/storm-core/src/clj/backtype/storm/daemon/nimbus.clj
index d23da03..87b5a8b 100644
--- a/storm-core/src/clj/backtype/storm/daemon/nimbus.clj
+++ b/storm-core/src/clj/backtype/storm/daemon/nimbus.clj
@@ -163,7 +163,8 @@
:leader-elector (zk-leader-elector conf)
:code-distributor (mk-code-distributor conf)
:id->sched-status (atom {})
- :id->resources (atom {})
+ :node-id->resources (atom {}) ;;resources of supervisors
+ :id->resources (atom {}) ;;resources of topologies
:cred-renewers (AuthUtils/GetCredentialRenewers conf)
:topology-history-lock (Object.)
:topo-history-state (nimbus-topo-history-state conf)
@@ -745,6 +746,7 @@
;; the new assignments for all the topologies are in the cluster object.
_ (.schedule (:scheduler nimbus) topologies cluster)
_ (reset! (:id->sched-status nimbus) (.getStatusMap cluster))
+ _ (reset! (:node-id->resources nimbus) (.getSupervisorsResourcesMap cluster))
_ (reset! (:id->resources nimbus) (merge @(:id->resources nimbus) (.getResourcesMap cluster)))]
(.getAssignments cluster)))
@@ -1646,6 +1648,9 @@
(count (:used-ports info))
id) ]
(.set_total_resources sup-sum (map-val double (:resources-map info)))
+ (when-let [[total-mem total-cpu used-mem used-cpu] (.get @(:node-id->resources nimbus) id)]
+ (.set_used_mem sup-sum used-mem)
+ (.set_used_cpu sup-sum used-cpu))
(when-let [version (:version info)] (.set_version sup-sum version))
sup-sum))
nimbus-uptime ((:uptime nimbus))
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/clj/backtype/storm/ui/core.clj
----------------------------------------------------------------------
diff --git a/storm-core/src/clj/backtype/storm/ui/core.clj b/storm-core/src/clj/backtype/storm/ui/core.clj
index 99f75e4..64dc1b9 100644
--- a/storm-core/src/clj/backtype/storm/ui/core.clj
+++ b/storm-core/src/clj/backtype/storm/ui/core.clj
@@ -42,6 +42,7 @@
(:import [backtype.storm.generated AuthorizationException ProfileRequest ProfileAction NodeInfo])
(:import [backtype.storm.security.auth AuthUtils])
(:import [backtype.storm.utils VersionInfo])
+ (:import [backtype.storm Config])
(:import [java.io File])
(:require [compojure.route :as route]
[compojure.handler :as handler]
@@ -433,6 +434,10 @@
"uptimeSeconds" (.get_uptime_secs s)
"slotsTotal" (.get_num_workers s)
"slotsUsed" (.get_num_used_workers s)
+ "totalMem" (get (.get_total_resources s) Config/SUPERVISOR_MEMORY_CAPACITY_MB)
+ "totalCpu" (get (.get_total_resources s) Config/SUPERVISOR_CPU_CAPACITY)
+ "usedMem" (.get_used_mem s)
+ "usedCpu" (.get_used_cpu s)
"version" (.get_version s)})}))
(defn all-topologies-summary
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/jvm/backtype/storm/generated/SupervisorSummary.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/generated/SupervisorSummary.java b/storm-core/src/jvm/backtype/storm/generated/SupervisorSummary.java
index 2c3f330..88202d8 100644
--- a/storm-core/src/jvm/backtype/storm/generated/SupervisorSummary.java
+++ b/storm-core/src/jvm/backtype/storm/generated/SupervisorSummary.java
@@ -62,6 +62,8 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
private static final org.apache.thrift.protocol.TField SUPERVISOR_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("supervisor_id", org.apache.thrift.protocol.TType.STRING, (short)5);
private static final org.apache.thrift.protocol.TField VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("version", org.apache.thrift.protocol.TType.STRING, (short)6);
private static final org.apache.thrift.protocol.TField TOTAL_RESOURCES_FIELD_DESC = new org.apache.thrift.protocol.TField("total_resources", org.apache.thrift.protocol.TType.MAP, (short)7);
+ private static final org.apache.thrift.protocol.TField USED_MEM_FIELD_DESC = new org.apache.thrift.protocol.TField("used_mem", org.apache.thrift.protocol.TType.DOUBLE, (short)8);
+ private static final org.apache.thrift.protocol.TField USED_CPU_FIELD_DESC = new org.apache.thrift.protocol.TField("used_cpu", org.apache.thrift.protocol.TType.DOUBLE, (short)9);
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
@@ -76,6 +78,8 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
private String supervisor_id; // required
private String version; // optional
private Map<String,Double> total_resources; // optional
+ private double used_mem; // optional
+ private double used_cpu; // optional
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -85,7 +89,9 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
NUM_USED_WORKERS((short)4, "num_used_workers"),
SUPERVISOR_ID((short)5, "supervisor_id"),
VERSION((short)6, "version"),
- TOTAL_RESOURCES((short)7, "total_resources");
+ TOTAL_RESOURCES((short)7, "total_resources"),
+ USED_MEM((short)8, "used_mem"),
+ USED_CPU((short)9, "used_cpu");
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
@@ -114,6 +120,10 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
return VERSION;
case 7: // TOTAL_RESOURCES
return TOTAL_RESOURCES;
+ case 8: // USED_MEM
+ return USED_MEM;
+ case 9: // USED_CPU
+ return USED_CPU;
default:
return null;
}
@@ -157,8 +167,10 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
private static final int __UPTIME_SECS_ISSET_ID = 0;
private static final int __NUM_WORKERS_ISSET_ID = 1;
private static final int __NUM_USED_WORKERS_ISSET_ID = 2;
+ private static final int __USED_MEM_ISSET_ID = 3;
+ private static final int __USED_CPU_ISSET_ID = 4;
private byte __isset_bitfield = 0;
- private static final _Fields optionals[] = {_Fields.VERSION,_Fields.TOTAL_RESOURCES};
+ private static final _Fields optionals[] = {_Fields.VERSION,_Fields.TOTAL_RESOURCES,_Fields.USED_MEM,_Fields.USED_CPU};
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -178,6 +190,10 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING),
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE))));
+ tmpMap.put(_Fields.USED_MEM, new org.apache.thrift.meta_data.FieldMetaData("used_mem", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
+ tmpMap.put(_Fields.USED_CPU, new org.apache.thrift.meta_data.FieldMetaData("used_cpu", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(SupervisorSummary.class, metaDataMap);
}
@@ -226,6 +242,8 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
Map<String,Double> __this__total_resources = new HashMap<String,Double>(other.total_resources);
this.total_resources = __this__total_resources;
}
+ this.used_mem = other.used_mem;
+ this.used_cpu = other.used_cpu;
}
public SupervisorSummary deepCopy() {
@@ -245,6 +263,10 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
this.version = "VERSION_NOT_PROVIDED";
this.total_resources = null;
+ set_used_mem_isSet(false);
+ this.used_mem = 0.0;
+ set_used_cpu_isSet(false);
+ this.used_cpu = 0.0;
}
public String get_host() {
@@ -416,6 +438,50 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
}
}
+ public double get_used_mem() {
+ return this.used_mem;
+ }
+
+ public void set_used_mem(double used_mem) {
+ this.used_mem = used_mem;
+ set_used_mem_isSet(true);
+ }
+
+ public void unset_used_mem() {
+ __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __USED_MEM_ISSET_ID);
+ }
+
+ /** Returns true if field used_mem is set (has been assigned a value) and false otherwise */
+ public boolean is_set_used_mem() {
+ return EncodingUtils.testBit(__isset_bitfield, __USED_MEM_ISSET_ID);
+ }
+
+ public void set_used_mem_isSet(boolean value) {
+ __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __USED_MEM_ISSET_ID, value);
+ }
+
+ public double get_used_cpu() {
+ return this.used_cpu;
+ }
+
+ public void set_used_cpu(double used_cpu) {
+ this.used_cpu = used_cpu;
+ set_used_cpu_isSet(true);
+ }
+
+ public void unset_used_cpu() {
+ __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __USED_CPU_ISSET_ID);
+ }
+
+ /** Returns true if field used_cpu is set (has been assigned a value) and false otherwise */
+ public boolean is_set_used_cpu() {
+ return EncodingUtils.testBit(__isset_bitfield, __USED_CPU_ISSET_ID);
+ }
+
+ public void set_used_cpu_isSet(boolean value) {
+ __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __USED_CPU_ISSET_ID, value);
+ }
+
public void setFieldValue(_Fields field, Object value) {
switch (field) {
case HOST:
@@ -474,6 +540,22 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
}
break;
+ case USED_MEM:
+ if (value == null) {
+ unset_used_mem();
+ } else {
+ set_used_mem((Double)value);
+ }
+ break;
+
+ case USED_CPU:
+ if (value == null) {
+ unset_used_cpu();
+ } else {
+ set_used_cpu((Double)value);
+ }
+ break;
+
}
}
@@ -500,6 +582,12 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
case TOTAL_RESOURCES:
return get_total_resources();
+ case USED_MEM:
+ return Double.valueOf(get_used_mem());
+
+ case USED_CPU:
+ return Double.valueOf(get_used_cpu());
+
}
throw new IllegalStateException();
}
@@ -525,6 +613,10 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
return is_set_version();
case TOTAL_RESOURCES:
return is_set_total_resources();
+ case USED_MEM:
+ return is_set_used_mem();
+ case USED_CPU:
+ return is_set_used_cpu();
}
throw new IllegalStateException();
}
@@ -605,6 +697,24 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
return false;
}
+ boolean this_present_used_mem = true && this.is_set_used_mem();
+ boolean that_present_used_mem = true && that.is_set_used_mem();
+ if (this_present_used_mem || that_present_used_mem) {
+ if (!(this_present_used_mem && that_present_used_mem))
+ return false;
+ if (this.used_mem != that.used_mem)
+ return false;
+ }
+
+ boolean this_present_used_cpu = true && this.is_set_used_cpu();
+ boolean that_present_used_cpu = true && that.is_set_used_cpu();
+ if (this_present_used_cpu || that_present_used_cpu) {
+ if (!(this_present_used_cpu && that_present_used_cpu))
+ return false;
+ if (this.used_cpu != that.used_cpu)
+ return false;
+ }
+
return true;
}
@@ -647,6 +757,16 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
if (present_total_resources)
list.add(total_resources);
+ boolean present_used_mem = true && (is_set_used_mem());
+ list.add(present_used_mem);
+ if (present_used_mem)
+ list.add(used_mem);
+
+ boolean present_used_cpu = true && (is_set_used_cpu());
+ list.add(present_used_cpu);
+ if (present_used_cpu)
+ list.add(used_cpu);
+
return list.hashCode();
}
@@ -728,6 +848,26 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
return lastComparison;
}
}
+ lastComparison = Boolean.valueOf(is_set_used_mem()).compareTo(other.is_set_used_mem());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (is_set_used_mem()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.used_mem, other.used_mem);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
+ lastComparison = Boolean.valueOf(is_set_used_cpu()).compareTo(other.is_set_used_cpu());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (is_set_used_cpu()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.used_cpu, other.used_cpu);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
return 0;
}
@@ -795,6 +935,18 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
}
first = false;
}
+ if (is_set_used_mem()) {
+ if (!first) sb.append(", ");
+ sb.append("used_mem:");
+ sb.append(this.used_mem);
+ first = false;
+ }
+ if (is_set_used_cpu()) {
+ if (!first) sb.append(", ");
+ sb.append("used_cpu:");
+ sb.append(this.used_cpu);
+ first = false;
+ }
sb.append(")");
return sb.toString();
}
@@ -928,6 +1080,22 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
+ case 8: // USED_MEM
+ if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+ struct.used_mem = iprot.readDouble();
+ struct.set_used_mem_isSet(true);
+ } else {
+ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+ }
+ break;
+ case 9: // USED_CPU
+ if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+ struct.used_cpu = iprot.readDouble();
+ struct.set_used_cpu_isSet(true);
+ } else {
+ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+ }
+ break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
@@ -982,6 +1150,16 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
oprot.writeFieldEnd();
}
}
+ if (struct.is_set_used_mem()) {
+ oprot.writeFieldBegin(USED_MEM_FIELD_DESC);
+ oprot.writeDouble(struct.used_mem);
+ oprot.writeFieldEnd();
+ }
+ if (struct.is_set_used_cpu()) {
+ oprot.writeFieldBegin(USED_CPU_FIELD_DESC);
+ oprot.writeDouble(struct.used_cpu);
+ oprot.writeFieldEnd();
+ }
oprot.writeFieldStop();
oprot.writeStructEnd();
}
@@ -1011,7 +1189,13 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
if (struct.is_set_total_resources()) {
optionals.set(1);
}
- oprot.writeBitSet(optionals, 2);
+ if (struct.is_set_used_mem()) {
+ optionals.set(2);
+ }
+ if (struct.is_set_used_cpu()) {
+ optionals.set(3);
+ }
+ oprot.writeBitSet(optionals, 4);
if (struct.is_set_version()) {
oprot.writeString(struct.version);
}
@@ -1025,6 +1209,12 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
}
}
}
+ if (struct.is_set_used_mem()) {
+ oprot.writeDouble(struct.used_mem);
+ }
+ if (struct.is_set_used_cpu()) {
+ oprot.writeDouble(struct.used_cpu);
+ }
}
@Override
@@ -1040,7 +1230,7 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
struct.set_num_used_workers_isSet(true);
struct.supervisor_id = iprot.readString();
struct.set_supervisor_id_isSet(true);
- BitSet incoming = iprot.readBitSet(2);
+ BitSet incoming = iprot.readBitSet(4);
if (incoming.get(0)) {
struct.version = iprot.readString();
struct.set_version_isSet(true);
@@ -1060,6 +1250,14 @@ public class SupervisorSummary implements org.apache.thrift.TBase<SupervisorSumm
}
struct.set_total_resources_isSet(true);
}
+ if (incoming.get(2)) {
+ struct.used_mem = iprot.readDouble();
+ struct.set_used_mem_isSet(true);
+ }
+ if (incoming.get(3)) {
+ struct.used_cpu = iprot.readDouble();
+ struct.set_used_cpu_isSet(true);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/jvm/backtype/storm/scheduler/Cluster.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/scheduler/Cluster.java b/storm-core/src/jvm/backtype/storm/scheduler/Cluster.java
index b3028e9..c4a815f 100644
--- a/storm-core/src/jvm/backtype/storm/scheduler/Cluster.java
+++ b/storm-core/src/jvm/backtype/storm/scheduler/Cluster.java
@@ -34,7 +34,11 @@ public class Cluster {
/**
* key: supervisor id, value: supervisor details
*/
- private Map<String, SupervisorDetails> supervisors;
+ private Map<String, SupervisorDetails> supervisors;
+ /**
+ * key: supervisor id, value: supervisor's total and used resources
+ */
+ private Map<String, Double[]> supervisorsResources;
/**
* key: rack, value: nodes in that rack
@@ -73,6 +77,7 @@ public class Cluster {
this.assignments.putAll(assignments);
this.status = new HashMap<String, String>();
this.resources = new HashMap<String, Double[]>();
+ this.supervisorsResources = new HashMap<String, Double[]>();
this.hostToId = new HashMap<String, List<String>>();
for (Map.Entry<String, SupervisorDetails> entry : supervisors.entrySet()) {
String nodeId = entry.getKey();
@@ -476,4 +481,12 @@ public class Cluster {
public Map<String, Double[]> getResourcesMap() {
return this.resources;
}
+
+ public void setSupervisorsResources(Map<String, Double[]> supervisors_resources) {
+ this.supervisorsResources.putAll(supervisors_resources);
+ }
+
+ public Map<String, Double[]> getSupervisorsResourcesMap() {
+ return this.supervisorsResources;
+ }
}
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/jvm/backtype/storm/scheduler/resource/ResourceAwareScheduler.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/scheduler/resource/ResourceAwareScheduler.java b/storm-core/src/jvm/backtype/storm/scheduler/resource/ResourceAwareScheduler.java
index 6e455f2..ad33b43 100644
--- a/storm-core/src/jvm/backtype/storm/scheduler/resource/ResourceAwareScheduler.java
+++ b/storm-core/src/jvm/backtype/storm/scheduler/resource/ResourceAwareScheduler.java
@@ -110,6 +110,22 @@ public class ResourceAwareScheduler implements IScheduler {
cluster.setStatus(td.getId(), "Fully Scheduled");
}
}
+ updateSupervisorsResources(cluster, topologies);
+ }
+
+ private void updateSupervisorsResources(Cluster cluster, Topologies topologies) {
+ Map<String, Double[]> supervisors_resources = new HashMap<String, Double[]>();
+ Map<String, RAS_Node> nodes = RAS_Node.getAllNodesFrom(cluster, topologies);
+ for (Map.Entry<String, RAS_Node> entry : nodes.entrySet()) {
+ RAS_Node node = entry.getValue();
+ Double totalMem = node.getTotalMemoryResources();
+ Double totalCpu = node.getTotalCpuResources();
+ Double usedMem = totalMem - node.getAvailableMemoryResources();
+ Double usedCpu = totalCpu - node.getAvailableCpuResources();
+ Double[] resources = {totalMem, totalCpu, usedMem, usedCpu};
+ supervisors_resources.put(entry.getKey(), resources);
+ }
+ cluster.setSupervisorsResources(supervisors_resources);
}
private Map<String, Double> getUserConf() {
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/py/storm/ttypes.py
----------------------------------------------------------------------
diff --git a/storm-core/src/py/storm/ttypes.py b/storm-core/src/py/storm/ttypes.py
index 23a82e1..ea3c768 100644
--- a/storm-core/src/py/storm/ttypes.py
+++ b/storm-core/src/py/storm/ttypes.py
@@ -2510,6 +2510,8 @@ class SupervisorSummary:
- supervisor_id
- version
- total_resources
+ - used_mem
+ - used_cpu
"""
thrift_spec = (
@@ -2521,9 +2523,11 @@ class SupervisorSummary:
(5, TType.STRING, 'supervisor_id', None, None, ), # 5
(6, TType.STRING, 'version', None, "VERSION_NOT_PROVIDED", ), # 6
(7, TType.MAP, 'total_resources', (TType.STRING,None,TType.DOUBLE,None), None, ), # 7
+ (8, TType.DOUBLE, 'used_mem', None, None, ), # 8
+ (9, TType.DOUBLE, 'used_cpu', None, None, ), # 9
)
- def __init__(self, host=None, uptime_secs=None, num_workers=None, num_used_workers=None, supervisor_id=None, version=thrift_spec[6][4], total_resources=None,):
+ def __init__(self, host=None, uptime_secs=None, num_workers=None, num_used_workers=None, supervisor_id=None, version=thrift_spec[6][4], total_resources=None, used_mem=None, used_cpu=None,):
self.host = host
self.uptime_secs = uptime_secs
self.num_workers = num_workers
@@ -2531,6 +2535,8 @@ class SupervisorSummary:
self.supervisor_id = supervisor_id
self.version = version
self.total_resources = total_resources
+ self.used_mem = used_mem
+ self.used_cpu = used_cpu
def read(self, iprot):
if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
@@ -2582,6 +2588,16 @@ class SupervisorSummary:
iprot.readMapEnd()
else:
iprot.skip(ftype)
+ elif fid == 8:
+ if ftype == TType.DOUBLE:
+ self.used_mem = iprot.readDouble();
+ else:
+ iprot.skip(ftype)
+ elif fid == 9:
+ if ftype == TType.DOUBLE:
+ self.used_cpu = iprot.readDouble();
+ else:
+ iprot.skip(ftype)
else:
iprot.skip(ftype)
iprot.readFieldEnd()
@@ -2624,6 +2640,14 @@ class SupervisorSummary:
oprot.writeDouble(viter74)
oprot.writeMapEnd()
oprot.writeFieldEnd()
+ if self.used_mem is not None:
+ oprot.writeFieldBegin('used_mem', TType.DOUBLE, 8)
+ oprot.writeDouble(self.used_mem)
+ oprot.writeFieldEnd()
+ if self.used_cpu is not None:
+ oprot.writeFieldBegin('used_cpu', TType.DOUBLE, 9)
+ oprot.writeDouble(self.used_cpu)
+ oprot.writeFieldEnd()
oprot.writeFieldStop()
oprot.writeStructEnd()
@@ -2650,6 +2674,8 @@ class SupervisorSummary:
value = (value * 31) ^ hash(self.supervisor_id)
value = (value * 31) ^ hash(self.version)
value = (value * 31) ^ hash(self.total_resources)
+ value = (value * 31) ^ hash(self.used_mem)
+ value = (value * 31) ^ hash(self.used_cpu)
return value
def __repr__(self):
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/storm.thrift
----------------------------------------------------------------------
diff --git a/storm-core/src/storm.thrift b/storm-core/src/storm.thrift
index 6d28d88..1818ea7 100644
--- a/storm-core/src/storm.thrift
+++ b/storm-core/src/storm.thrift
@@ -162,6 +162,8 @@ struct SupervisorSummary {
5: required string supervisor_id;
6: optional string version = "VERSION_NOT_PROVIDED";
7: optional map<string, double> total_resources;
+ 8: optional double used_mem;
+ 9: optional double used_cpu;
}
struct NimbusSummary {
http://git-wip-us.apache.org/repos/asf/storm/blob/400f2154/storm-core/src/ui/public/templates/index-page-template.html
----------------------------------------------------------------------
diff --git a/storm-core/src/ui/public/templates/index-page-template.html b/storm-core/src/ui/public/templates/index-page-template.html
index 15d72a7..bf1f108 100644
--- a/storm-core/src/ui/public/templates/index-page-template.html
+++ b/storm-core/src/ui/public/templates/index-page-template.html
@@ -215,6 +215,26 @@
</span>
</th>
<th>
+ <span data-toggle="tooltip" data-placement="above" title="Memory capacity of a supervisor.">
+ Total Mem (MB)
+ </span>
+ </th>
+ <th>
+ <span data-toggle="tooltip" data-placement="left" title="Memory that has been allocated.">
+ Used Mem (MB)
+ </span>
+ </th>
+ <th>
+ <span data-toggle="tooltip" data-placement="above" title="CPU capacity of a supervisor. Every 100 means one core.">
+ Total CPU (%)
+ </span>
+ </th>
+ <th>
+ <span data-toggle="tooltip" data-placement="left" title="CPU that has been allocated. Every 100 means one core">
+ Used CPU (%)
+ </span>
+ </th>
+ <th>
<span data-toggle="tooltip" data-placement="left" title="Version">
Version
</span>
@@ -229,6 +249,10 @@
<td>{{uptime}}</td>
<td>{{slotsTotal}}</td>
<td>{{slotsUsed}}</td>
+ <td>{{totalMem}}</td>
+ <td>{{usedMem}}</td>
+ <td>{{totalCpu}}</td>
+ <td>{{usedCpu}}</td>
<td>{{version}}</td>
</tr>
{{/supervisors}}