Add support for cpu and uptime components on FreeBSD
This commit is contained in:
		
				
					committed by
					
						
						Aaron Marcher
					
				
			
			
				
	
			
			
			
						parent
						
							ec306623df
						
					
				
				
					commit
					120d150594
				
			@@ -93,6 +93,56 @@
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return bprintf("%d", 100 *
 | 
			
		||||
		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
 | 
			
		||||
		                 a[CP_INTR]) -
 | 
			
		||||
		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] +
 | 
			
		||||
		                 b[CP_INTR])) /
 | 
			
		||||
		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
 | 
			
		||||
		                 a[CP_INTR] + a[CP_IDLE]) -
 | 
			
		||||
		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] +
 | 
			
		||||
		                 b[CP_INTR] + b[CP_IDLE])));
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__FreeBSD__)
 | 
			
		||||
	#include <sys/param.h>
 | 
			
		||||
	#include <sys/sysctl.h>
 | 
			
		||||
	#include <devstat.h>
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	cpu_freq(void)
 | 
			
		||||
	{
 | 
			
		||||
		int freq;
 | 
			
		||||
		size_t size;
 | 
			
		||||
 | 
			
		||||
		size = sizeof(freq);
 | 
			
		||||
		/* in MHz */
 | 
			
		||||
		if (sysctlbyname("hw.clockrate", &freq, &size, NULL, 0) == -1
 | 
			
		||||
				|| !size) {
 | 
			
		||||
			warn("sysctlbyname 'hw.clockrate':");
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return fmt_human(freq * 1E6, 1000);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	cpu_perc(void)
 | 
			
		||||
	{
 | 
			
		||||
		size_t size;
 | 
			
		||||
		static long a[CPUSTATES];
 | 
			
		||||
		long b[CPUSTATES];
 | 
			
		||||
 | 
			
		||||
		size = sizeof(a);
 | 
			
		||||
		memcpy(b, a, sizeof(b));
 | 
			
		||||
		if (sysctlbyname("kern.cp_time", &a, &size, NULL, 0) == -1
 | 
			
		||||
				|| !size) {
 | 
			
		||||
			warn("sysctlbyname 'kern.cp_time':");
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		if (b[0] == 0) {
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return bprintf("%d", 100 *
 | 
			
		||||
		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
 | 
			
		||||
		                 a[CP_INTR]) -
 | 
			
		||||
 
 | 
			
		||||
@@ -5,14 +5,24 @@
 | 
			
		||||
 | 
			
		||||
#include "../util.h"
 | 
			
		||||
 | 
			
		||||
#if defined(CLOCK_BOOTTIME)
 | 
			
		||||
	#define UPTIME_FLAG CLOCK_BOOTTIME
 | 
			
		||||
#elif defined(CLOCK_UPTIME)
 | 
			
		||||
	#define UPTIME_FLAG CLOCK_UPTIME
 | 
			
		||||
#else
 | 
			
		||||
	#define UPTIME_FLAG CLOCK_MONOTONIC
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
uptime(void)
 | 
			
		||||
{
 | 
			
		||||
	char warn_buf[256];
 | 
			
		||||
	uintmax_t h, m;
 | 
			
		||||
	struct timespec uptime;
 | 
			
		||||
 | 
			
		||||
	if (clock_gettime(CLOCK_BOOTTIME, &uptime) < 0) {
 | 
			
		||||
		warn("clock_gettime 'CLOCK_BOOTTIME'");
 | 
			
		||||
	if (clock_gettime(UPTIME_FLAG, &uptime) < 0) {
 | 
			
		||||
		snprintf(warn_buf, 256, "clock_gettime %d", UPTIME_FLAG);
 | 
			
		||||
		warn(warn_buf);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user