//------------------------------------------------------------------------------------- float SystemInfo::getCPUPer() { sigar_cpu_t current; if(_g_sigar_cpu == NULL) sigar_open(&_g_sigar_cpu); // sigar_cpu_get(_g_sigar_cpu, &_g_old_cpu); sigar_cpu_perc_t perc; // while(1) { sigar_cpu_get(_g_sigar_cpu, ¤t); sigar_cpu_perc_calculate(&_g_old_cpu, ¤t, &perc); // std::cout << "CPU " << perc.combined * 100 << "%\n"; _g_old_cpu = current; // sleep(1000); } float ret = float(perc.combined) * 100.f; //sigar_close(sigar_cpu); // DEBUG_MSG(fmt::format("SystemInfo::getCPUPer(): {}\n", ret)); return ret; }
void test_cpu_info(void) { //int status, i; sigar_t *sigar; //sigar_cpu_list_t cpulist; sigar_open(&sigar); sigar_cpu_info_list_t cpu_info_list; sigar_cpu_info_list_get(sigar, &cpu_info_list); //sigar_cpu_info_t cpu_info = cup_info_list; printf("vendor......%s\n", cpu_info_list.data->vendor); printf("model......%s\n", cpu_info_list.data->model); printf("mhz......%d\n", cpu_info_list.data->mhz); printf("total cores......%d\n", cpu_info_list.data->total_cores); //printf("Vendor......%s\n", cpu_info->vendor); sigar_cpu_info_list_destroy(sigar, &cpu_info_list); sigar_cpu_t cpu_old; sigar_cpu_t cpu_cur; sigar_cpu_get(sigar, &cpu_old); sigar_cpu_perc_t perc; sleep(1); sigar_cpu_get(sigar, &cpu_cur); sigar_cpu_perc_calculate(&cpu_old, &cpu_cur, &perc); printf("user......%3.2f%%\n", perc.user * 100); printf("sys......%3.2f%%\n", perc.sys * 100); printf("wait......%3.2f%%\n", perc.wait * 100); printf("nice......%3.2f%%\n", perc.nice * 100); printf("irq time......%f\n", perc.irq); printf("total used rate......%3.2f%%\n", perc.combined * 100); printf("total idle rate......%3.2f%%\n", perc.idle * 100); cpu_old = cpu_cur; /* status = sigar_cpu_list_get(sigar, &cpulist); if (status != SIGAR_OK) { printf("cpu_list error: %d (%s)\n", status, sigar_strerror(sigar, status)); exit(1); } for (i=0; i<cpulist.number; i++) { sigar_cpu_t cpu = cpulist.data[i]; printf("cpu user: %ld, sys: %ld, nice: %ld, idle: %ld, wait: %ld, irq: %ld, soft_irq: %ld, stolen: %ld, total: %ld.\n", cpu.user, cpu.sys, cpu.nice, cpu.idle, cpu.wait, cpu.irq, cpu.soft_irq, cpu.stolen, cpu.total); } sigar_cpu_list_destroy(sigar, &cpulist); */ sigar_close(sigar); }
JNIEXPORT void SIGAR_JNI(CpuPerc_gather) (JNIEnv *env, jobject jperc, jobject sigar_obj, jobject jprev, jobject jcurr) { sigar_cpu_t prev, curr; sigar_cpu_perc_t perc; dSIGAR_VOID; JAVA_SIGAR_GET_FIELDS_CPU(jprev, prev); JAVA_SIGAR_GET_FIELDS_CPU(jcurr, curr); sigar_cpu_perc_calculate(&prev, &curr, &perc); JAVA_SIGAR_INIT_FIELDS_CPUPERC(JENV->GetObjectClass(env, jperc)); JAVA_SIGAR_SET_FIELDS_CPUPERC(NULL, jperc, perc); }
CpuStat::CpuStat() { int status, i; sigar_t *sigar; sigar_cpu_t _prev_cpu, cpu; sigar_cpu_perc_t cpu_perc; sigar_open(&sigar); status = sigar_cpu_get(sigar, &_prev_cpu); if (status != SIGAR_OK) { printf("cpu stat error: %d (%s)\n", status, sigar_strerror(sigar, status)); exit(1); } QTest::qSleep(1000); status = sigar_cpu_get(sigar, &cpu); if (status != SIGAR_OK) { printf("cpu stat error: %d (%s)\n", status, sigar_strerror(sigar, status)); exit(1); } sigar_cpu_perc_calculate(&_prev_cpu, &cpu, &cpu_perc); user.setNum(cpu_perc.user * 100.); sys.setNum(cpu_perc.sys * 100.); nice.setNum(cpu_perc.nice * 100.); idle.setNum(cpu_perc.idle * 100.); wait.setNum(cpu_perc.wait * 100.); irq.setNum(cpu_perc.irq * 100.); soft_irq.setNum(cpu_perc.soft_irq * 100.); stolen.setNum(cpu_perc.stolen * 100.); combined.setNum(cpu_perc.combined * 100.); total.setNum(cpu.total); sigar_close(sigar); }
cJSON* cpu_info_get(CPUInfo* info) { sigar_cpu_t cpu_old; sigar_cpu_t cpu_cur; sigar_cpu_get(info->sigar, &cpu_old); sigar_cpu_perc_t perc; sleep(1); sigar_cpu_get(info->sigar, &cpu_cur); sigar_cpu_perc_calculate(&cpu_old, &cpu_cur, &perc); //填充json数据格式 cJSON* body = cJSON_GetObjectItem(info->json, "body"); cJSON_GetObjectItem(body, "user")->valuedouble = perc.user * 100; cJSON_GetObjectItem(body, "sys")->valuedouble = perc.sys * 100; cJSON_GetObjectItem(body, "wait")->valuedouble = perc.wait * 100; cJSON_GetObjectItem(body, "nice")->valuedouble = perc.nice * 100; cJSON_GetObjectItem(body, "irq")->valuedouble = perc.irq * 100; cJSON_GetObjectItem(body, "combined")->valuedouble = perc.combined * 100; cJSON_GetObjectItem(body, "idle")->valuedouble = perc.idle * 100; //char* ret = cJSON_Print(info->json); cpu_old = cpu_cur; return info->json; }