2021-07-09 17:01:27 +08:00
|
|
|
package net.geedge.confagent.controller;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.log.Log;
|
|
|
|
|
import net.geedge.confagent.util.ConfagentUtil;
|
|
|
|
|
import net.geedge.confagent.util.R;
|
|
|
|
|
import net.geedge.confagent.util.RCode;
|
|
|
|
|
import net.geedge.confagent.util.Tool;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/promtail")
|
|
|
|
|
public class PromtailController extends BaseController{
|
|
|
|
|
private final static Log log = Log.get();
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ConfagentUtil confagentUtil;
|
|
|
|
|
|
|
|
|
|
@Value("${confagent.promtail.query.auth:true}")
|
|
|
|
|
private Boolean queryAuth;
|
|
|
|
|
|
|
|
|
|
@Value("${confagent.promtail.restart:systemctl restart promtail}")
|
|
|
|
|
private String restartCmd;
|
|
|
|
|
|
|
|
|
|
@Value("${confagent.versionFile:promtail.version}")
|
|
|
|
|
private String versionFile;
|
|
|
|
|
|
2021-08-06 17:28:00 +08:00
|
|
|
@Value("${confagent.promtail.startCmd:systemctl start promtail.service}")
|
|
|
|
|
private String startCmd;
|
|
|
|
|
|
|
|
|
|
@Value("${confagent.promtail.stopCmd:systemctl stop promtail.service}")
|
|
|
|
|
private String stopCmd;
|
|
|
|
|
|
2021-07-09 17:01:27 +08:00
|
|
|
private static String rootPath = Tool.WebPathUtil.getRootPath();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description 获取promtail相关配置
|
|
|
|
|
* @Author rui
|
|
|
|
|
* @Date 2021/3/24
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/config")
|
|
|
|
|
public R queryConfig(){
|
|
|
|
|
Map<String,String> cmdLine = ConfagentUtil.loadServiceConfigFile(promtailCmdLinePath);
|
|
|
|
|
Map<String,Object> promtailConf = Tool.YamlUtil.readAsMap(promtailConfPath);
|
|
|
|
|
String version = confagentUtil.readVersion();
|
|
|
|
|
|
|
|
|
|
Map<String,Object> result = new LinkedHashMap<>();
|
|
|
|
|
|
|
|
|
|
result.put("version",version);
|
|
|
|
|
result.put("cmdline",cmdLine);
|
|
|
|
|
result.put("config",promtailConf);
|
|
|
|
|
|
|
|
|
|
return R.ok(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description 写入promtail配置文件
|
|
|
|
|
* @Author rui
|
|
|
|
|
* @Date 2021/3/25
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/config")
|
|
|
|
|
public R overwriteConfig( @RequestBody Map<String,Object> configs){
|
|
|
|
|
|
|
|
|
|
Object version = configs.get("version");
|
|
|
|
|
File tf = Tool.FileUtil.file(rootPath, versionFile);
|
|
|
|
|
log.debug("version file path : {}" ,tf.getAbsolutePath());
|
|
|
|
|
if(version==null){
|
|
|
|
|
return R.error(RCode.PROMTAIL_CONFIG_VERSION_ISNULL);
|
|
|
|
|
}else {
|
|
|
|
|
Tool.FileUtil.writeUtf8String(version.toString(), tf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<String,String> cmdLine =(Map<String,String>) configs.get("cmdline");
|
|
|
|
|
Map<String,Object> promtailConf =(Map<String,Object>) configs.get("config");
|
|
|
|
|
|
|
|
|
|
if(!Tool.MapUtil.isEmpty(cmdLine)){
|
|
|
|
|
log.info("write promtail cmdLine conf:{}", Tool.JSONUtil.toJsonStr(cmdLine));
|
|
|
|
|
writeServiceConfigFile(cmdLine,promtailCmdLinePath);
|
|
|
|
|
}
|
|
|
|
|
if(!Tool.MapUtil.isEmpty(promtailConf)){
|
|
|
|
|
log.info("write promtail conf:{}", Tool.JSONUtil.toJsonStr(promtailConf));
|
|
|
|
|
Tool.YamlUtil.writeAsMap(promtailConf,promtailConfPath);
|
2021-08-06 17:28:00 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//重启服务promtail
|
|
|
|
|
if(Tool.StrUtil.isNotBlank(stopCmd)) {
|
|
|
|
|
log.info("stop cortex:"+stopCmd);
|
|
|
|
|
try {
|
|
|
|
|
Tool.RuntimeUtil.exec(stopCmd);
|
|
|
|
|
}catch(Exception e) {
|
|
|
|
|
log.error(e);
|
|
|
|
|
return R.error(RCode.PROMTAIL_STOP_CMD_ERROR);
|
|
|
|
|
}
|
|
|
|
|
log.info("stop cortex:"+stopCmd+" end");
|
|
|
|
|
}
|
|
|
|
|
Tool.ThreadUtil.sleep(1000);
|
|
|
|
|
if(Tool.StrUtil.isNotBlank(startCmd)) {
|
|
|
|
|
log.info("start cortex:"+startCmd);
|
|
|
|
|
try {
|
|
|
|
|
// String[] b={"sh","-c",startCmd};
|
|
|
|
|
// Tool.RuntimeUtil.exec(b);
|
|
|
|
|
Tool.RuntimeUtil.exec(startCmd);
|
|
|
|
|
}catch(Exception e) {
|
|
|
|
|
log.error(e);
|
|
|
|
|
return R.error(RCode.PROMTAIL_START_CMD_ERROR);
|
|
|
|
|
}
|
|
|
|
|
log.info("start cortex:"+startCmd+" end");
|
2021-07-09 17:01:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return R.ok();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description 获取promtail相关配置版本
|
|
|
|
|
* @Author rui
|
|
|
|
|
* @Date 2021/3/24
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/config/version")
|
|
|
|
|
public R queryVersion(){
|
|
|
|
|
Map<String,Object> result = new HashMap<>();
|
|
|
|
|
String version = confagentUtil.readVersion();
|
|
|
|
|
result.put("version",version);
|
|
|
|
|
return R.ok(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description 写 promtail config.conf 启动参数配置文件
|
|
|
|
|
* @Author rui
|
|
|
|
|
* @Date 2021/3/25
|
|
|
|
|
*/
|
|
|
|
|
private void writeServiceConfigFile(Map<String,String> conf,String path){
|
|
|
|
|
StringBuffer sb = new StringBuffer();
|
|
|
|
|
sb.append("OPTION=\"");
|
|
|
|
|
for (Map.Entry<String,String> entry:conf.entrySet()){
|
|
|
|
|
String key = entry.getKey();
|
|
|
|
|
String value = entry.getValue();
|
|
|
|
|
sb.append("--"+key+"=");
|
|
|
|
|
sb.append("'"+value+"' ");
|
|
|
|
|
}
|
|
|
|
|
sb.append("\"");
|
|
|
|
|
|
|
|
|
|
Tool.FileUtil.writeUtf8String(sb.toString(),path);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// private boolean reloadPromtail(){
|
|
|
|
|
//
|
|
|
|
|
// UrlBuilder promtailReload = new UrlBuilder();
|
|
|
|
|
// int promtailPort = ConfagentUtil.getConfFilePort(promtailCmdLinePath, PROMTAIL_LISTEN_ADDR, DEFAULT_PROMTAIL_PORT);
|
|
|
|
|
// promtailReload.setScheme("http").setHost(defaultPromtailIP).setPort(promtailPort).addPath("/-/reload");
|
|
|
|
|
//
|
|
|
|
|
// String url = promtailReload.toString();
|
|
|
|
|
// HttpRequest post = Tool.HttpUtil.createPost(url);
|
|
|
|
|
// HttpResponse response = post.execute();
|
|
|
|
|
// return 200 == response.getStatus();
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|