parent
673bcc6cc9
commit
3ba9a5da20
|
@ -61,17 +61,17 @@ func readDropletFile(filename string) {
|
||||||
if d == nil {
|
if d == nil {
|
||||||
// this is a new unknown droplet (not in the config file)
|
// this is a new unknown droplet (not in the config file)
|
||||||
d = new(DropletT)
|
d = new(DropletT)
|
||||||
|
d.pb = me.cluster.AddDroplet(name, 16, 256)
|
||||||
if len(fields) > 1 && fields[1] != "ON" {
|
if len(fields) > 1 && fields[1] != "ON" {
|
||||||
d.ConfigState = "OFF"
|
d.pb.StartState = "OFF"
|
||||||
} else {
|
} else {
|
||||||
d.ConfigState = "ON"
|
d.pb.StartState = "ON"
|
||||||
}
|
}
|
||||||
if len(fields) >= 3 {
|
if len(fields) >= 3 {
|
||||||
d.hyperPreferred = fields[2]
|
d.hyperPreferred = fields[2]
|
||||||
}
|
}
|
||||||
d.pb = me.cluster.AddDroplet(name, 16, 256)
|
|
||||||
me.droplets = append(me.droplets, d)
|
me.droplets = append(me.droplets, d)
|
||||||
log.Log(EVENT, "config new droplet", d.pb.Hostname, d.ConfigState, d.hyperPreferred)
|
log.Log(EVENT, "config new droplet", d.pb.Hostname, d.pb.StartState, d.hyperPreferred)
|
||||||
} else {
|
} else {
|
||||||
log.Info("not sure what to do here. duplicate droplet", name, "in config file")
|
log.Info("not sure what to do here. duplicate droplet", name, "in config file")
|
||||||
}
|
}
|
||||||
|
@ -99,9 +99,9 @@ func readHypervisorFile(filename string) {
|
||||||
name := fields[0]
|
name := fields[0]
|
||||||
h := addHypervisor(name)
|
h := addHypervisor(name)
|
||||||
if len(fields) < 2 || fields[1] != "active" {
|
if len(fields) < 2 || fields[1] != "active" {
|
||||||
h.Active = false
|
h.pb.Active = false
|
||||||
} else {
|
} else {
|
||||||
h.Active = true
|
h.pb.Active = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,13 +115,13 @@ func addHypervisor(name string) *HyperT {
|
||||||
}
|
}
|
||||||
log.Log(EVENT, "config new hypervisor", name)
|
log.Log(EVENT, "config new hypervisor", name)
|
||||||
h = new(HyperT)
|
h = new(HyperT)
|
||||||
h.Autoscan = true
|
|
||||||
h.Delay = 5 * time.Second
|
h.Delay = 5 * time.Second
|
||||||
h.lastpoll = time.Now()
|
h.lastpoll = time.Now()
|
||||||
h.Scan = func() {
|
h.Scan = func() {
|
||||||
h.pollHypervisor()
|
h.pollHypervisor()
|
||||||
}
|
}
|
||||||
h.pb = me.cluster.AddHypervisor(name, 16, 256)
|
h.pb = me.cluster.AddHypervisor(name, 16, 256)
|
||||||
|
h.pb.Autoscan = true
|
||||||
me.hypers = append(me.hypers, h)
|
me.hypers = append(me.hypers, h)
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
|
4
event.go
4
event.go
|
@ -100,14 +100,14 @@ func Start(name string) (bool, string) {
|
||||||
// make the list of hypervisors that are active and can start new droplets
|
// make the list of hypervisors that are active and can start new droplets
|
||||||
var pool []*HyperT
|
var pool []*HyperT
|
||||||
for _, h := range me.hypers {
|
for _, h := range me.hypers {
|
||||||
result += fmt.Sprintln("could start droplet on", name, "on", h.pb.Hostname, h.Active)
|
result += fmt.Sprintln("could start droplet on", name, "on", h.pb.Hostname, h.pb.Active)
|
||||||
if d.hyperPreferred == h.pb.Hostname {
|
if d.hyperPreferred == h.pb.Hostname {
|
||||||
// the config file says this droplet should run on this hypervisor
|
// the config file says this droplet should run on this hypervisor
|
||||||
a, b := h.Start(d)
|
a, b := h.Start(d)
|
||||||
return a, result + b
|
return a, result + b
|
||||||
}
|
}
|
||||||
|
|
||||||
if h.Active != true {
|
if h.pb.Active != true {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
pool = append(pool, h)
|
pool = append(pool, h)
|
||||||
|
|
6
http.go
6
http.go
|
@ -23,12 +23,12 @@ func okHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
// is the cluster running what it should?
|
// is the cluster running what it should?
|
||||||
if tmp == "/droplets" {
|
if tmp == "/droplets" {
|
||||||
for _, d := range me.droplets {
|
for _, d := range me.droplets {
|
||||||
if d.ConfigState != "ON" {
|
if d.pb.StartState != "ON" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
||||||
if d.CurrentState != "ON" {
|
if d.CurrentState != "ON" {
|
||||||
fmt.Fprintln(w, "BAD STATE ", d.pb.Hostname, d.hname, "(", d.ConfigState, "vs", d.CurrentState, ")", shell.FormatDuration(dur))
|
fmt.Fprintln(w, "BAD STATE ", d.pb.Hostname, d.hname, "(", d.pb.StartState, "vs", d.CurrentState, ")", shell.FormatDuration(dur))
|
||||||
} else {
|
} else {
|
||||||
dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
||||||
fmt.Fprintln(w, "GOOD STATE ON", d.pb.Hostname, d.hname, shell.FormatDuration(dur))
|
fmt.Fprintln(w, "GOOD STATE ON", d.pb.Hostname, d.hname, shell.FormatDuration(dur))
|
||||||
|
@ -65,7 +65,7 @@ func okHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
// l := shell.FormatDuration(dur)
|
// l := shell.FormatDuration(dur)
|
||||||
// log.Warn("HOST =", h.pb.Hostname, "Last poll =", l)
|
// log.Warn("HOST =", h.pb.Hostname, "Last poll =", l)
|
||||||
//if d.ConfigState != "ON" {
|
//if d.pb.StartState != "ON" {
|
||||||
// continue
|
// continue
|
||||||
//}
|
//}
|
||||||
// dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
// dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
||||||
|
|
2
main.go
2
main.go
|
@ -45,7 +45,7 @@ func main() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
h = addHypervisor(name)
|
h = addHypervisor(name)
|
||||||
h.Active = true
|
h.pb.Active = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if argv.Start != "" {
|
if argv.Start != "" {
|
||||||
|
|
4
poll.go
4
poll.go
|
@ -105,7 +105,7 @@ func clusterHealthy() (bool, string) {
|
||||||
|
|
||||||
for _, d := range me.droplets {
|
for _, d := range me.droplets {
|
||||||
total += 1
|
total += 1
|
||||||
if d.ConfigState != "ON" {
|
if d.pb.StartState != "ON" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
dur := time.Since(d.lastpoll) // Calculate the elapsed time
|
||||||
|
@ -116,7 +116,7 @@ func clusterHealthy() (bool, string) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if d.CurrentState != "ON" {
|
if d.CurrentState != "ON" {
|
||||||
log.Info("BAD STATE", d.ConfigState, d.pb.Hostname, d.hname, "CurrentState =", d.CurrentState, shell.FormatDuration(dur))
|
log.Info("BAD STATE", d.pb.StartState, d.pb.Hostname, d.hname, "CurrentState =", d.CurrentState, shell.FormatDuration(dur))
|
||||||
good = false
|
good = false
|
||||||
failed += 1
|
failed += 1
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -31,19 +31,17 @@ type virtigoT struct {
|
||||||
// the stuff that is needed for a hypervisor
|
// the stuff that is needed for a hypervisor
|
||||||
type HyperT struct {
|
type HyperT struct {
|
||||||
pb *pb.Hypervisor // the Hypervisor protobuf
|
pb *pb.Hypervisor // the Hypervisor protobuf
|
||||||
Active bool // is allowed to start new droplets
|
|
||||||
Scan func() // the function to run to scan the hypervisor
|
|
||||||
Autoscan bool // to scan or not to scan
|
|
||||||
Delay time.Duration // how often to poll the hypervisor
|
Delay time.Duration // how often to poll the hypervisor
|
||||||
Dog *time.Ticker // the watchdog timer itself
|
Dog *time.Ticker // the watchdog timer itself
|
||||||
lastpoll time.Time // the last time the hypervisor polled
|
lastpoll time.Time // the last time the hypervisor polled
|
||||||
killcount int
|
killcount int
|
||||||
|
Scan func() // the function to run to scan the hypervisor
|
||||||
}
|
}
|
||||||
|
|
||||||
// the stuff that is needed for a hypervisor
|
// the stuff that is needed for a hypervisor
|
||||||
type DropletT struct {
|
type DropletT struct {
|
||||||
pb *pb.Droplet // the Droplet protobuf
|
pb *pb.Droplet // the Droplet protobuf
|
||||||
ConfigState string // what the state of the droplet is SUPPOSED TO BE
|
// ConfigState string // what the state of the droplet is SUPPOSED TO BE
|
||||||
CurrentState string // what the state of the droplet is ACTUALLY IS
|
CurrentState string // what the state of the droplet is ACTUALLY IS
|
||||||
hyperPreferred string // the hypervisor to prefer to run the droplet on
|
hyperPreferred string // the hypervisor to prefer to run the droplet on
|
||||||
hname string // the hypervisor it's currently running on
|
hname string // the hypervisor it's currently running on
|
||||||
|
|
Loading…
Reference in New Issue