litestack 0.1.7 → 0.2.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.
- checksums.yaml +4 -4
- data/BENCHMARKS.md +1 -1
- data/CHANGELOG.md +20 -3
- data/README.md +28 -1
- data/assets/litecable_logo_teal.png +0 -0
- data/bench/bench_cache_raw.rb +18 -2
- data/bench/bench_jobs_rails.rb +20 -14
- data/bench/bench_jobs_raw.rb +0 -2
- data/lib/action_cable/subscription_adapter/litecable.rb +36 -0
- data/lib/active_job/queue_adapters/litejob_adapter.rb +14 -10
- data/lib/litestack/litecable.rb +138 -0
- data/lib/litestack/litecable.sql.yml +24 -0
- data/lib/litestack/litecache.rb +56 -62
- data/lib/litestack/litecache.sql.yml +28 -0
- data/lib/litestack/litecache.yml +7 -0
- data/lib/litestack/litejob.rb +20 -11
- data/lib/litestack/litejobqueue.rb +122 -44
- data/lib/litestack/litemetric.rb +228 -0
- data/lib/litestack/litemetric.sql.yml +69 -0
- data/lib/litestack/litequeue.rb +57 -29
- data/lib/litestack/litequeue.sql.yml +34 -0
- data/lib/litestack/litesupport.rb +155 -6
- data/lib/litestack/metrics_app.rb +5 -0
- data/lib/litestack/version.rb +1 -1
- data/lib/litestack.rb +19 -10
- metadata +13 -6
- data/bench/bench_rails.rb +0 -81
- data/bench/bench_raw.rb +0 -72
- data/lib/active_job/queue_adapters/ultralite_adapter.rb +0 -49
data/lib/litestack.rb
CHANGED
@@ -1,15 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# load core classes
|
4
|
-
|
5
|
-
require_relative "litestack/litesupport"
|
6
|
-
|
7
|
-
require_relative "litestack/
|
8
|
-
require_relative "litestack/
|
4
|
+
require_relative "./litestack/version"
|
5
|
+
require_relative "./litestack/litesupport"
|
6
|
+
require_relative "./litestack/litemetric"
|
7
|
+
require_relative "./litestack/litedb"
|
8
|
+
require_relative "./litestack/litecache"
|
9
|
+
require_relative "./litestack/litejob"
|
10
|
+
require_relative "./litestack/litecable"
|
9
11
|
|
10
12
|
# conditionally load integration with other libraries
|
11
|
-
|
12
|
-
|
13
|
-
require_relative "
|
14
|
-
require_relative "
|
15
|
-
|
13
|
+
require_relative "./sequel/adapters/litedb" if defined? Sequel
|
14
|
+
require_relative "./active_record/connection_adapters/litedb_adapter" if defined? ActiveRecord
|
15
|
+
require_relative "./railties/rails/commands/dbconsole" if defined? Rails && defined? ActiveRecord
|
16
|
+
require_relative "./active_support/cache/litecache" if defined? ActiveSupport
|
17
|
+
require_relative "./active_job/queue_adapters/litejob_adapter" if defined? ActiveJob
|
18
|
+
require_relative "./action_cable/subscription_adapter/litecable" if defined? ActionCable
|
19
|
+
|
20
|
+
module Litestack
|
21
|
+
class NotImplementedError < Exception; end
|
22
|
+
class TimeoutError < Exception; end
|
23
|
+
class DeadlockError < Exception; end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: litestack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mohamed Hassan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sqlite3
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- WHYLITESTACK.md
|
55
|
+
- assets/litecable_logo_teal.png
|
55
56
|
- assets/litecache_logo_teal.png
|
56
57
|
- assets/litedb_logo_teal.png
|
57
58
|
- assets/litejob_logo_teal.png
|
@@ -63,22 +64,28 @@ files:
|
|
63
64
|
- bench/bench_jobs_rails.rb
|
64
65
|
- bench/bench_jobs_raw.rb
|
65
66
|
- bench/bench_queue.rb
|
66
|
-
- bench/bench_rails.rb
|
67
|
-
- bench/bench_raw.rb
|
68
67
|
- bench/rails_job.rb
|
69
68
|
- bench/skjob.rb
|
70
69
|
- bench/uljob.rb
|
70
|
+
- lib/action_cable/subscription_adapter/litecable.rb
|
71
71
|
- lib/active_job/queue_adapters/litejob_adapter.rb
|
72
|
-
- lib/active_job/queue_adapters/ultralite_adapter.rb
|
73
72
|
- lib/active_record/connection_adapters/litedb_adapter.rb
|
74
73
|
- lib/active_support/cache/litecache.rb
|
75
74
|
- lib/litestack.rb
|
75
|
+
- lib/litestack/litecable.rb
|
76
|
+
- lib/litestack/litecable.sql.yml
|
76
77
|
- lib/litestack/litecache.rb
|
78
|
+
- lib/litestack/litecache.sql.yml
|
79
|
+
- lib/litestack/litecache.yml
|
77
80
|
- lib/litestack/litedb.rb
|
78
81
|
- lib/litestack/litejob.rb
|
79
82
|
- lib/litestack/litejobqueue.rb
|
83
|
+
- lib/litestack/litemetric.rb
|
84
|
+
- lib/litestack/litemetric.sql.yml
|
80
85
|
- lib/litestack/litequeue.rb
|
86
|
+
- lib/litestack/litequeue.sql.yml
|
81
87
|
- lib/litestack/litesupport.rb
|
88
|
+
- lib/litestack/metrics_app.rb
|
82
89
|
- lib/litestack/version.rb
|
83
90
|
- lib/railties/rails/commands/dbconsole.rb
|
84
91
|
- lib/sequel/adapters/litedb.rb
|
@@ -108,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
115
|
- !ruby/object:Gem::Version
|
109
116
|
version: '0'
|
110
117
|
requirements: []
|
111
|
-
rubygems_version: 3.4.
|
118
|
+
rubygems_version: 3.4.8
|
112
119
|
signing_key:
|
113
120
|
specification_version: 4
|
114
121
|
summary: A SQLite based, lightning fast, super efficient and dead simple to setup
|
data/bench/bench_rails.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
require 'ultralite'
|
2
|
-
require 'active_support'
|
3
|
-
require './bench'
|
4
|
-
|
5
|
-
cache = ActiveSupport::Cache.lookup_store(:ultralite_cache_store, {})
|
6
|
-
mem = ActiveSupport::Cache.lookup_store(:ultralite_cache_store, {path: ":memory:"})
|
7
|
-
redis = ActiveSupport::Cache.lookup_store(:redis_cache_store, {})
|
8
|
-
|
9
|
-
values = []
|
10
|
-
keys = []
|
11
|
-
count = 1000
|
12
|
-
|
13
|
-
[10, 100, 1000, 10000].each do |size|
|
14
|
-
count.times do
|
15
|
-
keys << random_str(10)
|
16
|
-
values << random_str(size)
|
17
|
-
end
|
18
|
-
|
19
|
-
random_keys = keys.shuffle
|
20
|
-
puts "Benchmarks for values of size #{size} bytes"
|
21
|
-
puts "=========================================================="
|
22
|
-
puts "== Writes =="
|
23
|
-
bench("Ultralite cache writes", count) do |i|
|
24
|
-
cache.write(keys[i], values[i])
|
25
|
-
end
|
26
|
-
|
27
|
-
bench("Ultralite memory cache writes", count) do |i|
|
28
|
-
mem.write(keys[i], values[i])
|
29
|
-
end
|
30
|
-
|
31
|
-
bench("Redis writes", count) do |i|
|
32
|
-
redis.write(keys[i], values[i])
|
33
|
-
end
|
34
|
-
|
35
|
-
puts "== Reads =="
|
36
|
-
bench("Ultralite cache reads", count) do |i|
|
37
|
-
cache.read(random_keys[i])
|
38
|
-
end
|
39
|
-
|
40
|
-
bench("Ultralite memory cache reads", count) do |i|
|
41
|
-
mem.read(random_keys[i])
|
42
|
-
end
|
43
|
-
|
44
|
-
bench("Redis reads", count) do |i|
|
45
|
-
redis.read(random_keys[i])
|
46
|
-
end
|
47
|
-
puts "=========================================================="
|
48
|
-
|
49
|
-
|
50
|
-
keys = []
|
51
|
-
values = []
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
cache.write("somekey", 1, raw: true)
|
56
|
-
#puts cache.read("somekey", raw: true)
|
57
|
-
|
58
|
-
mem.write("somekey", 1, raw: true)
|
59
|
-
#puts mem.read("somekey", raw: true)
|
60
|
-
|
61
|
-
redis.write("somekey", 1, raw: true)
|
62
|
-
#puts redis.read("somekey", raw: true)
|
63
|
-
|
64
|
-
puts "Benchmarks for incrementing integer values"
|
65
|
-
puts "=========================================================="
|
66
|
-
|
67
|
-
bench("Ultralite cache increment", count) do
|
68
|
-
cache.increment("somekey", 1, raw: true)
|
69
|
-
end
|
70
|
-
|
71
|
-
bench("Ultralite memory cache increment", count) do
|
72
|
-
mem.increment("somekey", 1, raw: true)
|
73
|
-
end
|
74
|
-
|
75
|
-
bench("Redis increment", count) do
|
76
|
-
redis.increment("somekey", 1, raw: true )
|
77
|
-
end
|
78
|
-
|
79
|
-
cache.clear
|
80
|
-
redis.clear
|
81
|
-
|
data/bench/bench_raw.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'ultralite'
|
2
|
-
require './bench'
|
3
|
-
require 'redis'
|
4
|
-
require 'sqlite3'
|
5
|
-
|
6
|
-
cache = Ultralite::Cache.new # default settings
|
7
|
-
#mem = Ultralite::Cache.new(path: ":memory:") # default settings
|
8
|
-
redis = Redis.new # default settings
|
9
|
-
|
10
|
-
values = []
|
11
|
-
keys = []
|
12
|
-
count = 1000
|
13
|
-
count.times { keys << random_str(10) }
|
14
|
-
|
15
|
-
[10, 100, 1000, 10000].each do |size|
|
16
|
-
count.times do
|
17
|
-
values << random_str(size)
|
18
|
-
end
|
19
|
-
|
20
|
-
random_keys = keys.shuffle
|
21
|
-
puts "Benchmarks for values of size #{size} bytes"
|
22
|
-
puts "=========================================================="
|
23
|
-
puts "== Writes =="
|
24
|
-
bench("Ultralite cache writes", count) do |i|
|
25
|
-
cache.set(keys[i], values[i])
|
26
|
-
end
|
27
|
-
|
28
|
-
# bench("Ultralite memory cache writes", count) do |i|
|
29
|
-
# mem.set(keys[i], values[i])
|
30
|
-
# end
|
31
|
-
|
32
|
-
bench("Redis writes", count) do |i|
|
33
|
-
redis.set(keys[i], values[i])
|
34
|
-
end
|
35
|
-
|
36
|
-
puts "== Reads =="
|
37
|
-
bench("Ultralite cache reads", count) do |i|
|
38
|
-
cache.get(random_keys[i])
|
39
|
-
end
|
40
|
-
|
41
|
-
# bench("Ultralite memory cache reads", count) do |i|
|
42
|
-
# cache.get(random_keys[i])
|
43
|
-
# end
|
44
|
-
|
45
|
-
bench("Redis reads", count) do |i|
|
46
|
-
redis.get(random_keys[i])
|
47
|
-
end
|
48
|
-
puts "=========================================================="
|
49
|
-
|
50
|
-
values = []
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
cache.set("somekey", 1)
|
55
|
-
#mem.set("somekey", 1)
|
56
|
-
redis.set("somekey", 1)
|
57
|
-
|
58
|
-
bench("Ultralite cache increment") do
|
59
|
-
cache.increment("somekey", 1)
|
60
|
-
end
|
61
|
-
|
62
|
-
#bench("Ultralite memory cache increment") do
|
63
|
-
# mem.increment("somekey", 1)
|
64
|
-
#end
|
65
|
-
|
66
|
-
bench("Redis increment") do
|
67
|
-
redis.incr("somekey")
|
68
|
-
end
|
69
|
-
|
70
|
-
cache.clear
|
71
|
-
redis.flushdb
|
72
|
-
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../../ultralite/job.rb'
|
4
|
-
require "active_support/core_ext/enumerable"
|
5
|
-
require "active_support/core_ext/array/access"
|
6
|
-
require "active_job"
|
7
|
-
|
8
|
-
module ActiveJob
|
9
|
-
module QueueAdapters
|
10
|
-
# == Ultralite adapter for Active Job
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# Rails.application.config.active_job.queue_adapter = :ultralite
|
14
|
-
class UltraliteAdapter
|
15
|
-
|
16
|
-
DEFAULT_OPTIONS = {
|
17
|
-
config_path: "./config/ultrajob.yml",
|
18
|
-
path: "../db/queue.db",
|
19
|
-
queues: [["default", 1, "spawn"]],
|
20
|
-
workers: 1
|
21
|
-
}
|
22
|
-
|
23
|
-
DEFAULT_CONFIG_PATH = "./config/ultrajob.yml"
|
24
|
-
|
25
|
-
def initialize(options={})
|
26
|
-
Job.options = DEFAULT_OPTIONS.merge(options)
|
27
|
-
end
|
28
|
-
|
29
|
-
def enqueue(job) # :nodoc:
|
30
|
-
Job.queue = job.queue_name
|
31
|
-
Job.perform_async(job.serialize)
|
32
|
-
end
|
33
|
-
|
34
|
-
def enqueue_at(job, timestamp) # :nodoc:
|
35
|
-
Job.queue = job.queue_name
|
36
|
-
Job.perform_at(timestamp, job.serialize)
|
37
|
-
end
|
38
|
-
|
39
|
-
class Job # :nodoc:
|
40
|
-
|
41
|
-
include ::Ultralite::Job
|
42
|
-
|
43
|
-
def perform(job_data)
|
44
|
-
Base.execute job_data
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|