예제 #1
0
int find_radius_options(rlm_mongo_t *data, char *username, char *mac, char *password) 
{
	bson_buffer bb;
	
	bson query;
	bson field;
	bson result;
	
	bson_buffer_init(&bb);
	
	bson_append_string(&bb, data->search_field, username);
	
	if (strcmp(data->mac_field, "") != 0) {
		bson_append_string(&bb, data->mac_field, mac);
	}
	
	if (strcmp(data->enable_field, "") != 0) {
		bson_append_bool(&bb, data->enable_field, 1);
	}	
	
	bson_from_buffer(&query, &bb);
	bson_buffer_destroy(&bb);

	bson_empty(&field);

	bson_empty(&result);

	MONGO_TRY{
		if (mongo_find_one(conn, data->base, &query, &field, &result) == 0) {
			return 0;
		}
	}MONGO_CATCH{
		mongo_start(data);
		return 0;
	}
	
	bson_iterator it;
	bson_iterator_init(&it, result.data);
	
	find_in_array(&it, data->username_field, username, data->password_field, password);
	bson_destroy(&result);
	return 1;
}
예제 #2
0
/**
 * Build perfSONAR data block.
 */
bson *nlcali_psdata(T self, const char *event, const char *m_id,
                                int32_t sample_num)
{
    struct timeval now;
    bson_buffer bb;
    bson *bp = NULL;
   
    assert(self && event && m_id);

    gettimeofday(&now, NULL);
    if (self->dirty) {
        nlcali_calc(self);
    }
    
    bson_buffer_init(&bb);
    bson_ensure_space(&bb, LOG_BUFSZ);
    
    bson_append_string(&bb, "mid", m_id);
    bson_append_start_array(&bb, "data");
    bson_append_double(&bb, "ts", now.tv_sec + now.tv_usec/1e6);
    bson_append_int(&bb, "_sample", sample_num);
    bson_append_double(&bb, "sum_v", self->vsm.sum);
    bson_append_double(&bb, "min_v", self->vsm.min);
    bson_append_double(&bb, "max_v", self->vsm.max);
    bson_append_double(&bb, "mean_v", self->vsm.mean);
    bson_append_double(&bb, "sd_v", self->vsm.sd);
    bson_append_double(&bb, "sum_r", self->rsm.sum);
    bson_append_double(&bb, "min_r", self->rsm.min);
    bson_append_double(&bb, "max_r", self->rsm.max);
    bson_append_double(&bb, "sd_r", self->rsm.sd);
    bson_append_double(&bb, "sum_g", self->gsm.sum);
    bson_append_double(&bb, "min_g", self->gsm.min);
    bson_append_double(&bb, "max_g", self->gsm.max);
    bson_append_double(&bb, "sd_g", self->gsm.sd);
    bson_append_int(&bb, "count", self->vsm.count);
    bson_append_double(&bb, "dur", self->dur);
    bson_append_double(&bb, "dur_inst", self->dur_sum);
    /* add histogram data, if being recorded */
    if (NL_HIST_HAS_DATA(self)) {
        int i;
        char idx[16];
        /* rate hist */
        bson_append_double(&bb, "h_rm", self->h_rmin);
        bson_append_double(&bb, "h_rw", self->h_rwidth);
        bson_append_start_array(&bb, "h_rd");
        for (i=0; i < self->h_num; i++) {
            sprintf(idx, "%d", i);
            bson_append_int(&bb, idx, self->h_rdata[i]);            
        }
        bson_append_finish_object(&bb);
        /* gap hist */
        bson_append_double(&bb, "h_gm", self->h_gmin);
        bson_append_double(&bb, "h_gw", self->h_gwidth);
        bson_append_start_array(&bb, "h_gd");
        for (i=0; i < self->h_num; i++) {
            sprintf(idx, "%d", i);
            bson_append_int(&bb, idx, self->h_gdata[i]);            
        }
        bson_append_finish_object(&bb);
    }

    bson_append_finish_object(&bb);

    bp = malloc(sizeof(bson));
    bson_from_buffer(bp, &bb);

    return(bp);

 error:
    if (bp) {
        bson_destroy(bp);
        free(bp);
    }
    bson_buffer_destroy(&bb);
    return(NULL);
}