Commits (3)
...@@ -22,8 +22,10 @@ package de.tud.kom.p2psim.api.linklayer.mac; ...@@ -22,8 +22,10 @@ package de.tud.kom.p2psim.api.linklayer.mac;
import de.tud.kom.p2psim.api.linklayer.LinkLayer; import de.tud.kom.p2psim.api.linklayer.LinkLayer;
import de.tud.kom.p2psim.impl.simengine.Simulator; import de.tud.kom.p2psim.impl.simengine.Simulator;
import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.Rate; import de.tudarmstadt.maki.simonstrator.api.Rate;
import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.Monitor.Level;
import de.tudarmstadt.maki.simonstrator.api.component.network.NetworkComponent.NetInterfaceName; import de.tudarmstadt.maki.simonstrator.api.component.network.NetworkComponent.NetInterfaceName;
/** /**
...@@ -96,8 +98,7 @@ public enum PhyType { ...@@ -96,8 +98,7 @@ public enum PhyType {
* Assuming the following defaults: zero link-layer packet loss, 0.3 kbit/s BW, * Assuming the following defaults: zero link-layer packet loss, 0.3 kbit/s BW,
* 500us latency, 1kByte MTU * 500us latency, 1kByte MTU
*/ */
LORA(NetInterfaceName.LORA, 0, 300 * Rate.bit_s, LORA(NetInterfaceName.LORA, 0, 300 * Rate.bit_s, 500 * Time.MICROSECOND, 255, true);
500 * Time.MICROSECOND, 1024, true);
...@@ -193,4 +194,9 @@ public enum PhyType { ...@@ -193,4 +194,9 @@ public enum PhyType {
return out; return out;
} }
public void setBandwdith(long bandwidth) {
Monitor.log(getClass(), Level.WARN, "Manually changing raw bandwidth of PHY " + this.toString() +
" from " + defaultRawBW + "bit/s to " + bandwidth + "bit/s" , this);
this.defaultRawBW = bandwidth;
}
} }
...@@ -32,6 +32,7 @@ import java.util.Set; ...@@ -32,6 +32,7 @@ import java.util.Set;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.util.Tuple;
import de.tud.kom.p2psim.impl.util.db.dao.DAO; import de.tud.kom.p2psim.impl.util.db.dao.DAO;
import de.tud.kom.p2psim.impl.util.db.dao.metric.MeasurementDAO; import de.tud.kom.p2psim.impl.util.db.dao.metric.MeasurementDAO;
import de.tud.kom.p2psim.impl.util.db.metric.MetricDescription; import de.tud.kom.p2psim.impl.util.db.metric.MetricDescription;
...@@ -54,13 +55,14 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; ...@@ -54,13 +55,14 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
* @version 1.0, 13.08.2012 * @version 1.0, 13.08.2012
*/ */
public class MetricOutputDAO extends AbstractOutput { public class MetricOutputDAO extends AbstractOutput {
public enum AGGREGATION {NONE, ALL, OVERALL_ONLY}
protected long timeEnableDao = 0; protected long timeEnableDao = 0;
protected long timeStopDao = Long.MAX_VALUE; protected long timeStopDao = Long.MAX_VALUE;
protected Set<String> metricsToAggregate = new LinkedHashSet<>(); protected Set<Tuple<String, AGGREGATION>> metricsToAggregate = new LinkedHashSet<>();
protected List<DaoAdapter> daoAdapters = new LinkedList<>(); protected List<DaoAdapter> daoAdapters = new LinkedList<>();
...@@ -106,31 +108,39 @@ public class MetricOutputDAO extends AbstractOutput { ...@@ -106,31 +108,39 @@ public class MetricOutputDAO extends AbstractOutput {
*/ */
public void setToAggregate(String[] metricsToAggregate) { public void setToAggregate(String[] metricsToAggregate) {
for (String metric : metricsToAggregate) { for (String metric : metricsToAggregate) {
this.metricsToAggregate.add(metric); this.metricsToAggregate.add(new Tuple<String, AGGREGATION>(metric, AGGREGATION.ALL));
}
}
public void setToOverallOnlyAggregate(String[] metricsToAggregate) {
for (String metric : metricsToAggregate) {
this.metricsToAggregate.add(new Tuple<String, AGGREGATION>(metric, AGGREGATION.OVERALL_ONLY));
} }
} }
public boolean isToAggregate(Metric metric) { public AGGREGATION isToAggregate(Metric metric) {
for (String string : metricsToAggregate) { for (Tuple<String, AGGREGATION> tuple : metricsToAggregate) {
String string = tuple.getA();
if (metric.getName().equals(string)) { if (metric.getName().equals(string)) {
return true; return tuple.getB();
} }
if (string.endsWith("*")) { if (string.endsWith("*")) {
// prefix matching // prefix matching
String mName = metric.getName(); String mName = metric.getName();
if (mName.startsWith(string.substring(0, string.length()-1))) { if (mName.startsWith(string.substring(0, string.length()-1))) {
return true; return tuple.getB();
} }
} }
if (string.startsWith("*")) { if (string.startsWith("*")) {
// postfix matching // postfix matching
String mName = metric.getName(); String mName = metric.getName();
if (mName.endsWith(string.substring(1, string.length()))) { if (mName.endsWith(string.substring(1, string.length()))) {
return true; return tuple.getB();
} }
} }
} }
return false; return AGGREGATION.NONE;
} }
@Override @Override
...@@ -186,7 +196,7 @@ public class MetricOutputDAO extends AbstractOutput { ...@@ -186,7 +196,7 @@ public class MetricOutputDAO extends AbstractOutput {
private final List<SimHost> hosts; private final List<SimHost> hosts;
private final boolean writeAggregates; private final AGGREGATION writeAggregates;
private final Map<String, List<SimHost>> hostsByGroup; private final Map<String, List<SimHost>> hostsByGroup;
...@@ -215,7 +225,7 @@ public class MetricOutputDAO extends AbstractOutput { ...@@ -215,7 +225,7 @@ public class MetricOutputDAO extends AbstractOutput {
} }
public void onStop() { public void onStop() {
if (writeAggregates) { if (!writeAggregates.equals(AGGREGATION.NONE)) {
for (Entry<String, DescriptiveStatistics> groupData : globalStatsByGroup for (Entry<String, DescriptiveStatistics> groupData : globalStatsByGroup
.entrySet()) { .entrySet()) {
MeasurementDAO.storeGroupStatisticsMeasurement(md, MeasurementDAO.storeGroupStatisticsMeasurement(md,
...@@ -247,7 +257,7 @@ public class MetricOutputDAO extends AbstractOutput { ...@@ -247,7 +257,7 @@ public class MetricOutputDAO extends AbstractOutput {
} }
} else { } else {
// per-host metric // per-host metric
if (writeAggregates) { if (!writeAggregates.equals(AGGREGATION.NONE)) {
/* /*
* Write aggregates instead of individual metric values. * Write aggregates instead of individual metric values.
* This can be improved w.r.t. performance, but currently we * This can be improved w.r.t. performance, but currently we
...@@ -286,11 +296,16 @@ public class MetricOutputDAO extends AbstractOutput { ...@@ -286,11 +296,16 @@ public class MetricOutputDAO extends AbstractOutput {
observationDuration = Time.getCurrentTime() observationDuration = Time.getCurrentTime()
- timeEnableDao; - timeEnableDao;
} }
MeasurementDAO.storeGroupStatisticsMeasurement(md,
group, time, stats, observationDuration, false); // store a statistics measurement for a certain time frame
if(writeAggregates.equals(AGGREGATION.ALL)) {
MeasurementDAO.storeGroupStatisticsMeasurement(md,
group, time, stats, observationDuration, false);
}
} }
timestampLastEvent = Time.getCurrentTime(); timestampLastEvent = Time.getCurrentTime();
} else { }
else {
for (SimHost host : hosts) { for (SimHost host : hosts) {
MetricValue mv = metric.getPerHostMetric(host.getId()); MetricValue mv = metric.getPerHostMetric(host.getId());
if (mv != null) { if (mv != null) {
......
...@@ -112,6 +112,12 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> { ...@@ -112,6 +112,12 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> {
public RangedTopologyView(String phy, double range) { public RangedTopologyView(String phy, double range) {
this(PhyType.valueOf(phy), range); this(PhyType.valueOf(phy), range);
} }
@XMLConfigurableConstructor({ "phy", "range", "rawBandwidth"})
public RangedTopologyView(String phy, double range, long rawBandwidth) {
this(PhyType.valueOf(phy), range);
this.getPhyType().setBandwdith(rawBandwidth);
}
@Override @Override
protected void addedMac(MacLayer mac) { protected void addedMac(MacLayer mac) {
......