summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-11-19 05:44:42 -0600
committerJeff Carr <[email protected]>2024-11-19 05:44:42 -0600
commit11e105ec931e2a190df33fac5de81636097a97f6 (patch)
tree1e2ae91fef6b85778b3038a406cd6ea9029e9f8f
parent24a4b65f268d8a4086cb2f906b1da2efce2799d8 (diff)
save config file worksv0.0.6
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--config.go72
-rw-r--r--helpers.go10
2 files changed, 82 insertions, 0 deletions
diff --git a/config.go b/config.go
new file mode 100644
index 0000000..affe013
--- /dev/null
+++ b/config.go
@@ -0,0 +1,72 @@
+package zoopb
+
+// functions to import and export the protobuf
+// data to and from config files
+
+import (
+ "errors"
+ "os"
+ "path/filepath"
+
+ "go.wit.com/log"
+ "google.golang.org/protobuf/proto"
+)
+
+// writes out the cluster information it seperate files
+// to make it humanly possible to hand edit things as needed
+func (m *Machines) ConfigSave() error {
+ data, err := m.Marshal()
+ if err != nil {
+ log.Info("proto.Marshal() failed len", len(data), err)
+ return err
+ }
+ log.Info("proto.Marshal() worked len", len(data))
+ configWrite(data)
+ return nil
+}
+func ConfigSaveRaw(data []byte) error {
+ configWrite(data)
+ return nil
+}
+
+func (m *Machines) ConfigLoad() error {
+ if m == nil {
+ return errors.New("It's not safe to run ConfigLoad() on a nil ?")
+ }
+
+ if data, err := loadFile("zookeeper.pb"); err == nil {
+ if err = proto.Unmarshal(data, m); err != nil {
+ log.Warn("broken zookeeper.pb config file")
+ return err
+ }
+ } else {
+ return err
+ }
+ return nil
+}
+
+func loadFile(filename string) ([]byte, error) {
+ homeDir, err := os.UserHomeDir()
+ p := filepath.Join(homeDir, ".config/zookeeper")
+ fullname := filepath.Join(p, filename)
+ data, err := os.ReadFile(fullname)
+ if err != nil {
+ // log.Info("open config file :", err)
+ return nil, err
+ }
+ return data, nil
+}
+
+func configWrite(data []byte) error {
+ homeDir, err := os.UserHomeDir()
+ p := filepath.Join(homeDir, ".config/zookeeper")
+ fname := filepath.Join(p, "zookeeper.pb")
+ cfgfile, err := os.OpenFile(fname, os.O_RDWR|os.O_CREATE, 0666)
+ defer cfgfile.Close()
+ if err != nil {
+ log.Warn("open config file :", err)
+ return err
+ }
+ cfgfile.Write(data)
+ return nil
+}
diff --git a/helpers.go b/helpers.go
index 6bbb1f7..390da5c 100644
--- a/helpers.go
+++ b/helpers.go
@@ -51,3 +51,13 @@ func (m *Machine) Marshal() ([]byte, error) {
func (m *Machine) Unmarshal(data []byte) error {
return proto.Unmarshal(data, m)
}
+
+// marshal to wire
+func (m *Machines) Marshal() ([]byte, error) {
+ return proto.Marshal(m)
+}
+
+// unmarshal from wire
+func (m *Machines) Unmarshal(data []byte) error {
+ return proto.Unmarshal(data, m)
+}