blob: 7bd0d7a5316cc8b1a0fbd323ab6f2ce5b388a3bb [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.soam.web;
import static com.google.common.base.Preconditions.checkNotNull;
import java.time.Duration;
import java.util.Map;
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStat;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* Encode and decode to/from JSON to DelayMeasurementStat object.
*/
public class DelayMeasurementStatCodec extends JsonCodec<DelayMeasurementStat> {
private static final String LOWER_LIMIT = "lowerLimit";
private static final String COUNT = "count";
private static final String BINS = "bins";
private static final String SOAM_PDUS_SENT = "soamPdusSent";
private static final String SOAM_PDUS_RECEIVED = "soamPdusReceived";
@Override
public ObjectNode encode(DelayMeasurementStat dmStat, CodecContext context) {
checkNotNull(dmStat, "DM stat cannot be null");
ObjectNode result = context.mapper().createObjectNode()
.put("elapsedTime", dmStat.elapsedTime().toString())
.put("suspectStatus", String.valueOf(dmStat.suspectStatus()));
if (dmStat.frameDelayTwoWayMin() != null) {
result = result.put("frameDelayTwoWayMin",
dmStat.frameDelayTwoWayMin().toString());
}
if (dmStat.frameDelayTwoWayMax() != null) {
result = result.put("frameDelayTwoWayMax",
dmStat.frameDelayTwoWayMax().toString());
}
if (dmStat.frameDelayTwoWayAvg() != null) {
result = result.put("frameDelayTwoWayAvg",
dmStat.frameDelayTwoWayAvg().toString());
}
if (dmStat.frameDelayTwoWayBins() != null) {
result = (ObjectNode) result.set("frameDelayTwoWayBins",
encode(dmStat.frameDelayTwoWayBins(), context));
}
if (dmStat.frameDelayForwardMin() != null) {
result = result.put("frameDelayForwardMin",
dmStat.frameDelayForwardMin().toString());
}
if (dmStat.frameDelayForwardMax() != null) {
result = result.put("frameDelayForwardMax",
dmStat.frameDelayForwardMax().toString());
}
if (dmStat.frameDelayForwardAvg() != null) {
result = result.put("frameDelayForwardAvg",
dmStat.frameDelayForwardAvg().toString());
}
if (dmStat.frameDelayForwardBins() != null) {
result = (ObjectNode) result.set("frameDelayForwardBins",
encode(dmStat.frameDelayForwardBins(), context));
}
if (dmStat.frameDelayBackwardMin() != null) {
result = result.put("frameDelayBackwardMin",
dmStat.frameDelayBackwardMin().toString());
}
if (dmStat.frameDelayBackwardMax() != null) {
result = result.put("frameDelayBackwardMax",
dmStat.frameDelayBackwardMax().toString());
}
if (dmStat.frameDelayBackwardAvg() != null) {
result = result.put("frameDelayBackwardAvg",
dmStat.frameDelayBackwardAvg().toString());
}
if (dmStat.frameDelayBackwardBins() != null) {
result = (ObjectNode) result.set("frameDelayBackwardBins",
encode(dmStat.frameDelayBackwardBins(), context));
}
if (dmStat.interFrameDelayVariationTwoWayMin() != null) {
result = result.put("interFrameDelayVariationTwoWayMin",
dmStat.interFrameDelayVariationTwoWayMin().toString());
}
if (dmStat.interFrameDelayVariationTwoWayMax() != null) {
result.put("interFrameDelayVariationTwoWayMax",
dmStat.interFrameDelayVariationTwoWayMax().toString());
}
if (dmStat.interFrameDelayVariationTwoWayAvg() != null) {
result.put("interFrameDelayVariationTwoWayAvg",
dmStat.interFrameDelayVariationTwoWayAvg().toString());
}
if (dmStat.interFrameDelayVariationTwoWayBins() != null) {
result = (ObjectNode) result.set("interFrameDelayVariationTwoWayBins",
encode(dmStat.interFrameDelayVariationTwoWayBins(), context));
}
if (dmStat.interFrameDelayVariationForwardMin() != null) {
result = result.put("interFrameDelayVariationForwardMin",
dmStat.interFrameDelayVariationForwardMin().toString());
}
if (dmStat.interFrameDelayVariationForwardMax() != null) {
result = result.put("interFrameDelayVariationForwardMax",
dmStat.interFrameDelayVariationForwardMax().toString());
}
if (dmStat.interFrameDelayVariationForwardAvg() != null) {
result = result.put("interFrameDelayVariationForwardAvg",
dmStat.interFrameDelayVariationForwardAvg().toString());
}
if (dmStat.interFrameDelayVariationForwardBins() != null) {
result = (ObjectNode) result.set("interFrameDelayVariationForwardBins",
encode(dmStat.interFrameDelayVariationForwardBins(), context));
}
if (dmStat.interFrameDelayVariationBackwardMin() != null) {
result = result.put("interFrameDelayVariationBackwardMin",
dmStat.interFrameDelayVariationBackwardMin().toString());
}
if (dmStat.interFrameDelayVariationBackwardMax() != null) {
result = result.put("interFrameDelayVariationBackwardMax",
dmStat.interFrameDelayVariationBackwardMax().toString());
}
if (dmStat.interFrameDelayVariationBackwardAvg() != null) {
result = result.put("interFrameDelayVariationBackwardAvg",
dmStat.interFrameDelayVariationBackwardAvg().toString());
}
if (dmStat.interFrameDelayVariationBackwardBins() != null) {
result = (ObjectNode) result.set("interFrameDelayVariationBackwardBins",
encode(dmStat.interFrameDelayVariationBackwardBins(), context));
}
if (dmStat.frameDelayRangeTwoWayMax() != null) {
result = result.put("frameDelayRangeTwoWayMax",
dmStat.frameDelayRangeTwoWayMax().toString());
}
if (dmStat.frameDelayRangeTwoWayAvg() != null) {
result = result.put("frameDelayRangeTwoWayAvg",
dmStat.frameDelayRangeTwoWayAvg().toString());
}
if (dmStat.frameDelayRangeTwoWayBins() != null) {
result = (ObjectNode) result.set("frameDelayRangeTwoWayBins",
encode(dmStat.frameDelayRangeTwoWayBins(), context));
}
if (dmStat.frameDelayRangeForwardMax() != null) {
result = result.put("frameDelayRangeForwardMax",
dmStat.frameDelayRangeForwardMax().toString());
}
if (dmStat.frameDelayRangeForwardAvg() != null) {
result = result.put("frameDelayRangeForwardAvg",
dmStat.frameDelayRangeForwardAvg().toString());
}
if (dmStat.frameDelayRangeForwardBins() != null) {
result = (ObjectNode) result.set("frameDelayRangeForwardBins",
encode(dmStat.frameDelayRangeForwardBins(), context));
}
if (dmStat.frameDelayRangeBackwardMax() != null) {
result = result.put("frameDelayRangeBackwardMax",
dmStat.frameDelayRangeBackwardMax().toString());
}
if (dmStat.frameDelayRangeBackwardAvg() != null) {
result = result.put("frameDelayRangeBackwardAvg",
dmStat.frameDelayRangeBackwardAvg().toString());
}
if (dmStat.frameDelayRangeBackwardBins() != null) {
result = (ObjectNode) result.set("frameDelayRangeBackwardBins",
encode(dmStat.frameDelayRangeBackwardBins(), context));
}
if (dmStat.soamPdusReceived() != null) {
result = result.put(SOAM_PDUS_RECEIVED, dmStat.soamPdusReceived().toString());
}
if (dmStat.soamPdusSent() != null) {
result = result.put(SOAM_PDUS_SENT, dmStat.soamPdusSent().toString());
}
return result;
}
private ObjectNode encode(Map<Duration, Integer> bins, CodecContext context) {
checkNotNull(bins, "Bins cannot be null");
ArrayNode binsResult = context.mapper().createArrayNode();
bins.keySet().forEach(lwrLimit -> binsResult.add(encode(lwrLimit, bins.get(lwrLimit), context)));
return (ObjectNode) context.mapper().createObjectNode().set(BINS, binsResult);
}
private ObjectNode encode(Duration duration, Integer count, CodecContext context) {
return context.mapper().createObjectNode()
.put(LOWER_LIMIT, duration.toString())
.put(COUNT, count);
}
}