yanic/main.go

101 lines
2.4 KiB
Go
Raw Normal View History

2015-12-29 04:08:03 +01:00
package main
import (
2016-02-19 11:30:42 +01:00
"flag"
2015-12-29 04:08:03 +01:00
"log"
2016-02-25 22:06:15 +01:00
"net"
2016-02-19 11:13:30 +01:00
"net/http"
"os"
"os/signal"
"syscall"
"time"
2016-05-14 12:31:43 +02:00
"github.com/NYTimes/gziphandler"
2016-06-16 18:03:45 +02:00
"github.com/julienschmidt/httprouter"
2016-05-14 12:31:43 +02:00
2016-06-16 18:03:45 +02:00
"github.com/FreifunkBremen/respond-collector/api"
2016-10-03 19:55:37 +02:00
"github.com/FreifunkBremen/respond-collector/database"
2016-03-15 23:26:30 +01:00
"github.com/FreifunkBremen/respond-collector/models"
"github.com/FreifunkBremen/respond-collector/respond"
2016-10-03 19:56:02 +02:00
"github.com/FreifunkBremen/respond-collector/rrd"
2015-12-29 14:05:47 +01:00
)
2016-02-19 11:30:42 +01:00
var (
2016-06-16 18:03:45 +02:00
configFile string
config *models.Config
collector *respond.Collector
2016-10-03 19:55:37 +02:00
db *database.DB
2016-06-16 18:03:45 +02:00
nodes *models.Nodes
2016-02-19 11:30:42 +01:00
)
func main() {
2016-10-03 19:56:02 +02:00
var importPath string
flag.StringVar(&importPath, "import", "", "import global statistics from the given RRD file, requires influxdb")
2016-03-12 16:40:41 +01:00
flag.StringVar(&configFile, "config", "config.yml", "path of configuration file (default:config.yaml)")
2016-02-19 11:30:42 +01:00
flag.Parse()
2016-03-20 19:54:43 +01:00
config = models.ReadConfigFile(configFile)
2016-03-12 03:36:02 +01:00
if config.Influxdb.Enable {
2016-10-03 19:55:37 +02:00
db = database.New(config)
2016-10-03 19:56:02 +02:00
if importPath != "" {
importRRD(importPath)
os.Exit(0)
}
2016-03-12 03:36:02 +01:00
}
2016-10-03 19:55:37 +02:00
nodes = models.NewNodes(config)
2016-03-09 03:26:08 +01:00
if config.Respondd.Enable {
2016-03-12 03:58:36 +01:00
collectInterval := time.Second * time.Duration(config.Respondd.CollectInterval)
2016-10-03 19:55:37 +02:00
collector = respond.NewCollector(db, nodes, collectInterval, config.Respondd.Interface)
2016-03-07 09:52:52 +01:00
}
2016-03-07 09:52:52 +01:00
if config.Webserver.Enable {
2016-05-14 12:31:43 +02:00
router := httprouter.New()
2016-05-17 11:07:14 +02:00
if config.Webserver.Api.NewNodes {
2016-06-16 18:03:45 +02:00
api.NewNodes(config, router, "/api/nodes", nodes)
2016-05-17 10:59:34 +02:00
log.Println("api nodes started")
2016-05-14 12:31:43 +02:00
}
if config.Webserver.Api.Aliases {
2016-06-16 18:03:45 +02:00
api.NewAliases(config, router, "/api/aliases", nodes)
2016-05-17 10:59:34 +02:00
log.Println("api aliases started")
2016-05-14 12:31:43 +02:00
}
router.NotFound = gziphandler.GzipHandler(http.FileServer(http.Dir(config.Webserver.Webroot)))
2016-03-20 18:30:44 +01:00
address := net.JoinHostPort(config.Webserver.Address, config.Webserver.Port)
log.Println("starting webserver on", address)
// TODO bad
2016-05-14 12:31:43 +02:00
log.Fatal(http.ListenAndServe(address, router))
2016-03-07 09:52:52 +01:00
}
2016-03-12 03:58:36 +01:00
// Wait for INT/TERM
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigs
log.Println("received", sig)
// Close everything at the end
2016-03-19 23:18:26 +01:00
if collector != nil {
collector.Close()
2016-03-07 10:28:24 +01:00
}
2016-10-03 19:55:37 +02:00
if db != nil {
db.Close()
2016-03-12 03:58:36 +01:00
}
}
2016-10-03 19:56:02 +02:00
func importRRD(path string) {
log.Println("importing RRD from", path)
for ds := range rrd.Read(path) {
db.AddPoint(
database.MeasurementGlobal,
nil,
map[string]interface{}{
"nodes": ds.Nodes,
"clients.total": ds.Clients,
},
ds.Time,
)
}
db.Close()
}