Java grep4J:如何重用SSH连接

时间:2016-01-15 19:43:53

标签: java ssh grep remote-server

我正在使用grep4j构建Dynamic Java Webproject。 我正在使用grep4j搜索远程服务器中的日志文件,并在用户提供服务器详细信息并在浏览器中搜索时向用户显示结果。 在我的servlet中,我使用下面的代码来为每个搜索请求提供服务,如下所示,

import static org.grep4j.core.Grep4j.constantExpression;
import static org.grep4j.core.Grep4j.grep;
import static org.grep4j.core.fluent.Dictionary.on;
import static org.grep4j.core.fluent.Dictionary.options;
import static org.grep4j.core.fluent.Dictionary.with;

import org.grep4j.core.model.Profile;
import org.grep4j.core.model.ProfileBuilder;
import org.grep4j.core.result.GrepResults;


public class GrepSearcher {

    private Profile remoteProfile = null;

    GrepSearcher(){

    }

    //each request will call this method to initialize an SSH connection
    GrepSearcher(String username, String password,String servername, String searchString){
         this.remoteProfile = ProfileBuilder.newBuilder()
                    .name("DEV LOGS")
                    .filePath("LogFilepath")
                    .onRemotehost(servername)
                    .credentials(username,password)
                    .build();
    }



    public GrepResults getSearchResults(){
        return grep(constantExpression("search query"),on(remoteProfile),with(options()));
    }
}  

是在服务搜索请求后立即关闭服务器的SSH连接吗?如果是这样,我应该以某种方式维护配置文件还是隐含地完成?打开一个新的SSH连接来搜索同一台服务器上的不同字符串似乎我做错了。

所有用户都将只搜索少数几台服务器。那么如何才能使这种搜索减少重载到远程服务器? 可能会保留一个静态的配置文件列表并在一些空闲时间后将其删除?

先谢谢。

1 个答案:

答案 0 :(得分:1)

我已经快速(不是那么快)看了grep4j,我必须说没有办法在单个连接上执行多个grep命令。 grep4j的内部只接受单个命令并从开始到结束,从连接建立到连接关闭。

它唯一能做的就是在多个配置文件上执行相同的grep命令。因此,除非您不修改源代码,否则您将能够做到您想要的。遗憾

执行此操作的最佳方法是为java搜索不同的有状态SSH客户端(不仅是grep),并从那里执行任何命令。谷歌说有很多这样的库。