-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathkalena.go
149 lines (136 loc) · 3.83 KB
/
kalena.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package main
import (
"flag"
"fmt"
"html/template"
"log"
"os"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
var (
// TEMPLATES 는 kalena에서 사용하는 템플릿 글로벌 변수이다.
TEMPLATES = template.New("")
flagAdd = flag.Bool("add", false, "Add mode")
flagSearch = flag.Bool("search", false, "Search mode")
flagAddLayer = flag.Bool("addlayer", false, "add layer mode")
flagRmLayer = flag.Bool("rmlayer", false, "remove layer mode")
flagTitle = flag.String("title", "", "Title")
flagLayerName = flag.String("layername", "", "Layer name")
flagLayerColor = flag.String("layercolor", "", "Layer Color")
flagLayerHidden = flag.Bool("layerhidden", false, "Layer hidden")
flagStart = flag.String("start", "", "Start time")
flagEnd = flag.String("end", "", "End time")
flagLocation = flag.String("location", "Asia/Seoul", "location name")
flagYear = flag.String("year", "", "year to search")
flagMonth = flag.String("month", "", "month to search")
flagCollection = flag.String("collection", "", "name for DB collection")
flagDBIP = flag.String("dbip", "", "DB IP")
flagDBName = flag.String("dbname", "kalena", "DB name")
flagHTTPPort = flag.String("http", "", "Web Service Port Number")
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.SetPrefix("kalena: ")
flag.Parse()
if *flagAdd {
if *flagCollection == "" {
log.Fatal("Collection이 빈 문자열 입니다")
}
s := Schedule{}
s.Collection = *flagCollection
s.Color = *flagLayerColor
s.Title = *flagTitle
s.Layer = *flagLayerName
s.Start = *flagStart
s.End = *flagEnd
err := s.CheckError()
if err != nil {
log.Fatal(err)
}
session, err := mgo.Dial(*flagDBIP)
if err != nil {
log.Fatal(err)
}
defer session.Close()
err = AddSchedule(session, s)
if err != nil {
log.Print(err)
}
} else if *flagSearch { // 해당 연도, 달의 모든 스케쥴을 가져온다.
if *flagCollection == "" {
log.Fatal("Collection이 빈 문자열 입니다")
}
if !regexInt4.MatchString(*flagYear) {
log.Fatal("검색할 연도를 4자리 정수로 입력해주세요")
}
if !regexInt2.MatchString(*flagMonth) {
log.Fatal("검색할 월을 2자리 정수로 입력해주세요(3월 -> 03, 11월 -> 11")
}
session, err := mgo.Dial(*flagDBIP)
if err != nil {
log.Fatal(err)
}
defer session.Close()
testdata, err := SearchMonth(session, *flagCollection, *flagYear, *flagMonth)
if err != nil {
log.Println(err)
}
fmt.Println(testdata)
os.Exit(1)
} else if *flagAddLayer {
if *flagCollection == "" {
log.Fatal("collection을 입력해주세요")
}
if *flagLayerName == "" {
log.Fatal("layername을 입력해주세요")
}
if *flagLayerColor == "" {
log.Fatal("layercolor를 입력해주세요")
}
if !regexWebColor.MatchString(*flagLayerColor) {
log.Fatal("#FFFFFF형식으로 입력해주세요")
}
session, err := mgo.Dial(*flagDBIP)
if err != nil {
log.Fatal(err)
}
defer session.Close()
c := session.DB(*flagDBName).C(*flagCollection + ".layers")
l := Layer{}
l.Name = *flagLayerName
l.Color = *flagLayerColor
num, err := c.Find(bson.M{}).Count()
l.Order = num + 1
err = AddLayer(session, *flagCollection, l)
if err != nil {
log.Fatal(err)
}
} else if *flagRmLayer {
if *flagCollection == "" {
log.Fatal("collection을 입력해주세요")
}
if *flagLayerName == "" {
log.Fatal("layername을 입력해주세요")
}
session, err := mgo.Dial(*flagDBIP)
if err != nil {
log.Fatal(err)
}
defer session.Close()
err = RmLayer(session, *flagCollection, *flagLayerName)
if err != nil {
log.Fatal(err)
}
} else if *flagHTTPPort != "" {
ip, err := serviceIP()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Service start: http://%s\n", ip)
webserver()
} else {
flag.PrintDefaults()
os.Exit(1)
}
}