package env import ( log "github.com/huoxue1/go-utils/base/log" "github.com/huoxue1/qinglong-go/models" "os" "regexp" "time" ) var ( DISABLESTATUS = 1 ENABLESTATUS = 0 ) func MoveEnv(id int, fromIndex, toIndex int64) error { if fromIndex < toIndex { envs, err := models.QueryEnvByIndex(fromIndex, toIndex) if err != nil { return err } for _, env := range envs { env.SerialIndex = env.SerialIndex - 1 _ = models.UpdateEnv(env) } } else { envs, err := models.QueryEnvByIndex(toIndex, fromIndex) if err != nil { return err } for _, env := range envs { env.SerialIndex = env.SerialIndex + 1 _ = models.UpdateEnv(env) } } env, err := models.GetEnv(id) if err != nil { return err } env.SerialIndex = toIndex _ = models.UpdateEnv(env) return nil } func AddEnv(env *models.Envs) (int, error) { return models.AddEnv(env) } func QueryEnv(searchValue string) ([]*models.Envs, error) { return models.QueryEnv(searchValue) } func UpdateEnv(env *models.Envs) error { env1, _ := models.GetEnv(env.Id) env1.Name = env.Name env1.Value = env.Value env1.Remarks = env.Remarks env1.Updatedat = time.Now() return models.UpdateEnv(env1) } func GetEnv(id int) *models.Envs { env, err := models.GetEnv(id) if err != nil { return nil } return env } func DisableEnv(ids []int) error { for _, id := range ids { env, err := models.GetEnv(id) if err != nil { continue } env.Status = DISABLESTATUS err = models.UpdateEnv(env) if err != nil { return err } } return nil } func EnableEnv(ids []int) error { for _, id := range ids { env, err := models.GetEnv(id) if err != nil { continue } env.Status = ENABLESTATUS err = models.UpdateEnv(env) if err != nil { return err } } return nil } func DeleteEnv(ids []int) error { for _, id := range ids { err := models.DeleteEnv(id) if err != nil { return err } } return nil } func LoadEnvFromDb() map[string]string { result := make(map[string]string, 0) envs, err := QueryEnv("") if err != nil { log.Errorln(err.Error()) return result } for _, env := range envs { if env.Status == 1 { continue } if _, ok := result[env.Name]; ok { result[env.Name] = result[env.Name] + "&" + env.Value } else { result[env.Name] = env.Value } } return result } func LoadEnvFromFile(file string) map[string]string { result := make(map[string]string, 0) data, _ := os.ReadFile(file) compile := regexp.MustCompile(`export\s(.*?)="(.*?)"`) match := compile.FindAllStringSubmatch(string(data), -1) for _, i := range match { if _, ok := result[i[1]]; ok { result[i[1]] = result[i[1]] + "&" + i[2] } else { result[i[1]] = i[2] } } return result } func GetALlEnv() map[string]string { envFromDb := LoadEnvFromDb() envfromFile := LoadEnvFromFile("data/config/config.sh") for s, s2 := range envfromFile { if _, ok := envFromDb[s]; ok { envFromDb[s] = envFromDb[s] + "&" + s2 } else { envFromDb[s] = s2 } } return envFromDb }