78 lines
2.2 KiB
Go
78 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)
|
|
}
|