rethinkdb_job 0.1.0
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.
- data/lib/rethinkdb_job/setup.rb +55 -0
- data/lib/rethinkdb_job/version.rb +3 -0
- data/lib/rethinkdb_job.rb +57 -0
- metadata +113 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
class RethinkDBJob
|
2
|
+
module Setup
|
3
|
+
def rql_db_string(rql_db)
|
4
|
+
rql_db.instance_variable_get("@body")[1].first
|
5
|
+
end
|
6
|
+
|
7
|
+
def database
|
8
|
+
# ugly hack until @rdb.default_db works properly
|
9
|
+
db = rdb.instance_variable_get("@default_opts")[:db]
|
10
|
+
if db
|
11
|
+
rql_db_string(db)
|
12
|
+
else
|
13
|
+
@rdb_config[:db] || "test"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def done_setup?
|
18
|
+
@done_setup
|
19
|
+
end
|
20
|
+
|
21
|
+
def ensure_setup
|
22
|
+
unless done_setup?
|
23
|
+
setup
|
24
|
+
@done_setup = true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def setup
|
29
|
+
begin
|
30
|
+
rdb
|
31
|
+
rescue => e
|
32
|
+
msg = "cannot connect to RethinkDB #{@rdb_config.inspect}"
|
33
|
+
raise e.class, e.message + ", #{msg}", caller
|
34
|
+
end
|
35
|
+
|
36
|
+
begin
|
37
|
+
r.db_create(database).run(rdb)
|
38
|
+
rescue RethinkDB::RqlRuntimeError => err
|
39
|
+
# already exists, cool
|
40
|
+
rescue => e
|
41
|
+
msg = "cannot create db #{database.inspect}"
|
42
|
+
raise e.class, e.message + ", #{msg}", caller
|
43
|
+
end
|
44
|
+
|
45
|
+
begin
|
46
|
+
r.db(database).table_create(table).run(rdb)
|
47
|
+
rescue RethinkDB::RqlRuntimeError => err
|
48
|
+
# already exists, cool
|
49
|
+
rescue => e
|
50
|
+
msg = "cannot create table #{table.inspect} on database #{database.inspect}"
|
51
|
+
raise e.class, e.message + ", #{msg}", caller
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rethinkdb'
|
2
|
+
require 'rethinkdb_job/setup'
|
3
|
+
|
4
|
+
class RethinkDBJob
|
5
|
+
attr_reader :table, :r
|
6
|
+
|
7
|
+
include RethinkDBJob::Setup
|
8
|
+
|
9
|
+
def initialize(rdb_config={})
|
10
|
+
@rdb_config = rdb_config
|
11
|
+
@table = @rdb_config.delete(:table) || "jobs"
|
12
|
+
@done_setup = false
|
13
|
+
|
14
|
+
@r = RethinkDB::RQL.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def rdb
|
18
|
+
@rdb ||= @r.connect(@rdb_config)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
ensure_setup
|
23
|
+
result = @r.table(@table).insert({}, :return_vals => true).run(@rdb)
|
24
|
+
if result["inserted"] == 1
|
25
|
+
result["new_val"]["id"]
|
26
|
+
else
|
27
|
+
raise "Unable to create new job record"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def find(job_id)
|
32
|
+
@r.table(@table).get(job_id).run(@rdb)
|
33
|
+
end
|
34
|
+
|
35
|
+
TIMESTAMP_COLUMNS = [:job_start, :job_finish]
|
36
|
+
def set_timestamp(job_id, column, time=Time.now)
|
37
|
+
ensure_setup
|
38
|
+
if TIMESTAMP_COLUMNS.include?(column.to_sym)
|
39
|
+
@r.table(@table).get(job_id).update(column => time).run(@rdb)
|
40
|
+
time
|
41
|
+
else
|
42
|
+
raise "expected column to be one of #{timestamp_columns.inspect} (#{column.inspect})"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def logdir
|
47
|
+
@rdb_config[:logdir]
|
48
|
+
end
|
49
|
+
|
50
|
+
def logfile(job_id)
|
51
|
+
File.join(logdir, "job_#{job_id}.log")
|
52
|
+
end
|
53
|
+
|
54
|
+
def tail(job_id, lines=10)
|
55
|
+
`tail -#{Integer(lines).to_s} #{logfile(job_id)} 2>&1`
|
56
|
+
end
|
57
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rethinkdb_job
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Duane Johnson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-08-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rethinkdb
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.13.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.13.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: debugger
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: guard
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Stores job queue data in rethinkdb
|
79
|
+
email:
|
80
|
+
- duane.johnson@gmail.com
|
81
|
+
executables: []
|
82
|
+
extensions: []
|
83
|
+
extra_rdoc_files: []
|
84
|
+
files:
|
85
|
+
- lib/rethinkdb_job.rb
|
86
|
+
- lib/rethinkdb_job/setup.rb
|
87
|
+
- lib/rethinkdb_job/version.rb
|
88
|
+
homepage: https://github.com//rethinkdb_job
|
89
|
+
licenses: []
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ! '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubyforge_project: ! '[none]'
|
108
|
+
rubygems_version: 1.8.23
|
109
|
+
signing_key:
|
110
|
+
specification_version: 3
|
111
|
+
summary: Stores job queue data in rethinkdb
|
112
|
+
test_files: []
|
113
|
+
has_rdoc:
|