111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
package gorelic
 | 
						|
 | 
						|
import (
 | 
						|
	metrics "github.com/yvasiyarov/go-metrics"
 | 
						|
	"github.com/yvasiyarov/newrelic_platform_go"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func newMemoryMetricaDataSource(pollInterval int) goMetricaDataSource {
 | 
						|
	r := metrics.NewRegistry()
 | 
						|
 | 
						|
	metrics.RegisterRuntimeMemStats(r)
 | 
						|
	metrics.CaptureRuntimeMemStatsOnce(r)
 | 
						|
	go metrics.CaptureRuntimeMemStats(r, time.Duration(pollInterval)*time.Second)
 | 
						|
	return goMetricaDataSource{r}
 | 
						|
}
 | 
						|
 | 
						|
func addMemoryMericsToComponent(component newrelic_platform_go.IComponent, pollInterval int) {
 | 
						|
	gaugeMetrics := []*baseGoMetrica{
 | 
						|
		//Memory in use metrics
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "InUse/Total",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.Alloc",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "InUse/Heap",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.HeapAlloc",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "InUse/Stack",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.StackInuse",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "InUse/MSpanInuse",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.MSpanInuse",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "InUse/MCacheInuse",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.MCacheInuse",
 | 
						|
		},
 | 
						|
	}
 | 
						|
	ds := newMemoryMetricaDataSource(pollInterval)
 | 
						|
	for _, m := range gaugeMetrics {
 | 
						|
		m.basePath = "Runtime/Memory/"
 | 
						|
		m.dataSource = ds
 | 
						|
		component.AddMetrica(&gaugeMetrica{m})
 | 
						|
	}
 | 
						|
 | 
						|
	gaugeIncMetrics := []*baseGoMetrica{
 | 
						|
		//NO operations graph
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "Operations/NoPointerLookups",
 | 
						|
			units:         "lookups",
 | 
						|
			dataSourceKey: "runtime.MemStats.Lookups",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "Operations/NoMallocs",
 | 
						|
			units:         "mallocs",
 | 
						|
			dataSourceKey: "runtime.MemStats.Mallocs",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "Operations/NoFrees",
 | 
						|
			units:         "frees",
 | 
						|
			dataSourceKey: "runtime.MemStats.Frees",
 | 
						|
		},
 | 
						|
 | 
						|
		// Sytem memory allocations
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "SysMem/Total",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.Sys",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "SysMem/Heap",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.HeapSys",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "SysMem/Stack",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.StackSys",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "SysMem/MSpan",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.MSpanSys",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "SysMem/MCache",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.MCacheSys",
 | 
						|
		},
 | 
						|
		&baseGoMetrica{
 | 
						|
			name:          "SysMem/BuckHash",
 | 
						|
			units:         "bytes",
 | 
						|
			dataSourceKey: "runtime.MemStats.BuckHashSys",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, m := range gaugeIncMetrics {
 | 
						|
		m.basePath = "Runtime/Memory/"
 | 
						|
		m.dataSource = ds
 | 
						|
		component.AddMetrica(&gaugeIncMetrica{baseGoMetrica: m})
 | 
						|
	}
 | 
						|
}
 |