styx/main.go

100 lines
1.9 KiB
Go

package main
import (
"os"
"sync"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
"gitlab.dcso.lolcat/LABS/styx/broker"
"gitlab.dcso.lolcat/LABS/styx/graph"
"gitlab.dcso.lolcat/LABS/styx/matcher"
"gitlab.dcso.lolcat/LABS/styx/plugins"
)
func init() {
// Setting up logging.
logrus.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
logrus.SetReportCaller(true)
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
}
func main() {
err := viper.ReadInConfig()
if err != nil {
panic(err)
}
os.Setenv("SHODAN_KEY", viper.GetString("shodan.key"))
logrus.Info("Starting to get data from the Internet...")
logrus.Info("Initializing Kafka...")
_, err = broker.SetUpKafkaConnecter()
if err != nil {
logrus.WithField("err", err).Error("error initialising kafka")
}
logrus.Info("done")
logrus.Info("Initializing Dgraph...")
dgraphClient, err := graph.ConnectToDgraph()
if err != nil {
logrus.WithField("err", err).Error("error initialising the graph database")
}
logrus.Info("done")
// stop channel
stopChan := make(chan os.Signal)
var wg sync.WaitGroup
// go broker.ReadEventFromKafka()
// certstream
c := plugins.CertStreamPlugin{}
if ok := c.Initialize(); !ok {
logrus.Info("certstream plugin not activated")
} else {
c.Run(&wg, dgraphClient)
}
// pastebin
p := plugins.PastebinPlugin{}
if ok := p.Initialize(); !ok {
logrus.Info("pastebin plugin not activated")
} else {
p.Run(&wg, dgraphClient)
}
// shodan
s := plugins.ShodanPlugin{}
if ok := s.Initialize(); !ok {
logrus.Info("shodan plugin not activated")
} else {
s.Run(&wg, dgraphClient)
}
// main matcher
m := matcher.Matcher{}
if ok := m.Initialize(); !ok {
logrus.Info("matcher is not activated")
} else {
m.Run(&wg, dgraphClient)
}
go func() {
<-stopChan
logrus.Info("Shutting down...")
c.Stop(&wg)
p.Stop(&wg)
s.Stop(&wg)
m.Stop(&wg)
}()
wg.Wait()
logrus.Info("done")
}