Пример #1
0
/*
 * CPU usage as ticks spent since last call,
 * see <tt>sg_get_cpu_stats_diff(3)</tt> manpage.
 */
static VALUE
statgrab_cpu_stats_diff(VALUE self)
{
	sg_cpu_stats *stats;
	VALUE info, time_at;

	if ((stats = sg_get_cpu_stats_diff()) == NULL)
		statgrab_handle_error();

	info = rb_hash_new();
	rb_hash_aset(info, ID2SYM(rb_intern("user")), INT2NUM(stats->user));
	rb_hash_aset(info, ID2SYM(rb_intern("kernel")),
			INT2NUM(stats->kernel));
	rb_hash_aset(info, ID2SYM(rb_intern("idle")), INT2NUM(stats->idle));
	rb_hash_aset(info, ID2SYM(rb_intern("iowait")),
			INT2NUM(stats->iowait));
	rb_hash_aset(info, ID2SYM(rb_intern("swap")), INT2NUM(stats->swap));
	rb_hash_aset(info, ID2SYM(rb_intern("nice")), INT2NUM(stats->nice));
	rb_hash_aset(info, ID2SYM(rb_intern("systime")),
			INT2NUM(stats->systime));

	time_at = rb_funcall(rb_cTime, rb_intern("at"), 1,
			INT2NUM(stats->systime));
	rb_hash_aset(info, ID2SYM(rb_intern("time")), time_at);

	return info;
}
Пример #2
0
sg_cpu_percents *sg_get_cpu_percents(){
	static sg_cpu_percents cpu_usage;
#ifndef WIN32
	sg_cpu_stats *cs_ptr;

	cs_ptr=sg_get_cpu_stats_diff();
	if(cs_ptr==NULL){
		return NULL;
	}

	cpu_usage.user =  ((float)cs_ptr->user / (float)cs_ptr->total)*100;
	cpu_usage.kernel =  ((float)cs_ptr->kernel / (float)cs_ptr->total)*100;
	cpu_usage.idle = ((float)cs_ptr->idle / (float)cs_ptr->total)*100;
	cpu_usage.iowait = ((float)cs_ptr->iowait / (float)cs_ptr->total)*100;
	cpu_usage.swap = ((float)cs_ptr->swap / (float)cs_ptr->total)*100;
	cpu_usage.nice = ((float)cs_ptr->nice / (float)cs_ptr->total)*100;
	cpu_usage.time_taken = cs_ptr->systime;
#else
	double result;

	if(read_counter_double(SG_WIN32_PROC_USER, &result)) {
		sg_set_error(SG_ERROR_PDHREAD, PDH_USER);
		return NULL;
	}
	cpu_usage.user = (float)result;
	if(read_counter_double(SG_WIN32_PROC_PRIV, &result)) {
		sg_set_error(SG_ERROR_PDHREAD, PDH_PRIV);
		return NULL;
	}
	cpu_usage.kernel = (float)result;
	if(read_counter_double(SG_WIN32_PROC_IDLE, &result)) {
		sg_set_error(SG_ERROR_PDHREAD, PDH_IDLE);
		return NULL;
	}
	/* win2000 does not have an idle counter, but does have %activity
	 * so convert it to idle */
	cpu_usage.idle = 100 - (float)result;
	if(read_counter_double(SG_WIN32_PROC_INT, &result)) {
		sg_set_error(SG_ERROR_PDHREAD, PDH_INTER);
		return NULL;
	}
	cpu_usage.iowait = (float)result;
#endif

	return &cpu_usage;
}
Пример #3
0
void populate_cpu() {
	if (use_cpu_percent) {
		sg_cpu_percents *cpu_p = sg_get_cpu_percents();

		if (cpu_p != NULL) {
			add_stat(FLOAT, &cpu_p->user,
				 "cpu", "user", NULL);
			add_stat(FLOAT, &cpu_p->kernel,
				 "cpu", "kernel", NULL);
			add_stat(FLOAT, &cpu_p->idle,
				 "cpu", "idle", NULL);
			add_stat(FLOAT, &cpu_p->iowait,
				 "cpu", "iowait", NULL);
			add_stat(FLOAT, &cpu_p->swap,
				 "cpu", "swap", NULL);
			add_stat(FLOAT, &cpu_p->nice,
				 "cpu", "nice", NULL);
			add_stat(TIME_T, &cpu_p->time_taken,
				 "cpu", "time_taken", NULL);
		}
	} else {
		sg_cpu_stats *cpu_s;

		cpu_s = use_diffs ? sg_get_cpu_stats_diff()
				  : sg_get_cpu_stats();
		if (cpu_s != NULL) {
			add_stat(LONG_LONG, &cpu_s->user,
				 "cpu", "user", NULL);
			add_stat(LONG_LONG, &cpu_s->kernel,
				 "cpu", "kernel", NULL);
			add_stat(LONG_LONG, &cpu_s->idle,
				 "cpu", "idle", NULL);
			add_stat(LONG_LONG, &cpu_s->iowait,
				 "cpu", "iowait", NULL);
			add_stat(LONG_LONG, &cpu_s->swap,
				 "cpu", "swap", NULL);
			add_stat(LONG_LONG, &cpu_s->nice,
				 "cpu", "nice", NULL);
			add_stat(LONG_LONG, &cpu_s->total,
				 "cpu", "total", NULL);
			add_stat(TIME_T, &cpu_s->systime,
				 "cpu", "systime", NULL);
		}
	}
}
Пример #4
0
static void
populate_cpu(void) {
	sg_cpu_stats *cpu_s;

	cpu_s = use_diffs ? sg_get_cpu_stats_diff(NULL)
			  : sg_get_cpu_stats(NULL);

	if (use_cpu_percent) {
		sg_cpu_percent_source cps = use_diffs
					  ? sg_last_diff_cpu_percent
					  : sg_entire_cpu_percent;
		sg_cpu_percents *cpu_p = sg_get_cpu_percents_of(cps, NULL);

		if (cpu_p != NULL) {
			add_stat(DOUBLE, &cpu_p->user,
				 "cpu", "user", NULL);
			add_stat(DOUBLE, &cpu_p->kernel,
				 "cpu", "kernel", NULL);
			add_stat(DOUBLE, &cpu_p->idle,
				 "cpu", "idle", NULL);
			add_stat(DOUBLE, &cpu_p->iowait,
				 "cpu", "iowait", NULL);
			add_stat(DOUBLE, &cpu_p->swap,
				 "cpu", "swap", NULL);
			add_stat(DOUBLE, &cpu_p->nice,
				 "cpu", "nice", NULL);
			add_stat(TIME_T, &cpu_p->time_taken,
				 "cpu", "time_taken", NULL);
		}
	} else {
		if (cpu_s != NULL) {
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->user,
				 "cpu", "user", NULL);
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->kernel,
				 "cpu", "kernel", NULL);
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->idle,
				 "cpu", "idle", NULL);
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->iowait,
				 "cpu", "iowait", NULL);
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->swap,
				 "cpu", "swap", NULL);
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->nice,
				 "cpu", "nice", NULL);
			add_stat(UNSIGNED_LONG_LONG, &cpu_s->total,
				 "cpu", "total", NULL);
			add_stat(TIME_T, &cpu_s->systime,
				 "cpu", "systime", NULL);
		}
	}

	if (cpu_s != NULL) {
		add_stat(UNSIGNED_LONG_LONG, &cpu_s->context_switches,
			 "cpu", "ctxsw", NULL);
		add_stat(UNSIGNED_LONG_LONG, &cpu_s->voluntary_context_switches,
			 "cpu", "vctxsw", NULL);
		add_stat(UNSIGNED_LONG_LONG, &cpu_s->involuntary_context_switches,
			 "cpu", "nvctxsw", NULL);
		add_stat(UNSIGNED_LONG_LONG, &cpu_s->syscalls,
			 "cpu", "syscalls", NULL);
		add_stat(UNSIGNED_LONG_LONG, &cpu_s->interrupts,
			 "cpu", "intrs", NULL);
		add_stat(UNSIGNED_LONG_LONG, &cpu_s->soft_interrupts,
			 "cpu", "softintrs", NULL);
	}
}
Пример #5
0
int main(int argc, char **argv){

	extern char *optarg;
	int c;

	int delay = 1;
	sg_cpu_percents *cpu_percent;
	sg_cpu_stats *cpu_diff_stats;

	while ((c = getopt(argc, argv, "d:")) != -1){
		switch (c){
			case 'd':
				delay = atoi(optarg);
				break;
		}
	}
#ifdef WIN32
	delay = delay * 1000;
#endif

	/* Initialise helper - e.g. logging, if any */
	sg_log_init("libstatgrab-examples", "SGEXAMPLES_LOG_PROPERTIES", argc ? argv[0] : NULL);

	/* Initialise statgrab */
	sg_init(1);
	/* XXX must be replaced by termios/(n)curses function ....
	if( 0 != setvbuf(stdin, NULL, _IONBF, 0) ) {
		perror("setvbuf");
		exit(1);
	} */

	/* Drop setuid/setgid privileges. */
	if (sg_drop_privileges() != SG_ERROR_NONE) {
		sg_die("Error. Failed to drop privileges", 1);
	}

	register_sig_flagger( SIGINT, &quit );

	/* Throw away the first reading as thats averaged over the machines uptime */
	sg_snapshot();
	cpu_percent = sg_get_cpu_percents(NULL);
	if( NULL == cpu_percent )
		sg_die("Failed to get cpu stats", 1);

	/* Clear the screen ready for display the cpu usage */
	printf("\033[2J");

	while( ( ( cpu_diff_stats = sg_get_cpu_stats_diff(NULL) ) != NULL ) &&
	     ( ( cpu_percent = sg_get_cpu_percents_of(sg_last_diff_cpu_percent, NULL) ) != NULL ) ) {
		int ch;
		sg_snapshot();
		printf("\033[2;2H%-14s : %lld (%6.2f)", "User CPU", cpu_diff_stats->user, cpu_percent->user);
		printf("\033[3;2H%-14s : %lld (%6.2f)", "Kernel CPU", cpu_diff_stats->kernel, cpu_percent->kernel);
		printf("\033[4;2H%-14s : %lld (%6.2f)", "IOWait CPU", cpu_diff_stats->iowait, cpu_percent->iowait);
		printf("\033[5;2H%-14s : %lld (%6.2f)", "Swap CPU", cpu_diff_stats->swap, cpu_percent->swap);
		printf("\033[6;2H%-14s : %lld (%6.2f)", "Nice CPU", cpu_diff_stats->nice, cpu_percent->nice);
		printf("\033[7;2H%-14s : %lld (%6.2f)", "Idle CPU", cpu_diff_stats->idle, cpu_percent->idle);
		printf("\033[8;2H%-14s : %llu", "Ctxts", cpu_diff_stats->context_switches);
		printf("\033[9;2H%-14s : %llu", "  Voluntary", cpu_diff_stats->voluntary_context_switches);
		printf("\033[10;2H%-14s : %llu", "  Involuntary", cpu_diff_stats->involuntary_context_switches);
		printf("\033[11;2H%-14s : %llu", "Syscalls", cpu_diff_stats->syscalls);
		printf("\033[12;2H%-14s : %llu", "Intrs", cpu_diff_stats->interrupts);
		printf("\033[13;2H%-14s : %llu", "SoftIntrs", cpu_diff_stats->soft_interrupts);
		fflush(stdout);
		ch = inp_wait(delay);
		if( quit || (ch == 'q') )
			break;
	}
	sg_shutdown();

	exit(0);
}