private Collection<Meter> buildMeters(DeviceId deviceId, List<OFMeterStats> entries) { return entries.stream().map(stat -> { DefaultMeter.Builder builder = DefaultMeter.builder(); Collection<Band> bands = buildBands(stat.getBandStats()); builder.forDevice(deviceId) .withId(MeterId.meterId(stat.getMeterId())) //FIXME: need to encode appId in meter id, but that makes // things a little annoying for debugging .fromApp(coreService.getAppId("org.onosproject.core")) .withBands(bands); DefaultMeter meter = builder.build(); meter.setState(MeterState.ADDED); meter.setLife(stat.getDurationSec()); meter.setProcessedBytes(stat.getByteInCount().getValue()); meter.setProcessedPackets(stat.getPacketInCount().getValue()); meter.setReferenceCount(stat.getFlowCount()); // marks the meter as seen on the dataplane pendingOperations.invalidate(stat.getMeterId()); return meter; }).collect(Collectors.toSet()); }
private Collection<Meter> buildMeters(DeviceId deviceId, List<OFMeterStats> entries) { return entries.stream().map(stat -> { DefaultMeter.Builder builder = DefaultMeter.builder(); Collection<Band> bands = buildBands(stat.getBandStats()); builder.forDevice(deviceId) .withId(MeterId.meterId(stat.getMeterId())) //FIXME: need to encode appId in meter id, but that makes // things a little annoying for debugging .fromApp(coreService.getAppId("org.onosproject.core")) .withBands(bands); DefaultMeter meter = builder.build(); meter.setState(MeterState.ADDED); meter.setLife(stat.getDurationSec()); meter.setProcessedBytes(stat.getByteInCount().getValue()); meter.setProcessedPackets(stat.getPacketInCount().getValue()); if (stat.getVersion().getWireVersion() < OFVersion.OF_15.getWireVersion()) { meter.setReferenceCount(stat.getFlowCount()); } // marks the meter as seen on the dataplane pendingOperations.invalidate(stat.getMeterId()); return meter; }).collect(Collectors.toSet()); }
/*** * Serializes the Meter Statistics Reply * @author Naveen * @param meterReplies * @param jGen * @throws IOException * @throws JsonProcessingException */ public static void serializeMeterReply(List<OFMeterStatsReply> meterReplies, JsonGenerator jGen) throws IOException, JsonProcessingException{ OFMeterStatsReply meterReply = meterReplies.get(0); // we will get only one meterReply and it will contains many OFMeterStatsEntry ? jGen.writeStringField("version", meterReply.getVersion().toString()); //return the enum name jGen.writeFieldName("meter"); jGen.writeStartArray(); for(OFMeterStats entry : meterReply.getEntries()) { jGen.writeStartObject(); jGen.writeNumberField("meterId",entry.getMeterId()); jGen.writeNumberField("flowCount", entry.getFlowCount()); jGen.writeNumberField("packetInCount", entry.getPacketInCount().getValue()); jGen.writeNumberField("byteInCount", entry.getByteInCount().getValue()); jGen.writeFieldName("meterBandStats"); jGen.writeStartArray(); for(OFMeterBandStats bandStats : entry.getBandStats()) { jGen.writeStartObject(); jGen.writeNumberField("packetBandCount", bandStats.getPacketBandCount().getValue()); jGen.writeNumberField("byteBandCount", bandStats.getByteBandCount().getValue()); jGen.writeEndObject(); }//End of for loop - bandStats jGen.writeEndArray(); jGen.writeNumberField("durationSec", entry.getDurationSec()); jGen.writeNumberField("durationNsec", entry.getDurationNsec()); jGen.writeEndObject(); }//End of for loop - MeterStats jGen.writeEndArray(); }