"io/ioutil"
"log"
"os"
- "sync"
)
type KeyValuesInterface interface {
- WriteKVsToConsul(string, string) error
- ConfigReader(string, string, string) error
- ReadMultiplePropertiesRecursive(string) error
- ReadMultipleProperties(string) error
- ReadProperty(string) error
+ WriteKVsToConsul(string, string, map[string]string) error
+ ConfigReader(string, string, string) (map[string]string, error)
+ ReadMultiplePropertiesRecursive(string, *map[string]string) error
+ ReadMultipleProperties(string, *map[string]string) error
+ ReadProperty(string, *map[string]string) error
}
-type KeyValuesStruct struct {
- sync.RWMutex
- kvs map[string]string
-}
+type KeyValuesStruct struct{}
var KeyValues KeyValuesInterface
-func (kvStruct *KeyValuesStruct) WriteKVsToConsul(token string, subdomain string) error {
+func (kvStruct *KeyValuesStruct) WriteKVsToConsul(token string, subdomain string, kvs map[string]string) error {
var prefix = ""
if subdomain != "" {
prefix += token + "/" + subdomain
} else {
prefix += token + "/"
}
- for key, value := range kvStruct.kvs {
+ for key, value := range kvs {
key = prefix + key
err := Consul.RequestPUT(key, value)
if err != nil {
return nil
}
-func (kvStruct *KeyValuesStruct) ConfigReader(token string, subdomain string, filename string) error {
- defer kvStruct.Unlock()
-
- kvStruct.Lock()
+func (kvStruct *KeyValuesStruct) ConfigReader(token string, subdomain string, filename string) (map[string]string, error) {
var filepath = MOUNTPATH
+ kvs := make(map[string]string)
if filename != "" && subdomain != "" {
// Specific file in specific domain.
filepath += token + "/" + subdomain + "/" + filename
- err := kvStruct.ReadProperty(filepath)
+ err := kvStruct.ReadProperty(filepath, &kvs)
if err != nil {
- return err
+ return kvs, err
}
- return nil
+ return kvs, nil
}
if filename != "" && subdomain == "" {
// Specific file in Token
filepath += token + "/" + filename
- err := kvStruct.ReadProperty(filepath)
+ err := kvStruct.ReadProperty(filepath, &kvs)
if err != nil {
- return err
+ return kvs, err
}
- return nil
+ return kvs, nil
}
if filename == "" && subdomain != "" {
// All files in specific domain
filepath += token + "/" + subdomain
- err := kvStruct.ReadMultipleProperties(filepath)
+ err := kvStruct.ReadMultipleProperties(filepath, &kvs)
if err != nil {
- return err
+ return kvs, err
}
}
filepath += token
- err := kvStruct.ReadMultiplePropertiesRecursive(filepath)
+ err := kvStruct.ReadMultiplePropertiesRecursive(filepath, &kvs)
if err != nil {
- return err
+ return kvs, err
}
- return nil
+ return kvs, nil
}
-func (kvStruct *KeyValuesStruct) ReadMultiplePropertiesRecursive(path string) error {
+func (kvStruct *KeyValuesStruct) ReadMultiplePropertiesRecursive(path string, kvs *map[string]string) error {
// Go inside each sub directory and run ReadMultipleProperties inside.
files, err := ioutil.ReadDir(path)
if err != nil {
for _, f := range files {
fi, _ := os.Stat(path + "/" + f.Name())
if fi.Mode().IsDir() {
- kvStruct.ReadMultipleProperties(path + "/" + f.Name())
+ kvStruct.ReadMultipleProperties(path+"/"+f.Name(), kvs)
} else {
- kvStruct.ReadProperty(path + "/" + f.Name())
+ kvStruct.ReadProperty(path+"/"+f.Name(), kvs)
}
}
return nil
}
-func (kvStruct *KeyValuesStruct) ReadMultipleProperties(path string) error {
+func (kvStruct *KeyValuesStruct) ReadMultipleProperties(path string, kvs *map[string]string) error {
files, err := ioutil.ReadDir(path)
if err != nil {
return err
}
for _, f := range files {
- kvStruct.ReadProperty(path + f.Name())
+ kvStruct.ReadProperty(path+f.Name(), kvs)
}
return nil
}
-func (kvStruct *KeyValuesStruct) ReadProperty(path string) error {
+func (kvStruct *KeyValuesStruct) ReadProperty(path string, kvs *map[string]string) error {
_, err := os.Stat(path)
if err != nil {
return errors.New("File does not exists.")
}
p := properties.MustLoadFile(path, properties.UTF8)
for _, key := range p.Keys() {
- kvStruct.kvs[key] = p.MustGet(key)
+ (*kvs)[key] = p.MustGet(key)
}
return nil
}
KeyValuesStruct
}
-func (f *FakeKeyValues) ConfigReader(token string, subdomain string, filename string) error {
- return nil
+func (f *FakeKeyValues) ConfigReader(token string, subdomain string, filename string) (map[string]string, error) {
+ kvs := make(map[string]string)
+ return kvs, nil
}
-func (f *FakeKeyValues) WriteKVsToConsul(token string, subdomain string) error {
+func (f *FakeKeyValues) WriteKVsToConsul(token string, subdomain string, kvs map[string]string) error {
return nil
}
KeyValuesStruct
}
-func (f *FakeKeyValuesErr) ConfigReader(token string, subdomain string, filename string) error {
- return errors.New("Internal Server Error")
+func (f *FakeKeyValuesErr) ConfigReader(token string, subdomain string, filename string) (map[string]string, error) {
+ kvs := make(map[string]string)
+ return kvs, errors.New("Internal Server Error")
}
-func (f *FakeKeyValuesErr) WriteKVsToConsul(token string, subdomain string) error {
+func (f *FakeKeyValuesErr) WriteKVsToConsul(token string, subdomain string, kvs map[string]string) error {
return errors.New("Internal Server Error")
}
}
defer f.Close()
io.Copy(f, file)
+
+ GenerateResponse(w, r, http.StatusOK, "Configuration uploaded to Token: "+token)
}
func HandleConfigLoad(w http.ResponseWriter, r *http.Request) {
return
}
- err = KeyValues.ConfigReader(body.Token, body.Subdomain, body.Filename)
+ kvs_map, err := KeyValues.ConfigReader(body.Token, body.Subdomain, body.Filename)
if err != nil {
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
return
}
- err = KeyValues.WriteKVsToConsul(body.Token, body.Subdomain)
+ err = KeyValues.WriteKVsToConsul(body.Token, body.Subdomain, kvs_map)
if err != nil {
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
}
func HandleDefaultConfigLoad(w http.ResponseWriter, r *http.Request) {
- err := KeyValues.ConfigReader("default", "", "")
+ kvs_map, err := KeyValues.ConfigReader("default", "", "")
if err != nil {
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
return
}
- err = KeyValues.WriteKVsToConsul("default", "")
+ err = KeyValues.WriteKVsToConsul("default", "", kvs_map)
if err != nil {
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
} else {