Compare commits

..

1 Commits

Author SHA1 Message Date
Jeff Carr 60bb69e524 gocui dropdown 2024-02-02 02:45:52 -06:00
8 changed files with 108 additions and 44 deletions

View File

@ -1,14 +1,10 @@
# git remote add github git@github.com:wit-go/digitalocean.git # git remote add github git@github.com:wit-go/digitalocean.git
all: vet all:
@echo @echo
@echo a work in progress digital ocean control panel @echo a work in progress digital ocean control panel
@echo @echo
vet:
@GO111MODULE=off go vet
@echo go vet: this go library package builds okay
goimports: goimports:
goimports -w *.go goimports -w *.go

10
args.go
View File

@ -4,8 +4,12 @@ package digitalocean
import ( import (
"go.wit.com/dev/alexflint/arg" "go.wit.com/dev/alexflint/arg"
"go.wit.com/log"
) )
var NOW *log.LogFlag
var INFO *log.LogFlag
var POLL *log.LogFlag
var argDo ArgsDo var argDo ArgsDo
// This struct can be used with the go-arg package // This struct can be used with the go-arg package
@ -15,4 +19,10 @@ type ArgsDo struct {
func init() { func init() {
arg.Register(&argDo) arg.Register(&argDo)
full := "go.wit.com/lib/gui/digitalocean"
short := "DOgui"
NOW = log.NewFlag("NOW", true, full, short, "temp debugging stuff")
INFO = log.NewFlag("INFO", false, full, short, "normal debugging stuff")
INFO = log.NewFlag("POLL", false, full, short, "show droplet status polling")
} }

View File

@ -59,7 +59,7 @@ func (d *DigitalOcean) Create(name string, region string, size string, image str
// createDroplet creates a new droplet in the specified region with the given name. // createDroplet creates a new droplet in the specified region with the given name.
func (d *DigitalOcean) createDropletNew(name, region, size, image string) (*godo.Droplet, error) { func (d *DigitalOcean) createDropletNew(name, region, size, image string) (*godo.Droplet, error) {
log.Printf("digitalocean.createDropletNew() START name = %s", name) log.Infof("digitalocean.createDropletNew() START name =", name)
// Create an OAuth2 token. // Create an OAuth2 token.
tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: d.token}) tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: d.token})
@ -102,7 +102,7 @@ func (d *DigitalOcean) createDropletNew(name, region, size, image string) (*godo
ctx := context.TODO() ctx := context.TODO()
log.Info("digitalocean.createDropletNew() about to do client.Create(). ctx =", ctx) log.Info("digitalocean.createDropletNew() about to do client.Create(). ctx =", ctx)
newDroplet, _, err := client.Droplets.Create(ctx, createRequest) newDroplet, _, err := client.Droplets.Create(ctx, createRequest)
log.Infof("digitalocean.createDropletNew() END newDroplet = %s", newDroplet) log.Infof("digitalocean.createDropletNew() END newDroplet =", newDroplet)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -141,7 +141,7 @@ func InitCreateWindow() *windowCreate {
log.Info("Available Regions:") log.Info("Available Regions:")
for i, region := range regions { for i, region := range regions {
log.Infof("i: %d, Slug: %s, Name: %s, Available: %v\n", i, region.Slug, region.Name, region.Available) log.Infof("i: %d, Slug: %s, Name: %s, Available: %v\n", i, region.Slug, region.Name, region.Available)
log.Printf("%d %+v\n", i, region) log.Spew(i, region)
if len(region.Sizes) == 0 { if len(region.Sizes) == 0 {
log.Info("Skipping region. No available sizes region =", region.Name) log.Info("Skipping region. No available sizes region =", region.Name)
} else { } else {

View File

@ -169,7 +169,7 @@ func (d *Droplet) Update(dpoll *godo.Droplet) {
} }
d.poll = dpoll d.poll = dpoll
log.Log(POLL, "droplet", dpoll.Name, "dpoll.Status =", dpoll.Status) log.Log(POLL, "droplet", dpoll.Name, "dpoll.Status =", dpoll.Status)
log.Printf("%+v\n", dpoll) log.Spew(dpoll)
d.statusN.SetText(dpoll.Status) d.statusN.SetText(dpoll.Status)
if d.Active() { if d.Active() {
d.poweron.Disable() d.poweron.Disable()
@ -245,7 +245,7 @@ func (d *Droplet) Show() {
log.Info("droplet: Image =", d.GetImage()) log.Info("droplet: Image =", d.GetImage())
log.Info("droplet: Status =", d.GetStatus()) log.Info("droplet: Status =", d.GetStatus())
log.Info("droplet: ", d.poll.Name, d.poll.Image.Slug, d.poll.Region.Slug) log.Info("droplet: ", d.poll.Name, d.poll.Image.Slug, d.poll.Region.Slug)
log.Printf("%+v\n", d.poll) log.Spew(d.poll)
} }
func (d *Droplet) Hide() { func (d *Droplet) Hide() {

View File

@ -1,20 +0,0 @@
package digitalocean
// initializes logging and command line options
import (
"go.wit.com/log"
)
var NOW *log.LogFlag
var INFO *log.LogFlag
var POLL *log.LogFlag
func init() {
full := "go.wit.com/lib/gui/digitalocean"
short := "DOgui"
NOW = log.NewFlag("NOW", true, full, short, "temp debugging stuff")
INFO = log.NewFlag("INFO", false, full, short, "normal debugging stuff")
POLL = log.NewFlag("POLL", false, full, short, "show droplet status polling")
}

26
go.mod Normal file
View File

@ -0,0 +1,26 @@
module go.wit.com/lib/gui/digitalocean
go 1.21.4
require (
github.com/digitalocean/godo v1.108.0
go.wit.com/dev/alexflint/arg v1.4.5
go.wit.com/gui v0.19.1
go.wit.com/lib/gadgets v0.19.1
go.wit.com/log v0.19.1
golang.org/x/oauth2 v0.16.0
)
require (
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-retryablehttp v0.7.4 // indirect
go.wit.com/dev/alexflint/scalar v1.2.1 // indirect
go.wit.com/dev/davecgh/spew v1.1.4 // indirect
go.wit.com/widget v1.1.14 // indirect
golang.org/x/net v0.20.0 // indirect
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.31.0 // indirect
)

60
go.sum Normal file
View File

@ -0,0 +1,60 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/digitalocean/godo v1.108.0 h1:fWyMENvtxpCpva1UbKzOFnyAS04N1FNuBWWfPeTGquQ=
github.com/digitalocean/godo v1.108.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA=
github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
go.wit.com/dev/alexflint/arg v1.4.5 h1:asDx5f9IlfpknKjPBqqb2qndE91Pbo7ZDkWUgddfMhY=
go.wit.com/dev/alexflint/arg v1.4.5/go.mod h1:wnWc+c6z8kSdDKYriMf6RpM+FiXmo5RYp/t4FNi0MU0=
go.wit.com/dev/alexflint/scalar v1.2.1 h1:loXOcbVnd+8YeJRLey+XXidecBiedMDO00zQ26TvKNs=
go.wit.com/dev/alexflint/scalar v1.2.1/go.mod h1:+rYsfxqdI2cwA8kJ7GCMwWbNJvfvWUurOCXLiwdTtSs=
go.wit.com/dev/davecgh/spew v1.1.4 h1:C9hj/rjlUpdK+E6aroyLjCbS5MFcyNUOuP1ICLWdNek=
go.wit.com/dev/davecgh/spew v1.1.4/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA=
go.wit.com/gui v0.19.1 h1:xk6fEXfDV0sLEOfDVPb8hZ6oRZ4tss4rEcE72mXnU6M=
go.wit.com/gui v0.19.1/go.mod h1:CyMtcxVD2NTgaOdSnTKweBuGl5JdbokunMJLDATfQiw=
go.wit.com/lib/gadgets v0.19.1 h1:5DHN6WHz67DLCzODgDJTz1VaUkgc8kfmvs+1Un675bg=
go.wit.com/lib/gadgets v0.19.1/go.mod h1:qB5sl+HQp1w8jMRh6AcjL91Qrv8vhfgAaBxZepoKoD0=
go.wit.com/log v0.19.1 h1:VRgY3GLx6XG5ttj2yAvDvRzzsyXIcCu/c3p1SP2WSZI=
go.wit.com/log v0.19.1/go.mod h1:BaJBfHFqcJSJLXGQ9RHi3XVhPgsStxSMZRlaRxW4kAo=
go.wit.com/widget v1.1.14 h1:WD4JKWMUFmlB/OQ01/HVKa92f5nHe9zIO9wVMDpmqLk=
go.wit.com/widget v1.1.14/go.mod h1:I8tnD3x3ECbB/CRNnLCdC+uoyk7rK0AEkzK1bQYSqoQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ=
golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y=
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

16
new.go
View File

@ -48,7 +48,9 @@ func (d *DigitalOcean) Show() {
return return
} }
log.Info("digitalocean.Show() window") log.Info("digitalocean.Show() window")
if d.hidden {
d.window.Show() d.window.Show()
}
d.hidden = false d.hidden = false
} }
@ -57,22 +59,12 @@ func (d *DigitalOcean) Hide() {
return return
} }
log.Info("digitalocean.Hide() window") log.Info("digitalocean.Hide() window")
if !d.hidden {
d.window.Hide() d.window.Hide()
}
d.hidden = true d.hidden = true
} }
func (d *DigitalOcean) Toggle() {
if !d.Ready() {
return
}
log.Info("digitalocean.Hide() window")
if d.hidden {
d.Show()
} else {
d.Hide()
}
}
func (d *DigitalOcean) Update() bool { func (d *DigitalOcean) Update() bool {
if !d.Ready() { if !d.Ready() {
return false return false