attempt at human readable message in JSON output
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
8f1544654b
commit
f204088619
3
Makefile
3
Makefile
|
@ -17,8 +17,9 @@ all:
|
||||||
make cluster.pb.go
|
make cluster.pb.go
|
||||||
make -C configfile
|
make -C configfile
|
||||||
|
|
||||||
vet: lint
|
vet:
|
||||||
GO111MODULE=off go vet
|
GO111MODULE=off go vet
|
||||||
|
make lint
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
buf lint droplet.proto
|
buf lint droplet.proto
|
||||||
|
|
|
@ -8,7 +8,7 @@ message Droplet {
|
||||||
string name = 2;
|
string name = 2;
|
||||||
string hostname = 3;
|
string hostname = 3;
|
||||||
int64 cpus = 4;
|
int64 cpus = 4;
|
||||||
string memory = 5;
|
int64 memory = 5;
|
||||||
int64 disk = 6;
|
int64 disk = 6;
|
||||||
string base_image = 7;
|
string base_image = 7;
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ message Droplet {
|
||||||
string default_state = 11;
|
string default_state = 11;
|
||||||
string preferred_hypervisor = 12;
|
string preferred_hypervisor = 12;
|
||||||
google.protobuf.Any testany = 13;
|
google.protobuf.Any testany = 13;
|
||||||
|
StorageInfo testsi = 14;
|
||||||
|
|
||||||
message Network {
|
message Network {
|
||||||
string mac = 1;
|
string mac = 1;
|
||||||
|
@ -29,4 +30,8 @@ message Droplet {
|
||||||
string filename = 1;
|
string filename = 1;
|
||||||
int64 size = 2;
|
int64 size = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message StorageInfo {
|
||||||
|
int64 capacity = 1; // Stores the storage capacity in bytes.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
71
helpers.go
71
helpers.go
|
@ -8,6 +8,16 @@ import (
|
||||||
"google.golang.org/protobuf/encoding/prototext"
|
"google.golang.org/protobuf/encoding/prototext"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// can the json protobuf output use a string and have a type handler
|
||||||
|
// to convert it back to int64?
|
||||||
|
func SetGB(gb int) int64 {
|
||||||
|
return int64(gb * 1024 * 1024 * 1024)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetMB(mb int) int64 {
|
||||||
|
return int64(mb * 1024 * 1024)
|
||||||
|
}
|
||||||
|
|
||||||
func (x *Hypervisor) SetMemoryGB(gb int) {
|
func (x *Hypervisor) SetMemoryGB(gb int) {
|
||||||
x.Memory = int64(gb * 1024 * 1024 * 1024)
|
x.Memory = int64(gb * 1024 * 1024 * 1024)
|
||||||
}
|
}
|
||||||
|
@ -36,22 +46,6 @@ func (c *Cluster) FormatTEXT() string {
|
||||||
return prototext.Format(c)
|
return prototext.Format(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) AddHypervisor(hostname string, cpus int, mem int) *Hypervisor {
|
|
||||||
// Generate a new UUID
|
|
||||||
id := uuid.New()
|
|
||||||
h := &Hypervisor{
|
|
||||||
Uuid: id.String(),
|
|
||||||
Hostname: hostname,
|
|
||||||
Cpus: 16,
|
|
||||||
Memory: 256,
|
|
||||||
Comment: "this is a fake hypervisor",
|
|
||||||
}
|
|
||||||
h.Cpus = int64(cpus)
|
|
||||||
h.SetMemoryGB(mem * 32)
|
|
||||||
c.Hypervisors = append(c.Hypervisors, h)
|
|
||||||
return h
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Cluster) FindDroplet(name string) *Droplet {
|
func (c *Cluster) FindDroplet(name string) *Droplet {
|
||||||
for _, d := range c.Droplets {
|
for _, d := range c.Droplets {
|
||||||
if d.Hostname == name {
|
if d.Hostname == name {
|
||||||
|
@ -69,3 +63,48 @@ func (c *Cluster) FindHypervisor(name string) *Hypervisor {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Cluster) AddHypervisor(hostname string, cpus int, mem int) *Hypervisor {
|
||||||
|
h := c.FindHypervisor(hostname)
|
||||||
|
if h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
// Generate a new UUID
|
||||||
|
id := uuid.New()
|
||||||
|
h = &Hypervisor{
|
||||||
|
Uuid: id.String(),
|
||||||
|
Hostname: hostname,
|
||||||
|
Cpus: int64(cpus),
|
||||||
|
Comment: "this is a fake hypervisor",
|
||||||
|
}
|
||||||
|
if cpus < 0 {
|
||||||
|
h.Cpus = 1
|
||||||
|
}
|
||||||
|
h.SetMemoryGB(mem * 32)
|
||||||
|
c.Hypervisors = append(c.Hypervisors, h)
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Cluster) AddDroplet(hostname string, cpus int, mem int) *Droplet {
|
||||||
|
d := c.FindDroplet(hostname)
|
||||||
|
if d != nil {
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a new UUID
|
||||||
|
id := uuid.New()
|
||||||
|
d = &Droplet{
|
||||||
|
Uuid: id.String(),
|
||||||
|
Hostname: hostname,
|
||||||
|
Cpus: int64(cpus),
|
||||||
|
}
|
||||||
|
|
||||||
|
if cpus < 0 {
|
||||||
|
d.Cpus = 1
|
||||||
|
}
|
||||||
|
d.Memory = SetGB(mem * 32)
|
||||||
|
d.Testsi.Capacity = SetGB(mem * 32)
|
||||||
|
// d.Testsi = StorageInfo{Capacity: 64}
|
||||||
|
c.Droplets = append(c.Droplets, d)
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
|
@ -51,8 +51,7 @@ func CreateSampleCluster(total int) *Cluster {
|
||||||
d.PreferredHypervisor = fmt.Sprintf("farm%d", i)
|
d.PreferredHypervisor = fmt.Sprintf("farm%d", i)
|
||||||
if d.PreferredHypervisor == "farm4" {
|
if d.PreferredHypervisor == "farm4" {
|
||||||
d.Cpus = 16
|
d.Cpus = 16
|
||||||
d.Memory = "256 MB"
|
d.Memory = SetGB(256)
|
||||||
// d.Memory = "258 MB"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Droplets = append(c.Droplets, d)
|
c.Droplets = append(c.Droplets, d)
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package virtbuf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type StorageInfo struct {
|
||||||
|
Capacity int64
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON custom marshals the StorageInfo struct to JSON
|
||||||
|
func (s StorageInfo) MarshalJSON() ([]byte, error) {
|
||||||
|
capacityStr := fmt.Sprintf("%d GB", s.Capacity)
|
||||||
|
return json.Marshal(map[string]string{
|
||||||
|
"capacity": capacityStr,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON custom unmarshals JSON into the StorageInfo struct
|
||||||
|
func (s *StorageInfo) UnmarshalJSON(data []byte) error {
|
||||||
|
var raw map[string]string
|
||||||
|
if err := json.Unmarshal(data, &raw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if capacityStr, ok := raw["capacity"]; ok {
|
||||||
|
capacityStr = capacityStr[:len(capacityStr)-3] // Remove the " GB" suffix
|
||||||
|
capacity, err := strconv.ParseInt(capacityStr, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s.Capacity = capacity
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func main() {
|
||||||
|
info := StorageInfo{Capacity: 64}
|
||||||
|
|
||||||
|
// Marshaling to JSON
|
||||||
|
jsonData, _ := json.Marshal(info)
|
||||||
|
fmt.Println(string(jsonData)) // Output: {"capacity":"64 GB"}
|
||||||
|
|
||||||
|
// Unmarshaling back to Go struct
|
||||||
|
var newInfo StorageInfo
|
||||||
|
_ = json.Unmarshal(jsonData, &newInfo)
|
||||||
|
fmt.Println(newInfo.Capacity) // Output: 64
|
||||||
|
}
|
||||||
|
*/
|
Loading…
Reference in New Issue