mirror of
				https://github.com/ClusterCockpit/cc-metric-collector.git
				synced 2025-11-04 02:35:07 +01:00 
			
		
		
		
	Add simpler collectors for load, mem_used and network
This commit is contained in:
		
							
								
								
									
										59
									
								
								collectors/netstatMetric.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								collectors/netstatMetric.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
package collectors
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const NETSTATFILE = `/proc/net/dev`
 | 
			
		||||
 | 
			
		||||
type NetstatCollector struct {
 | 
			
		||||
	MetricCollector
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func (m *NetstatCollector) Init() {
 | 
			
		||||
    m.name = "NetstatCollector"
 | 
			
		||||
	m.setup()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *NetstatCollector) Read(interval time.Duration){
 | 
			
		||||
	data, err := ioutil.ReadFile(string(NETSTATFILE))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Print(err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var matches = map[int]string{
 | 
			
		||||
		1:  "bytes_in",
 | 
			
		||||
		9:  "bytes_out",
 | 
			
		||||
		2:  "pkts_in",
 | 
			
		||||
		10: "pkts_out",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	lines := strings.Split(string(data), "\n")
 | 
			
		||||
	for _, l := range lines {
 | 
			
		||||
		if !strings.Contains(l, ":") {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		f := strings.Fields(l)
 | 
			
		||||
		dev := f[0][0 : len(f[0])-1]
 | 
			
		||||
		if dev == "lo" {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		for i, name := range matches {
 | 
			
		||||
			v, err := strconv.ParseInt(f[i], 10, 0)
 | 
			
		||||
			if err == nil {
 | 
			
		||||
				
 | 
			
		||||
				m.node[name] = float64(v) * 1.0e-3
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *NetstatCollector) Close() {
 | 
			
		||||
    return
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user