Example #1
0
        ///
        /// <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);
        }
Example #2
0
        ///
        /// <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;
                }
            }
        }