package com.smtaiserver.smtaiserver.lightrag; import java.io.BufferedReader; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.smtaiserver.smtaiserver.core.SMTAIServerApp; import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord; import com.smtservlet.util.Json; import com.smtservlet.util.SMTStatic; public class LightragServer { private static Logger _logger = LogManager.getLogger(LightragServer.class); private String _id; private String _port; private Process _process; private Thread _thread; public LightragServer(DBRecord rec) throws Exception { _id = rec.getString("server_id"); _port = rec.getString("server_port"); } public String getId() { return _id; } public String getPort() { return _port; } public void sureRunServer() throws Exception { if(_thread != null && _thread.isAlive()) return; startServer(); } private void startServer() throws Exception { Json jsonConfig = (Json)SMTAIServerApp.getApp().getGlobalConfig("lightrag_config"); List params = new ArrayList(); for(Json jsonCmd : jsonConfig.getJson("cmd").asJsonList()) { params.add(jsonCmd.asString()); } ProcessBuilder pbuilder=new ProcessBuilder(SMTStatic.convProcessArg(params)); pbuilder.redirectErrorStream(true); pbuilder.directory(new File(jsonConfig.getJson("path").asString())); Map runEnv = pbuilder.environment(); SMTAIServerApp.getApp().setLightragServerDbEnv(runEnv); runEnv.put("POSTGRES_WORKSPACE", _id); runEnv.put("PORT", _port); _process = pbuilder.start(); _thread = new Thread() { @Override public void run() { try { InputStream fis = _process.getInputStream(); BufferedReader bufferedStdout = new BufferedReader(new InputStreamReader(fis, SMTStatic.getStdoutEncode())); String line; while((line = bufferedStdout.readLine()) != null) { _logger.info(line); } _process.waitFor(); } catch(Exception ex) { _logger.fatal("LightragServer error", ex); } } }; _thread.start(); } }