T3: Implementation of host based, less arguments CLI command
Change-Id: Ie02918b90968632ca56b9588adc6bda881c0c0a7
(cherry picked from commit d711b8068685ab602ac869ee4907dd054c49046f)
diff --git a/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java b/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java
index ae68d93..755eaaa 100644
--- a/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java
+++ b/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015-present Open Networking Foundation
+ * Copyright 2018-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.
@@ -30,14 +30,9 @@
import org.onosproject.net.PortNumber;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.group.GroupBucket;
-import org.onosproject.t3.api.GroupsInDevice;
import org.onosproject.t3.api.StaticPacketTrace;
import org.onosproject.t3.api.TroubleshootService;
-import java.util.List;
-
import static org.onlab.packet.EthType.EtherType;
/**
@@ -191,116 +186,8 @@
//Build the trace
StaticPacketTrace trace = service.trace(packet, cp);
- //Print based on verbosity
- if (verbosity1) {
- printTrace(trace, false);
- } else if (verbosity2) {
- printTrace(trace, true);
- } else {
- print("Paths");
- List<List<ConnectPoint>> paths = trace.getCompletePaths();
- paths.forEach(path -> print("%s", path));
- }
- print("Result: \n%s", trace.resultMessage());
- }
- //prints the trace
- private void printTrace(StaticPacketTrace trace, boolean verbose) {
- List<List<ConnectPoint>> paths = trace.getCompletePaths();
- paths.forEach(path -> {
- print("Path %s", path);
- ConnectPoint previous = null;
- if (path.size() == 1) {
- ConnectPoint connectPoint = path.get(0);
- print("Device %s", connectPoint.deviceId());
- print("Input from %s", connectPoint);
- printFlows(trace, verbose, connectPoint);
- printGroups(trace, verbose, connectPoint);
- print("Output through %s", connectPoint);
- print("");
- } else {
- for (ConnectPoint connectPoint : path) {
- if (previous == null || !previous.deviceId().equals(connectPoint.deviceId())) {
- print("Device %s", connectPoint.deviceId());
- print("Input from %s", connectPoint);
- printFlows(trace, verbose, connectPoint);
- } else {
- printGroups(trace, verbose, connectPoint);
- print("Output through %s", connectPoint);
- print("");
- }
- previous = connectPoint;
- }
- }
- print("---------------------------------------------------------------\n");
- });
- }
+ print("%s", T3CliUtils.printTrace(trace, verbosity1, verbosity2));
- //Prints the flows for a given trace and a specified level of verbosity
- private void printFlows(StaticPacketTrace trace, boolean verbose, ConnectPoint connectPoint) {
- print("Flows");
- trace.getFlowsForDevice(connectPoint.deviceId()).forEach(f -> {
- if (verbose) {
- print(FLOW_SHORT_FORMAT, f.state(), f.bytes(), f.packets(),
- f.table(), f.priority(), f.selector().criteria(),
- printTreatment(f.treatment()));
- } else {
- print(" flowId=%s, table=%s, selector=%s", f.id(), f.table(), f.selector().criteria());
- }
- });
- }
-
- //Prints the groups for a given trace and a specified level of verbosity
- private void printGroups(StaticPacketTrace trace, boolean verbose, ConnectPoint connectPoint) {
- List<GroupsInDevice> groupsInDevice = trace.getGroupOuputs(connectPoint.deviceId());
- if (groupsInDevice != null) {
- print("Groups");
- groupsInDevice.forEach(output -> {
- if (output.getOutput().equals(connectPoint)) {
- output.getGroups().forEach(group -> {
- if (verbose) {
- print(GROUP_FORMAT, Integer.toHexString(group.id().id()), group.state(), group.type(),
- group.bytes(), group.packets(), group.appId().name(), group.referenceCount());
- int i = 0;
- for (GroupBucket bucket : group.buckets().buckets()) {
- print(GROUP_BUCKET_FORMAT, Integer.toHexString(group.id().id()), ++i,
- bucket.bytes(), bucket.packets(),
- bucket.treatment().allInstructions());
- }
- } else {
- print(" groupId=%s", group.id());
- }
- });
- print("Outgoing Packet %s", output.getFinalPacket());
- }
- });
- }
- }
-
- private String printTreatment(TrafficTreatment treatment) {
- final String delimiter = ", ";
- StringBuilder builder = new StringBuilder("[");
- if (!treatment.immediate().isEmpty()) {
- builder.append("immediate=" + treatment.immediate() + delimiter);
- }
- if (!treatment.deferred().isEmpty()) {
- builder.append("deferred=" + treatment.deferred() + delimiter);
- }
- if (treatment.clearedDeferred()) {
- builder.append("clearDeferred" + delimiter);
- }
- if (treatment.tableTransition() != null) {
- builder.append("transition=" + treatment.tableTransition() + delimiter);
- }
- if (treatment.metered() != null) {
- builder.append("meter=" + treatment.metered() + delimiter);
- }
- if (treatment.writeMetadata() != null) {
- builder.append("metadata=" + treatment.writeMetadata() + delimiter);
- }
- // Chop off last delimiter
- builder.replace(builder.length() - delimiter.length(), builder.length(), "");
- builder.append("]");
- return builder.toString();
}
}