fdk 0.0.16 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +2 -2
- data/lib/fdk.rb +18 -0
- data/lib/fdk/call.rb +19 -2
- data/lib/fdk/context.rb +18 -0
- data/lib/fdk/function.rb +18 -0
- data/lib/fdk/listener.rb +64 -16
- data/lib/fdk/runner.rb +20 -2
- data/lib/fdk/support_classes.rb +18 -0
- data/lib/fdk/version.rb +19 -1
- metadata +24 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 82337a2e0152a4b8e145e5b7e14f4ec76cbbbf64a4f698ddf0b5b87ca0c329e0
|
4
|
+
data.tar.gz: 36ec9f76404c426a30f81732709aee3bc2b55beebea4fd67ec4fc3c9724ff968
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4657ece9b952b4f3a15c5e0e26ccf0e36991def60f94c0255fa7b8aef4e00b6e06580653396df32c8b8d534fb31d728dea794bff9a18009b956f6b58162f426c
|
7
|
+
data.tar.gz: 9a4a9eb7ec981dbaa009c1d5d919255f4fd5439309e9fa0fd2fd1be2d8c9f00084677c45676d582461272f115475b854e8060f89e904e476a98a1f07a3f03ef8
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# Function Development Kit for Ruby
|
2
|
+
The Function Development Kit for Ruby (FDK for Ruby) provides a Ruby framework for developing functions for use with [Fn](https://fnproject.github.io).
|
3
3
|
|
4
4
|
[](https://circleci.com/gh/fnproject/fdk-ruby)
|
5
5
|
|
data/lib/fdk.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
require_relative "fdk/version"
|
2
20
|
require_relative "fdk/runner"
|
3
21
|
require_relative "fdk/context"
|
data/lib/fdk/call.rb
CHANGED
@@ -1,8 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
module FDK
|
2
20
|
# Call represents a call to the target function or lambda
|
3
21
|
class Call
|
4
|
-
FILTER_HEADERS = [
|
5
|
-
"upgrade", "trailer"].freeze
|
22
|
+
FILTER_HEADERS = %w[content-length te transfer-encoding upgrade trailer].freeze
|
6
23
|
|
7
24
|
attr_reader :request, :response
|
8
25
|
attr_accessor :error
|
data/lib/fdk/context.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
require "date"
|
2
20
|
|
3
21
|
module FDK
|
data/lib/fdk/function.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
module FDK
|
2
20
|
# Function represents a function function or lambda
|
3
21
|
class Function
|
data/lib/fdk/listener.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
module FDK
|
2
20
|
# Represents the socket that Fn uses to communicate
|
3
21
|
# with the FDK (and thence the function)
|
@@ -9,13 +27,16 @@ module FDK
|
|
9
27
|
#
|
10
28
|
# Fn waits for the socket_path to be created and then connects
|
11
29
|
class Listener
|
12
|
-
attr_reader :url, :private_socket
|
30
|
+
attr_reader :url, :private_socket, :fn_logframe_name, :fn_logframe_hdr
|
13
31
|
|
14
32
|
def initialize(url:)
|
15
33
|
if url.nil? || !url.start_with?("unix:/")
|
16
34
|
raise "Missing or invalid socket URL in FN_LISTENER."
|
17
35
|
end
|
18
36
|
|
37
|
+
@fn_logframe_name = ENV["FN_LOGFRAME_NAME"]
|
38
|
+
@fn_logframe_hdr = ENV["FN_LOGFRAME_HDR"]
|
39
|
+
|
19
40
|
@url = url
|
20
41
|
@private_socket = UNIXServer.open(private_socket_path)
|
21
42
|
end
|
@@ -32,29 +53,35 @@ module FDK
|
|
32
53
|
end
|
33
54
|
|
34
55
|
def listen(&block)
|
35
|
-
|
36
|
-
begin
|
37
|
-
raise StandardError("No block given") unless block_given?
|
56
|
+
raise StandardError("No block given") unless block_given?
|
38
57
|
|
39
|
-
|
58
|
+
begin
|
59
|
+
loop do
|
60
|
+
handle_request(fn_block: block)
|
61
|
+
end
|
40
62
|
rescue StandardError => e
|
41
63
|
FDK.log(entry: "Error in request handling #{e}")
|
42
64
|
FDK.log(entry: e.backtrace)
|
43
65
|
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def handle_request(fn_block:)
|
69
|
+
local_socket = socket.accept
|
70
|
+
req, resp = new_req_resp
|
71
|
+
req.parse(local_socket)
|
72
|
+
FDK.debug "got request #{req}"
|
73
|
+
log_frame_header(req.header)
|
74
|
+
fn_block.call(req, resp)
|
75
|
+
resp["Connection"] = "close" # we're not using keep alives sadly
|
76
|
+
resp.send_response(local_socket)
|
77
|
+
FDK.debug "sending resp #{resp.status}, #{resp.header}"
|
44
78
|
local_socket.close
|
45
79
|
end
|
46
80
|
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
req.parse(socket)
|
52
|
-
FDK.debug "got request #{req}"
|
53
|
-
fn_block.call(req, resp)
|
54
|
-
resp.send_response(socket)
|
55
|
-
FDK.debug "sending resp #{resp.status}, #{resp.header}"
|
56
|
-
break unless req.keep_alive?
|
57
|
-
end
|
81
|
+
def new_req_resp
|
82
|
+
req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP)
|
83
|
+
resp = WEBrick::HTTPResponse.new(WEBrick::Config::HTTP)
|
84
|
+
[req, resp]
|
58
85
|
end
|
59
86
|
|
60
87
|
def socket_path
|
@@ -64,5 +91,26 @@ module FDK
|
|
64
91
|
def private_socket_path
|
65
92
|
socket_path + ".private"
|
66
93
|
end
|
94
|
+
|
95
|
+
def log_frame_header(headers)
|
96
|
+
return unless logframe_vars_exist
|
97
|
+
|
98
|
+
k = @fn_logframe_hdr.downcase
|
99
|
+
v = headers[k]
|
100
|
+
return if v.nil? || v.empty?
|
101
|
+
|
102
|
+
frm = "\n#{@fn_logframe_name}=#{v[0]}\n"
|
103
|
+
$stderr.print frm
|
104
|
+
$stderr.flush
|
105
|
+
$stdout.print frm
|
106
|
+
$stdout.flush
|
107
|
+
end
|
108
|
+
|
109
|
+
def logframe_vars_exist
|
110
|
+
return false if @fn_logframe_name.nil? || @fn_logframe_name.empty? ||
|
111
|
+
@fn_logframe_hdr.nil? || @fn_logframe_hdr.empty?
|
112
|
+
|
113
|
+
true
|
114
|
+
end
|
67
115
|
end
|
68
116
|
end
|
data/lib/fdk/runner.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
require "webrick"
|
2
20
|
require "fileutils"
|
3
21
|
require "json"
|
@@ -7,7 +25,7 @@ require "set"
|
|
7
25
|
# Executes it with input
|
8
26
|
# Responds with output
|
9
27
|
module FDK
|
10
|
-
FDK_LOG_THRESHOLD = "FDK_LOG_THRESHOLD"
|
28
|
+
FDK_LOG_THRESHOLD = "FDK_LOG_THRESHOLD"
|
11
29
|
FDK_LOG_DEBUG = 0
|
12
30
|
FDK_LOG_DEFAULT = 1
|
13
31
|
|
@@ -18,7 +36,7 @@ module FDK
|
|
18
36
|
# Writes the entry to STDERR if the log_level >= log_threshold
|
19
37
|
# If no log level is specified, 1 is assumed.
|
20
38
|
def self.log(entry:, log_level: FDK_LOG_DEFAULT)
|
21
|
-
|
39
|
+
warn(entry) if log_level >= log_threshold
|
22
40
|
end
|
23
41
|
|
24
42
|
def self.log_error(error:)
|
data/lib/fdk/support_classes.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
module FDK
|
2
20
|
# ParsedInput stores raw input and can parse it as
|
3
21
|
# JSON (add extra formats as required)
|
data/lib/fdk/version.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
module FDK
|
2
|
-
VERSION = "0.0.
|
20
|
+
VERSION = "0.0.24"
|
3
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Reeder
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-06-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -32,6 +32,26 @@ dependencies:
|
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 2.1.0
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: webrick
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.4'
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.4.2
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - "~>"
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '1.4'
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.4.2
|
35
55
|
- !ruby/object:Gem::Dependency
|
36
56
|
name: net_http_unix
|
37
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,15 +118,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
118
|
requirements:
|
99
119
|
- - ">="
|
100
120
|
- !ruby/object:Gem::Version
|
101
|
-
version: '2.
|
121
|
+
version: '2.5'
|
102
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
123
|
requirements:
|
104
124
|
- - ">="
|
105
125
|
- !ruby/object:Gem::Version
|
106
126
|
version: '0'
|
107
127
|
requirements: []
|
108
|
-
|
109
|
-
rubygems_version: 2.6.14.1
|
128
|
+
rubygems_version: 3.1.6
|
110
129
|
signing_key:
|
111
130
|
specification_version: 4
|
112
131
|
summary: Ruby FDK for Fn Project
|