Exemple #1
0
 static void InitializeSignalFx(string contextName)
 {
     Metric.Config.WithReporting(Report => Report.WithSignalFxFromAppConfig());
     context = (TaggedMetricsContext)Metric.Context(contextName, (ctxName) => { return(new TaggedMetricsContext(ctxName)); });
     // Create a counter that has the dimension "api:login"
     myCounter = context.Counter("myCounter", Unit.Calls, tags: new MetricTags("api", "login"));
     // Create a timer
     myTimer = context.Timer("myTimer", Unit.Calls);
 }
        public void AddMetrics_EnsureAllDimensionsGetSent()
        {
            var context = new TaggedMetricsContext();
            var sender  = new FakeSignalFxReporter();
            var report  = new SignalFxReport(
                sender,
                "",
                "FakeApiKey",
                new Dictionary <string, string> {
                { "System", "UnitTests" },
            }, 10000, new HashSet <MetricDetails> {
                MetricDetails.count
            });

            var accountNoRandom = new Random();
            //
            var accountId      = new byte[16];
            var generatedHases = new HashSet <string>();

            while (generatedHases.Count < 50)
            {
                accountNoRandom.NextBytes(accountId);
                var accountIdString = accountId.Aggregate(new StringBuilder(), (builder, b) => builder.AppendFormat("{0:x2}", b)).ToString();

                if (generatedHases.Contains(accountIdString))
                {
                    continue;
                }

                generatedHases.Add(accountIdString);
                var tags    = new MetricTags("account=" + accountIdString);
                var counter = context.Counter("TestCounter", Unit.Calls, tags);
                counter.Increment(accountNoRandom.Next());
            }

            var source = new CancellationTokenSource();

            report.RunReport(context.DataProvider.CurrentMetricsData, () => new HealthStatus(), source.Token);

            var dimensions = sender.SelectMany(message =>
                                               message.datapoints.SelectMany(datapoint => datapoint.dimensions));

            Assert.True(dimensions.Count() > 50);
        }