Exemple #1
0
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);
}