Example #1
0
def store_message(db_id, coll_id):

    experiment_collection = experiment_results_pb2.Experiment()

    try:
        experiment_collection.ParseFromString(request.data)
    except:
        return json.dumps('Experiment is not well defined!')

    # Connect to the database MongoDB
    try:
        connection = Connection('localhost', 12345)
    except:
        return json.dumps("Unable to connect to the database!")

    db_names = connection.database_names()
    if db_id in db_names:
        db = connection[db_id]
    else:
        return json.dumps("No such database!")

    coll_names = db.collection_names()
    if coll_id in coll_names:
        collection = db[coll_id]
    else:
        return json.dumps("No such experiment in the database!")

    try:
        collection.insert(protobuf_json.pb2json(experiment_collection))
    except:
        return json.dumps("Unable to store data into the database!")

    return json.dumps('Data stored!')
Example #2
0
def experiment(db_id, coll_id):

    # Connect to the database MongoDB
    try:
        connection = Connection('localhost', 12345)
    except:
        return json.dumps("Unable to connect to the database!")

    db = connection[db_id]
    collection = db[coll_id]

    try:
        message_collection = collection.find_one({})
    except:
        return json.dumps("Unable to read data from the experiment!")

    if message_collection is None:
        return json.dumps("No data with this ID in the experiment!")

    message_collection['_id'] = str(message_collection['_id'])

    if request.data == 'protobuf':
        pb_message = protobuf_json.json2pb(experiment_results_pb2.Experiment(),
                                           message_collection)
        pb_message_string = pb_message.SerializeToString()
        return pb_message_string
    else:
        return json.dumps(message_collection)
Example #3
0
def replace_location(db_id, coll_id):

    experiment_collection = experiment_results_pb2.Experiment()

    # Connect to the database MongoDB
    try:
        connection = Connection('localhost', 12345)
    except:
        return json.dumps("Unable to connect to the database!")

    try:
        experiment_collection.ParseFromString(request.data)
    except:
        return json.dumps('Message is not well defined!')

    db_names = connection.database_names()
    if db_id not in db_names:
        return json.dumps("Database doesn't exist!")

    db = connection[db_id]
    coll_names = db.collection_names()
    if coll_id not in coll_names:
        return json.dumps("Collection doesn't exist!")

    collection = db[coll_id]
    try:
        collection_backup = collection.find_one({})
        collection.remove()
    except:
        return json.dumps("Unable to read data from the database!")

    try:
        collection.insert(protobuf_json.pb2json(experiment_collection))
    except:
        collection.insert(collection_backup)
        return json.dumps("Unable to store data into the database!")

    return json.dumps('Message successfully replaced!')
Example #4
0
import time
import protobuf_json
import experiment_results_pb2
from generateURL import RequestWithMethod

# The URL where server listens
apiURL = 'http://localhost:5001/'

# The name of a database

db_id = 'test_db'

# The name of an experiment in the database
exp_id = 'test_exp'

experiment_results = experiment_results_pb2.Experiment()
experiment_results.timestamp_utc = int(time.time())
experiment_results.experiment_id = 1

# Define the scenario of the experiment
experiment_results.scenario.testbed_label = 'test_testbed'  # Label the testbed
experiment_results.scenario.testbed_description = 'test'  # Give the description
experiment_results.scenario.experiment_description = 'test'  # Describe experiment
experiment_results.scenario.receiver_description = 'test'  # Describe receiver(s)
experiment_results.scenario.sender_description = 'test'  # Describe your sender(s)
experiment_results.scenario.interference_description = 'test'  # Describe interference scenario

experiment_results.primary_metrics.accuracy_error_2D_average = 0.0
# Average 2D error of the geo. accuracy of all points in the experiment
experiment_results.primary_metrics.accuracy_error_2D_variance = 0.0
# 2D error variance of the geo. accuracy of all points in the experiment
Example #5
0
def type3():
    try:
        experiment = message_evarilos_engine_type2_pb2.ece_type2()
        experiment.ParseFromString(request.data)
    except:
        return json.dumps('Experiment is not well defined!')

    response ={}
       
    if experiment.store_metrics is True:
        apiURL_metrics = experiment.metrics_storage_URI
        db_id = experiment.metrics_storage_database
        req = urllib2.Request(apiURL_metrics + 'evarilos/metrics/v1.0/database', headers={"Content-Type": "application/json"}, data = db_id)
        resp = urllib2.urlopen(req)

        coll_id = experiment.metrics_storage_collection
        req = RequestWithMethod(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id  + '/experiment', 'POST', headers={"Content-Type": "application/json"}, data = coll_id)
        resp = urllib2.urlopen(req)
            
        try:   
            req = RequestWithMethod(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id + '/experiment/' + coll_id, 'GET', headers={"Content-Type": "application/x-protobuf"}, data = 'protobuf')
            resp = urllib2.urlopen(req)
            message = resp.read()
            experiment_results = experiment_results_pb2.Experiment() 
            experiment_results.ParseFromString(message)
        except:
            experiment_results = experiment_results_pb2.Experiment() 

    localization_error_2D = {}
    localization_error_3D = {}
    latency = {} 
    power_consumption = {}
    number_of_points = 0
    number_of_good_rooms = {}

    for location in experiment_results.locations:
        number_of_points += 1
        x1 = location.true_coordinate_x
        y1 = location.true_coordinate_y
        x2 = location.est_coordinate_x
        y2 = location.est_coordinate_y
        localization_error_2D[number_of_points] = math.sqrt(math.pow((x1-x2), 2) + math.pow((y1-y2), 2))
        try:
            z1 = location.true_coordinate_z
            z2 = location.est_coordinate_z
            localization_error_3D[number_of_points] = math.sqrt(math.pow((x1-x2), 2) + math.pow((y1-y2), 2) + math.pow((z1-z2), 2))
        except:
            pass
        try:
            room1 = location.true_room_label
            room2 = location.est_room_label
            if room1.strip() == room2.strip():
                number_of_good_rooms[number_of_points] = 1 
            else:
                number_of_good_rooms[number_of_points] = 0
        except:
            pass
        try:
            latency[number_of_points] = location.latency
        except:
            pass
        try:
            power_consumption[number_of_points] = location.power_consumption
        except:
            pass

    # Get location estimate from the SUT
    if experiment.request_estimates is True:
        time1 = time.time()
        req = urllib2.Request(str(experiment.sut_location_estimate_URI), headers={"Content-Type": "application/json"})
        resp = urllib2.urlopen(req)
        time2 = time.time()
        loc_est_latency = time2 - time1
        estimated_location = json.loads(resp.read())
    else:
        estimated_location = {}
        try:
            estimated_location['coordinate_x'] = experiment.estimate.est_coordinate_x
            estimated_location['coordinate_y'] = experiment.estimate.est_coordinate_y
        except:
            return json.dumps('Define the location estimate in the message!')
        try:  
            estimated_location['coordinate_z'] = experiment.estimate.est_coordinate_z
        except:
            pass
        try:  
            estimated_location['room_label'] = experiment.estimate.est_room_label
        except:
            pass

    measurement_location = experiment_results.locations.add()
    number_of_points += 1
    measurement_location.point_id = experiment.ground_truth.point_id
    try:
        measurement_location.localized_node_id = experiment.ground_truth.localized_node_id 
    except:
        pass
    measurement_location.true_coordinate_x = x1 = experiment.ground_truth.true_coordinate_x
    measurement_location.true_coordinate_y = y1 = experiment.ground_truth.true_coordinate_y
    measurement_location.est_coordinate_x = x2 = estimated_location['coordinate_x']
    measurement_location.est_coordinate_y = y2 = estimated_location['coordinate_y']
    measurement_location.localization_error_2D = math.sqrt(math.pow((x1-x2), 2) + math.pow((y1-y2), 2))
    localization_error_2D[number_of_points] = measurement_location.localization_error_2D
    try:
        measurement_location.true_coordinate_z = z1 = experiment.ground_truth.true_coordinate_z
        measurement_location.est_coordinate_z = z2 = estimated_location['coordinate_z']
        measurement_location.localization_error_3D = math.sqrt(math.pow((x1-x2), 2) + math.pow((y1-y2), 2) + math.pow((z1-z2), 2))
        localization_error_3D[number_of_points] = measurement_location.localization_error_3D
    except:
        time.sleep(0)
    try:
        measurement_location.true_room_label = room1 = experiment.ground_truth.true_room_label
        measurement_location.est_room_label = room2 = estimated_location['room_label']
        if room1.strip() == room2.strip():
            measurement_location.localization_correct_room = 1
            number_of_good_rooms[number_of_points] = 1
        else:
            measurement_location.localization_correct_room = 0
            number_of_good_rooms[number_of_points] = 0
    except:
        pass
    try:
        measurement_location.latency = latency[number_of_points] = loc_est_latency
    except:
        pass
    try:
        measurement_location.latency = latency[number_of_points] = experiment.estimate.latency
    except:
        pass
    try:
        measurement_location.power_consumption = location.power_consumption
        power_consumption[number_of_points] = measurement_location.power_consumption
    except:
        pass
    try:
        measurement_location.power_consumption = experiment.estimate.power_consumption
        power_consumption[number_of_points] = measurement_location.power_consumption
    except:
        pass
    
    experiment_results.primary_metrics.error_2D_average = float(sum(localization_error_2D.values()))/number_of_points
    experiment_results.primary_metrics.error_2D_min = min(localization_error_2D.values())
    experiment_results.primary_metrics.error_2D_max = max(localization_error_2D.values())
    experiment_results.primary_metrics.error_2D_std = numpy.std(localization_error_2D.values())
    experiment_results.primary_metrics.error_2D_median = numpy.median(localization_error_2D.values())
    if len(localization_error_3D) != 0:
        experiment_results.primary_metrics.error_3D_average = float(sum(localization_error_3D.values()))/number_of_points
        experiment_results.primary_metrics.error_3D_min = min(localization_error_3D.values())
        experiment_results.primary_metrics.error_3D_max = max(localization_error_3D.values())
        experiment_results.primary_metrics.error_3D_std = numpy.std(localization_error_3D.values())
        experiment_results.primary_metrics.error_3D_median = numpy.median(localization_error_3D.values())
    if len(number_of_good_rooms) != 0:
        experiment_results.primary_metrics.room_error_average = float(sum(number_of_good_rooms.values()))/number_of_points
        print number_of_good_rooms.values()
        print number_of_points
    if len(latency) != 0:
        experiment_results.primary_metrics.latency_average = float(sum(latency.values()))/number_of_points
        experiment_results.primary_metrics.latency_min = min(latency.values())
        experiment_results.primary_metrics.latency_max = max(latency.values())
        experiment_results.primary_metrics.latency_std = numpy.std(latency.values())
        experiment_results.primary_metrics.latency_median = numpy.median(latency.values())
    if sum(power_consumption) != 0:
        experiment_results.primary_metrics.power_consumption_average = float(sum(power_consumption.values()))/number_of_points
        experiment_results.primary_metrics.power_consumption_median = numpy.median(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_min = min(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_max = max(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_std = numpy.std(power_consumption.values())
    else:
        try:
            experiment_results.primary_metrics.power_consumption_average = experiment.power_consumption_per_experiment
        except:
            pass
    
    experiment_results.scenario.testbed_label = experiment.scenario.testbed_label
    experiment_results.scenario.testbed_description = experiment.scenario.testbed_description
    experiment_results.scenario.experiment_description = experiment.scenario.experiment_description
    experiment_results.sut.sut_name = experiment.scenario.sut_description
    experiment_results.scenario.receiver_description = experiment.scenario.receiver_description 
    experiment_results.scenario.sender_description = experiment.scenario.sender_description  
    experiment_results.scenario.interference_description = experiment.scenario.interference_description
    experiment_results.timestamp_utc = experiment.timestamp_utc
    experiment_results.experiment_label = experiment.experiment_label
    
    obj = json.dumps(protobuf_json.pb2json(experiment_results))

    if experiment.store_metrics is True:
        apiURL_metrics = experiment.metrics_storage_URI
        db_id = experiment.metrics_storage_database
        req = urllib2.Request(apiURL_metrics + 'evarilos/metrics/v1.0/database', headers={"Content-Type": "application/json"}, data = db_id)
        resp = urllib2.urlopen(req)
        
        coll_id = experiment.metrics_storage_collection
        req = RequestWithMethod(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id  + '/experiment/' + coll_id, 'DELETE', headers={"Content-Type": "application/json"}, data = coll_id)
        resp = urllib2.urlopen(req)
        
        req = RequestWithMethod(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id  + '/experiment', 'POST', headers={"Content-Type": "application/json"}, data = coll_id)
        resp = urllib2.urlopen(req)
               
        req = urllib2.Request(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id + '/experiment/' + coll_id, headers={"Content-Type": "application/json"}, data = obj)
        resp = urllib2.urlopen(req)
        
    response = protobuf_json.pb2json(experiment_results)

    return json.dumps(response)       
Example #6
0
def type1():
    
    try:
        experiment = message_evarilos_engine_type1_pb2.ece_type1()
        experiment.ParseFromString(request.data)
    except:
        return json.dumps('Experiment is not well defined!')

    experiment_results = experiment_results_pb2.Experiment()
    localization_error_2D = {}
    localization_error_3D = {}
    latency = {} 
    power_consumption = {}
    number_of_points = 0
    number_of_good_rooms = {}

    for location in experiment.locations:
        number_of_points += 1
        measurement_location = experiment_results.locations.add()
        measurement_location.point_id = location.point_id
        try:
            measurement_location.localized_node_id = location.localized_node_id
        except:
            pass
        measurement_location.true_coordinate_x = x1 = location.true_coordinate_x
        measurement_location.true_coordinate_y = y1 = location.true_coordinate_y
        measurement_location.est_coordinate_x = x2 = location.est_coordinate_x
        measurement_location.est_coordinate_y = y2 = location.est_coordinate_y
        measurement_location.localization_error_2D = math.sqrt(math.pow((x1-x2), 2) + math.pow((y1-y2), 2))
        localization_error_2D[number_of_points] = measurement_location.localization_error_2D
        try:
            measurement_location.true_coordinate_z = z1 = location.true_coordinate_z
            measurement_location.est_coordinate_z = z2 = location.est_coordinate_z
            measurement_location.localization_error_3D = math.sqrt(math.pow((x1-x2), 2) + math.pow((y1-y2), 2) + math.pow((z1-z2), 2))
            localization_error_3D[number_of_points] = measurement_location.localization_error_3D
        except:
            pass
        try:
            measurement_location.true_room_label = room1 = location.true_room_label
            measurement_location.est_room_label = room2 = location.est_room_label
            if room1.strip() == room2.strip():
                measurement_location.localization_correct_room = 1
                number_of_good_rooms[number_of_points] = 1
            else:
                measurement_location.localization_correct_room = 0
                number_of_good_rooms[number_of_points] = 0
        except:
            pass
        try:
            measurement_location.latency = location.latency
            latency[number_of_points] = location.latency
        except:
            pass
        try:
            measurement_location.power_consumption = location.power_consumption
            power_consumption[number_of_points] = location.power_consumption
        except:
            pass

    experiment_results.primary_metrics.accuracy_error_2D_average = float(sum(localization_error_2D.values()))/number_of_points
    experiment_results.primary_metrics.accuracy_error_2D_min = min(localization_error_2D.values())
    experiment_results.primary_metrics.accuracy_error_2D_max = max(localization_error_2D.values())
    experiment_results.primary_metrics.accuracy_error_2D_variance = numpy.var(localization_error_2D.values())
    experiment_results.primary_metrics.accuracy_error_2D_median = numpy.median(localization_error_2D.values())
    experiment_results.primary_metrics.accuracy_error_2D_75_percentile = numpy.percentile(localization_error_2D.values(), 75)
    experiment_results.primary_metrics.accuracy_error_2D_90_percentile = numpy.percentile(localization_error_2D.values(), 90)
    experiment_results.primary_metrics.accuracy_error_2D_rms = math.sqrt( (1 / float(number_of_points)) * numpy.sum( numpy.power( localization_error_2D.values(), 2)))

    if len(localization_error_3D) != 0:
         experiment_results.primary_metrics.accuracy_error_3D_average = float(sum(localization_error_3D.values()))/number_of_points
         experiment_results.primary_metrics.accuracy_error_3D_min = min(localization_error_3D.values())
         experiment_results.primary_metrics.accuracy_error_3D_max = max(localization_error_3D.values())
         experiment_results.primary_metrics.accuracy_error_3D_variance = numpy.var(localization_error_3D.values())
         experiment_results.primary_metrics.accuracy_error_3D_median = numpy.median(localization_error_3D.values())
         experiment_results.primary_metrics.accuracy_error_3D_75_percentile = numpy.percentile(localization_error_3D.values(), 75)
         experiment_results.primary_metrics.accuracy_error_3D_90_percentile = numpy.percentile(localization_error_3D.values(), 90)
         experiment_results.primary_metrics.accuracy_error_3D_rms = math.sqrt( (1 / float(number_of_points)) * numpy.sum( numpy.power( localization_error_3D.values(), 2)))

    if len(number_of_good_rooms) != 0: 
        experiment_results.primary_metrics.room_accuracy_error_average = float(sum(number_of_good_rooms.values()))/number_of_points
    if len(latency) != 0:
        experiment_results.primary_metrics.latency_average = float(sum(latency.values()))/number_of_points
        experiment_results.primary_metrics.latency_min = min(latency.values())
        experiment_results.primary_metrics.latency_max = max(latency.values())
        experiment_results.primary_metrics.latency_variance = numpy.var(latency.values())
        experiment_results.primary_metrics.latency_median = numpy.median(latency.values())
        experiment_results.primary_metrics.latency_75_percentile = numpy.percentile(latency.values(), 75)
        experiment_results.primary_metrics.latency_90_percentile = numpy.percentile(latency.values(), 90)
        experiment_results.primary_metrics.latency_rms = math.sqrt( (1 / float(number_of_points)) * numpy.sum( numpy.power( latency.values(), 2)))
    if len(power_consumption) != 0:
        experiment_results.primary_metrics.power_consumption_average = float(sum(power_consumption.values()))/number_of_points
        experiment_results.primary_metrics.power_consumption_median = numpy.median(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_min = min(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_max = max(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_variance = numpy.var(power_consumption.values())
        experiment_results.primary_metrics.power_consumption_75_percentile = numpy.percentile(power_consumption.values(), 75)
        experiment_results.primary_metrics.power_consumption_90_percentile = numpy.percentile(power_consumption.values(), 90)
        experiment_results.primary_metrics.power_consumption_rms = math.sqrt( (1 / float(number_of_points)) * numpy.sum( numpy.power( power_consumption.values(), 2)))
    else:
        try:
            experiment_results.primary_metrics.power_consumption_average = experiment.power_consumption_per_experiment
        except:
            pass
    
    experiment_results.scenario.testbed_label = experiment.scenario.testbed_label
    experiment_results.scenario.testbed_description = experiment.scenario.testbed_description
    experiment_results.scenario.experiment_description = experiment.scenario.experiment_description
    experiment_results.sut.sut_name = experiment.scenario.sut_description
    experiment_results.scenario.receiver_description = experiment.scenario.receiver_description 
    experiment_results.scenario.sender_description = experiment.scenario.sender_description  
    experiment_results.scenario.interference_description = experiment.scenario.interference_description
    experiment_results.timestamp_utc = experiment.timestamp_utc
    experiment_results.experiment_label = experiment.experiment_label

    obj = json.dumps(protobuf_json.pb2json(experiment_results))

    response = {}
    if experiment.store_metrics is True:
        apiURL_metrics = experiment.metrics_storage_URI

        db_id = experiment.metrics_storage_database
        req = urllib2.Request(apiURL_metrics + 'evarilos/metrics/v1.0/database', headers={"Content-Type": "application/json"}, data = db_id)
        resp = urllib2.urlopen(req)
        coll_id = experiment.metrics_storage_collection
        req = RequestWithMethod(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id  + '/experiment', 'POST', headers={"Content-Type": "application/json"}, data = coll_id)
        resp = urllib2.urlopen(req)       
        req = urllib2.Request(apiURL_metrics + 'evarilos/metrics/v1.0/database/' + db_id + '/experiment/' + coll_id, headers={"Content-Type": "application/json"}, data = obj)
        resp = urllib2.urlopen(req)
    
    response = protobuf_json.pb2json(experiment_results)
    
    return json.dumps(response)