/* * This function is called only once by the gmond. Use to * initialize data structures, etc or just return SYNAPSE_SUCCESS; */ g_val_t metric_init(void) { g_val_t val; /* * Try to use the vm.swap_info sysctl to gather swap data. If it * isn't implemented, fall back to trying to old kvm based interface. */ mibswap_size = MIB_SWAPINFO_SIZE; if (sysctlnametomib("vm.swap_info", mibswap, &mibswap_size) == -1) { kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "metric_init()"); } else { /* * RELEASE versions of DragonFlyBSD with the swap mib have a version * of libkvm that doesn't need root for simple proc access so we * just open /dev/null to give us a working handle here. */ kd = kvm_open(_PATH_DEVNULL, NULL, NULL, O_RDONLY, "metric_init()"); use_vm_swap_info = 1; } pagesize = getpagesize(); /* Initalize some counters */ get_netbw(NULL, NULL, NULL, NULL); cpu_state(-1); val.int32 = SYNAPSE_SUCCESS; return val; }
g_val_t bytes_in_func ( void ) { double in_bytes; g_val_t val; get_netbw(&in_bytes, NULL, NULL, NULL); val.f = (float)in_bytes; return val; }
g_val_t bytes_out_func ( void ) { double out_bytes; g_val_t val; get_netbw(NULL, &out_bytes, NULL, NULL); val.f = (float)out_bytes; return val; }
g_val_t pkts_out_func ( void ) { double out_pkts; g_val_t val; get_netbw(NULL, NULL, NULL, &out_pkts); val.f = (float)out_pkts; return val; }
g_val_t pkts_in_func ( void ) { double in_pkts; g_val_t val; get_netbw(NULL, NULL, &in_pkts, NULL); val.f = (float)in_pkts; return val; }
g_val_t bytes_in_func ( void ) { double in_bytes=0, t=0; time_t stamp; static time_t last_stamp; static double last_bytes_in; g_val_t val; unsigned long diff; stamp = get_netbw(&in_bytes, NULL, NULL, NULL); (unsigned long) diff = in_bytes - last_bytes_in; if ( diff && last_stamp ) { t = stamp - last_stamp; t = diff / t; debug_msg("Returning value: %f\n", t); } else t = 0; val.f = t; last_bytes_in = in_bytes; last_stamp = stamp; return val; }
g_val_t pkts_out_func ( void ) { double out_pkts=0, t=0; time_t stamp; static time_t last_stamp; static double last_pkts_out; g_val_t val; unsigned long diff; stamp = get_netbw(NULL, NULL, NULL, &out_pkts); (unsigned long) diff = out_pkts - last_pkts_out; if ( diff && last_stamp ) { t = stamp - last_stamp; t = diff / t; debug_msg("Returning value: %f\n", t); } else t = 0; val.f = t; last_pkts_out = out_pkts; last_stamp = stamp; return val; }