summaryrefslogtreecommitdiff
path: root/new.go
blob: 2b62d129ca31e87318646662a06a54287b504a87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package digitalocean

import 	(
	"os"
	"go.wit.com/log"
	"go.wit.com/gui/gui"
)

var myDo *DigitalOcean

// This is initializes the main DO object
// You can only have one of these
func New(p *gui.Node) *DigitalOcean {
	if myDo != nil {return myDo}
	myDo = new(DigitalOcean)
	myDo.ready = false
	myDo.parent = p

	myDo.dropMap = make(map[int]*Droplet)

	// Your personal API token from DigitalOcean.
	myDo.token = os.Getenv("DIGITALOCEAN_TOKEN")

	myDo.window = p.NewWindow("DigitalOcean Control Panel")

	// make a group label and a grid
	myDo.group = myDo.window.NewGroup("droplets:").Pad()
	myDo.grid = myDo.group.NewGrid("grid", 2, 1).Pad()

	myDo.ready = true
	myDo.Hide()
	return myDo
}

// Returns true if the status is valid
func (d *DigitalOcean) Ready() bool {
	if d == nil {return false}
	return d.ready
}

func (d *DigitalOcean) Show() {
	if ! d.Ready() {return}
	log.Info("digitalocean.Show() window")
	if d.hidden {
		d.window.Show()
	}
	d.hidden = false
}

func (d *DigitalOcean) Hide() {
	if ! d.Ready() {return}
	log.Info("digitalocean.Hide() window")
	if ! d.hidden {
		d.window.Hide()
	}
	d.hidden = true
}

func (d *DigitalOcean) Update() bool {
	if ! d.Ready() {return false}
	d.ListSSHKeyID()
	if d.ListDroplets() {
		for _, droplet := range d.dpolled {
			// check if the droplet ID already exists
			if (d.dropMap[droplet.ID] == nil) {
				d.dropMap[droplet.ID] = d.NewDroplet(&droplet)
			} else {
				log.Log(POLL, "droplet.Update()", droplet.ID, droplet.Name, "already exists")
				d.dropMap[droplet.ID].Update(&droplet)
				continue
			}
		}
	} else {
		log.Error(d.err, "Error listing droplets")
		return false
	}
	return true
}