12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package internal
- import (
- "encoding/json"
- "reflect"
- "runtime"
- )
- // Environment describes the application's environment.
- type Environment struct {
- Compiler string `env:"runtime.Compiler"`
- GOARCH string `env:"runtime.GOARCH"`
- GOOS string `env:"runtime.GOOS"`
- Version string `env:"runtime.Version"`
- NumCPU int `env:"runtime.NumCPU"`
- }
- var (
- // SampleEnvironment is useful for testing.
- SampleEnvironment = Environment{
- Compiler: "comp",
- GOARCH: "arch",
- GOOS: "goos",
- Version: "vers",
- NumCPU: 8,
- }
- )
- // NewEnvironment returns a new Environment.
- func NewEnvironment() Environment {
- return Environment{
- Compiler: runtime.Compiler,
- GOARCH: runtime.GOARCH,
- GOOS: runtime.GOOS,
- Version: runtime.Version(),
- NumCPU: runtime.NumCPU(),
- }
- }
- // MarshalJSON prepares Environment JSON in the format expected by the collector
- // during the connect command.
- func (e Environment) MarshalJSON() ([]byte, error) {
- var arr [][]interface{}
- val := reflect.ValueOf(e)
- numFields := val.NumField()
- arr = make([][]interface{}, numFields)
- for i := 0; i < numFields; i++ {
- v := val.Field(i)
- t := val.Type().Field(i).Tag.Get("env")
- arr[i] = []interface{}{
- t,
- v.Interface(),
- }
- }
- return json.Marshal(arr)
- }
|