-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsingleton.go
92 lines (80 loc) · 2.7 KB
/
singleton.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
82
83
84
85
86
87
88
89
90
91
92
package rookout
import (
"fmt"
"os"
"github.com/Rookout/GoSDK/pkg"
"github.com/Rookout/GoSDK/pkg/information"
"github.com/Rookout/GoSDK/pkg/logger"
"github.com/Rookout/GoSDK/pkg/rookoutErrors"
)
//go:generate go generate ./assembler/
//go:generate go generate ./trampoline/
func memberToString(memberName string, member interface{}) string {
if member != nil {
if member == "" {
return fmt.Sprintf("%s:'' ,", memberName)
}
return fmt.Sprintf("%s:%v ,", memberName, member)
}
return ""
}
func printOptions(opts *RookOptions) {
censoredToken := ""
if len(opts.Token) > 5 {
censoredToken = opts.Token[:5]
}
s := "RookOptions: " +
memberToString("token", censoredToken) +
memberToString("host", opts.Host) +
memberToString("port", opts.Port) +
memberToString("proxy", opts.Proxy) +
memberToString("log_level", opts.LogLevel) +
memberToString("log_to_stderr", opts.LogToStderr) +
memberToString("log_file", opts.LogFile) +
memberToString("git_commit", opts.GitCommit) +
memberToString("git_origin", opts.GitOrigin) +
memberToString("git_sources", opts.GitSources) +
memberToString("live_tail", opts.LiveTail) +
memberToString("labels", opts.Labels)
println(s)
}
func start(opts RookOptions) {
pkg.InitSingleton()
obj := pkg.GetSingleton()
err := obj.Start(&opts)
if opts.Debug {
logger.Logger().Debug("Rookout SDK for Go, Version: " + information.VERSION)
printOptions(&opts)
}
if err != nil {
logger.Logger().WithError(err).Errorln("Failed to start rook")
if rookErr, ok := err.(rookoutErrors.RookoutError); ok {
switch {
case isErrorType(rookErr, rookoutErrors.NewRookInvalidOptions("")),
isErrorType(rookErr, rookoutErrors.NewInvalidTokenError()),
isErrorType(rookErr, rookoutErrors.NewRookMissingToken()),
isErrorType(rookErr, rookoutErrors.NewInvalidLabelError("")),
isErrorType(rookErr, rookoutErrors.NewWebSocketError()):
_, _ = fmt.Fprintf(os.Stderr, "[Rookout] Failed to start rookout: %v\n", err)
case isErrorType(rookErr, rookoutErrors.NewFailedToDecode(nil, nil)),
isErrorType(rookErr, rookoutErrors.NewUnexpectedInstruction(nil, nil)):
_, _ = fmt.Fprintf(os.Stderr, "[Rookout] Failed to start rookout: error while starting instrumentation\n")
default:
_, _ = fmt.Fprintf(os.Stderr, "[Rookout] Failed to connect to the controller - will continue attempting in the background: %v\n", err)
}
} else {
_, _ = fmt.Fprintf(os.Stderr, "[Rookout] Failed to start rookout: %v\n", err)
}
}
}
func isErrorType(err rookoutErrors.RookoutError, errType rookoutErrors.RookoutError) bool {
return err.GetType() == errType.GetType()
}
func stop() {
obj := pkg.GetSingleton()
obj.Stop()
}
func flush() {
obj := pkg.GetSingleton()
obj.Flush()
}