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)
}