func()

in tools/go-agent/instrument/logger/instrument.go [227:293]


func (i *Instrument) generateInitLoggerFileContent(pkgName string) string {
	initTmpl, err := frameworks.FrameworkFS.ReadFile("templates/init.tmpl")
	if err != nil {
		panic(fmt.Sprintf("cannot found init template in logger framerwork: %v", err))
	}

	initFunctions := i.framework.InitFunctions()
	initFuncNames := make([]string, 0)
	for _, initFunc := range initFunctions {
		initFuncNames = append(initFuncNames, initFunc.Name.Name)
	}
	importsMap := make(map[string]string)
	for _, imp := range i.framework.InitImports() {
		name := filepath.Base(strings.TrimSuffix(imp.Path.Value, "\""))
		if imp.Name != nil && imp.Name.Name != "" {
			name = imp.Name.Name
		}
		importsMap[name] = imp.Path.Value
	}
	initDecls := tools.GoStringToDecls(tools.ExecuteTemplate(string(initTmpl), struct {
		Imports                     map[string]string
		NeedsVariables              bool
		NeedsChangeLoggerFunc       bool
		GetGlobalOperatorLinkMethod string
		SetGlobalLoggerLinkMethod   string
		OperatorTypeName            string
		LogTypeInConfig             *config.Log
		ConfigTypeAutomaticValue    string
		CurrentLogTypeName          string
		GetOperatorMethodName       string
		ChangeLoggerMethodName      string
		LogTracingEnableVarName     string
		LogTracingContextKeyVarName string
		LogReporterEnableVarName    string
		LogReporterLabelsVarName    string
		LogReportFuncName           string
		InitFunctionNames           []string
	}{
		Imports:                     importsMap,
		NeedsVariables:              i.packageConf.NeedsVariables,
		NeedsChangeLoggerFunc:       i.packageConf.NeedsChangeLoggerFunc,
		GetGlobalOperatorLinkMethod: consts.GlobalTracerGetMethodName,
		SetGlobalLoggerLinkMethod:   consts.GlobalLoggerSetMethodName,
		OperatorTypeName:            "Operator",
		LogTypeInConfig:             &config.GetConfig().Log,
		ConfigTypeAutomaticValue:    config.ConfigTypeAutomatic,
		CurrentLogTypeName:          i.framework.Name(),
		GetOperatorMethodName:       "GetOperator",
		ChangeLoggerMethodName:      "ChangeLogger",
		LogTracingEnableVarName:     "LogTracingContextEnable",
		LogTracingContextKeyVarName: "LogTracingContextKey",
		LogReporterEnableVarName:    "LogReporterEnable",
		LogReporterLabelsVarName:    "LogReporterLabelKeys",
		LogReportFuncName:           "ReportLog",
		InitFunctionNames:           initFuncNames,
	}))
	for _, f := range initFunctions {
		initDecls = append(initDecls, f)
	}

	f := &dst.File{Name: dst.NewIdent(pkgName), Decls: initDecls}
	if c, err1 := tools.GenerateDSTFileContent(f, nil); err1 != nil {
		panic(fmt.Errorf("generate logger init file error: %v", err))
	} else {
		return c
	}
}