static void handle_updates(struct datagram *update_port) { char data[DATAGRAM_PAYLOAD_MAX * 2]; char addr[DATAGRAM_ADDRESS_MAX]; char key[LINE_MAX]; int port; int result; struct nvpair *nv; while(1) { result = datagram_recv(update_port, data, DATAGRAM_PAYLOAD_MAX, addr, &port, 0); if(result <= 0) return; data[result] = 0; nv = nvpair_create(); nvpair_parse(nv, data); nvpair_insert_string(nv, "address", addr); nvpair_insert_integer(nv, "lastheardfrom", time(0)); /* If the server reports unbelievable numbers, simply reset them */ if(max_server_size > 0) { INT64_T total = nvpair_lookup_integer(nv, "total"); INT64_T avail = nvpair_lookup_integer(nv, "avail"); if(total > max_server_size || avail > max_server_size) { nvpair_insert_integer(nv, "total", max_server_size); nvpair_insert_integer(nv, "avail", max_server_size); } } /* Do not believe the server's reported name, just resolve it backwards. */ char name[DOMAIN_NAME_MAX]; if(domain_name_cache_lookup_reverse(addr, name)) { nvpair_insert_string(nv, "name", name); } else if (nvpair_lookup_string(nv, "name") == NULL) { /* If rDNS is unsuccessful, then we use the name reported if given. * This allows for hostnames that are only valid in the subnet of * the reporting server. Here we set the "name" field to the IP * Address, addr, because it was not set by the reporting server. */ nvpair_insert_string(nv, "name", addr); } make_hash_key(nv, key); if(logfile) { if(!nvpair_database_lookup(table,key)) { nvpair_print_text(nv,logfile); fflush(logfile); } } nvpair_database_insert(table, key, nv); debug(D_DEBUG, "received udp update from %s", key); } }
void work_queue_resources_add_to_nvpair( struct work_queue_resources *r, struct nvpair *nv ) { nvpair_insert_integer(nv,"cores_inuse",r->cores.inuse); nvpair_insert_integer(nv,"cores_total",r->cores.total); nvpair_insert_integer(nv,"cores_smallest",r->cores.smallest); nvpair_insert_integer(nv,"cores_largest",r->cores.largest); nvpair_insert_integer(nv,"memory_inuse",r->memory.inuse); nvpair_insert_integer(nv,"memory_total",r->memory.total); nvpair_insert_integer(nv,"memory_smallest",r->memory.smallest); nvpair_insert_integer(nv,"memory_largest",r->memory.largest); nvpair_insert_integer(nv,"disk_inuse",r->disk.inuse); nvpair_insert_integer(nv,"disk_total",r->disk.total); nvpair_insert_integer(nv,"disk_smallest",r->disk.smallest); nvpair_insert_integer(nv,"disk_largest",r->disk.largest); }