Array* System::vm_times(STATE) { struct rusage buf; Array* ary = Array::create(state, 4); getrusage(RUSAGE_SELF, &buf); ary->set(state, 0, Float::create(state, tv_to_dbl(&buf.ru_utime))); ary->set(state, 1, Float::create(state, tv_to_dbl(&buf.ru_stime))); getrusage(RUSAGE_CHILDREN, &buf); ary->set(state, 2, Float::create(state, tv_to_dbl(&buf.ru_utime))); ary->set(state, 3, Float::create(state, tv_to_dbl(&buf.ru_stime))); // Get Thread info too #if defined(OS_X_10_5) mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT; thread_basic_info_data_t info; kern_return_t err; mach_port_t port = mach_thread_self(); err = thread_info(port, THREAD_BASIC_INFO, (thread_info_t)&info, &count); mach_port_deallocate(mach_task_self(), port); if(err == KERN_SUCCESS) { ary->set(state, 4, Float::create(state, to_dbl( info.user_time.seconds, info.user_time.microseconds))); ary->set(state, 5, Float::create(state, to_dbl( info.system_time.seconds, info.system_time.microseconds))); } else { ary->set(state, 4, ary->get(state, 0)); ary->set(state, 5, ary->get(state, 1)); } #elif defined(RUSAGE_THREAD) getrusage(RUSAGE_THREAD, &buf); ary->set(state, 4, Float::create(state, tv_to_dbl(&buf.ru_utime))); ary->set(state, 5, Float::create(state, tv_to_dbl(&buf.ru_stime))); #elif defined(_WIN32) FILETIME unused, unused2; FILETIME sys, usr; GetThreadTimes(GetCurrentThread(), &unused, &unused2, &sys, &user); ary->set(state, 4, Float::create(state, ((double)usr) / 10000)); ary->set(state, 5, Float::create(state, ((double)sys) / 10000)); #else ary->set(state, 4, ary->get(state, 0)); ary->set(state, 5, ary->get(state, 1)); #endif return ary; }
JSON::Object Agent::ToJSON () { JSON::Object retr; retr.Add( agent_name_key, std::move(Name), agent_version_key, to_dbl(Version) ); return retr; }