Commit 64668537 authored by Björn Richerzhagen's avatar Björn Richerzhagen
Browse files

Metrics: Minor API change, Refactored SiS Output

parent 0df91479
...@@ -104,7 +104,7 @@ public class IntervalDeltaFilter extends ...@@ -104,7 +104,7 @@ public class IntervalDeltaFilter extends
if (input.isOverallMetric()) { if (input.isOverallMetric()) {
inputMv = input.getOverallMetric(); inputMv = input.getOverallMetric();
} else { } else {
inputMv = input.getPerHostMetric(host); inputMv = input.getPerHostMetric(host.getId());
} }
if (inputMv == null) { if (inputMv == null) {
return null; return null;
......
...@@ -135,7 +135,7 @@ public class OnChurnFilter extends AbstractFilter<MetricValue<?>> { ...@@ -135,7 +135,7 @@ public class OnChurnFilter extends AbstractFilter<MetricValue<?>> {
protected MetricValue getDerivedMetricValueFor(Metric<?> derivedMetric, protected MetricValue getDerivedMetricValueFor(Metric<?> derivedMetric,
List<Metric<?>> inputs, Host host) { List<Metric<?>> inputs, Host host) {
assert inputs.size() == 1; assert inputs.size() == 1;
MetricValue mvIn = inputs.get(0).getPerHostMetric(host); MetricValue mvIn = inputs.get(0).getPerHostMetric(host.getId());
if (mvIn != null) { if (mvIn != null) {
OnChurnMV mv = new OnChurnMV(mvIn, host); OnChurnMV mv = new OnChurnMV(mvIn, host);
host.getNetworkComponent().getNetworkInterfaces().iterator().next() host.getNetworkComponent().getNetworkInterfaces().iterator().next()
......
...@@ -106,7 +106,7 @@ public class PeriodicSamplingFilter extends ...@@ -106,7 +106,7 @@ public class PeriodicSamplingFilter extends
if (input.isOverallMetric()) { if (input.isOverallMetric()) {
inputMv = input.getOverallMetric(); inputMv = input.getOverallMetric();
} else { } else {
inputMv = input.getPerHostMetric(host); inputMv = input.getPerHostMetric(host.getId());
} }
if (inputMv == null) { if (inputMv == null) {
return null; return null;
......
...@@ -129,12 +129,12 @@ public abstract class RatioFilter extends AbstractFilter<MetricValue<Double>> ...@@ -129,12 +129,12 @@ public abstract class RatioFilter extends AbstractFilter<MetricValue<Double>>
if (nominator.isOverallMetric()) { if (nominator.isOverallMetric()) {
nominatorValue = nominator.getOverallMetric(); nominatorValue = nominator.getOverallMetric();
} else { } else {
nominatorValue = nominator.getPerHostMetric(host); nominatorValue = nominator.getPerHostMetric(host.getId());
} }
if (denominator.isOverallMetric()) { if (denominator.isOverallMetric()) {
denominatorValue = denominator.getOverallMetric(); denominatorValue = denominator.getOverallMetric();
} else { } else {
denominatorValue = denominator.getPerHostMetric(host); denominatorValue = denominator.getPerHostMetric(host.getId());
} }
if (nominatorValue == null || denominatorValue == null) { if (nominatorValue == null || denominatorValue == null) {
return null; return null;
......
...@@ -140,7 +140,7 @@ public class MetricOutputDAO extends AbstractOutput { ...@@ -140,7 +140,7 @@ public class MetricOutputDAO extends AbstractOutput {
} else { } else {
// per-host metric // per-host metric
for (SimHost host : hosts) { for (SimHost host : hosts) {
MetricValue mv = metric.getPerHostMetric(host); MetricValue mv = metric.getPerHostMetric(host.getId());
if (mv != null) { if (mv != null) {
Object val = mv.getValue(); Object val = mv.getValue();
if (mv.isValid()) { if (mv.isValid()) {
......
...@@ -20,11 +20,16 @@ ...@@ -20,11 +20,16 @@
package de.tud.kom.p2psim.impl.analyzer.metric.output; package de.tud.kom.p2psim.impl.analyzer.metric.output;
import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import de.tudarmstadt.maki.simonstrator.api.Host; import de.tudarmstadt.maki.simonstrator.api.Host;
import de.tudarmstadt.maki.simonstrator.api.Oracle; import de.tudarmstadt.maki.simonstrator.api.Oracle;
import de.tudarmstadt.maki.simonstrator.api.common.graph.INode;
import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID;
import de.tudarmstadt.maki.simonstrator.api.common.metric.Metric; import de.tudarmstadt.maki.simonstrator.api.common.metric.Metric;
import de.tudarmstadt.maki.simonstrator.api.common.metric.Metric.MetricValue; import de.tudarmstadt.maki.simonstrator.api.common.metric.Metric.MetricValue;
import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableException; import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableException;
...@@ -46,7 +51,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.sis.type.aggregation.Abstr ...@@ -46,7 +51,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.sis.type.aggregation.Abstr
*/ */
public class MetricOutputSiS extends AbstractOutput { public class MetricOutputSiS extends AbstractOutput {
List<MetricSiSHost> hosts = new LinkedList<MetricOutputSiS.MetricSiSHost>(); protected Map<INodeID, SiSComponent> hosts = new LinkedHashMap<INodeID, SiSComponent>();
@Override @Override
public void onStop() { public void onStop() {
...@@ -56,10 +61,11 @@ public class MetricOutputSiS extends AbstractOutput { ...@@ -56,10 +61,11 @@ public class MetricOutputSiS extends AbstractOutput {
@Override @Override
public void onInitialize(List<Metric> metrics) { public void onInitialize(List<Metric> metrics) {
List<INodeID> ids = new LinkedList<>();
for (Host host : Oracle.getAllHosts()) { for (Host host : Oracle.getAllHosts()) {
try { try {
SiSComponent sis = host.getComponent(SiSComponent.class); SiSComponent sis = host.getComponent(SiSComponent.class);
hosts.add(new MetricSiSHost(host, sis)); hosts.put(host.getId(), sis);
} catch (ComponentNotAvailableException e) { } catch (ComponentNotAvailableException e) {
continue; continue;
} }
...@@ -71,7 +77,10 @@ public class MetricOutputSiS extends AbstractOutput { ...@@ -71,7 +77,10 @@ public class MetricOutputSiS extends AbstractOutput {
if (metric.isOverallMetric()) { if (metric.isOverallMetric()) {
continue; continue;
} }
for (MetricSiSHost host : hosts) {
MetricSiSDataCallback callback = new MetricSiSDataCallback(metric);
for (SiSComponent hostSiS : hosts.values()) {
// FIXME metric type cannot be resolved programmatically // FIXME metric type cannot be resolved programmatically
SiSType<Double> sisType = SiSTypes.getType(metric.getName(), SiSType<Double> sisType = SiSTypes.getType(metric.getName(),
Double.class); Double.class);
...@@ -82,10 +91,7 @@ public class MetricOutputSiS extends AbstractOutput { ...@@ -82,10 +91,7 @@ public class MetricOutputSiS extends AbstractOutput {
sisType = SiSTypes.getType(metric.getName(), Double.class); sisType = SiSTypes.getType(metric.getName(), Double.class);
assert sisType != null; assert sisType != null;
} }
host.sis.provide().localNodeState( hostSiS.provide().nodeState(sisType, callback);
sisType,
new MetricSiSDataCallback(metric
.getPerHostMetric(host.host)));
} }
} }
...@@ -94,18 +100,20 @@ public class MetricOutputSiS extends AbstractOutput { ...@@ -94,18 +100,20 @@ public class MetricOutputSiS extends AbstractOutput {
private class MetricSiSDataCallback implements SiSDataCallback<Double> { private class MetricSiSDataCallback implements SiSDataCallback<Double> {
private final MetricValue<Double> mv; private final Metric<?> metric;
private final SiSInfoProperties info = new SiSInfoProperties() private final SiSInfoProperties info = new SiSInfoProperties()
.setScope(SiSScope.NODE_LOCAL); .setScope(SiSScope.NODE_LOCAL);
public MetricSiSDataCallback(MetricValue<?> mv) { public MetricSiSDataCallback(Metric<?> metric) {
this.mv = (MetricValue<Double>) mv; this.metric = metric;
} }
@Override @Override
public Double getValue(SiSProviderHandle providerHandle) public Double getValue(INodeID nodeId, SiSProviderHandle providerHandle)
throws InformationNotAvailableException { throws InformationNotAvailableException {
@SuppressWarnings("unchecked")
MetricValue<Double> mv = (MetricValue<Double>) metric.getPerHostMetric(nodeId);
Double value = mv.getValue(); Double value = mv.getValue();
if (mv.isValid()) { if (mv.isValid()) {
return value; return value;
...@@ -117,25 +125,11 @@ public class MetricOutputSiS extends AbstractOutput { ...@@ -117,25 +125,11 @@ public class MetricOutputSiS extends AbstractOutput {
public SiSInfoProperties getInfoProperties() { public SiSInfoProperties getInfoProperties() {
return info; return info;
} }
}
/**
* Tuple: Host <-> SiS
*
* @author Bjoern Richerzhagen
* @version 1.0, Sep 28, 2015
*/
private class MetricSiSHost {
public final Host host; @Override
public Set<INodeID> getObservedNodes() {
public final SiSComponent sis; return hosts.keySet();
public MetricSiSHost(Host host, SiSComponent sis) {
this.host = host;
this.sis = sis;
} }
} }
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment