/// /// <summary>Send many events to Riemann at once.</summary> /// <param name="events"> /// Enumerable of the events to process. /// Enumerable will be enumerated after being passed in. /// </param> /// public Response SendEvents(IEnumerable <Event> events) { var response = new Response(); var tags = new List <string>(); lock (_tagLock) { if (_tag != null) { tags = _tag.Tags.ToList(); } } var protoEvents = events.Select( e => { var evnt = new Proto.Event { host = e.Host ?? _name, service = e.Service, state = e.State, description = e.Description, metric_f = e.Metric, ttl = e.TTL }; evnt.attributes.AddRange( e.Attributes.Select(a => new Attribute { key = a.Key, value = a.Value })); evnt.tags.AddRange(e.Tags); return(evnt); }).ToList(); var message = new Msg(); foreach (var protoEvent in protoEvents) { protoEvent.tags.AddRange(tags); message.events.Add(protoEvent); } if (_useTcp) { response = SendReceiveTcpMsg(message); } else { SendUdpMessage(message); } return(response); }
/// /// <summary>Send many events to Riemann at once.</summary> /// <param name="events"> /// Enumerable of the events to process. /// Enumerable will be enumerated after being passed in. /// </param> /// public void SendEvents(IEnumerable<Event> events) { var tags = new List<string>(); lock (_tagLock) { if (_tag != null) { tags = _tag.Tags.ToList(); } } var protoEvents = events.Select( e => { var evnt = new Proto.Event { host = _name, service = e.Service, state = e.State, description = e.Description, metric_f = e.Metric, ttl = e.TTL }; evnt.tags.AddRange(e.Tags); return evnt; }).ToList(); var message = new Proto.Msg(); foreach (var protoEvent in protoEvents) { if(protoEvent.tags.Count == 0) protoEvent.tags.AddRange(tags); message.events.Add(protoEvent); } var array = MessageBytes(message); try { Datagram.Send(array); } catch (SocketException se) { if (se.SocketErrorCode == SocketErrorMessageTooLong) { var x = BitConverter.GetBytes(array.Length); Array.Reverse(x); Stream.Write(x, 0, 4); Stream.Write(array, 0, array.Length); Stream.Flush(); var response = Serializer.Deserialize<Proto.Msg>(Stream); if (!response.ok) { throw new Exception(response.error); } } else { throw; } } }