예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <remarks>
        /// A Timer is a measure of the number of milliseconds elapsed between a start and end time, for example the time to complete rendering of a web page for a user.
        /// </remarks>
        /// <param name="statsifyClient"></param>
        /// <param name="metric"></param>
        /// <param name="action"></param>
        /// <param name="sample"></param>
        public static void Time(this IStatsifyClient statsifyClient, string metric, Action action, double sample = 1)
        {
            var stopwatch = Stopwatch.StartNew();

            action();
            var value = stopwatch.ElapsedMilliseconds;

            statsifyClient.Time(metric, value, sample);
        }
예제 #2
0
        public bool Start(HostControl hostControl)
        {
            log.Info("starting up");

            var statsify = configuration.Statsify;

            var @namespace = statsify.Namespace;

            if (!string.IsNullOrWhiteSpace(@namespace))
            {
                @namespace += ".";
            }

            @namespace += Environment.MachineName.ToLowerInvariant();

            var uri = statsify.Uri;

            if (uri != null && !string.IsNullOrWhiteSpace(uri.OriginalString))
            {
                log.Trace("configuring StatsifyClient with uri: {0}, namespace: '{1}', collection interval: '{2}' ",
                          statsify.Uri, @namespace, configuration.Metrics.CollectionInterval);

                var statsifyChannelFactory = new StatsifyChannelFactory();
                var statsifyChannel        = statsifyChannelFactory.CreateChannel(uri);

                statsifyClient = new StatsifyClient(@namespace, statsifyChannel);
            } // if
            else
            {
                log.Trace("configuring StatsifyClient with host: {0}, port: {1}, namespace: '{2}', collection interval: '{3}' ",
                          configuration.Statsify.Host, configuration.Statsify.Port, @namespace, configuration.Metrics.CollectionInterval);

                statsifyClient = new UdpStatsifyClient(statsify.Host, statsify.Port, @namespace);
            } // else

            metricCollector = new MetricCollector(configuration.Metrics);

            metricPublisher = new MetricPublisher(metricCollector, statsifyClient, configuration.Metrics.CollectionInterval);
            metricPublisher.Start();

            return(true);
        }
예제 #3
0
 /// <summary>
 /// Decrement a counter <paramref name="metric"/> by <c>1</c>.
 /// </summary>
 /// <param name="statsifyClient"></param>
 /// <param name="metric"></param>
 /// <param name="sample"></param>
 public static void Decrement(this IStatsifyClient statsifyClient, string metric, double sample = 1)
 {
     statsifyClient.Counter(metric, -1, sample);
 }
예제 #4
0
 public MetricPublisher(MetricCollector metricCollector, IStatsifyClient statsifyClient, TimeSpan collectionInterval)
 {
     this.metricCollector    = metricCollector;
     this.statsifyClient     = statsifyClient;
     this.collectionInterval = collectionInterval;
 }