private DistinctObservation NewObservation(long timestamp, DistinctObservation[] existingObservations, Exception observation)
        {
            DistinctObservation existingObservation = null;

            if (existingObservations != _distinctObservations)
            {
                existingObservation = Find(_distinctObservations, observation);
            }

            if (existingObservation == null)
            {
                byte[] encodedError = Encoding.UTF8.GetBytes(observation.ToString());

                int length = EncodedErrorOffset + encodedError.Length;
                int offset = _nextOffset;

                if ((offset + length) > _buffer.Capacity)
                {
                    return(InsufficientSpace);
                }

                _buffer.PutBytes(offset + EncodedErrorOffset, encodedError);
                _buffer.PutLong(offset + FirstObservationTimestampOffset, timestamp);
                _nextOffset = BitUtil.Align(offset + length, RecordAlignment);

                existingObservation   = new DistinctObservation(observation, offset);
                _distinctObservations = Prepend(_distinctObservations, existingObservation);

                _buffer.PutIntOrdered(offset + LengthOffset, length);
            }

            return(existingObservation);
        }
        private static DistinctObservation[] Prepend(DistinctObservation[] observations, DistinctObservation observation)
        {
            int length          = observations.Length;
            var newObservations = new DistinctObservation[length + 1];

            newObservations[0] = observation;
            Array.Copy(observations, 0, newObservations, 1, length);

            return(newObservations);
        }
        private static DistinctObservation Find(DistinctObservation[] existingObservations, Exception observation)
        {
            DistinctObservation existingObservation = null;

            foreach (var o in existingObservations)
            {
                if (ExceptionEquals(o.Throwable, observation))
                {
                    existingObservation = o;
                    break;
                }
            }

            return(existingObservation);
        }
Example #4
0
        private static DistinctObservation[] Prepend(DistinctObservation[] observations, DistinctObservation observation)
        {
            int length = observations.Length;
            var newObservations = new DistinctObservation[length + 1];

            newObservations[0] = observation;
            Array.Copy(observations, 0, newObservations, 1, length);

            return newObservations;
        }
Example #5
0
        private DistinctObservation NewObservation(long timestamp, DistinctObservation[] existingObservations, Exception observation)
        {
            DistinctObservation existingObservation = null;

            if (existingObservations != _distinctObservations)
            {
                existingObservation = Find(_distinctObservations, observation);
            }

            if (existingObservation == null)
            {
                byte[] encodedError = Encoding.UTF8.GetBytes(observation.ToString());

                int length = EncodedErrorOffset + encodedError.Length;
                int offset = _nextOffset;

                if ((offset + length) > _buffer.Capacity)
                {
                    return InsufficientSpace;
                }

                _buffer.PutBytes(offset + EncodedErrorOffset, encodedError);
                _buffer.PutLong(offset + FirstObservationTimestampOffset, timestamp);
                _nextOffset = BitUtil.Align(offset + length, RecordAlignment);

                existingObservation = new DistinctObservation(observation, offset);
                _distinctObservations = Prepend(_distinctObservations, existingObservation);

                _buffer.PutIntOrdered(offset + LengthOffset, length);
            }

            return existingObservation;
        }
Example #6
0
        private static DistinctObservation Find(DistinctObservation[] existingObservations, Exception observation)
        {
            DistinctObservation existingObservation = null;

            foreach (var o in existingObservations)
            {
                if (ExceptionEquals(o.Throwable, observation))
                {
                    existingObservation = o;
                    break;
                }
            }

            return existingObservation;
        }