From 34551a7f3ded92e3a2ed2b5abd06947f03da2631 Mon Sep 17 00:00:00 2001 From: Matt Hayes Date: Tue, 29 Oct 2013 16:15:07 -0700 Subject: [PATCH] Use POST in place of GET to fetch usage data from server --- server/app.rb | 89 +++++++++++-------- .../javascripts/controllers/index.js.coffee | 23 ++--- 2 files changed, 65 insertions(+), 47 deletions(-) diff --git a/server/app.rb b/server/app.rb index 7f51b2d..6f95862 100644 --- a/server/app.rb +++ b/server/app.rb @@ -42,54 +42,69 @@ def url_for_asset(asset_name) end get "/api/usage" do - content_type :json + get_usage(params) +end - date_start = params[:start] || (halt 500) - date_end = params[:end] || (halt 500) - unit = params[:unit] || (halt 500) - zone = params[:zone] || (halt 500) - users = params[:user] || (halt 500) - users_to_aggregate = params[:users_to_aggregate] || (halt 500) - cluster = params[:cluster] || (halt 500) - type = (params[:type] && params[:type].to_sym) || (halt 500) +post "/api/usage" do + parsed = JSON.parse request.body.read + params = {} + parsed.each do |k,v| + params[k.to_sym] = v + end + get_usage(params) +end - time = { - :start => date_start.to_i, - :end => date_end.to_i, - :unit => unit, - :zone => zone - } +helpers do + def get_usage(params) + content_type :json - users = users.split(",").uniq - users_to_aggregate = users_to_aggregate.split(",").uniq + date_start = params[:start] || (halt 500) + date_end = params[:end] || (halt 500) + unit = params[:unit] || (halt 500) + zone = params[:zone] || (halt 500) + users = params[:user] || (halt 500) + users_to_aggregate = params[:users_to_aggregate] || (halt 500) + cluster = params[:cluster] || (halt 500) + type = (params[:type] && params[:type].to_sym) || (halt 500) - return_val = {} + time = { + :start => date_start.to_i, + :end => date_end.to_i, + :unit => unit, + :zone => zone + } - if users.size > 0 - result = UsageData.fetch_per_user_data(cluster,users,time,type) + users = users.split(",").uniq + users_to_aggregate = users_to_aggregate.split(",").uniq - return_val[:times] = result[:times] - return_val[:users] = result[:users] - else - return_val[:users] = [] - end + return_val = {} - return_val[:users_aggregated] = [] - return_val[:num_aggregated_users] = 0 + if users.size > 0 + result = UsageData.fetch_per_user_data(cluster,users,time,type) - if users_to_aggregate.size > 0 - result = UsageData.fetch_aggregated_data(cluster,users_to_aggregate,time,type) - - return_val[:users_aggregated] = result[:data] - return_val[:num_aggregated_users] = users_to_aggregate.size + return_val[:times] = result[:times] + return_val[:users] = result[:users] + else + return_val[:users] = [] + end - # get times from first available, they're all the same - return_val[:times] ||= result[:times] - end + return_val[:users_aggregated] = [] + return_val[:num_aggregated_users] = 0 + + if users_to_aggregate.size > 0 + result = UsageData.fetch_aggregated_data(cluster,users_to_aggregate,time,type) + + return_val[:users_aggregated] = result[:data] + return_val[:num_aggregated_users] = users_to_aggregate.size - return_val[:cluster] = cluster + # get times from first available, they're all the same + return_val[:times] ||= result[:times] + end - return_val.to_json + return_val[:cluster] = cluster + + return_val.to_json + end end get "/api/table" do diff --git a/server/app/assets/javascripts/controllers/index.js.coffee b/server/app/assets/javascripts/controllers/index.js.coffee index 0117509..682af19 100644 --- a/server/app/assets/javascripts/controllers/index.js.coffee +++ b/server/app/assets/javascripts/controllers/index.js.coffee @@ -139,19 +139,22 @@ App.IndexController = Ember.Controller.extend( console?.log "Loading usage data" + data = { + start: start_time, + end: end_time, + unit: selected_unit + zone: selected_zone + user: selected_users.join(",") + users_to_aggregate: users_to_aggregate.join(",") + cluster: selected_cluster + type: selected_type + } + this.incrementInProgress() $.ajax( url: "api/usage" - type: "GET" - data: - start: start_time, - end: end_time, - unit: selected_unit - zone: selected_zone - user: selected_users.join(",") - users_to_aggregate: users_to_aggregate.join(",") - cluster: selected_cluster - type: selected_type + type: "POST" + data: JSON.stringify(data) success: (data) => this.decrementInProgress() this.set("usageData",data)