123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package mhayaProfile
- import (
- "path/filepath"
- cerror "github.com/mhaya/error"
- cfile "github.com/mhaya/extend/file"
- cjson "github.com/mhaya/extend/json"
- cstring "github.com/mhaya/extend/string"
- cfacade "github.com/mhaya/facade"
- )
- var (
- cfg = &struct {
- profilePath string // profile root dir
- profileName string // profile name
- jsonConfig *Config // profile-x.json parse to json object
- env string // env name
- debug bool // debug default is true
- printLevel string // mhaya log print level
- }{}
- )
- func Path() string {
- return cfg.profilePath
- }
- func Name() string {
- return cfg.profileName
- }
- func Env() string {
- return cfg.env
- }
- func Debug() bool {
- return cfg.debug
- }
- func PrintLevel() string {
- return cfg.printLevel
- }
- func Init(filePath, nodeId string) (cfacade.INode, error) {
- if filePath == "" {
- return nil, cerror.Error("File path is nil.")
- }
- if nodeId == "" {
- return nil, cerror.Error("NodeId is nil.")
- }
- judgePath, ok := cfile.JudgeFile(filePath)
- if !ok {
- return nil, cerror.Errorf("File path error. filePath = %s", filePath)
- }
- p, f := filepath.Split(judgePath)
- jsonConfig, err := loadFile(p, f)
- if err != nil || jsonConfig.Any == nil || jsonConfig.LastError() != nil {
- return nil, cerror.Errorf("Load profile file error. [err = %v]", err)
- }
- node, err := GetNodeWithConfig(jsonConfig, nodeId)
- if err != nil {
- return nil, cerror.Errorf("Failed to get node config from profile file. [err = %v]", err)
- }
- // init cfg
- cfg.profilePath = p
- cfg.profileName = f
- cfg.jsonConfig = jsonConfig
- cfg.env = jsonConfig.GetString("env", "default")
- cfg.debug = jsonConfig.GetBool("debug", true)
- cfg.printLevel = jsonConfig.GetString("print_level", "debug")
- return node, nil
- }
- func GetConfig(path ...interface{}) cfacade.ProfileJSON {
- return cfg.jsonConfig.GetConfig(path...)
- }
- func loadFile(filePath, fileName string) (*Config, error) {
- // merge include json file
- var maps = make(map[string]interface{})
- // read master json file
- fileNamePath := filepath.Join(filePath, fileName)
- if err := cjson.ReadMaps(fileNamePath, maps); err != nil {
- return nil, err
- }
- // read include json file
- if v, found := maps["include"].([]interface{}); found {
- paths := cstring.ToStringSlice(v)
- for _, p := range paths {
- includePath := filepath.Join(filePath, p)
- if err := cjson.ReadMaps(includePath, maps); err != nil {
- return nil, err
- }
- }
- }
- return Wrap(maps), nil
- }
- //func judgeNameList(path, name string) ([]string, error) {
- // var list []string
- //
- // if name != "" {
- // fileName := mergeProfileName(name)
- // list = append(list, fileName)
- //
- // } else {
- // // find path
- // filesPath, err := cfile.ReadDir(path, "profile-", ".json")
- // if err != nil {
- // return nil, err
- // }
- //
- // if len(filesPath) < 1 {
- // return nil, cerror.Errorf("[path = %s] profile file not found.", path)
- // }
- //
- // for _, fp := range filesPath {
- // list = append(list, fp)
- // }
- // }
- //
- // return list, nil
- //}
- //func mergeProfileName(name string) string {
- // return fmt.Sprintf("%s%s%s", profilePrefix, name, profileSuffix)
- //}
|