private void ValidateVersion2(SamplingConfiguration samplingConfiguration, SamplingRule rule) { if (rule.Host == null || rule.HttpMethod == null || rule.UrlPath == null || rule.FixedTarget == -1 || rule.Rate == -1d || rule.ServiceName != null) { throw new InvalidSamplingConfigurationException( string.Format( CultureInfo.InvariantCulture, @"Missing required fields for sampling rules ({0}). ""host"", ""http_method"", ""url_path"", ""fixed_target"", ""rate"" are required.", rule)); } }
private void Init(Stream stream) { using (var reader = new StreamReader(stream)) { SamplingConfiguration samplingConfiguration = JsonMapper.ToObject <SamplingConfiguration>(reader); if (samplingConfiguration == null) { throw new InvalidSamplingConfigurationException("The provided sampling configuration had invalid JSON format and cannot be parsed correctly."); } if (samplingConfiguration.Default == null) { throw new InvalidSamplingConfigurationException("No default sampling rule is provided. A default sampling rule is required."); } if (!SupportedSamplingConfigurationVersion.Contains(samplingConfiguration.Version)) { throw new InvalidSamplingConfigurationException( string.Format( CultureInfo.InvariantCulture, "The version of provided sampling configuration is not supported. Provided version = {0}, supported versions = {1}", samplingConfiguration.Version, String.Join(", ", SupportedSamplingConfigurationVersion))); } DefaultRule = samplingConfiguration.Default; var rules = new List <SamplingRule>(); if (samplingConfiguration.Rules != null) { foreach (var rule in samplingConfiguration.Rules) // contains supported versions. { if (IsValidVersion1(samplingConfiguration, rule)) { rule.Host = rule.ServiceName; } else { ValidateVersion2(samplingConfiguration, rule); // rule.Host already parsed in rule. } rules.Add(rule); } } Rules = rules; } }
private bool IsValidVersion1(SamplingConfiguration samplingConfiguration, SamplingRule rule) { if (samplingConfiguration.Version == 1) { if (rule.ServiceName == null || rule.HttpMethod == null || rule.UrlPath == null || rule.FixedTarget == -1 || rule.Rate == -1d || rule.Host != null) { throw new InvalidSamplingConfigurationException( string.Format( CultureInfo.InvariantCulture, @"Missing required fields for sampling rules ({0}). ""service_name"", ""http_method"", ""url_path"", ""fixed_target"", ""rate"" are required.", rule)); } return(true); } return(false); }