dospin/servermanager.go

106 lines
2.1 KiB
Go
Raw Normal View History

2016-02-27 16:21:49 -06:00
/*
Copyright 2016 gtalent2@gmail.com
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
2016-02-27 16:10:44 -06:00
package main
import "log"
const (
SERVERMANAGER_SPINUP = iota
SERVERMANAGER_SPINDOWN
SERVERMANAGER_STOP
)
type ServerManager struct {
name string
ports []int
in chan int
out chan int
usageScore int // spin down server when this reaches 0
server ServerHandler
}
func NewServerManager(name string, server ServerHandler, settings Settings) *ServerManager {
sm := new(ServerManager)
sm.in = make(chan int)
sm.out = make(chan int)
sm.usageScore = 5
sm.server = server
// find the ports associated with this server in settings
for _, s := range settings.Services {
if s.LogicalServer == name {
sm.ports = append(sm.ports, s.Port)
}
}
return sm
}
/*
Serves channel requests.
*/
func (me *ServerManager) Serve() {
for running := true; running; {
select {
case action := <-me.in:
running = me.serveAction(action)
}
}
}
/*
Sends the serve loop a spinup message.
*/
func (me *ServerManager) Spinup() {
me.in <- SERVERMANAGER_SPINUP
}
/*
Sends the serve loop a spindown message.
*/
func (me *ServerManager) Spindown() {
me.in <- SERVERMANAGER_SPINDOWN
}
/*
Sends the serve loop a quit message.
*/
func (me *ServerManager) Stop() {
me.in <- SERVERMANAGER_STOP
}
func (me *ServerManager) addPortForwards(ip string) {
}
func (me *ServerManager) rmPortForwards() {
}
func (me *ServerManager) serveAction(action int) bool {
running := true
switch action {
case SERVERMANAGER_SPINUP:
ip, err := me.server.Spinup(me.name)
if err == nil {
me.addPortForwards(ip)
} else {
2016-02-27 16:10:44 -06:00
log.Println("ServerManager: Could not spin up "+me.name+":", err)
}
case SERVERMANAGER_SPINDOWN:
err := me.server.Spindown(me.name)
if err == nil {
me.rmPortForwards()
} else {
2016-02-27 16:10:44 -06:00
log.Println("ServerManager: Could not spin down "+me.name+":", err)
}
case SERVERMANAGER_STOP:
running = false
}
return running
}