Exemplo n.º 1
0
def request(context, flow):
    print flow.request.path
    m = re.match("^/geoserver/i/([\d]+)/([\d]+)/([\d]+)$", flow.request.path)
    if m is not None:
        print "match success!"
        imagename = flow.request.path_components[1] + '_' + flow.request.path_components[2] + '_' + flow.request.path_components[3] + '_' + flow.request.path_components[4];
        imagequerycache = "/home/root/accesscache " + imagename;
        imagequerycacheresult = os.popen(imagequerycache).read();
        if (imagequerycacheresult != "No" and imagequerycacheresult != "ERROR"):
        	resp = HTTPResponse(
		"HTTP/1.1", 200, "OK", Headers(Content_Type="image/png"), "helloworld")
                with open(imagequerycacheresult, 'r') as f:
             		payload = f.read()
             		resp.content = payload
             		resp.headers["Content-Length"] = str(len(payload))
                        resp.headers["Access-Control-Allow-Origin"] = "*"
                        print len(payload)
                        f.close()
                flow.reply(resp)
                return
	else:
		imagefilepath = "/home/root/bpqrecv/" + imagename;
                randregid = randrange(0, 32768);
		print randregid;
		querycomm = "/home/root/DTN2/apps/dtnquery/dtnquery -m send -s dtn://dtn1.dtn -d dtn://dtn2.dtn -q " + imagename + " -i " + str(randregid);
                print querycomm;
		os.system(querycomm);
                for x in range(0, 60):
			imagequerycacheresult = os.popen(imagequerycache).read();
			if (imagequerycacheresult != "No" and imagequerycacheresult != "ERROR"):
				resp = HTTPResponse(
				"HTTP/1.1", 200, "OK", Headers(Content_Type="image/png"), "helloworld")
                		with open(imagequerycacheresult, 'r') as f:
             				payload = f.read()
             				resp.content = payload
             				resp.headers["Content-Length"] = str(len(payload))
					resp.headers["Access-Control-Allow-Origin"] = "*"
                       			print len(payload)
                        		f.close()
                		flow.reply(resp)
                		return
                	else:	
                		time.sleep(1);
    z = re.match("^/geoserver/z/([\d]+)/([\d]+)/([\d]+)$", flow.request.path)
    if z is not None:
        vectorname = flow.request.path_components[1] + '_' +  flow.request.path_components[2] + '_' + flow.request.path_components[3] + '_' + flow.request.path_components[4]
        vectorquerycache = "/tmp/ramdisk0/accesscache " + vectorname;
	vectorquerycacheresult = os.popen(vectorquerycache).read();
        if (vectorquerycacheresult != "No" and vectorquerycacheresult != "ERROR"):
        	resp = HTTPResponse(
		"HTTP/1.1", 200, "OK", Headers(Content_Type="application/octet-stream"), "helloworld")
                with open(vectorquerycacheresult, 'r') as f:
             		payload = f.read()
             		resp.content = payload
             		resp.headers["Content-Length"] = str(len(payload))
			resp.headers["Access-Control-Allow-Origin"] = "*"
                        resp.headers["Cache-Control"]= "public, max-age=86400"
                        print len(payload)
                        f.close()
                flow.reply(resp)
                return
        else:
                waitingcomm = "/tmp/ramdisk0/waiting " + vectorname;
                os.system(waitingcomm);
        	vectorquerycacheresult = os.popen(vectorquerycache).read();
                print "vectorquerycacheresult: " + vectorquerycacheresult;
                if (vectorquerycacheresult != "No" and vectorquerycacheresult != "ERROR"):
        		resp = HTTPResponse(
			"HTTP/1.1", 200, "OK", Headers(Content_Type="application/octet-stream"), "helloworld")
                	with open(vectorquerycacheresult, 'r') as f:
             			payload = f.read()
             			resp.content = payload
             			resp.headers["Content-Length"] = str(len(payload))
				resp.headers["Access-Control-Allow-Origin"] = "*"
                                resp.headers["Cache-Control"]= "public, max-age=86400"
                        	print len(payload)
                        	f.close()
                	flow.reply(resp)
                        return
    v = re.match("^/geoserver/v/([\d]+)/([\d]+)/([\d]+)$", flow.request.path)
    if v is not None:
        vectorname = flow.request.path_components[1] + '_' +  flow.request.path_components[2] + '_' + flow.request.path_components[3] + '_' + flow.request.path_components[4]
        print "vectorname: " + vectorname;
        vectorquerycache = "/tmp/ramdisk0/accesscache " + vectorname;
	vectorquerycacheresult = os.popen(vectorquerycache).read();
        if (vectorquerycacheresult != "No" and vectorquerycacheresult != "ERROR"):
        	resp = HTTPResponse(
		"HTTP/1.1", 200, "OK", Headers(Content_Type="application/json"), "helloworld")
                with open(vectorquerycacheresult, 'r') as f:
             		payload = f.read()
             		resp.content = payload
             		resp.headers["Content-Length"] = str(len(payload))
			resp.headers["Access-Control-Allow-Origin"] = "*"
                        resp.headers["Cache-Control"]= "public, max-age=86400"
                        print len(payload)
                        f.close()
                flow.reply(resp)
                return
        else:
                waitingcomm = "/tmp/ramdisk0/waiting " + vectorname;
                os.system(waitingcomm);
        	vectorquerycacheresult = os.popen(vectorquerycache).read();
                if (vectorquerycacheresult != "No" and vectorquerycacheresult != "ERROR"):
        		resp = HTTPResponse(
			"HTTP/1.1", 200, "OK", Headers(Content_Type="application/json"), "helloworld")
                	with open(vectorquerycacheresult, 'r') as f:
             			payload = f.read()
             			resp.content = payload
             			resp.headers["Content-Length"] = str(len(payload))
				resp.headers["Access-Control-Allow-Origin"] = "*"
                                resp.headers["Cache-Control"]= "public, max-age=86400"
                        	print len(payload)
                        	f.close()
                	flow.reply(resp)
                	return
    resp = HTTPResponse(
		"HTTP/1.1", 404, "Not Found", Headers(Content_Type="text/html"), "Not Found")
    resp.headers["Content-Length"] = str(len("Not Found"))
    flow.reply(resp)