conveyor 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,7 @@
1
+ == 0.1.1 / 2008-01-31
2
+
3
+ * Fix TCP binding.
4
+
1
5
  == 0.1.0 / 2008-01-29
2
6
 
3
7
  * Basic Channel implementation
data/Rakefile CHANGED
@@ -8,12 +8,9 @@ Hoe.new('conveyor', Conveyor::VERSION) do |p|
8
8
  p.rubyforge_name = 'conveyor'
9
9
  p.author = 'Ryan King'
10
10
  p.email = 'ryan@theryanking.com'
11
- p.summary = 'Like TiVo for your data.'
12
- p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
13
- p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
14
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
15
11
  p.extra_deps << ['mongrel']
16
12
  p.extra_deps << ['activesupport']
13
+ p.extra_deps << ['json']
17
14
  end
18
15
 
19
16
  # vim: syntax=Ruby
@@ -8,4 +8,4 @@ end
8
8
  $: << 'lib'
9
9
 
10
10
  require 'conveyor/server'
11
- Conveyor::Server.new('localhost', ARGV[0], ARGV[1]).run.join
11
+ Conveyor::Server.new('0.0.0.0', ARGV[0].to_i, ARGV[1]).run.join
@@ -25,7 +25,7 @@ A post to a channel URL with the message in the body.
25
25
  ### Get by id ###
26
26
 
27
27
  Request
28
- : GET /channel/{channel name}/{id}
28
+ : GET /channels/{channel name}/{id}
29
29
 
30
30
  Response
31
31
  : success: 200, failure: 404
@@ -1,4 +1,4 @@
1
1
  module Conveyor
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  QUALITY = 'alpha'
4
4
  end
@@ -7,7 +7,7 @@ module Conveyor
7
7
  class Channel < BaseChannel
8
8
 
9
9
  # If +directory+ doesn't already exist, it will be created during initialization.
10
- def initialize directory
10
+ def initialize directory
11
11
  @group_iterators = {}
12
12
  @group_iterators_files = {}
13
13
 
@@ -67,6 +67,18 @@ module Conveyor
67
67
  r
68
68
  end
69
69
 
70
+ def status
71
+ {
72
+ :directory => @directory,
73
+ :index => {
74
+ :size => @index.length
75
+ },
76
+ :data_files => @data_files.collect{|f| {:path => f.path, :bytes => File.size(f.path)}},
77
+ :iterator => {:position => @iterator},
78
+ :iterator_groups => @group_iterators.inject({}){|k,v, m| m[k] = v; m}
79
+ }
80
+ end
81
+
70
82
  private
71
83
 
72
84
  def group_iterators_file group
@@ -2,6 +2,7 @@ require 'rubygems'
2
2
  require 'mongrel'
3
3
  require 'conveyor/channel'
4
4
  require 'fileutils'
5
+ require 'json'
5
6
 
6
7
  class Mongrel::HttpRequest
7
8
  def put?
@@ -84,6 +85,10 @@ module Conveyor
84
85
  else
85
86
  headers, content = @channels[m.captures[0]].get_next
86
87
  end
88
+ else
89
+ response.start(200) do |head, out|
90
+ out.write @channels[m.captures[0]].status.to_json
91
+ end
87
92
  end
88
93
  end
89
94
  else
@@ -123,4 +123,24 @@ class TestConveyorChannel < Test::Unit::TestCase
123
123
  assert_equal 'bam', c.get_next_by_group('bar')[1]
124
124
  assert_equal nil, c.get_next_by_group('bar')
125
125
  end
126
+
127
+ def test_channel_status
128
+ FileUtils.rm_r('/tmp/bar') rescue nil
129
+ c = Channel.new('/tmp/bar')
130
+ c.post 'foo'
131
+ c.post 'bar'
132
+ c.post 'bam'
133
+
134
+ status = {
135
+ :directory => '/tmp/bar',
136
+ :index => {:size => 3},
137
+ :data_files => [
138
+ {:path => '/tmp/bar/0', :bytes => 210}
139
+ ],
140
+ :iterator => {:position => 0},
141
+ :iterator_groups => {}
142
+ }
143
+
144
+ assert_equal(status, c.status)
145
+ end
126
146
  end
@@ -90,4 +90,33 @@ class TestConveyorServer < Test::Unit::TestCase
90
90
  end
91
91
  end
92
92
  end
93
+
94
+ def test_status
95
+ Net::HTTP.start('localhost', 8888) do |h|
96
+ req = h.put('/channels/bar', '', {'Content-Type' => 'application/octet-stream'})
97
+ assert_equal Net::HTTPCreated, req.class
98
+
99
+ data =
100
+ ["ZqZyDN2SouQCYEHYS0LuM1XeqsF0MKIbFEBE6xQ972VqEcjs21wJSosvZMWEH1lq5ukTq4Ze"]
101
+
102
+ data.each do |d|
103
+ req = h.post('/channels/bar', d, {'Content-Type' => 'application/octet-stream', 'Date' => Time.now.to_s})
104
+ assert_equal Net::HTTPAccepted, req.class
105
+ end
106
+
107
+ req = h.get("/channels/bar")
108
+ assert_kind_of Net::HTTPOK, req
109
+ json = {
110
+ "iterator_groups" => {},
111
+ "index"=>{"size"=>1},
112
+ "directory"=>"/tmp/asdf/bar",
113
+ "data_files"=>[{"path"=>"/tmp/asdf/bar/0","bytes"=>139}],
114
+ "iterator"=>{"position"=>0}
115
+ }
116
+ assert_equal json, JSON::parse(req.body)
117
+
118
+ end
119
+
120
+
121
+ end
93
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conveyor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan King
@@ -30,7 +30,7 @@ cert_chain:
30
30
  Zls3y84CmyAEGg==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2008-01-30 00:00:00 -08:00
33
+ date: 2008-01-31 00:00:00 -08:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
@@ -51,6 +51,15 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: "0"
53
53
  version:
54
+ - !ruby/object:Gem::Dependency
55
+ name: json
56
+ version_requirement:
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
54
63
  - !ruby/object:Gem::Dependency
55
64
  name: hoe
56
65
  version_requirement:
@@ -58,9 +67,9 @@ dependencies:
58
67
  requirements:
59
68
  - - ">="
60
69
  - !ruby/object:Gem::Version
61
- version: 1.4.0
70
+ version: 1.5.0
62
71
  version:
63
- description: == Description * Like TiVo for your data * A distributed rewindable multi-queue == Overview A Conveyor server provides an HTTP interface that allows for POSTing and GETing items in streams called Channels.
72
+ description: "* Like TiVo for your data * A distributed rewindable multi-queue"
64
73
  email: ryan@theryanking.com
65
74
  executables:
66
75
  - conveyor
@@ -91,7 +100,7 @@ files:
91
100
  - test/test_replicated_channel.rb
92
101
  - test/test_server.rb
93
102
  has_rdoc: true
94
- homepage:
103
+ homepage: by Ryan King (http://theryanking.com)
95
104
  post_install_message:
96
105
  rdoc_options:
97
106
  - --main
@@ -116,7 +125,7 @@ rubyforge_project: conveyor
116
125
  rubygems_version: 1.0.1
117
126
  signing_key:
118
127
  specification_version: 2
119
- summary: Like TiVo for your data.
128
+ summary: "* Like TiVo for your data * A distributed rewindable multi-queue"
120
129
  test_files:
121
130
  - test/test_channel.rb
122
131
  - test/test_feeder-ng.rb
metadata.gz.sig CHANGED
Binary file