func()

in pkg/profiling/continuous/trigger/network.go [40:81]


func (n *NetworkTrigger) Init(moduleMgr *module.Manager, conf *base.ContinuousConfig) error {
	n.BaseTrigger = NewMultipleProcessBasedTrigger(conf, func(p api.ProcessInterface) string {
		// same instance
		entity := p.Entity()
		return fmt.Sprintf("%s_%s", entity.ServiceName, entity.InstanceName)
	}, func(ps []api.ProcessInterface) api.ProcessInterface {
		var mainApplication api.ProcessInterface
		for _, p := range ps {
			// for service mesh, find the application
			if processHasLabel(p, "mesh-application") {
				mainApplication = p
			}
			// otherwise, find the process belong a kubernetes service
			if mainApplication == nil && processHasLabel(p, "k8s-service") {
				mainApplication = p
			}
		}
		if mainApplication != nil {
			return mainApplication
		}
		return ps[0]
	}, func(task *profiling.ProfilingTask, processes []api.ProcessInterface, thresholds []base.ThresholdCause) {
		task.TargetType = profiling.TargetTypeNetworkTopology
		task.ExtensionConfig = &profiling.ExtensionConfig{
			NetworkSamplings: transformCausesToNetworkSamplingRules(thresholds),
		}
	}, func(report *v3.ContinuousProfilingReport, processes []api.ProcessInterface, thresholds []base.ThresholdCause) {
		rules := transformCausesToNetworkSamplingRules(thresholds)
		uriRegexes := make([]string, 0)
		if len(rules) > 0 {
			for _, r := range rules {
				uriRegexes = append(uriRegexes, *r.URIRegex)
			}
		}
		report.TargetTask = &v3.ContinuousProfilingReport_Network{
			Network: &v3.ContinuousNetworkProfilingTask{
				SamplingURIRegexes: uriRegexes,
			},
		}
	})
	return n.BaseTrigger.Init(conf)
}