redfish_tools 0.2.3 → 0.2.4
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 +4 -4
- data/lib/redfish_tools/cli.rb +23 -0
- data/lib/redfish_tools/cli/listen_sse.rb +20 -0
- data/lib/redfish_tools/cli/serve_sse.rb +22 -0
- data/lib/redfish_tools/datastore.rb +4 -4
- data/lib/redfish_tools/servlet.rb +14 -3
- data/lib/redfish_tools/sse_client.rb +20 -0
- data/lib/redfish_tools/sse_server.rb +42 -0
- data/lib/redfish_tools/version.rb +1 -1
- data/redfish_tools.gemspec +1 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc9c77cc1157ae9cd393037166415de232253227a598a0e6a6e4f21cb13d7099
|
4
|
+
data.tar.gz: eaa18973472a9ade244813bf46430f8aa185a0cf9f374e7608020995796c3c00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b622a6604c1c5584055108cc19ad6a637b619cb5dc6a2890b4f0dcf016903b55b9ec190444dfad7369dce497a776073f992de46ece288f98b2feef1bf07469c
|
7
|
+
data.tar.gz: 2d4b1ebf6bb2761b0f0853ee741dca6ff1d5e5a36b8700301ad8307f8ad857498d6a9e6d444019f9604ab149ab3fa35985ed337aa00a8fa7b5cbbf816543fe0e
|
data/lib/redfish_tools/cli.rb
CHANGED
@@ -67,5 +67,28 @@ module RedfishTools
|
|
67
67
|
rescue StandardError => e
|
68
68
|
raise Thor::Error, e.to_s
|
69
69
|
end
|
70
|
+
|
71
|
+
desc "serve_sse [OPTIONS] SOURCE", "serve events from SOURCE"
|
72
|
+
option :port,
|
73
|
+
desc: "port that should be used to serve events",
|
74
|
+
default: 8001,
|
75
|
+
type: :numeric
|
76
|
+
option :bind,
|
77
|
+
desc: "address that server should bind to",
|
78
|
+
default: "127.0.0.1"
|
79
|
+
option :ssl,
|
80
|
+
desc: "use SSL",
|
81
|
+
default: false,
|
82
|
+
type: :boolean
|
83
|
+
def serve_sse(source)
|
84
|
+
require "redfish_tools/cli/serve_sse"
|
85
|
+
ServeSse.new(source, options).run
|
86
|
+
end
|
87
|
+
|
88
|
+
desc "listen_sse ADDRESS", "listen to events from ADDRESS"
|
89
|
+
def listen_sse(address)
|
90
|
+
require "redfish_tools/cli/listen_sse"
|
91
|
+
ListenSse.new(address, options).run
|
92
|
+
end
|
70
93
|
end
|
71
94
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "redfish_tools/sse_client"
|
4
|
+
|
5
|
+
module RedfishTools
|
6
|
+
class Cli
|
7
|
+
class ListenSse
|
8
|
+
def initialize(address, options)
|
9
|
+
@address = address
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
sse = RedfishTools::SseClient.new(@address)
|
15
|
+
trap("INT") { exit }
|
16
|
+
sse.start
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "redfish_tools/sse_server"
|
4
|
+
|
5
|
+
module RedfishTools
|
6
|
+
class Cli
|
7
|
+
class ServeSse
|
8
|
+
def initialize(source, options)
|
9
|
+
@source = source
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
sse = RedfishTools::SseServer.new(
|
15
|
+
@source, @options[:bind], @options[:port]
|
16
|
+
)
|
17
|
+
trap("INT") { exit }
|
18
|
+
sse.start
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -4,7 +4,7 @@ require "json"
|
|
4
4
|
|
5
5
|
module RedfishTools
|
6
6
|
class DataStore
|
7
|
-
Resource = Struct.new(:id, :body, :headers, :time)
|
7
|
+
Resource = Struct.new(:id, :body, :headers, :time, :parent)
|
8
8
|
|
9
9
|
def initialize(base_path)
|
10
10
|
@base_path = File.expand_path(base_path)
|
@@ -16,11 +16,11 @@ module RedfishTools
|
|
16
16
|
|
17
17
|
def get(id)
|
18
18
|
id = id.chomp("/")
|
19
|
-
@overlay[id]
|
19
|
+
@overlay[id] = @overlay.fetch(id, load_resource(id))
|
20
20
|
end
|
21
21
|
|
22
|
-
def set(id, body, headers: nil, time: nil)
|
23
|
-
@overlay[id] = Resource.new(id, body, headers, time)
|
22
|
+
def set(id, body, headers: nil, time: nil, parent: nil)
|
23
|
+
@overlay[id] = Resource.new(id, body, headers, time, parent)
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
@@ -56,8 +56,9 @@ module RedfishTools
|
|
56
56
|
response.status = 501
|
57
57
|
end
|
58
58
|
|
59
|
-
def do_DELETE(
|
60
|
-
|
59
|
+
def do_DELETE(request, response)
|
60
|
+
delete_item(datastore.get(request.path))
|
61
|
+
response.status = 204
|
61
62
|
end
|
62
63
|
|
63
64
|
private
|
@@ -86,7 +87,17 @@ module RedfishTools
|
|
86
87
|
item.body["Members"].push("@odata.id" => oid)
|
87
88
|
|
88
89
|
base = { "@odata.id" => oid, "Id" => id, "Name" => id }
|
89
|
-
datastore.set(
|
90
|
+
datastore.set(oid, base.merge(data), parent: item)
|
91
|
+
end
|
92
|
+
|
93
|
+
def delete_item(item)
|
94
|
+
if item.parent
|
95
|
+
item.parent.body["Members@odata.count"] -= 1
|
96
|
+
item.parent.body["Members"].delete_if do |m|
|
97
|
+
m["@odata.id"] == item.id
|
98
|
+
end
|
99
|
+
end
|
100
|
+
datastore.set(item.id, nil)
|
90
101
|
end
|
91
102
|
|
92
103
|
def authorized?(request)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
require "server_sent_events"
|
6
|
+
|
7
|
+
module RedfishTools
|
8
|
+
class SseClient
|
9
|
+
def initialize(address)
|
10
|
+
@address = address
|
11
|
+
end
|
12
|
+
|
13
|
+
def start
|
14
|
+
ServerSentEvents.listen(@address) do |event|
|
15
|
+
puts JSON.pretty_generate("id" => event.id,
|
16
|
+
"data" => JSON.parse(event.data))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "date"
|
4
|
+
require "json"
|
5
|
+
require "socket"
|
6
|
+
|
7
|
+
module RedfishTools
|
8
|
+
class SseServer
|
9
|
+
HEADERS = "HTTP/1.1 200 OK\r\n"\
|
10
|
+
"Content-Type: text/event-stream\r\n"\
|
11
|
+
"\r\n"
|
12
|
+
|
13
|
+
def initialize(source, address, port)
|
14
|
+
@events = load_events(source)
|
15
|
+
@server = TCPServer.open(address, port)
|
16
|
+
end
|
17
|
+
|
18
|
+
def start
|
19
|
+
loop { Thread.start(@server.accept) { |client| handle_client(client) } }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def load_events(source)
|
25
|
+
JSON.parse(File.read(source))
|
26
|
+
end
|
27
|
+
|
28
|
+
def handle_client(socket)
|
29
|
+
socket.print(HEADERS)
|
30
|
+
id = 0
|
31
|
+
loop do
|
32
|
+
event = @events.sample
|
33
|
+
event["Events"][0]["EventTimestamp"] = DateTime.now.to_s
|
34
|
+
socket.print("id: #{id}\ndata: #{event.to_json}\n\n")
|
35
|
+
sleep(rand(1..10))
|
36
|
+
id += 1
|
37
|
+
end
|
38
|
+
ensure
|
39
|
+
socket.close
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/redfish_tools.gemspec
CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
31
|
spec.add_runtime_dependency "redfish_client", "~> 0.2.2"
|
32
|
+
spec.add_runtime_dependency "server_sent_events", "~> 0.1.1"
|
32
33
|
spec.add_runtime_dependency "thor", "~> 0.19"
|
33
34
|
|
34
35
|
spec.add_development_dependency "bundler", "~> 1.16"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redfish_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tadej Borovšak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redfish_client
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.2.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: server_sent_events
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.1
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: thor
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,12 +143,16 @@ files:
|
|
129
143
|
- exe/redfish
|
130
144
|
- lib/redfish_tools.rb
|
131
145
|
- lib/redfish_tools/cli.rb
|
146
|
+
- lib/redfish_tools/cli/listen_sse.rb
|
132
147
|
- lib/redfish_tools/cli/record.rb
|
133
148
|
- lib/redfish_tools/cli/serve.rb
|
149
|
+
- lib/redfish_tools/cli/serve_sse.rb
|
134
150
|
- lib/redfish_tools/datastore.rb
|
135
151
|
- lib/redfish_tools/recorder.rb
|
136
152
|
- lib/redfish_tools/server.rb
|
137
153
|
- lib/redfish_tools/servlet.rb
|
154
|
+
- lib/redfish_tools/sse_client.rb
|
155
|
+
- lib/redfish_tools/sse_server.rb
|
138
156
|
- lib/redfish_tools/version.rb
|
139
157
|
- redfish_tools.gemspec
|
140
158
|
homepage: https://github.com/xlab-si/redfish-tools-ruby
|