plugins/core/tool.go (97 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 core import ( "net" "os" "runtime" "strconv" "strings" "time" "github.com/google/uuid" commonv3 "skywalking.apache.org/repo/goapi/collect/common/v3" ) // Millisecond converts time to unix millisecond func Millisecond(t time.Time) int64 { return t.UnixNano() / int64(time.Millisecond) } // UUID generate UUID func UUID() (string, error) { id, err := uuid.NewUUID() if err != nil { return "", err } return strings.ReplaceAll(id.String(), "-", ""), nil } func ProcessNo() string { if os.Getpid() > 0 { return strconv.Itoa(os.Getpid()) } return "" } func HostName() string { if hs, err := os.Hostname(); err == nil { return hs } return "unknown" } func OSName() string { return runtime.GOOS } func AllIPV4() (ipv4s []string) { adders, err := net.InterfaceAddrs() if err != nil { return } for _, addr := range adders { if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { if ipNet.IP.To4() != nil { ipv4 := ipNet.IP.String() if ipv4 == "127.0.0.1" || ipv4 == "localhost" { continue } ipv4s = append(ipv4s, ipv4) } } } return } func IPV4() string { ipv4s := AllIPV4() if len(ipv4s) > 0 { return ipv4s[0] } return "no-hostname" } func buildOSInfo() (props []*commonv3.KeyStringValuePair) { processNo := ProcessNo() if processNo != "" { kv := &commonv3.KeyStringValuePair{ Key: "Process No.", Value: processNo, } props = append(props, kv) } hostname := &commonv3.KeyStringValuePair{ Key: "hostname", Value: HostName(), } props = append(props, hostname) language := &commonv3.KeyStringValuePair{ Key: "language", Value: "go", } props = append(props, language) osName := &commonv3.KeyStringValuePair{ Key: "OS Name", Value: OSName(), } props = append(props, osName) ipv4s := AllIPV4() if len(ipv4s) > 0 { for _, ipv4 := range ipv4s { kv := &commonv3.KeyStringValuePair{ Key: "ipv4", Value: ipv4, } props = append(props, kv) } } return props }