/
main.go
81 lines (67 loc) · 2.46 KB
/
main.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
// 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/.
package main
import (
"flag"
"log"
"net/http"
"comail.io/go/colog"
"github.com/ninibe/bigduration"
"github.com/ninibe/netlog"
"github.com/ninibe/netlog/transport"
"golang.org/x/net/http2"
)
var (
debug = flag.Bool("debug", false, "Start on debug mode")
listen = flag.String("listen", ":7200", "Listen address")
dataDir = flag.String("dir", "./data", "Data folder")
logLevel = flag.String("loglevel", "info", "Logging level")
monInterval = flag.String("monitor_interval", "10s", "Interval for segment size and age checks")
segAge = flag.String("segment_age", "30day", "Time since the last write in a segment until it gets discarded")
segSize = flag.Int64("segment_size", 1024*1024*1024, "Maximum topic segment size in bytes")
batchNum = flag.Int("batch_num_messages", 100, "Default maximum number of messages to be batched")
batchInterval = flag.String("batch_interval", "200ms", "Default interval at which batched messages are flushed to disk.")
compression = flag.Int("compression", 1, "Default compression for batches: 1 = gzip, 2 = snappy, 3 = none")
)
func main() {
flag.Parse()
colog.Register()
ll, err := colog.ParseLevel(*logLevel)
fatalOn(err)
colog.SetMinLevel(ll)
if *debug {
colog.SetFlags(log.LstdFlags | log.Lshortfile)
colog.SetMinLevel(colog.LTrace)
}
var server http.Server
server.Addr = *listen
err = http2.ConfigureServer(&server, nil)
fatalOn(err)
segAge, err := bigduration.ParseBigDuration(*segAge)
fatalOn(err)
mIterval, err := bigduration.ParseBigDuration(*monInterval)
fatalOn(err)
bInterval, err := bigduration.ParseBigDuration(*batchInterval)
fatalOn(err)
topSettings := netlog.TopicSettings{
SegAge: segAge,
SegSize: *segSize,
BatchNumMessages: *batchNum,
BatchInterval: bInterval,
CompressionType: netlog.CompressionType(*compression),
}
nl, err := netlog.NewNetLog(*dataDir,
netlog.DefaultTopicSettings(topSettings),
netlog.MonitorInterval(mIterval))
fatalOn(err)
http.Handle("/", transport.NewHTTPTransport(nl))
log.Printf("info: listening on %q", server.Addr)
log.Printf("info: data dir on %q", *dataDir)
log.Fatalf("alert: %s\n", server.ListenAndServe())
}
func fatalOn(err error) {
if err != nil {
log.Fatalf("alert: %s\n", err)
}
}