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")); }
/// <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)); }
/// <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)); }
/// <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); }