73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
|  | local require = require | ||
|  | local json = require "json" | ||
|  | 
 | ||
|  | math.randomseed(os.clock()*100000000000) | ||
|  | 
 | ||
|  | function ParseCSVLine(line,sep) | ||
|  | 	local res = {} | ||
|  | 	local pos = 1 | ||
|  | 	sep = sep or ',' | ||
|  | 	while true do | ||
|  | 		local c = string.sub(line,pos,pos) | ||
|  | 		if (c == "") then break end | ||
|  | 		if (c == '"') then | ||
|  | 			local txt = "" | ||
|  | 			repeat | ||
|  | 				local startp,endp = string.find(line,'^%b""',pos) | ||
|  | 				txt = txt..string.sub(line,startp+1,endp-1) | ||
|  | 				pos = endp + 1 | ||
|  | 				c = string.sub(line,pos,pos) | ||
|  | 				if (c == '"') then txt = txt..'"' end | ||
|  | 
 | ||
|  | 			until (c ~= '"') | ||
|  | 			table.insert(res,txt) | ||
|  | 			assert(c == sep or c == "") | ||
|  | 			pos = pos + 1 | ||
|  | 		else | ||
|  | 			local startp,endp = string.find(line,sep,pos) | ||
|  | 			if (startp) then | ||
|  | 				table.insert(res,string.sub(line,pos,startp-1)) | ||
|  | 				pos = endp + 1 | ||
|  | 			else | ||
|  | 				table.insert(res,string.sub(line,pos)) | ||
|  | 				break | ||
|  | 			end | ||
|  | 		end | ||
|  | 	end | ||
|  | 	return res | ||
|  | end | ||
|  | 
 | ||
|  | loadFile = function() | ||
|  |     local filename = "zip_code_database.csv" | ||
|  | 
 | ||
|  |     local data = {} | ||
|  |     local count = 0 | ||
|  |     local sep = "," | ||
|  | 
 | ||
|  |     for line in io.lines(filename) do | ||
|  |         local values = ParseCSVLine(line,sep) | ||
|  |         data[count + 1] = { zip=values[1], type=values[2], city=values[4], state=values[7], county=values[8], timezone=values[9] } | ||
|  |         count = count + 1 | ||
|  |     end | ||
|  | 
 | ||
|  |     return data | ||
|  | end | ||
|  | 
 | ||
|  | local data = loadFile() | ||
|  | 
 | ||
|  | request = function() | ||
|  | 	local url_path = "/zipcode" | ||
|  | 	local val = data[math.random(1, 12079)] | ||
|  | 
 | ||
|  | 	local headers = { ["Content-Type"] = "application/json;charset=UTF-8" } | ||
|  | 	return wrk.format("POST", url_path, headers, json.stringify(val)) | ||
|  | end | ||
|  | 
 | ||
|  | done = function(summary, latency, requests) | ||
|  |     io.write("--------------POST ZIPCODE----------------\n") | ||
|  |     for _, p in pairs({ 50, 75, 90, 99, 99.999 }) do | ||
|  |         n = latency:percentile(p) | ||
|  |         io.write(string.format("%g%%,%d\n", p, n)) | ||
|  |     end | ||
|  | 	io.write("------------------------------------------\n\n") | ||
|  | end |