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