/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.tsdr.osc.handlers;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import org.opendaylight.tsdr.osc.TSDRBaseDataHandler;
import org.opendaylight.tsdr.osc.TSDRDOMCollector;
import org.opendaylight.tsdr.osc.TSDRMetricRecordBuilderContainer;
import org.opendaylight.tsdr.spi.util.FormatUtil;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.rev150219.DataCategory;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.rev150219.tsdrrecord.RecordKeys;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.tsdr.collector.spi.rev150915.inserttsdrmetricrecord.input.TSDRMetricRecordBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.FlowCapableNodeConnectorStatisticsData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.flow.capable.node.connector.statistics.FlowCapableNodeConnectorStatistics;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
* @author Sharon Aicler(saichler@gmail.com)
**/
/*
* A Handler for the NodeConnectorStatistics data
*/
public class NodeConnectorStatisticsChangeHandler extends TSDRBaseDataHandler {
public NodeConnectorStatisticsChangeHandler(TSDRDOMCollector _collector) {
super(_collector);
}
@Override
public void handleData(InstanceIdentifier<Node> nodeID, InstanceIdentifier<?> id, DataObject dataObject) {
FlowCapableNodeConnectorStatisticsData stData = (FlowCapableNodeConnectorStatisticsData) dataObject;
FlowCapableNodeConnectorStatistics fs = stData.getFlowCapableNodeConnectorStatistics();
if(fs==null){
//no data yet, ignore
return;
}
TSDRMetricRecordBuilderContainer bc = getCollector()
.getTSDRMetricRecordBuilderContainer(id);
if (bc != null) {
TSDRMetricRecordBuilder builder[] = bc.getBuilders();
long timeStamp = getTimeStamp();
builder[0].setMetricValue(FormatUtil.toMetricValue(fs.getTransmitDrops()));
builder[0].setTimeStamp(timeStamp);
builder[1].setMetricValue(FormatUtil.toMetricValue( fs.getReceiveDrops()));
builder[1].setTimeStamp(timeStamp);
builder[2].setMetricValue(FormatUtil.toMetricValue(fs.getReceiveCrcError()));
builder[2].setTimeStamp(timeStamp);
builder[3].setMetricValue(FormatUtil.toMetricValue(fs.getReceiveFrameError()));
builder[3].setTimeStamp(timeStamp);
builder[4].setMetricValue(FormatUtil.toMetricValue(fs.getReceiveOverRunError()));
builder[4].setTimeStamp(timeStamp);
builder[5].setMetricValue(FormatUtil.toMetricValue(fs.getTransmitErrors()));
builder[5].setTimeStamp(timeStamp);
builder[6].setMetricValue(FormatUtil.toMetricValue(fs.getCollisionCount()));
builder[6].setTimeStamp(timeStamp);
builder[7].setMetricValue(FormatUtil.toMetricValue(fs.getReceiveErrors()));
builder[7].setTimeStamp(timeStamp);
builder[8].setTimeStamp(timeStamp);
builder[9].setTimeStamp(timeStamp);
builder[10].setTimeStamp(timeStamp);
builder[11].setTimeStamp(timeStamp);
if (fs.getBytes() != null) {
builder[8].setMetricValue(FormatUtil.toMetricValue(fs.getBytes().getTransmitted()));
builder[9].setMetricValue(FormatUtil.toMetricValue(fs.getBytes().getReceived()));
}
if (fs.getPackets() != null) {
builder[10].setMetricValue(FormatUtil.toMetricValue(fs.getPackets().getTransmitted()));
builder[11].setMetricValue(FormatUtil.toMetricValue(fs.getPackets().getReceived()));
}
} else {
List<RecordKeys> recKeys = createRecordKeys(id);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"TransmitDrops",FormatUtil.toMetricValue(fs.getTransmitDrops()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceiveDrops",FormatUtil.toMetricValue(fs.getReceiveDrops()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceiveCrcError",FormatUtil.toMetricValue(fs.getReceiveCrcError()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceiveFrameError", FormatUtil.toMetricValue(fs.getReceiveFrameError()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceiveOverRunError", FormatUtil.toMetricValue(fs.getReceiveOverRunError()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"TransmitErrors", FormatUtil.toMetricValue(fs.getTransmitErrors()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"CollisionCount", FormatUtil.toMetricValue(fs.getCollisionCount()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceiveErrors", FormatUtil.toMetricValue(fs.getReceiveErrors()),
DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"TransmittedBytes", new BigDecimal(0), DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceivedBytes", new BigDecimal(0), DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"TransmittedPackets", new BigDecimal(0), DataCategory.PORTSTATS);
getCollector().createTSDRMetricRecordBuilder(nodeID,id, recKeys,
"ReceivedPackets", new BigDecimal(0), DataCategory.PORTSTATS);
}
}
}