Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

Viewing file on branch master

1package main
2
3import (
4 "flag"
5 "fmt"
6 "os"
7 "runtime"
8 "strings"
9
10 "github.com/google/gops/agent"
11 "github.com/matterbridge-org/matterbridge/bridge/config"
12 "github.com/matterbridge-org/matterbridge/gateway"
13 "github.com/matterbridge-org/matterbridge/gateway/bridgemap"
14 "github.com/matterbridge-org/matterbridge/version"
15 prefixed "github.com/matterbridge/logrus-prefixed-formatter"
16 "github.com/sirupsen/logrus"
17)
18
19var (
20 flagConfig = flag.String("conf", "matterbridge.toml", "config file")
21 flagDebug = flag.Bool("debug", false, "enable debug")
22 flagVersion = flag.Bool("version", false, "show version")
23 flagGops = flag.Bool("gops", false, "enable gops agent")
24 flagNoColor = flag.Bool("nocolor", false, "disable colored logs")
25)
26
27func main() {
28 flag.Parse()
29 if *flagVersion {
30 fmt.Printf("version: %s %s\n", version.Release, version.GitHash)
31 return
32 }
33
34 rootLogger := setupLogger()
35 logger := rootLogger.WithFields(logrus.Fields{"prefix": "main"})
36
37 if *flagGops {
38 if err := agent.Listen(agent.Options{}); err != nil {
39 logger.Errorf("Failed to start gops agent: %#v", err)
40 } else {
41 defer agent.Close()
42 }
43 }
44
45 logger.Printf("Running version %s %s", version.Release, version.GitHash)
46 if strings.Contains(version.Release, "-dev") {
47 logger.Println("WARNING: THIS IS A DEVELOPMENT VERSION. Things may break.")
48 }
49
50 cfg := config.NewConfig(rootLogger, *flagConfig)
51 cfg.BridgeValues().General.Debug = *flagDebug
52
53 // if logging to a file, ensure it is closed when the program terminates
54 // nolint:errcheck
55 defer func() {
56 if f, ok := rootLogger.Out.(*os.File); ok {
57 f.Sync()
58 f.Close()
59 }
60 }()
61
62 r, err := gateway.NewRouter(rootLogger, cfg, bridgemap.FullMap)
63 if err != nil {
64 logger.Fatalf("Starting gateway failed: %s", err)
65 }
66 if err = r.Start(); err != nil {
67 logger.Fatalf("Starting gateway failed: %s", err)
68 }
69 logger.Printf("Gateway(s) started successfully. Now relaying messages")
70 select {}
71}
72
73func setupLogger() *logrus.Logger {
74 logger := &logrus.Logger{
75 Out: os.Stdout,
76 Formatter: &prefixed.TextFormatter{
77 PrefixPadding: 13,
78 DisableColors: *flagNoColor,
79 },
80 Level: logrus.InfoLevel,
81 }
82 if *flagDebug || os.Getenv("DEBUG") == "1" {
83 logger.SetReportCaller(true)
84 logger.Formatter = &prefixed.TextFormatter{
85 PrefixPadding: 13,
86 DisableColors: *flagNoColor,
87 FullTimestamp: false,
88
89 CallerFormatter: func(function, file string) string {
90 return fmt.Sprintf(" [%s:%s]", function, file)
91 },
92 CallerPrettyfier: func(f *runtime.Frame) (string, string) {
93 sp := strings.SplitAfter(f.File, "/matterbridge/")
94 filename := f.File
95 if len(sp) > 1 {
96 filename = sp[1]
97 }
98 s := strings.Split(f.Function, ".")
99 funcName := s[len(s)-1]
100 return funcName, fmt.Sprintf("%s:%d", filename, f.Line)
101 },
102 }
103
104 logger.Level = logrus.DebugLevel
105 logger.WithFields(logrus.Fields{"prefix": "main"}).Info("Enabling debug logging.")
106 }
107 return logger
108}
109