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  }