pkg/process/finders/base/template.go (87 lines of code) (raw):

// Licensed to Apache Software Foundation (ASF) under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Apache Software Foundation (ASF) licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package base import ( "bytes" "fmt" "text/template" "github.com/shirou/gopsutil/process" "github.com/apache/skywalking-rover/pkg/core" "github.com/apache/skywalking-rover/pkg/module" "github.com/apache/skywalking-rover/pkg/tools" ) type TemplateBuilder struct { Name string Template string template *template.Template } func NewTemplateBuilder(name, content string) (*TemplateBuilder, error) { tmpl, err := template.New(name).Funcs(customFunctions).Parse(content) if err != nil { return nil, fmt.Errorf("failed to parse template for %s, content: %s. reason: %v", name, content, err) } return &TemplateBuilder{Name: name, Template: content, template: tmpl}, nil } func (t *TemplateBuilder) Execute(data interface{}) (string, error) { var r bytes.Buffer if err := t.template.Execute(&r, data); err != nil { return "", err } return r.String(), nil } // NewTemplateRover is generated the Rover context for render func NewTemplateRover(manager *module.Manager) *TemplateRover { operator := manager.FindModule(core.ModuleName).(core.Operator) return &TemplateRover{operator.InstanceID()} } // NewTemplateProcess is generated the process context for render func NewTemplateProcess(manager *module.Manager, p *process.Process) *TemplateProcess { return &TemplateProcess{p} } type TemplateRover struct { instanceID string } // InstanceID of rover func (t *TemplateRover) InstanceID() string { return t.instanceID } // HostIPV4 ip v4 address of local machine from appoint net interface name func (t *TemplateRover) HostIPV4(name string) (string, error) { v4 := tools.HostIPAddressV4(name) if v4 == "" { return "", fmt.Errorf("could not found the ip v4 address from %s", name) } return v4, nil } // HostIPV6 ip v6 address of local machine from appoint net interface name func (t *TemplateRover) HostIPV6(name string) (string, error) { v6 := tools.HostIPAddressV6(name) if v6 == "" { return "", fmt.Errorf("could not found the ip v6 address from %s", name) } return v6, nil } // HostName name of local machine func (t *TemplateRover) HostName() string { return tools.Hostname() } type TemplateProcess struct { *process.Process } // ExeFilePath Execute file path func (p *TemplateProcess) ExeFilePath() (string, error) { return p.Exe() } // ExeName Execute file name func (p *TemplateProcess) ExeName() (string, error) { return p.Name() } // CommandLine command line of process func (p *TemplateProcess) CommandLine() (string, error) { return p.Cmdline() } // Pid of process func (p *TemplateProcess) Pid() int32 { return p.Process.Pid } // WorkDir means which directory to run the execute file func (p *TemplateProcess) WorkDir() (string, error) { return p.Cwd() } // ExeNameInCommandLine means the executed file name in the command line string func (p *TemplateProcess) ExeNameInCommandLine() (string, error) { cmdline, err := p.CmdlineSlice() if err != nil { return "", err } if len(cmdline) == 0 { return "", fmt.Errorf("cannot found the command line") } return cmdline[0], nil }