forked from yvasiyarov/newrelic_go_api
/
newrelic_collector_client.go
77 lines (58 loc) · 1.72 KB
/
newrelic_collector_client.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
package newrelic_go_api
/*
#cgo CFLAGS: -fopenmp -I./_include
#cgo LDFLAGS: -lnewrelic-collector-client
#cgo LDFLAGS: -lnewrelic-common
#cgo LDFLAGS: -lnewrelic-transaction
#include <stdlib.h>
#include <newrelic_collector_client.h>
extern void statusCallbackCToGoProxy(int status);
static void statusCallbackCGOProxy() {
newrelic_register_status_callback(statusCallbackCToGoProxy);
}
*/
import "C"
import (
"runtime"
"unsafe"
)
const (
LANGUAGE = "go"
NR_STATUS_CODE_SHUTDOWN = 0
NR_STATUS_CODE_STARTING = 1
NR_STATUS_CODE_STOPPING = 2
NR_STATUS_CODE_STARTED = 3
)
type TShutdownCallback func(int)
func Init(license string, appName string) int {
cLicense := C.CString(license)
defer C.free(unsafe.Pointer(cLicense))
cAppName := C.CString(appName)
defer C.free(unsafe.Pointer(cAppName))
cLanguage := C.CString(LANGUAGE)
defer C.free(unsafe.Pointer(cLanguage))
cLanguageVersion := C.CString(runtime.Version())
defer C.free(unsafe.Pointer(cLanguageVersion))
result := C.newrelic_init(cLicense, cAppName, cLanguage, cLanguageVersion)
return int(result)
}
func RequestShutdown(reason string) int {
cReason := C.CString(reason)
defer C.free(unsafe.Pointer(cReason))
result := C.newrelic_request_shutdown(cReason)
return int(result)
}
var statusCallback = func(status int) {}
//export statusCallbackCToGoProxy
func statusCallbackCToGoProxy(status C.int) {
statusCallback(int(status))
}
func RegisterStatusCallback(callback TShutdownCallback) {
statusCallback = callback
C.statusCallbackCGOProxy()
}
func DefaultWebTransactionHandler(metricTableJson string) {
cMetricTableJson := C.CString(metricTableJson)
defer C.free(unsafe.Pointer(cMetricTableJson))
C.newrelic_message_handler(unsafe.Pointer(cMetricTableJson))
}