mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07:00 
			
		
		
		
	remove cgo dependency
by hardcoding `USER_HZ` (aka. `_SC_CLK_TCK`) to 100, which it is for all platforms Go supports. See prometheus/node_exporter#52 for discussion around this too. Closes prometheus/node_exporter#52.
This commit is contained in:
		
							parent
							
								
									b4f40ab13f
								
							
						
					
					
						commit
						2ee8470004
					
				|  | @ -11,11 +11,9 @@ import ( | ||||||
| 	"github.com/prometheus/client_golang/prometheus" | 	"github.com/prometheus/client_golang/prometheus" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // #include <unistd.h>
 |  | ||||||
| import "C" |  | ||||||
| 
 |  | ||||||
| const ( | const ( | ||||||
| 	procStat = "/proc/stat" | 	procStat = "/proc/stat" | ||||||
|  | 	userHz   = 100 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type statCollector struct { | type statCollector struct { | ||||||
|  | @ -102,17 +100,17 @@ func (c *statCollector) Update(ch chan<- prometheus.Metric) (err error) { | ||||||
| 			// Only some of these may be present, depending on kernel version.
 | 			// Only some of these may be present, depending on kernel version.
 | ||||||
| 			cpuFields := []string{"user", "nice", "system", "idle", "iowait", "irq", "softirq", "steal", "guest"} | 			cpuFields := []string{"user", "nice", "system", "idle", "iowait", "irq", "softirq", "steal", "guest"} | ||||||
| 			// OpenVZ guests lack the "guest" CPU field, which needs to be ignored.
 | 			// OpenVZ guests lack the "guest" CPU field, which needs to be ignored.
 | ||||||
| 			expectedFieldNum := len(cpuFields)+1 | 			expectedFieldNum := len(cpuFields) + 1 | ||||||
| 			if expectedFieldNum > len(parts) { | 			if expectedFieldNum > len(parts) { | ||||||
| 				expectedFieldNum = len(parts) | 				expectedFieldNum = len(parts) | ||||||
| 			} | 			} | ||||||
| 			for i, v := range parts[1 : expectedFieldNum] { | 			for i, v := range parts[1:expectedFieldNum] { | ||||||
| 				value, err := strconv.ParseFloat(v, 64) | 				value, err := strconv.ParseFloat(v, 64) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return err | 					return err | ||||||
| 				} | 				} | ||||||
| 				// Convert from ticks to seconds
 | 				// Convert from ticks to seconds
 | ||||||
| 				value /= float64(C.sysconf(C._SC_CLK_TCK)) | 				value /= userHz | ||||||
| 				c.cpu.With(prometheus.Labels{"cpu": parts[0], "mode": cpuFields[i]}).Set(value) | 				c.cpu.With(prometheus.Labels{"cpu": parts[0], "mode": cpuFields[i]}).Set(value) | ||||||
| 			} | 			} | ||||||
| 		case parts[0] == "intr": | 		case parts[0] == "intr": | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue