Package org.platformlayer.client.cli.commands

Source Code of org.platformlayer.client.cli.commands.TailLog

package org.platformlayer.client.cli.commands;

import java.io.PrintWriter;
import java.util.List;

import org.kohsuke.args4j.Argument;
import org.platformlayer.PlatformLayerClient;
import org.platformlayer.PlatformLayerClientException;
import org.platformlayer.jobs.model.JobExecutionData;
import org.platformlayer.jobs.model.JobExecutionList;
import org.platformlayer.jobs.model.JobLog;
import org.platformlayer.jobs.model.JobLogLine;
import org.platformlayer.jobs.model.JobState;

import com.google.common.base.Strings;

public class TailLog extends PlatformLayerCommandRunnerBase {
  @Argument(index = 0)
  String jobId;

  @Argument(index = 1)
  String executionId;

  public TailLog() {
    super("tail", "log");
  }

  @Override
  public Object runCommand() throws PlatformLayerClientException, InterruptedException {
    PlatformLayerClient client = getPlatformLayerClient();

    // TODO: System.out isn't quite right
    JobLogPrinter jobLogPrinter = new JobLogPrinter(new PrintWriter(System.out));

    if (Strings.isNullOrEmpty(executionId)) {
      JobExecutionList jobExecutions = client.listJobExecutions(jobId);

      JobExecutionData last = null;

      for (JobExecutionData execution : jobExecutions.getRuns()) {
        if (execution.getState() == JobState.PRESTART) {
          continue;
        }

        if (last == null) {
          last = execution;
          continue;
        }

        if (last.getStartedAt().before(execution.getStartedAt())) {
          last = execution;
          continue;
        }
      }

      if (last != null) {
        executionId = last.getExecutionId();
      }
    }

    // TODO: What if executionId == null? Also retries..
    JobLog previousJobLog = null;
    int jobLogOffset = 0;

    while (true) {
      // TODO: Only fetch tail
      JobLog jobLog = client.getJobExecutionLog(jobId, executionId);
      if (previousJobLog == null) {
        jobLogPrinter.startJobLog(jobLog);
      }

      List<JobLogLine> lines = jobLog.getLines();

      if (jobLogOffset < lines.size()) {
        for (JobLogLine line : lines.subList(jobLogOffset, lines.size())) {
          jobLogPrinter.write(line);
        }
      }

      jobLogPrinter.flush();

      jobLogOffset = lines.size();
      previousJobLog = jobLog;

      Thread.sleep(1000);
    }
  }

  @Override
  public void formatRaw(Object o, PrintWriter writer) {
    // Ansi ansi = new Ansi(writer);
    //
    // List<JobLog> jobLogs = (List<JobLog>) o;
    // for (JobLog jobLog : jobLogs) {
    // int depth = 0;
    // String indent = "";
    //
    // for (JobLogLine line : jobLog) {
    // String type = line.getType();
    //
    // if (!Strings.isNullOrEmpty(type)) {
    // if (type.equals(JobLogLine.TYPE_ENTER_SCOPE)) {
    // writer.println(indent + ">>> " + line.message);
    // depth++;
    // indent += "  ";
    // } else if (type.equals(JobLogLine.TYPE_EXIT_SCOPE)) {
    // depth--;
    // indent = indent.substring(0, depth * 2);
    // // writer.println(indent + "<<< " + line.message);
    // } else {
    // writer.println(indent + "??? " + line.message);
    // }
    // continue;
    // }
    //
    // if (line.level >= JobLogLineLevels.LEVEL_ERROR) {
    // ansi.setColorRed();
    // } else if (line.level >= JobLogLineLevels.LEVEL_WARN) {
    // ansi.setColorYellow();
    // } else if (line.level >= JobLogLineLevels.LEVEL_INFO) {
    // ansi.setColorGreen();
    // } else {
    // ansi.setColorBlue();
    // }
    //
    // writer.print(indent);
    // writer.println(line.message);
    //
    // JobLogExceptionInfo exceptionInfo = line.exception;
    // while (exceptionInfo != null) {
    // for (String exceptionLine : exceptionInfo.info) {
    // writer.print(indent);
    // writer.println(exceptionLine);
    // }
    //
    // exceptionInfo = exceptionInfo.inner;
    // }
    // }
    // }
    //
    // ansi.reset();
  }

}
TOP

Related Classes of org.platformlayer.client.cli.commands.TailLog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.