修改项目结构,新增coredump-ctl工具大体框架实现

This commit is contained in:
linxin
2023-04-23 18:24:42 +08:00
parent 11043e581e
commit 00294bc452
7 changed files with 476 additions and 73 deletions

View File

@@ -10,7 +10,6 @@ import (
"flag"
"fmt"
"io"
"io/ioutil"
"os"
"regexp"
"strconv"
@@ -76,7 +75,7 @@ func changeDirectory(dir string) error {
}
func getContainerId(pid string) (string, error) {
cgroup_path := fmt.Sprintf("/proc/%s/cgroup", pid)
content, err := ioutil.ReadFile(cgroup_path)
content, err := os.ReadFile(cgroup_path)
if err != nil {
return "", err
}
@@ -170,21 +169,27 @@ func compress(config types.Coredump_config) error {
return nil
}
func main() {
info := fmt.Sprintf("start handle coredump")
journal.Print(journal.PriInfo, info)
flag.StringVar(&coredump_config.Initial_ns_pid, "P", "", "initial ns pid")
flag.StringVar(&coredump_config.Process_ns_pid, "p", "", "process ns pid")
flag.StringVar(&coredump_config.Process_exe_path, "E", "", "pathname of executable process")
flag.StringVar(&coredump_config.Corepipe_config_path, "configpath", "", "configfile's path")
flag.Int64Var(&coredump_config.Timestamp, "t", 0, "the time of coredump")
flag.StringVar(&coredump_config.GID, "g", "", "Numeric real GID of dumped process.")
flag.StringVar(&coredump_config.Hostname, "h", "", "Hostname (same as nodename returned by uname).")
flag.IntVar(&coredump_config.Signal, "s", -1, "Number of signal causing dump")
flag.StringVar(&coredump_config.UID, "u", "", "Numeric real UID of dumped process.")
flag.Parse()
info := fmt.Sprintf("start handle coredump initialize command line parameters. -P=%s -p=%s -E=%s -configpath=%s -t=%d -g=%s -h=%s -s=%d -u=%s", coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Process_exe_path, coredump_config.Corepipe_config_path, coredump_config.Timestamp, coredump_config.GID, coredump_config.Hostname, coredump_config.Signal, coredump_config.UID)
var err error
coredump_config.Hostname, err = os.Hostname()
if err != nil {
journal.Print(journal.PriErr, err.Error())
}
info = fmt.Sprintf("initialize command line parameters. -P=%s -p=%s -E=%s -configpath=%s -t=%d -g=%s -h=%s -s=%d -u=%s", coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Process_exe_path, coredump_config.Corepipe_config_path, coredump_config.Timestamp, coredump_config.GID, coredump_config.Hostname, coredump_config.Signal, coredump_config.UID)
journal.Print(journal.PriInfo, info)
coredump_config.Process_exe_path = strings.Replace(coredump_config.Process_exe_path, "!", "/", -1)
//判断参数读取是否正确
err := argsJudge()
err = argsJudge()
if err != nil {
journal.Print(journal.PriErr, err.Error())
return
@@ -223,21 +228,23 @@ func main() {
journal.Print(journal.PriInfo, err.Error())
}
}
//将image name写入coredump config
err = writeCoreConfig(coredump_config)
if err != nil {
journal.Print(journal.PriInfo, err.Error())
}
//根据配置项选择存储coredump文件方式
if pipe_config.Save_model == 0 {
err = writeCoreDumpToFile(coredump_config)
if err != nil {
journal.Print(journal.PriErr, err.Error())
}
coredump_config.Storage = fmt.Sprintf("%s/%s_%s_%d_coredump.info", pipe_config.File_base_path, coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Timestamp)
} else if pipe_config.Save_model == 1 {
err = compress(coredump_config)
if err != nil {
journal.Print(journal.PriErr, err.Error())
}
coredump_config.Storage = fmt.Sprintf("%s/%s_%s_%d_coredump.info.zip", pipe_config.File_base_path, coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Timestamp)
}
//将image name写入coredump config
err = writeCoreConfig(coredump_config)
if err != nil {
journal.Print(journal.PriInfo, err.Error())
}
}