mirror of
				https://github.com/ClusterCockpit/cc-metric-collector.git
				synced 2025-11-04 02:35:07 +01:00 
			
		
		
		
	Add collector for the top5 processes in %cpu
This commit is contained in:
		
							
								
								
									
										39
									
								
								collectors/topprocsMetric.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								collectors/topprocsMetric.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
package collectors
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const NUM_PROCS = 5
 | 
			
		||||
 | 
			
		||||
type TopProcsCollector struct {
 | 
			
		||||
	MetricCollector
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *TopProcsCollector) Init() {
 | 
			
		||||
	m.name = "TopProcsCollector"
 | 
			
		||||
	m.setup()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *TopProcsCollector) Read(interval time.Duration) {
 | 
			
		||||
	command := exec.Command("/usr/bin/ps", "-Ao", "comm", "--sort=-pcpu")
 | 
			
		||||
	command.Wait()
 | 
			
		||||
	stdout, err := command.Output()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Print(m.name, err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	lines := strings.Split(string(stdout), "\n")
 | 
			
		||||
	for i := 1; i < NUM_PROCS+1; i++ {
 | 
			
		||||
		m.node[fmt.Sprintf("topproc%d", i)] = lines[i]
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *TopProcsCollector) Close() {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user