/
pxm.go
95 lines (77 loc) · 2.08 KB
/
pxm.go
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"fmt"
"log"
"flag"
"strings"
"os"
"os/signal"
"syscall"
"github.com/felixroeser/pxm/lib"
"github.com/felixroeser/pxm/lib/storage"
"github.com/felixroeser/pxm/lib/roles"
)
func main() {
log.Println("-> pxm 0.0")
var configFilename string
flag.StringVar(&configFilename, "config", "/etc/pxm.ini", "relative or absolute path to a pxm config file")
cmd := flag.String("cmd", "blank", "internal commands to be execute before start: drop,create,migrate,flush" )
flag.Parse()
if err := lib.LoadConfig(configFilename, &lib.Cfg); err != nil {
log.Fatal("Failed to load/parse config", err)
}
var err error
if lib.Session, err = storage.Connect(); err != nil {
log.Fatal(err)
}
context, _ := lib.GetContext()
defer context.Close()
for _, c := range strings.Split(*cmd, ",") {
switch c {
case "drop":
storage.Drop()
case "migrate":
storage.Migrate()
case "flush":
storage.Flush()
default:
log.Printf("unsupported command: %s", c)
}
}
started := 0
var stoppers []chan bool
sigs := make(chan os.Signal)
done := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
for _, m := range flag.Args() {
switch m {
case "dummy":
log.Println("* Starting endless dummy")
c := make(chan bool)
go lib.X(c, done)
stoppers = append(stoppers, c)
started = started + 1
case "mxpsink":
ms := roles.MxpSinkFactory(context)
c := make(chan bool)
go ms.Start(c, done)
stoppers = append(stoppers, c)
started = started + 1
case "mxpstream":
log.Println("* mxp stream to be implemented")
case "debug":
log.Println("* debug mode to be implemented")
default:
log.Println("* unknown mode", m)
}
}
fmt.Println("Waiting until the sun goes down...")
_ = <-sigs
for i := range stoppers {
stoppers[i] <- true
}
for c := 0; c < started; c++ {
<- done
}
os.Exit(0)
}