Class: FaaStRuby::Server

Inherits:
Sinatra::Base
  • Object
show all
Includes:
Logger::Requests
Defined in:
lib/faastruby/server/app.rb

Instance Method Summary collapse

Methods included from Logger::Requests

#puts, rougify, #rougify, #tag

Instance Method Details

#body_content(request_body) ⇒ Object



99
100
101
102
# File 'lib/faastruby/server/app.rb', line 99

def body_content(request_body)
  return {} if (content = request_body.read).nil?
  content
end

#form_content(request_env) ⇒ Object



94
95
96
97
# File 'lib/faastruby/server/app.rb', line 94

def form_content(request_env)
  return {} if (content = request_env['rack.request.form_hash']).nil?
  content.to_json
end

#is_a_function?(name) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/faastruby/server/app.rb', line 84

def is_a_function?(name)
  File.file?("#{FaaStRuby::ProjectConfig.functions_dir}/#{name}/faastruby.yml")
end

#log_request_message(function_name, request, request_uuid, query_params, body, context, request_headers) ⇒ Object



54
55
56
# File 'lib/faastruby/server/app.rb', line 54

def log_request_message(function_name, request, request_uuid, query_params, body, context, request_headers)
  puts "[#{function_name}] <- [REQUEST: #{request.request_method} \"#{request.fullpath}\"] request_id=\"#{request_uuid}\" body=#{body.inspect} query_params=#{query_params} headers=#{request_headers}"
end

#log_response_message(function_name, time, request_uuid, response, print_body) ⇒ Object



58
59
60
# File 'lib/faastruby/server/app.rb', line 58

def log_response_message(function_name, time, request_uuid, response, print_body)
  puts "[#{function_name}] -> [RESPONSE: #{time}ms] request_id=\"#{request_uuid}\" status=#{response.status} body=#{print_body.inspect} headers=#{response.headers}"
end

#parse_body(request, content_type, method) ⇒ Object



88
89
90
91
92
# File 'lib/faastruby/server/app.rb', line 88

def parse_body(request, content_type, method)
  return nil if method == 'GET'
  return form_content(request.env) if content_type == 'application/x-www-form-urlencoded'
  body_content(request.body)
end

#parse_headers(env) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/faastruby/server/app.rb', line 113

def parse_headers(env)
  result = {}
  env.select{|e| e.match(/^HTTP_/)}.each do |k, v|
    newkey = k.sub(/^HTTP_/, '').split('_').map{|x| x.capitalize}.join('-')
    result[newkey] = v
  end
  result['Content-Type'] = env['CONTENT_TYPE']
  result['Request-Method'] = env['REQUEST_METHOD']
  result['Content-Length'] = env['CONTENT_LENGTH']
  result['Remote-Addr'] = env['REMOTE_ADDR']
  result
end

#parse_query(query_string) ⇒ Object



104
105
106
107
108
109
110
111
# File 'lib/faastruby/server/app.rb', line 104

def parse_query(query_string)
  hash = {}
  query_string.split('&').each do |param|
    key, value = param.split('=')
    hash[key] = value
  end
  hash
end

#parse_response(response) ⇒ Object



69
70
71
72
# File 'lib/faastruby/server/app.rb', line 69

def parse_response(response)
  return [Base64.urlsafe_decode64(response.body), "Base64(#{response.body})"] if response.binary?
  return [response.body, response.body]
end

#resolve_function_name(splat) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/faastruby/server/app.rb', line 74

def resolve_function_name(splat)
  if splat == ''
    return FaaStRuby::ProjectConfig.root_to
  end
  if !is_a_function?(splat)
    return FaaStRuby::ProjectConfig.catch_all
  end
  return splat
end

#set_response_headers(response, request_uuid, original_request_id = nil, time) ⇒ Object



62
63
64
65
66
67
# File 'lib/faastruby/server/app.rb', line 62

def set_response_headers(response, request_uuid, original_request_id = nil, time)
  response.headers['X-Request-Id'] = request_uuid
  response.headers['X-Original-Request-Id'] = original_request_id if original_request_id
  response.headers['X-Execution-time'] = "#{time}ms"
  response.headers
end