def browser_page(request): """ return list of offlink node that cover by a border router """ lists_offlink_nodes = get_list_of_nodes() lists_offlink_nodes_json = json.dumps(lists_offlink_nodes, cls=DjangoJSONEncoder) if request.method == "POST": gatewayaddress = str(request.POST["gatewayaddress"]) nodes = None if gatewayaddress: management = sensornetwork.management() nodes = management.offlink_nodes(gatewayaddress) if nodes: offlink_nodes = OfflinkNodes(border_router_address=gatewayaddress, node_list=nodes) offlink_nodes.save() for node in nodes: node_object, created = Node.objects.get_or_create(ip_address=node) if created: node_object.save() return render_to_response( 'browser/browser_page.html', {'gatewayaddress': gatewayaddress, 'lastlistsofnodes': lists_offlink_nodes_json, 'nodes': nodes,}, RequestContext(request), ) else: return render_to_response( 'browser/browser_page.html', {'lastlistsofnodes': lists_offlink_nodes_json,}, RequestContext(request))
def nodes_page(request): """ return json data of list of nodes in the network """ nodes = get_list_of_nodes() nodes = json.dumps(nodes, cls=DjangoJSONEncoder) return HttpResponse(nodes, content_type="application/json")
def _network_val(metric): """ this function return network related data overtime a helper for network maintainace """ available_val = ['parent_etx', 'rtmetric', 'beacon_interval'] if not metric in available_val: return None nodes = get_list_of_nodes().get('nodes') network_val = [] for node in nodes: try: node_object = Node.objects.filter(ip_address=node).latest('id') except: node_object = None if node_object: node_char_objects = NodeChar.objects.filter(node=node_object) date = [] value = [] for node_char_object in node_char_objects: date.append(calendar.timegm(node_char_object.date.utctimetuple())* 1000) #timestamp in js is in ms value_name = 'node_char_object'+'.'+metric value.append(eval(value_name)) node_val = {'node':node, 'val':[date, value]} network_val.append(node_val) return network_val
def sensor_all_page(request): """ return sensors of nodes in the offlink_node """ nodes = get_list_of_nodes().get('nodes') nodes_sensors = [] for node in nodes: nodes_sensors.append(_get_sensor_value(node)) return HttpResponse(json.dumps(nodes_sensors, cls=DjangoJSONEncoder), content_type="application/json")
def _collect_all(command): """ request to start/stop the collectd from all nodes which is manage by the gateway command = START/STOP """ offlink_nodes = get_list_of_nodes() nodes = offlink_nodes.get('nodes') if nodes != None: management = sensornetwork.management() management.collect_all(nodes, command) #command = START/STOP #TODO: check the reply for status status = {} status['status'] = 'success' return json.dumps(status, cls=DjangoJSONEncoder)
def network_map(request): """ the function return json file for network map """ nodes = get_list_of_nodes().get('nodes') nodes_infor = [] for node in nodes: try: node_object = Node.objects.filter(ip_address=node).order_by('-date')[:1][0] except: node_object = None #if the node is not in the Node, then just ignore it if node_object: try: node_infor_object = Infor.objects.filter(node=node_object).order_by('-date')[:1][0] node_id = node_infor_object.if_phys_addr except: node_id = None try: node_char_object = NodeChar.objects.filter(node=node_object).order_by('-date')[:1][0] parent = node_char_object.parent etx = node_char_object.parent_etx except: parent = None etx = None node_infor = {'node': node_id, 'parent': parent, 'etx': etx} nodes_infor.append(node_infor) #convert from border router IP address to its' MAC address try: offlink_object = OfflinkNodes.objects.all().order_by('-date')[:1][0] border_router_ip = offlink_object.border_router_address #border_router_mac = Node.objects.filter(ip_address=border_router_ip).order_by('-date')[:1][0] #TODO: gateway would be the MAC address, not ip except: border_router_mac = None border_router_ip = None network_data = {'gateway':border_router_ip, 'nodes':nodes_infor} return HttpResponse(json.dumps(network_data, cls=DjangoJSONEncoder), content_type="application/json")