All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.remoteServer.agent.util.log.LogPipe Maven / Gradle / Ivy

/*
 * Copyright 2000-2015 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.intellij.remoteServer.agent.util.log;

import com.intellij.remoteServer.agent.util.CloudAgentLogger;
import com.intellij.remoteServer.agent.util.CloudAgentLoggingHandler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * @author michael.golubev
 */
public abstract class LogPipe extends LogPipeBase {

  private final String myDeploymentName;
  private final String myLogPipeName;
  private final CloudAgentLogger myLogger;
  private final CloudAgentLoggingHandler myLoggingHandler;

  private boolean myClosed;

  private int myTotalLines;
  private int myLines2Skip;

  public LogPipe(String deploymentName, String logPipeName, CloudAgentLogger logger, CloudAgentLoggingHandler loggingHandler) {
    myDeploymentName = deploymentName;
    myLogPipeName = logPipeName;
    myLogger = logger;
    myLoggingHandler = loggingHandler;
    myClosed = false;
  }

  public void open() {
    InputStream inputStream = createInputStream(myDeploymentName);
    if (inputStream == null) {
      return;
    }

    InputStreamReader streamReader = new InputStreamReader(inputStream);
    final BufferedReader bufferedReader = new BufferedReader(streamReader);

    myTotalLines = 0;
    myLines2Skip = 0;

    new Thread("log pipe") {

      @Override
      public void run() {
        try {
          while (true) {
            String line = bufferedReader.readLine();
            if (myClosed) {
              myLogger.debug("log pipe closed for: " + myDeploymentName);
              break;
            }
            if (line == null) {
              myLogger.debug("end of log stream for: " + myDeploymentName);
              break;
            }

            if (myLines2Skip == 0) {
              getLogListener().lineLogged(line);
              myTotalLines++;
            }
            else {
              myLines2Skip--;
            }
          }
        }
        catch (IOException e) {
          myLoggingHandler.println(e.toString());
        }
      }
    }.start();
  }

  public void close() {
    myClosed = true;
  }

  protected final void cutTail() {
    myLines2Skip = myTotalLines;
  }

  protected final boolean isClosed() {
    return myClosed;
  }

  protected abstract InputStream createInputStream(String deploymentName);

  protected LogListener getLogListener() {
    return myLoggingHandler.getOrCreateLogListener(myLogPipeName);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy