public void TestFixedTargetAndRateBehaveCorrectly()
        {
            var strategy = new LocalizedSamplingStrategy();

            strategy.Rules.Add(new Core.Sampling.Local.SamplingRule("name", "test", "get", 10, 0.05));
            int count = 0;

            // fill the fixed target rate
            Action action = () =>
            {
                var input = new SamplingInput("name", "test", "get", "", "");
                if (strategy.ShouldTrace(input).SampleDecision == SampleDecision.Sampled)
                {
                    Interlocked.Increment(ref count);
                }
            };
            var actions = Enumerable.Repeat(action, 10).ToArray();

            Parallel.Invoke(actions);
            Assert.AreEqual(10, count);

            count = 0;
            var samplingInput = new SamplingInput("name", "test", "get", "", "");

            for (int i = 0; i < 200; i++)
            {
                count += strategy.ShouldTrace(samplingInput).SampleDecision == SampleDecision.Sampled ? 1 : 0;
            }

            // Default sample rate is 5%. The chance that count == 0 after 200 tries is 0.003%.
            Assert.IsTrue(count > 0);
            Assert.IsTrue(count < 50);
        }
        public void TestLoadJsonConfiguration1() // Version 2
        {
#if NET45
            ConfigurationManager.AppSettings[ManifestKey] = @"JSONs\DefaultSamplingRules1.json";
            AppSettings.Reset();
            var strategy = new LocalizedSamplingStrategy(AppSettings.SamplingRuleManifest);
#else
            _xRayOtions.SamplingRuleManifest = $"JSONs{Path.DirectorySeparatorChar}DefaultSamplingRules.json";
            var strategy = new LocalizedSamplingStrategy(_xRayOtions.SamplingRuleManifest);
#endif
            Assert.AreEqual(2, strategy.Rules.Count);

            Assert.AreEqual(@"checkout", strategy.Rules[0].Host);
            Assert.AreEqual(@"POST", strategy.Rules[0].HttpMethod);
            Assert.AreEqual(@"/checkout", strategy.Rules[0].UrlPath);
            Assert.AreEqual(10, strategy.Rules[0].FixedTarget);
            Assert.AreEqual(@"0.3", strategy.Rules[0].Rate.ToString("0.0"));
            Assert.AreEqual("This is the first rule.", strategy.Rules[0].Description);

            Assert.AreEqual(@"base.com", strategy.Rules[1].Host);
            Assert.AreEqual(@"GET", strategy.Rules[1].HttpMethod);
            Assert.AreEqual(@"*", strategy.Rules[1].UrlPath);
            Assert.AreEqual(100, strategy.Rules[1].FixedTarget);
            Assert.AreEqual(@"0.5", strategy.Rules[1].Rate.ToString("0.0"));
            Assert.AreEqual("Rule for base.com", strategy.Rules[1].Description);
        }
        public void TestLoadSamplingRulesWithInvalidVersion2()
        {
#if NET45
            ConfigurationManager.AppSettings[ManifestKey] = @"JSONs\SamplingRulesInvalidV2.json";
            AppSettings.Reset();
            var strategy = new LocalizedSamplingStrategy(AppSettings.SamplingRuleManifest);
#else
            _xRayOtions.SamplingRuleManifest = $"JSONs{Path.DirectorySeparatorChar}SamplingRulesWithoutDefault.json";
            var strategy = new LocalizedSamplingStrategy(_xRayOtions.SamplingRuleManifest);
#endif
        }
        public void TestLoadSamplingRulesWithoutDefaultRule()
        {
#if NET45
            ConfigurationManager.AppSettings[ManifestKey] = @"JSONs\SamplingRulesWithoutDefault.json";
            AppSettings.Reset();
            var strategy = new LocalizedSamplingStrategy(AppSettings.SamplingRuleManifest);
#else
            _xRayOtions.SamplingRuleManifest = @"JSONs\SamplingRulesWithoutDefault.json";
            var strategy = new LocalizedSamplingStrategy(_xRayOtions.SamplingRuleManifest);
#endif
        }
        public void TestDefaultSamplingRuleWhenNoConfigurationSpecified()
        {
            var strategy = new LocalizedSamplingStrategy();

            Assert.AreEqual(0, strategy.Rules.Count);
            Core.Sampling.Local.SamplingRule rule = strategy.DefaultRule;
            Assert.AreEqual("*", rule.Host);
            Assert.AreEqual("*", rule.UrlPath);
            Assert.AreEqual("*", rule.HttpMethod);
            Assert.AreEqual(1, rule.FixedTarget);
            Assert.AreEqual("0.05", rule.Rate.ToString("0.00"));
        }
示例#6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AWSXRayRecorder" /> class
        /// with given instance of <see cref="ISegmentEmitter" />.
        /// </summary>
        /// <param name="emitter">Segment emitter</param>
        internal AWSXRayRecorder(ISegmentEmitter emitter) : base(emitter)
        {
            PopulateContexts();

            if (IsLambda())
            {
                SamplingStrategy = new LocalizedSamplingStrategy();
            }
            else
            {
                SamplingStrategy = new DefaultSamplingStrategy();
            }
        }
        public void TestDefaultRuleWithRequest()
        {
            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(@"http://www.amazon.com/api/product"),
                Method     = HttpMethod.Post
            };

            request.Headers.Add("Host", "www.amazon.com");
            var strategy = new LocalizedSamplingStrategy();

            Assert.AreEqual(SampleDecision.Sampled, strategy.Sample(request));
        }
示例#8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AWSXRayRecorder" /> class
        /// with given instance of <see cref="ISegmentEmitter" /> and instance of <see cref="XRayOptions"/>.
        /// </summary>
        /// <param name="emitter">Instance of <see cref="ISegmentEmitter"/>.</param>
        /// <param name="options">Instance of <see cref="XRayOptions"/>.</param>
        internal AWSXRayRecorder(ISegmentEmitter emitter, XRayOptions options) : base(emitter)
        {
            XRayOptions = options;
            PopulateContexts();

            if (IsLambda())
            {
                SamplingStrategy = new LocalizedSamplingStrategy(options.SamplingRuleManifest);
            }
            else
            {
                SamplingStrategy = new DefaultSamplingStrategy(options.SamplingRuleManifest);
            }
        }
        public void TestDefaultRuleWithRequest()
        {
            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(@"http://www.amazon.com/api/product"),
                Method     = HttpMethod.Post
            };

            request.Headers.Add("Host", "www.amazon.com");
            var              strategy         = new LocalizedSamplingStrategy();
            string           host             = request.Headers.Host;
            string           url              = request.RequestUri.AbsolutePath;
            string           method           = request.Method.Method;
            SamplingInput    samplingInput    = new SamplingInput(host, url, method, "", "");
            SamplingResponse samplingResponse = strategy.ShouldTrace(samplingInput);

            Assert.AreEqual(SampleDecision.Sampled, samplingResponse.SampleDecision);
            Assert.IsTrue(string.IsNullOrEmpty(samplingResponse.RuleName));
        }
示例#10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AWSXRayRecorder" /> class
 /// with given instance of <see cref="ISegmentEmitter" />.
 /// </summary>
 /// <param name="emitter">Segment emitter</param>
 internal AWSXRayRecorder(ISegmentEmitter emitter) : base(emitter)
 {
     PopulateContexts();
     SamplingStrategy = new LocalizedSamplingStrategy(XRayOptions.SamplingRuleManifest);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="AWSXRayRecorder" /> class
 /// with given instance of <see cref="ISegmentEmitter" /> and instance of <see cref="XRayOptions"/>.
 /// </summary>
 /// <param name="emitter">Instance of <see cref="ISegmentEmitter"/>.</param>
 /// <param name="options">Instance of <see cref="XRayOptions"/>.</param>
 public AWSXRayRecorder(ISegmentEmitter emitter, XRayOptions options) : base(emitter)
 {
     XRayOptions = options;
     PopulateContexts();
     SamplingStrategy = new LocalizedSamplingStrategy(options.SamplingRuleManifest);
 }