Use json.Encoder/Decoder directly with file pointer
This commit is contained in:
parent
332e7f5f54
commit
5c2a655b11
|
@ -2,7 +2,6 @@ package models
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"sync"
|
||||
|
@ -172,6 +171,20 @@ func (nodes *Nodes) expire() {
|
|||
}
|
||||
}
|
||||
|
||||
func (nodes *Nodes) load() {
|
||||
path := nodes.config.Nodes.NodesPath
|
||||
|
||||
if f, err := os.Open(path); err == nil {
|
||||
if err := json.NewDecoder(f).Decode(nodes); err == nil {
|
||||
log.Println("loaded", len(nodes.List), "nodes")
|
||||
} else {
|
||||
log.Println("failed to unmarshal nodes:", err)
|
||||
}
|
||||
} else {
|
||||
log.Println("failed to load cached nodes:", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (nodes *Nodes) save() {
|
||||
// Locking foo
|
||||
nodes.RLock()
|
||||
|
@ -216,34 +229,21 @@ func (stats *GlobalStats) Fields() map[string]interface{} {
|
|||
}
|
||||
}
|
||||
|
||||
func (nodes *Nodes) load() {
|
||||
path := nodes.config.Nodes.NodesPath
|
||||
log.Println("loading", path)
|
||||
|
||||
if filedata, err := ioutil.ReadFile(path); err == nil {
|
||||
if err = json.Unmarshal(filedata, nodes); err == nil {
|
||||
log.Println("loaded", len(nodes.List), "nodes")
|
||||
} else {
|
||||
log.Println("failed to unmarshal nodes:", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
log.Println("failed loading cached nodes:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Marshals the input and writes it into the given file
|
||||
func save(input interface{}, outputFile string) {
|
||||
data, err := json.Marshal(input)
|
||||
tmpFile := outputFile + ".tmp"
|
||||
|
||||
f, err := os.OpenFile(tmpFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
tmpFile := outputFile + ".tmp"
|
||||
|
||||
if err := ioutil.WriteFile(tmpFile, data, 0644); err != nil {
|
||||
err = json.NewEncoder(f).Encode(input)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
f.Close()
|
||||
if err := os.Rename(tmpFile, outputFile); err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue