Пример #1
0
        /// <summary>
        /// Records instrumentation datum
        /// </summary>
        public void Record(Datum datum)
        {
            if (Status != ControlStatus.Active)
            {
                return;
            }
            if (datum == null)
            {
                return;
            }
            if (Overflown)
            {
                return;
            }

            var t = datum.GetType();

            var srcBucketed = m_TypeBucketed.GetOrAdd(t, (tp) => new SrcBucketedData());

            if (srcBucketed.DefaultDatum == null)
            {
                srcBucketed.DefaultDatum = datum;
            }

            var bag = srcBucketed.GetOrAdd(datum.Source, (src) => new DatumBag());

            bag.Add(datum);
            Interlocked.Increment(ref m_RecordCount);
        }
Пример #2
0
        private Message toMsg(Datum datum)
        {
            var msg = new Message
            {
                Type  = MessageType.PerformanceInstrumentation,
                Topic = CoreConsts.INSTRUMENTATIONSVC_TOPIC,
                From  = datum.GetType().FullName,
                Text  = datum.ToString()
            };

            return(msg);
        }
Пример #3
0
        private Message toMsg(Datum datum)
        {
            var msg = new Message
              {
            Type = MessageType.PerformanceInstrumentation,
            Topic = CoreConsts.INSTRUMENTATIONSVC_TOPIC,
            From = datum.GetType().FullName,
            Text = datum.ToString()
              };

              return msg;
        }
Пример #4
0
        private void write()
        {
            foreach (var tvp in m_TypeBucketed)
            {
                if (!App.Available)
                {
                    break;
                }
                foreach (var svp in tvp.Value)
                {
                    if (!App.Available)
                    {
                        break;
                    }

                    var   bag   = svp.Value;
                    Datum datum = null;
                    if (bag.TryPeek(out datum))
                    {
                        Datum aggregated = null;

                        try
                        {
                            var   lst = new List <Datum>();
                            Datum elm;
                            while (bag.TryTake(out elm))
                            {
                                lst.Add(elm);
                                Interlocked.Decrement(ref m_RecordCount);
                            }

                            aggregated = datum.Aggregate(lst);
                        }
                        catch (Exception error)
                        {
                            var et = error.ToMessageWithType();
                            log(MessageType.Error, string.Format("{0}.Aggregate(IEnumerable<Datum>) leaked {1}",
                                                                 datum.GetType().FullName,
                                                                 et), et);
                        }

                        try
                        {
                            if (aggregated != null)
                            {
                                m_Provider.Write(aggregated);
                            }
                        }
                        catch (Exception error)
                        {
                            var et = error.ToMessageWithType();
                            log(MessageType.CatastrophicError, string.Format("{0}.Write(datum) leaked {1}",
                                                                             m_Provider.GetType().FullName,
                                                                             et), et);
                        }

                        if (aggregated != null)
                        {
                            bufferResult(aggregated);
                        }
                    }  //if
                }
            }
        }