* perfdata more work

This commit is contained in:
Seth Call 2013-04-15 21:10:04 -05:00
parent effc3397f4
commit f5b8ac4da5
7 changed files with 57 additions and 9 deletions

View File

@ -32,7 +32,7 @@ gem 'pg', '0.14.0'
gem 'compass-rails'
gem 'rabl' # for JSON API development
gem 'gon' # for passthrough of Ruby variables to Javascript variables
gem 'eventmachine', '1.0.0'
gem 'eventmachine', '1.0.3'
gem 'amqp', '0.9.8'
gem 'logging-rails', :require => 'logging/rails'
gem 'omniauth', '1.1.1'
@ -45,6 +45,7 @@ gem 'aws-sdk', '1.8.0'
gem 'aasm', '3.0.16'
gem 'carrierwave'
gem 'devise', '>= 1.1.2'
gem 'thin'
#group :libv8 do
# gem 'libv8', "~> 3.11.8"
#end

View File

@ -1,3 +1,5 @@
require 'aws-sdk'
class ApiMusicSessionsController < ApiController
# have to be signed in currently to see this screen
@ -163,16 +165,35 @@ class ApiMusicSessionsController < ApiController
end
def perf_upload
# URI.unescape(bucket_gen.objects[@perfdata.uri].url_for(:read, :expires => SampleApp::Application.config.perf_data_signed_url_timeout, :response_content_type => 'text/csv').to_s)
music_session = MusicSession.find(params[:id])
if SampleApp::Application.config.upload_perf_to_s3
@perfdata = MusicSessionPerfData.new()
@perfdata.music_session = music_session
@perfdata.client_id = params[:client_id]
@perfdata.save
if @perfdata.errors.any?
# we have to do this because api_session_detail_url will fail with a bad @music_session
response.status = :unprocessable_entity
respond_with @perfdata
return
end
if SampleApp::Application.config.storage_type == :fog
s3 = AWS::S3.new(:access_key_id => SampleApp::Application.config.aws_access_key_id,
:secret_access_key => SampleApp::Application.config.aws_secret_access_key)
bucket = s3.buckets[SampleApp::Application.config.aws_bucket]
redirect_to URI.unescape(bucket.objects[@perdata.uri].url_for(:write, :expires => SampleApp::Application.config.perf_data_signed_url_timeout, :'response_content_type' => 'text/csv').to_s)
else
if params[:redirected_back].nil?
if params[:redirected_back].nil? || !params[:redirected_back]
# first time that a client has asked to do a PUT (not redirected back here)
redirect_to request.fullpath + '&redirected_back=true'
else
# we should store it here to aid in development, but we don't have to until someone wants the feature
# so... just return 200
render :json => { :id => @perfdata.id }, :status => 200
end
end

View File

@ -113,5 +113,10 @@ module SampleApp
config.aws_region = 'us-east-1'
config.aws_bucket = 'jamkazam-dev'
config.aws_cache = '315576000'
# perf_data configs
config.perf_data_bucket_key = "perf_data"
config.perf_data_signed_url_timeout = 3600 # 1 hour
end
end

View File

@ -41,7 +41,7 @@ SampleApp::Application.configure do
# Show the logging configuration on STDOUT
config.show_log_configuration = true
config.websocket_gateway_enable = true
config.websocket_gateway_enable = false
TEST_CONNECT_STATES = false
end

View File

@ -4,7 +4,7 @@ CarrierWave.root = Rails.root.join(Rails.public_path).to_s
CarrierWave.base_path = ENV['RAILS_RELATIVE_URL_ROOT']
CarrierWave.configure do |config|
config.storage = SampleApp::Application.config.store_type
config.storage = SampleApp::Application.config.storage_type
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => SampleApp::Application.config.aws_access_key_id,
@ -13,8 +13,8 @@ CarrierWave.configure do |config|
}
config.fog_directory = SampleApp::Application.config.aws_bucket # required
config.fog_public = true # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>"max-age=#{JamAdmin::Application.config.aws_cache}"} # optional, defaults to {}
end
config.fog_attributes = {'Cache-Control'=>"max-age=#{SampleApp::Application.config.aws_cache}"} # optional, defaults to {}
end
require 'carrierwave/orm/activerecord'

View File

@ -63,6 +63,7 @@ FactoryGirl.define do
sequence(:client_id) { |n| "Client#{n}" }
ip_address "1.1.1.1"
as_musician true
sequence(:client_id) { |n| "client_id#{n}"}
end
factory :friendship, :class => JamRuby::Friendship do

View File

@ -556,6 +556,26 @@ describe "Music Session API ", :type => :api do
sessions.first["description"].should == "My Session"
end
it "prepare for upload" do
user = FactoryGirl.create(:user)
music_session = FactoryGirl.create(:music_session, :creator => user, :description => "My Session")
client = FactoryGirl.create(:connection, :user => user)
put "/api/sessions/#{music_session.id}/perf.json", "CONTENT_TYPE" => "application/json"
last_response.status.should == 302
redirect = last_response.headers["Location"]
p redirect
put redirect + '.json', "CONTENT_TYPE" => 'application/json'
last_response.status.should == 200
body = JSON.parse(last_response.body)
perf_data_id = body["id"]
music_session_perf_data = MusicSessionPerfData.find(perf_data_id)
music_session_perf_data.should_not be_nil
music_session_perf_data.music_session.should == music_session
end
end