func()

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
}