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 21:06:37 +01:00
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"syscall"
|
|
|
|
|
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"
|
2017-01-29 20:06:56 +01:00
|
|
|
"github.com/FreifunkBremen/respond-collector/webserver"
|
2015-12-29 14:05:47 +01:00
|
|
|
)
|
2016-02-25 21:06:37 +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
|
|
|
)
|
2016-02-25 21:06:37 +01:00
|
|
|
|
|
|
|
func main() {
|
2016-10-03 19:56:02 +02:00
|
|
|
var importPath string
|
2017-01-30 09:06:21 +01:00
|
|
|
var timestamps bool
|
2016-10-03 19:56:02 +02:00
|
|
|
flag.StringVar(&importPath, "import", "", "import global statistics from the given RRD file, requires influxdb")
|
2017-01-29 18:30:08 +01:00
|
|
|
flag.StringVar(&configFile, "config", "config.toml", "path of configuration file (default:config.yaml)")
|
2017-01-30 09:06:21 +01:00
|
|
|
flag.BoolVar(×tamps, "timestamps", true, "print timestamps in output")
|
2016-02-19 11:30:42 +01:00
|
|
|
flag.Parse()
|
2017-01-30 09:06:21 +01:00
|
|
|
|
|
|
|
if !timestamps {
|
|
|
|
log.SetFlags(0)
|
|
|
|
}
|
|
|
|
|
2016-03-20 19:54:43 +01:00
|
|
|
config = models.ReadConfigFile(configFile)
|
2016-02-25 21:06:37 +01:00
|
|
|
|
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-04 00:50:39 +02:00
|
|
|
defer db.Close()
|
2016-10-03 19:56:02 +02:00
|
|
|
|
|
|
|
if importPath != "" {
|
|
|
|
importRRD(importPath)
|
2016-10-04 00:50:39 +02:00
|
|
|
return
|
2016-10-03 19:56:02 +02:00
|
|
|
}
|
2016-03-12 03:36:02 +01:00
|
|
|
}
|
|
|
|
|
2016-10-03 19:55:37 +02:00
|
|
|
nodes = models.NewNodes(config)
|
2016-11-20 18:45:18 +01:00
|
|
|
nodes.Start()
|
|
|
|
|
2016-03-09 03:26:08 +01:00
|
|
|
if config.Respondd.Enable {
|
2016-12-22 03:06:46 +01:00
|
|
|
collector = respond.NewCollector(db, nodes, config.Respondd.Interface)
|
2017-01-29 18:30:08 +01:00
|
|
|
collector.Start(config.Respondd.CollectInterval.Duration)
|
2016-10-04 00:50:39 +02:00
|
|
|
defer collector.Close()
|
2016-03-07 09:52:52 +01:00
|
|
|
}
|
2016-02-25 21:06:37 +01:00
|
|
|
|
2016-03-07 09:52:52 +01:00
|
|
|
if config.Webserver.Enable {
|
2017-01-29 20:06:56 +01:00
|
|
|
log.Println("starting webserver on", config.Webserver.Bind)
|
|
|
|
srv := webserver.New(config.Webserver.Bind, config.Webserver.Webroot)
|
|
|
|
go srv.Close()
|
2016-03-07 09:52:52 +01:00
|
|
|
}
|
2016-03-12 03:58:36 +01:00
|
|
|
|
|
|
|
// Wait for INT/TERM
|
2016-02-25 21:06:37 +01:00
|
|
|
sigs := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
sig := <-sigs
|
|
|
|
log.Println("received", sig)
|
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{}{
|
2016-11-20 19:02:03 +01:00
|
|
|
"nodes": uint32(ds.Nodes),
|
|
|
|
"clients.total": uint32(ds.Clients),
|
2016-10-03 19:56:02 +02:00
|
|
|
},
|
|
|
|
ds.Time,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|