public List<List<String>> rows() {
    try {
      List<List<String>> results = new ArrayList<>();
      for (BaseWork baseWork : topSortedWork) {
        String vertexName = baseWork.getName();
        VertexProgress progress = progressCountsMap.get(vertexName);
        if (progress != null) {
          // Map 1 .......... container  SUCCEEDED      7          7        0        0       0       0

          // TODO: can we pass custom things thru the progress?
          results.add(
            Arrays.asList(
              getNameWithProgress(vertexName, progress.succeededTaskCount, progress.totalTaskCount),
              getMode(baseWork),
              progress.vertexStatus(vertexStatusMap.get(vertexName)),
              progress.total(),
              progress.completed(),
              progress.running(),
              progress.pending(),
              progress.failed(),
              progress.killed()
            )
          );
        }
      }
      return results;
    } catch (Exception e) {
      console.printInfo(
          "Getting  Progress Bar table rows failed: " + e.getMessage() + " stack trace: " + Arrays
              .toString(e.getStackTrace())
      );
    }
    return Collections.emptyList();
  }
Try to get most the data required from dagClient in the constructor itself so that even after
the tez job has finished this object can be used for later use.s
ql/src/java/org/apache/hadoop/hive/ql/exec/tez/monitoring/TezProgressMonitor.java