stacktrace/library.go (208 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. 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. // Code generated by "go generate". DO NOT EDIT. package stacktrace // import "go.elastic.co/apm/v2/stacktrace" import ( "strings" radix "github.com/armon/go-radix" ) var libraryPackages = newLibraryPackagesRadixTree( "vendor/golang_org", "archive/tar", "archive/zip", "bufio", "bytes", "compress/bzip2", "compress/flate", "compress/gzip", "compress/lzw", "compress/zlib", "container/heap", "container/list", "container/ring", "context", "crypto", "crypto/aes", "crypto/cipher", "crypto/des", "crypto/dsa", "crypto/ecdsa", "crypto/elliptic", "crypto/hmac", "crypto/internal/randutil", "crypto/internal/subtle", "crypto/md5", "crypto/rand", "crypto/rc4", "crypto/rsa", "crypto/sha1", "crypto/sha256", "crypto/sha512", "crypto/subtle", "crypto/tls", "crypto/x509", "crypto/x509/pkix", "database/sql", "database/sql/driver", "debug/dwarf", "debug/elf", "debug/gosym", "debug/macho", "debug/pe", "debug/plan9obj", "encoding", "encoding/ascii85", "encoding/asn1", "encoding/base32", "encoding/base64", "encoding/binary", "encoding/csv", "encoding/gob", "encoding/hex", "encoding/json", "encoding/pem", "encoding/xml", "errors", "expvar", "flag", "fmt", "go/ast", "go/build", "go/constant", "go/doc", "go/format", "go/importer", "go/internal/gccgoimporter", "go/internal/gcimporter", "go/internal/srcimporter", "go/parser", "go/printer", "go/scanner", "go/token", "go/types", "hash", "hash/adler32", "hash/crc32", "hash/crc64", "hash/fnv", "html", "html/template", "image", "image/color", "image/color/palette", "image/draw", "image/gif", "image/internal/imageutil", "image/jpeg", "image/png", "index/suffixarray", "internal/bytealg", "internal/cpu", "internal/nettrace", "internal/poll", "internal/race", "internal/singleflight", "internal/syscall/unix", "internal/syscall/windows", "internal/syscall/windows/registry", "internal/syscall/windows/sysdll", "internal/testenv", "internal/testlog", "internal/trace", "io", "io/ioutil", "log", "log/syslog", "math", "math/big", "math/bits", "math/cmplx", "math/rand", "mime", "mime/multipart", "mime/quotedprintable", "net", "net/http", "net/http/cgi", "net/http/cookiejar", "net/http/fcgi", "net/http/httptest", "net/http/httptrace", "net/http/httputil", "net/http/internal", "net/http/pprof", "net/internal/socktest", "net/mail", "net/rpc", "net/rpc/jsonrpc", "net/smtp", "net/textproto", "net/url", "os", "os/exec", "os/signal", "os/signal/internal/pty", "os/user", "path", "path/filepath", "plugin", "reflect", "regexp", "regexp/syntax", "runtime", "runtime/cgo", "runtime/debug", "runtime/internal/atomic", "runtime/internal/sys", "runtime/pprof", "runtime/pprof/internal/profile", "runtime/race", "runtime/trace", "sort", "strconv", "strings", "sync", "sync/atomic", "syscall", "testing", "testing/internal/testdeps", "testing/iotest", "testing/quick", "text/scanner", "text/tabwriter", "text/template", "text/template/parse", "time", "unicode", "unicode/utf16", "unicode/utf8", "unsafe", "go.elastic.co/apm", ) func newLibraryPackagesRadixTree(k ...string) *radix.Tree { tree := radix.New() for _, k := range k { tree.Insert(k, true) } return tree } // RegisterLibraryPackage registers the given packages as being // well-known library path prefixes. This must not be called // concurrently with any other functions or methods in this // package; it is expected to be used by init functions. func RegisterLibraryPackage(pkg ...string) { for _, pkg := range pkg { libraryPackages.Insert(pkg, true) } } // RegisterApplicationPackage registers the given packages as being // an application path. This must not be called concurrently with // any other functions or methods in this package; it is expected // to be used by init functions. // // It is not typically necessary to register application paths. If // a package does not match a registered *library* package path // prefix, then the path is considered an application path. This // function exists for the unusual case that an application exists // within a library (e.g. an example program). func RegisterApplicationPackage(pkg ...string) { for _, pkg := range pkg { libraryPackages.Insert(pkg, false) } } // IsLibraryPackage reports whether or not the given package path is // a library package. This includes known library packages // (e.g. stdlib or apm-agent-go), vendored packages, and any packages // with a prefix registered with RegisterLibraryPackage but not // RegisterApplicationPackage. func IsLibraryPackage(pkg string) bool { if strings.HasSuffix(pkg, "_test") { return false } if strings.Contains(pkg, "/vendor/") { return true } prefix, v, ok := libraryPackages.LongestPrefix(pkg) if !ok || v == false { return false } return prefix == pkg || pkg[len(prefix)] == '/' }