79 lines
2.2 KiB
Go
79 lines
2.2 KiB
Go
|
package instana
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// EventData is the construct serialized for the host agent
|
||
|
type EventData struct {
|
||
|
Title string `json:"title"`
|
||
|
Text string `json:"text"`
|
||
|
// Duration in milliseconds
|
||
|
Duration int `json:"duration"`
|
||
|
// Severity with value of -1, 5, 10 : see type severity
|
||
|
Severity int `json:"severity"`
|
||
|
Plugin string `json:"plugin,omitempty"`
|
||
|
ID string `json:"id,omitempty"`
|
||
|
Host string `json:"host"`
|
||
|
}
|
||
|
|
||
|
type severity int
|
||
|
|
||
|
//Severity values for events sent to the instana agent
|
||
|
const (
|
||
|
SeverityChange severity = -1
|
||
|
SeverityWarning severity = 5
|
||
|
SeverityCritical severity = 10
|
||
|
)
|
||
|
|
||
|
// Defaults for the Event API
|
||
|
const (
|
||
|
ServicePlugin = "com.instana.forge.connection.http.logical.LogicalWebApp"
|
||
|
ServiceHost = ""
|
||
|
)
|
||
|
|
||
|
// SendDefaultServiceEvent sends a default event which already contains the service and host
|
||
|
func SendDefaultServiceEvent(title string, text string, sev severity, duration time.Duration) {
|
||
|
if sensor == nil {
|
||
|
// Since no sensor was initialized, there is no default service (as
|
||
|
// configured on the sensor) so we send blank.
|
||
|
SendServiceEvent("", title, text, sev, duration)
|
||
|
} else {
|
||
|
SendServiceEvent(sensor.serviceName, title, text, sev, duration)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SendServiceEvent send an event on a specific service
|
||
|
func SendServiceEvent(service string, title string, text string, sev severity, duration time.Duration) {
|
||
|
sendEvent(&EventData{
|
||
|
Title: title,
|
||
|
Text: text,
|
||
|
Severity: int(sev),
|
||
|
Plugin: ServicePlugin,
|
||
|
ID: service,
|
||
|
Host: ServiceHost,
|
||
|
Duration: int(duration / time.Millisecond),
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// SendHostEvent send an event on the current host
|
||
|
func SendHostEvent(title string, text string, sev severity, duration time.Duration) {
|
||
|
sendEvent(&EventData{
|
||
|
Title: title,
|
||
|
Text: text,
|
||
|
Duration: int(duration / time.Millisecond),
|
||
|
Severity: int(sev),
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func sendEvent(event *EventData) {
|
||
|
if sensor == nil {
|
||
|
// If the sensor hasn't initialized we do so here so that we properly
|
||
|
// discover where the host agent may be as it varies between a
|
||
|
// normal host, docker, kubernetes etc..
|
||
|
InitSensor(&Options{})
|
||
|
}
|
||
|
//we do fire & forget here, because the whole pid dance isn't necessary to send events
|
||
|
go sensor.agent.request(sensor.agent.makeURL(agentEventURL), "POST", event)
|
||
|
}
|