67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "json"
 | |
| require 'sinatra/base'
 | |
| require "sinatra/json"
 | |
| require "db/mongo/models/statistic"
 | |
| 
 | |
| module Devops
 | |
|   module API3
 | |
|     module Helpers
 | |
| 
 | |
|       include Sinatra::JSON
 | |
| 
 | |
|       def create_response msg, obj=nil, rstatus=200
 | |
|         logger.info(msg)
 | |
|         status rstatus
 | |
|         obj = {} if obj.nil?
 | |
|         obj[:message] = msg
 | |
|         json(obj)
 | |
|       end
 | |
| 
 | |
|       def halt_response msg, rstatus=400
 | |
|         obj = {:message => msg}
 | |
|         halt(rstatus, json(obj))
 | |
|       end
 | |
| 
 | |
|       def check_provider provider
 | |
|         list = ::Provider.providers
 | |
|         halt_response("Invalid provider '#{provider}', available providers: '#{list.join("', '")}'", 400) unless list.include?(provider)
 | |
|       end
 | |
| 
 | |
|       def check_provider_account provider, account
 | |
|         halt_response("Provider acount '#{account}' not found", 400) if ::Provider.get_connector(provider, account).nil?
 | |
|       end
 | |
| 
 | |
|       def check_policy policy
 | |
|         return unless policy
 | |
|         user = request.env['USER']
 | |
|         user.check_policy(policy)
 | |
|       end
 | |
| 
 | |
|       # Save information about requests with methods POST, PUT, DELETE
 | |
|       def insert_statistic msg=nil
 | |
|         unless request.get?
 | |
|           return if response.status == 401 and request.env['REMOTE_USER'].nil?
 | |
|           # parse body
 | |
|           request.body.rewind
 | |
|           raw_body = request.body.read
 | |
|           body = begin
 | |
|             ::JSON.parse(raw_body)
 | |
|           rescue ::JSON::ParserError
 | |
|             raw_body
 | |
|           end
 | |
| 
 | |
|           Devops::Model::Statistic.create({
 | |
|             user: request.env['REMOTE_USER'],
 | |
|             path: request.path,
 | |
|             method: request.request_method,
 | |
|             body: body,
 | |
|             response_code: response.status
 | |
|           })
 | |
|         end
 | |
|       end
 | |
| 
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | 
