func GetAppId(envelope *events.Envelope) string { if envelope.GetEventType() == events.Envelope_LogMessage { return envelope.GetLogMessage().GetAppId() } if envelope.GetEventType() == events.Envelope_ContainerMetric { return envelope.GetContainerMetric().GetApplicationId() } var event hasAppId switch envelope.GetEventType() { case events.Envelope_HttpStart: event = envelope.GetHttpStart() case events.Envelope_HttpStop: event = envelope.GetHttpStop() case events.Envelope_HttpStartStop: event = envelope.GetHttpStartStop() default: return SystemAppId } uuid := event.GetApplicationId() if uuid != nil { return formatUUID(uuid) } return SystemAppId }
func (m *MessageAggregator) handleHTTPStop(envelope *events.Envelope) *events.Envelope { if m.emitMetrics { metrics.BatchIncrementCounter("MessageAggregator.httpStopReceived") } atomic.AddUint64(&m.httpStopReceivedCount, 1) m.logger.Debugf("handling HTTP stop message %v", spew.Sprintf("%v", envelope)) stopEvent := envelope.GetHttpStop() requestID := stopEvent.RequestId.String() event := eventID{requestID: requestID, peerType: stopEvent.GetPeerType()} startEventEntry, ok := m.startEventsByEventID[event] if !ok { m.logger.Warnf("no matching HTTP start message found for %v", event) if m.emitMetrics { metrics.BatchIncrementCounter("MessageAggregator.httpUnmatchedStopReceived") } atomic.AddUint64(&m.httpUnmatchedStopReceivedCount, 1) return nil } if m.emitMetrics { metrics.BatchIncrementCounter("MessageAggregator.httpStartStopEmitted") } atomic.AddUint64(&m.httpStartStopEmittedCount, 1) delete(m.startEventsByEventID, event) startEvent := startEventEntry.startEvent return &events.Envelope{ Origin: envelope.Origin, Timestamp: stopEvent.Timestamp, EventType: events.Envelope_HttpStartStop.Enum(), HttpStartStop: &events.HttpStartStop{ StartTimestamp: startEvent.Timestamp, StopTimestamp: stopEvent.Timestamp, RequestId: startEvent.RequestId, PeerType: startEvent.PeerType, Method: startEvent.Method, Uri: startEvent.Uri, RemoteAddress: startEvent.RemoteAddress, UserAgent: startEvent.UserAgent, StatusCode: stopEvent.StatusCode, ContentLength: stopEvent.ContentLength, ParentRequestId: startEvent.ParentRequestId, ApplicationId: stopEvent.ApplicationId, InstanceIndex: startEvent.InstanceIndex, InstanceId: startEvent.InstanceId, }, } }
func listenForEvents(origin []string) { for { buffer := make([]byte, 1024) n, _, err := udpListener.ReadFrom(buffer) if err != nil { return } if n == 0 { panic("Received empty packet") } envelope := new(events.Envelope) err = proto.Unmarshal(buffer[0:n], envelope) if err != nil { panic(err) } var eventId = envelope.GetEventType().String() tracker := eventTracker{eventType: eventId} switch envelope.GetEventType() { case events.Envelope_HttpStart: tracker.name = envelope.GetHttpStart().GetPeerType().String() case events.Envelope_HttpStop: tracker.name = envelope.GetHttpStop().GetPeerType().String() case events.Envelope_ValueMetric: tracker.name = envelope.GetValueMetric().GetName() case events.Envelope_CounterEvent: tracker.name = envelope.GetCounterEvent().GetName() default: panic("Unexpected message type") } if envelope.GetOrigin() != strings.Join(origin, "/") { panic("origin not as expected") } func() { lock.Lock() defer lock.Unlock() receivedEvents = append(receivedEvents, tracker) }() } }
func HttpStop(msg *events.Envelope) Event { httpStop := msg.GetHttpStop() fields := logrus.Fields{ "cf_app_id": utils.FormatUUID(httpStop.GetApplicationId()), "content_length": httpStop.GetContentLength(), "peer_type": httpStop.GetPeerType(), "request_id": utils.FormatUUID(httpStop.GetRequestId()), "status_code": httpStop.GetStatusCode(), "timestamp": httpStop.GetTimestamp(), "uri": httpStop.GetUri(), } return Event{ Fields: fields, Msg: "", } }
func valid(env *events.Envelope) bool { switch env.GetEventType() { case events.Envelope_HttpStart: return env.GetHttpStart() != nil case events.Envelope_HttpStop: return env.GetHttpStop() != nil case events.Envelope_HttpStartStop: return env.GetHttpStartStop() != nil case events.Envelope_LogMessage: return env.GetLogMessage() != nil case events.Envelope_ValueMetric: return env.GetValueMetric() != nil case events.Envelope_CounterEvent: return env.GetCounterEvent() != nil case events.Envelope_Error: return env.GetError() != nil case events.Envelope_ContainerMetric: return env.GetContainerMetric() != nil } return true }
} envelope := new(events.Envelope) err = proto.Unmarshal(buffer[0:n], envelope) if err != nil { panic(err) } var eventId = envelope.GetEventType().String() tracker := eventTracker{eventType: eventId} switch envelope.GetEventType() { case events.Envelope_HttpStart: tracker.name = envelope.GetHttpStart().GetPeerType().String() case events.Envelope_HttpStop: tracker.name = envelope.GetHttpStop().GetPeerType().String() case events.Envelope_Heartbeat: tracker.name = envelope.GetHeartbeat().GetControlMessageIdentifier().String() case events.Envelope_ValueMetric: tracker.name = envelope.GetValueMetric().GetName() case events.Envelope_CounterEvent: tracker.name = envelope.GetCounterEvent().GetName() default: panic("Unexpected message type") } if envelope.GetOrigin() != strings.Join(origin, "/") { panic("origin not as expected") }