leveldb_curator 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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/leveldb_curator.rb +55 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1efeaec24928ba0db3fe90bf4eb06b80cd949efa
4
+ data.tar.gz: fb44dde953ca298838a224e5bd8278aa450dd17c
5
+ SHA512:
6
+ metadata.gz: 6e0282a658a1ceae7cb5a74e8966c971650243b6e1d5059d67f5edc481c45474d9c786f450ca65175d294d0c9207ba05ca50680d0c3333f933cfc19b3911d5ce
7
+ data.tar.gz: 72f876709c4827fe99df4bd9aeea44c81170703d93b9043aa1958e39afbd8ac54cba2a48d7b99a49592f0c4db5d4a7cb64b8b3c37f4caed1937a9b3889c9bb5c
@@ -0,0 +1,55 @@
1
+ require "leveldb"
2
+ require "socket"
3
+ require "bindata"
4
+
5
+ class Protocol < BinData::Record
6
+ endian :big
7
+ stringz :database
8
+ stringz :command_word
9
+ stringz :query_key
10
+ stringz :query_value
11
+ end
12
+
13
+ class LeveldbCurator
14
+ def open_databases(databases)
15
+ db_list = {}
16
+ databases.each do |database|
17
+ dbh = LevelDB::DB.new(database)
18
+ db_list[database.to_sym] = dbh
19
+ end
20
+ db_list
21
+ end
22
+
23
+ def run_daemon(port, databases)
24
+ unless databases.kind_of?(Array)
25
+ databases = [databases]
26
+ end
27
+ db_handlers = open_databases(databases)
28
+ Socket.udp_server_loop("localhost", port) { |msg, msg_src|
29
+ proto = Protocol.new
30
+ proto.read(msg)
31
+
32
+ dbh = db_handlers[proto.database.to_sym]
33
+ if proto.command_word == "put"
34
+ begin
35
+ dbh.put(proto.query_key, proto.query_value)
36
+ msg_src.reply "true"
37
+ rescue => exception
38
+ msg_src.reply exception.to_s
39
+ end
40
+ elsif proto.command_word == "get"
41
+ begin
42
+ msg_src.reply dbh.get(proto.query_key)
43
+ rescue
44
+ msg_src.reply ""
45
+ end
46
+ else
47
+ msg_src.reply "invalid command"
48
+ end
49
+ }
50
+ end
51
+
52
+ def initialize(databases = "my_leveldb_database")
53
+ run_daemon(9068, databases)
54
+ end
55
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leveldb_curator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dennis Vink
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-01-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Curator to Manage multiple LevelDB databases over UDP
14
+ email: dennis@drvink.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/leveldb_curator.rb
20
+ homepage: http://rubygems.org/gems/leveldb_curator
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.5.1
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Curator for managing LevelDB over UDP
44
+ test_files: []