in strategy/sampling/centralized_sampling_rule_manifest.go [89:139]
func (m *CentralizedManifest) createUserRule(svcRule *SamplingRule) *CentralizedRule {
// Create CentralizedRule from SamplingRule
clock := &utils.DefaultClock{}
rand := &utils.DefaultRand{}
p := &Properties{
ServiceName: *svcRule.ServiceName,
HTTPMethod: *svcRule.HTTPMethod,
URLPath: *svcRule.URLPath,
FixedTarget: *svcRule.ReservoirSize,
Rate: *svcRule.FixedRate,
Host: *svcRule.Host,
}
r := &reservoir{
capacity: *svcRule.ReservoirSize,
}
cr := &CentralizedReservoir{
reservoir: r,
interval: defaultInterval,
}
csr := &CentralizedRule{
ruleName: *svcRule.RuleName,
priority: *svcRule.Priority,
reservoir: cr,
Properties: p,
serviceType: *svcRule.ServiceType,
resourceARN: *svcRule.ResourceARN,
attributes: svcRule.Attributes,
clock: clock,
rand: rand,
}
m.mu.Lock()
defer m.mu.Unlock()
// Return early if rule already exists
if r, ok := m.Index[*svcRule.RuleName]; ok {
return r
}
// Update sorted array
m.Rules = append(m.Rules, csr)
// Update index
m.Index[*svcRule.RuleName] = csr
return csr
}