Files
gocast/controller/app.go
2018-10-22 19:03:42 -07:00

65 lines
1.1 KiB
Go

package controller
import (
"fmt"
"github.com/golang/glog"
"net"
"strings"
)
type MonitorType int
const (
Monitor_PORT MonitorType = 1
Monitor_EXEC MonitorType = 2
)
var Monitors = map[string]MonitorType{"port": Monitor_PORT, "exec": Monitor_EXEC}
func (m MonitorType) String() string {
for str, mtr := range Monitors {
if m == mtr {
return str
}
}
return "unknown"
}
type Monitor struct {
Type MonitorType
Port string
Protocol string
Cmd string
}
type App struct {
Name string
Vip *net.IPNet
Monitor Monitor
}
func NewApp(appName, vip, monitor, monitorType string) (*App, error) {
if appName == "" {
return nil, fmt.Errorf("Invalid app name")
}
app := &App{Name: appName}
_, ipnet, err := net.ParseCIDR(vip)
if err != nil {
return nil, fmt.Errorf("Invalid VIP specified, need ip/mask")
}
app.Vip = ipnet
m := Monitor{Type: Monitors[monitorType]}
switch monitorType {
case "port":
parts := strings.Split(monitor, ":")
m.Protocol = parts[0]
m.Port = parts[1]
case "exec":
m.Cmd = monitor
default:
glog.V(2).Infof("No monitor specified")
}
app.Monitor = m
return app, nil
}