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 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 *
 | 
							return bprintf("%d", 100 *
 | 
				
			||||||
		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
 | 
							               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
 | 
				
			||||||
		                 a[CP_INTR]) -
 | 
							                 a[CP_INTR]) -
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,14 +5,24 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "../util.h"
 | 
					#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 *
 | 
					const char *
 | 
				
			||||||
uptime(void)
 | 
					uptime(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						char warn_buf[256];
 | 
				
			||||||
	uintmax_t h, m;
 | 
						uintmax_t h, m;
 | 
				
			||||||
	struct timespec uptime;
 | 
						struct timespec uptime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (clock_gettime(CLOCK_BOOTTIME, &uptime) < 0) {
 | 
						if (clock_gettime(UPTIME_FLAG, &uptime) < 0) {
 | 
				
			||||||
		warn("clock_gettime 'CLOCK_BOOTTIME'");
 | 
							snprintf(warn_buf, 256, "clock_gettime %d", UPTIME_FLAG);
 | 
				
			||||||
 | 
							warn(warn_buf);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user