This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nezha-nz-talon/src/main/java/net/geedge/confagent/controller/PromtailController.java

164 lines
5.3 KiB
Java
Raw Normal View History

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;
@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);
}
//重启服务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();
// }
}