Newer
Older
package metrics
import "sync"
var recordPool = &sync.Pool{
New: func() interface{} {
return &Record{}
},
}
// GetRecord returns a `*Record` with all properties set to their zero values.
func GetRecord() *Record {
return recordPool.Get().(*Record)
}
// ReturnRecord returns a record to the `Record` pool. Once a record has been returned, its properties must not be
// altered.
func ReturnRecord(record *Record) {
go func() {
record.CountryCode = ""
record.Hostname = ""
record.ObjectType = ""
record.StatusCode = 0
recordPool.Put(record)
}()
}
// Record represents request metadata to be stored in Elasticsearch. When using `Record`s, it is recommended to use the
// pool methods `GetRecord()` and `ReturnRecord(*Record)` to reduce garbage colllector load and improve performance.
type Record struct {
CountryCode string `json:"country_code,omitempty"`
Hostname string `json:"hostname,omitempty"`
ObjectType string `json:"object_type,omitempty"`
StatusCode int `json:"status_code"`
}