require 'json' require 'padrino' require 'active_support' require 'active_model' require 'active_record' require 'active_record/validations' require 'sc_core/errors/invalid_data_error' require 'sc_core/view_helpers' require 'sc_core/supply_chain' require 'sc_core/logger' require 'sc_core/errors/supply_chain_error' require 'sc_core/active_record_errors_overrides' require 'state_machine' require 'sc-auth' require 'sc-auth/padrino/base_application' require 'sc-cache' #Adding module for health helpers require 'health_app/app' module ScCore class BaseApplication < Auth::BaseAuthApplication helpers ViewHelpers error StateMachine::InvalidTransition do log_warning json_status 400, SupplyChainError.new({:code=>"SC_INVALID_STATE_TRANSITION" ,:message=>env['sinatra.error'].message}) end error ActiveRecord::RecordNotFound do log_warning json_status 404, SupplyChainError.new({:code=>"SC_NOT_FOUND" ,:message=>env['sinatra.error'].message}) end error ActiveRecord::RecordInvalid do log_error parse_ar_invalid_errors(env['sinatra.error']) end error SupplyChainError do log_warning json_status env['sinatra.error'].http_error_code, env['sinatra.error'] end error JSON::ParserError do log_warning json_status 400, SupplyChainError.new({:code=>"SC_JSON_PARSE" ,:message=>env['sinatra.error'].message}) end error ActiveRecord::RecordNotSaved do log_error json_status 400, SupplyChainError.new({:code=>"SC_NOT_SAVED" ,:message=>env['sinatra.error'].message}) end error ActiveRecord::UnknownAttributeError do log_error json_status 400, SupplyChainError.new({:code=>"SC_UNKNOWN_ATTR" ,:message=>env['sinatra.error'].message}) end error ActiveRecord::StaleObjectError do log_warning json_status 409, SupplyChainError.new({:code=>"SC_RESOURCE_CONFLICT", :message=>"Data is stale. Please try again!"}) end error RestClient::Exception do log_error json_status env['sinatra.error'].http_code, SupplyChainError.new({:code=>"SC_UNKNOWN_ERROR", :message=>env['sinatra.error'].message}) end error Errno::ECONNREFUSED do log_error json_status 503, SupplyChainError.new({:code=>"SC_SERVICE_CONNREFUSED", :message=>env['sinatra.error'].message}) end error Errno::EHOSTUNREACH do log_error json_status 503, SupplyChainError.new({:code=>"SC_HOST_UNREACHABLE", :message=>env['sinatra.error'].message}) end error do if env['sinatra.error'].instance_of?(SupplyChainError) log_warning json_status env['sinatra.error'].http_error_code, env['sinatra.error'] else log_error json_status 500, SupplyChainError.new({:code=>"SC_UNKNOWN_ERROR" ,:message=>env['sinatra.error'].message}) end end def log_error logger.error(env['sinatra.error']) logger.error(env['sinatra.error'].backtrace.join("\n")) ScMetrics::increment(:exception) end def log_warning logger.warn(env['sinatra.error'].message) logger.warn(env['sinatra.error'].backtrace.join("\n")) ScMetrics::increment(:exception) end class << self def register_default_routes controller :topics do post "/topic_events" do payload = validate_http_request_body request, true # payload = payload.symbolize_names! logger.info "SC-MQ: Event Message handling for payload #{payload} " event = payload.delete(:event) ScCore::MessageBus.publish(event.to_sym, payload) 200 end end end def setup_authentication super({ :cas_base_url => SupplyChain.cas_url, :service_url => SupplyChain.url, :proxy_callback_url => SupplyChain.cas_callback_url, :system_user => SupplyChain.system_user, :system_password => SupplyChain.system_pass }) end end end end