Skip to content

Instantly share code, notes, and snippets.

@litch
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save litch/c89e5d4b74c011898b4e to your computer and use it in GitHub Desktop.
Save litch/c89e5d4b74c011898b4e to your computer and use it in GitHub Desktop.
Vert.X Polling EventStore Client
require 'vertx'
@client = Vertx::HttpClient.new
@client.port = 2113
@client.host = 'localhost'
module TestStream
class WriteEvent
attr_reader :event_data
attr_reader :client
def self.!
new(client).!
end
def self.client
@client ||= Vertx::HttpClient.new.tap do |client|
p "Initializing Client"
client.port = 2113
client.host = 'localhost'
end
end
def initialize(client)
@event_data = { "something" => "has data" }.to_json
@client = client
end
def !
request = client.post('/streams/newstream') do |resp|
puts "got response #{resp.status_code}"
resp.body_handler do |body|
puts "The total body received was #{body.length} bytes"
puts body
end
end
request.put_header('ES-EventType', 'SomeEvent')
request.put_header("ES-EventId", java.util.UUID.randomUUID().to_s)
request.put_header('Accept', 'application/vnd.eventstore.atom+json')
request.put_header('Content-Length', event_data.length)
request.put_header('Content-Type', 'application/json')
request.write_str(event_data)
request.end
end
end
class Poll
attr_reader :etag
attr_reader :client
def self.!
new(client).!
end
def self.client
@client ||= Vertx::HttpClient.new.tap do |client|
p "Initializing Client"
client.port = 2113
client.host = 'localhost'
end
end
def initialize(client)
@client = client
end
def !
Vertx.set_periodic(50) { make_request }
end
def make_request
request = @client.get('/streams/newstream?embed=body') do |resp|
puts "got response #{resp.status_code}"
resp.body_handler do |body|
puts "The total body received was #{body.length} bytes"
if body.length > 0
parsed_body = JSON.parse(body.to_s)
@etag = parsed_body['eTag']
something = parsed_body['entries'].take_while { |i| i['title'] != @most_recent_event }
@most_recent_event = parsed_body['entries'].first['title']
HandleEvent.!(something)
end
end
end
request.put_header('If-None-Match', etag)
request.put_header('Accept', 'application/vnd.eventstore.atom+json')
request.end
end
end
class HandleEvent
def self.!(event)
puts event
end
end
end
Vertx.set_periodic(500) { TestStream::WriteEvent.! }
TestStream::Poll.!
☹ ~/code/vertx-evenstore-http-client[master]% vertx run main.rb
"Initializing Client"
Succeeded in deploying verticle
got response 200
The total body received was 17773 bytes
{"eventId"=>"ac4250a7-1573-4447-a63a-7100b5c15efe", "eventType"=>"SomeEvent", "eventNumber"=>116, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>116, "positionStreamId"=>"newstream", "title"=>"116@newstream", "id"=>"http://localhost:2113/streams/newstream/116", "updated"=>"2015-03-01T22:55:24.022173Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/116", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/116", "relation"=>"alternate"}]}
{"eventId"=>"c4bbd0dd-250d-40f3-b869-114b873894fb", "eventType"=>"SomeEvent", "eventNumber"=>115, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>115, "positionStreamId"=>"newstream", "title"=>"115@newstream", "id"=>"http://localhost:2113/streams/newstream/115", "updated"=>"2015-03-01T22:55:23.524422Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/115", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/115", "relation"=>"alternate"}]}
{"eventId"=>"c9b247fb-4723-4261-821b-c17459db333a", "eventType"=>"SomeEvent", "eventNumber"=>114, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>114, "positionStreamId"=>"newstream", "title"=>"114@newstream", "id"=>"http://localhost:2113/streams/newstream/114", "updated"=>"2015-03-01T22:55:23.022099Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/114", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/114", "relation"=>"alternate"}]}
{"eventId"=>"230fa5a2-7c04-4e52-8aa9-275e85bb0a63", "eventType"=>"SomeEvent", "eventNumber"=>113, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>113, "positionStreamId"=>"newstream", "title"=>"113@newstream", "id"=>"http://localhost:2113/streams/newstream/113", "updated"=>"2015-03-01T22:55:22.525291Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/113", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/113", "relation"=>"alternate"}]}
{"eventId"=>"ee16b585-7ebe-4ecd-b0cf-bbef20d9c743", "eventType"=>"SomeEvent", "eventNumber"=>112, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>112, "positionStreamId"=>"newstream", "title"=>"112@newstream", "id"=>"http://localhost:2113/streams/newstream/112", "updated"=>"2015-03-01T22:55:22.025789Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/112", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/112", "relation"=>"alternate"}]}
{"eventId"=>"e4f621cf-e350-4698-bac7-10fc814d35b5", "eventType"=>"SomeEvent", "eventNumber"=>111, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>111, "positionStreamId"=>"newstream", "title"=>"111@newstream", "id"=>"http://localhost:2113/streams/newstream/111", "updated"=>"2015-03-01T22:55:21.522428Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/111", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/111", "relation"=>"alternate"}]}
{"eventId"=>"c3872faf-c476-4a16-b54e-c999f138c2ac", "eventType"=>"SomeEvent", "eventNumber"=>110, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>110, "positionStreamId"=>"newstream", "title"=>"110@newstream", "id"=>"http://localhost:2113/streams/newstream/110", "updated"=>"2015-03-01T22:55:21.022424Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/110", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/110", "relation"=>"alternate"}]}
{"eventId"=>"06b98d1d-0039-4ea9-aa52-644b719a7abf", "eventType"=>"SomeEvent", "eventNumber"=>109, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>109, "positionStreamId"=>"newstream", "title"=>"109@newstream", "id"=>"http://localhost:2113/streams/newstream/109", "updated"=>"2015-03-01T22:55:20.526876Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/109", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/109", "relation"=>"alternate"}]}
{"eventId"=>"f192910c-76af-44af-a734-aed91864bde4", "eventType"=>"SomeEvent", "eventNumber"=>108, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>108, "positionStreamId"=>"newstream", "title"=>"108@newstream", "id"=>"http://localhost:2113/streams/newstream/108", "updated"=>"2015-03-01T22:55:20.029185Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/108", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/108", "relation"=>"alternate"}]}
{"eventId"=>"811ccf0a-4695-4ac6-9e9b-b76407c0ed4c", "eventType"=>"SomeEvent", "eventNumber"=>107, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>107, "positionStreamId"=>"newstream", "title"=>"107@newstream", "id"=>"http://localhost:2113/streams/newstream/107", "updated"=>"2015-03-01T22:55:19.526705Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/107", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/107", "relation"=>"alternate"}]}
{"eventId"=>"b9dca452-91d3-416e-a668-a5e13392ee65", "eventType"=>"SomeEvent", "eventNumber"=>106, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>106, "positionStreamId"=>"newstream", "title"=>"106@newstream", "id"=>"http://localhost:2113/streams/newstream/106", "updated"=>"2015-03-01T22:55:19.025808Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/106", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/106", "relation"=>"alternate"}]}
{"eventId"=>"318cc063-beb1-4615-a00f-24b9450c74f3", "eventType"=>"SomeEvent", "eventNumber"=>105, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>105, "positionStreamId"=>"newstream", "title"=>"105@newstream", "id"=>"http://localhost:2113/streams/newstream/105", "updated"=>"2015-03-01T22:55:18.525478Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/105", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/105", "relation"=>"alternate"}]}
{"eventId"=>"4923f4a1-8864-4557-8112-add9b4bfd24d", "eventType"=>"SomeEvent", "eventNumber"=>104, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>104, "positionStreamId"=>"newstream", "title"=>"104@newstream", "id"=>"http://localhost:2113/streams/newstream/104", "updated"=>"2015-03-01T22:55:18.025722Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/104", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/104", "relation"=>"alternate"}]}
{"eventId"=>"70d388f9-c124-4881-b34d-3b39e97ac309", "eventType"=>"SomeEvent", "eventNumber"=>103, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>103, "positionStreamId"=>"newstream", "title"=>"103@newstream", "id"=>"http://localhost:2113/streams/newstream/103", "updated"=>"2015-03-01T22:55:17.526042Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/103", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/103", "relation"=>"alternate"}]}
{"eventId"=>"04fbe888-1363-4632-bf08-6e5dd4bdfff8", "eventType"=>"SomeEvent", "eventNumber"=>102, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>102, "positionStreamId"=>"newstream", "title"=>"102@newstream", "id"=>"http://localhost:2113/streams/newstream/102", "updated"=>"2015-03-01T22:55:17.02592Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/102", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/102", "relation"=>"alternate"}]}
{"eventId"=>"259a3a9d-8f6a-4191-8219-e6b5f92118d5", "eventType"=>"SomeEvent", "eventNumber"=>101, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>101, "positionStreamId"=>"newstream", "title"=>"101@newstream", "id"=>"http://localhost:2113/streams/newstream/101", "updated"=>"2015-03-01T22:55:16.524159Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/101", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/101", "relation"=>"alternate"}]}
{"eventId"=>"7fab0dc9-ebec-4035-baef-adbdffab5254", "eventType"=>"SomeEvent", "eventNumber"=>100, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>100, "positionStreamId"=>"newstream", "title"=>"100@newstream", "id"=>"http://localhost:2113/streams/newstream/100", "updated"=>"2015-03-01T22:55:16.021939Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/100", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/100", "relation"=>"alternate"}]}
{"eventId"=>"51234857-d9c0-4b90-b272-7c40aa36fe7e", "eventType"=>"SomeEvent", "eventNumber"=>99, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>99, "positionStreamId"=>"newstream", "title"=>"99@newstream", "id"=>"http://localhost:2113/streams/newstream/99", "updated"=>"2015-03-01T22:55:15.525768Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/99", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/99", "relation"=>"alternate"}]}
{"eventId"=>"3bebef84-c583-44da-b1dc-dd4c2c20146e", "eventType"=>"SomeEvent", "eventNumber"=>98, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>98, "positionStreamId"=>"newstream", "title"=>"98@newstream", "id"=>"http://localhost:2113/streams/newstream/98", "updated"=>"2015-03-01T22:55:15.025032Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/98", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/98", "relation"=>"alternate"}]}
{"eventId"=>"e2d054fc-50ab-4e6e-a28d-2fd4bdaae3d9", "eventType"=>"SomeEvent", "eventNumber"=>97, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>97, "positionStreamId"=>"newstream", "title"=>"97@newstream", "id"=>"http://localhost:2113/streams/newstream/97", "updated"=>"2015-03-01T22:55:14.521826Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/97", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/97", "relation"=>"alternate"}]}
got response 200
The total body received was 17773 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
"Initializing Client"
got response 304
The total body received was 0 bytes
got response 201
The total body received was 0 bytes
got response 200
The total body received was 17779 bytes
{"eventId"=>"5558f1cd-bf95-4e37-918d-b2a391d6528d", "eventType"=>"SomeEvent", "eventNumber"=>117, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>117, "positionStreamId"=>"newstream", "title"=>"117@newstream", "id"=>"http://localhost:2113/streams/newstream/117", "updated"=>"2015-03-01T22:57:47.396366Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/117", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/117", "relation"=>"alternate"}]}
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 201
The total body received was 0 bytes
got response 200
The total body received was 17785 bytes
{"eventId"=>"7016e79a-1ba5-4f66-ba56-e6e95008a343", "eventType"=>"SomeEvent", "eventNumber"=>118, "data"=>"{\"something\":\"has data\"}", "streamId"=>"newstream", "isJson"=>true, "isMetaData"=>false, "isLinkMetaData"=>false, "positionEventNumber"=>118, "positionStreamId"=>"newstream", "title"=>"118@newstream", "id"=>"http://localhost:2113/streams/newstream/118", "updated"=>"2015-03-01T22:57:47.889381Z", "author"=>{"name"=>"EventStore"}, "summary"=>"SomeEvent", "links"=>[{"uri"=>"http://localhost:2113/streams/newstream/118", "relation"=>"edit"}, {"uri"=>"http://localhost:2113/streams/newstream/118", "relation"=>"alternate"}]}
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
got response 304
The total body received was 0 bytes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment