github.com/wtfutil/wtf@v0.43.0/modules/digitalocean/droplet_properties_table.go (about) 1 package digitalocean 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 8 "github.com/wtfutil/wtf/utils" 9 "github.com/wtfutil/wtf/view" 10 ) 11 12 type dropletPropertiesTable struct { 13 droplet *Droplet 14 propertyMap map[string]string 15 16 colWidth0 int 17 colWidth1 int 18 tableHeight int 19 } 20 21 // newDropletPropertiesTable creates and returns an instance of DropletPropertiesTable 22 func newDropletPropertiesTable(droplet *Droplet) *dropletPropertiesTable { 23 propTable := &dropletPropertiesTable{ 24 droplet: droplet, 25 26 colWidth0: 24, 27 colWidth1: 47, 28 tableHeight: 16, 29 } 30 31 propTable.propertyMap = propTable.buildPropertyMap() 32 33 return propTable 34 } 35 36 /* -------------------- Unexported Functions -------------------- */ 37 38 // buildPropertyMap creates a mapping of droplet property names to droplet property values 39 func (propTable *dropletPropertiesTable) buildPropertyMap() map[string]string { 40 propMap := map[string]string{} 41 42 if propTable.droplet == nil { 43 return propMap 44 } 45 46 publicV4, _ := propTable.droplet.PublicIPv4() 47 publicV6, _ := propTable.droplet.PublicIPv6() 48 49 propMap["CPUs"] = strconv.Itoa(propTable.droplet.Vcpus) 50 propMap["Created"] = propTable.droplet.Created 51 propMap["Disk"] = strconv.Itoa(propTable.droplet.Disk) 52 propMap["Features"] = utils.Truncate(strings.Join(propTable.droplet.Features, ","), propTable.colWidth1, true) 53 propMap["Image"] = fmt.Sprintf("%s (%s)", propTable.droplet.Image.Name, propTable.droplet.Image.Distribution) 54 propMap["Memory"] = strconv.Itoa(propTable.droplet.Memory) 55 propMap["Public IP v4"] = publicV4 56 propMap["Public IP v6"] = publicV6 57 propMap["Region"] = fmt.Sprintf("%s (%s)", propTable.droplet.Region.Name, propTable.droplet.Region.Slug) 58 propMap["Size"] = propTable.droplet.SizeSlug 59 propMap["Status"] = propTable.droplet.Status 60 propMap["Tags"] = utils.Truncate(strings.Join(propTable.droplet.Tags, ","), propTable.colWidth1, true) 61 propMap["URN"] = utils.Truncate(propTable.droplet.URN(), propTable.colWidth1, true) 62 propMap["VPC"] = propTable.droplet.VPCUUID 63 64 return propMap 65 } 66 67 // render creates a new Table and returns it as a displayable string 68 func (propTable *dropletPropertiesTable) render() string { 69 tbl := view.NewInfoTable( 70 []string{"Property", "Value"}, 71 propTable.propertyMap, 72 propTable.colWidth0, 73 propTable.colWidth1, 74 propTable.tableHeight, 75 ) 76 77 return tbl.Render() 78 }