timescaledb 0.1.5 → 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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +2 -2
  3. data/Gemfile.scenic.lock +2 -2
  4. data/README.md +23 -16
  5. data/bin/console +2 -2
  6. data/bin/tsdb +6 -6
  7. data/examples/{Gemfile → all_in_one/Gemfile} +0 -0
  8. data/examples/{Gemfile.lock → all_in_one/Gemfile.lock} +0 -0
  9. data/examples/{all_in_one.rb → all_in_one/all_in_one.rb} +0 -0
  10. data/examples/ranking/.gitattributes +7 -0
  11. data/examples/ranking/.gitignore +29 -0
  12. data/examples/ranking/.ruby-version +1 -0
  13. data/examples/ranking/Gemfile +33 -0
  14. data/examples/ranking/Gemfile.lock +189 -0
  15. data/examples/ranking/README.md +166 -0
  16. data/examples/ranking/Rakefile +6 -0
  17. data/examples/ranking/app/controllers/application_controller.rb +2 -0
  18. data/examples/ranking/app/controllers/concerns/.keep +0 -0
  19. data/examples/ranking/app/jobs/application_job.rb +7 -0
  20. data/examples/ranking/app/models/application_record.rb +3 -0
  21. data/examples/ranking/app/models/concerns/.keep +0 -0
  22. data/examples/ranking/app/models/game.rb +2 -0
  23. data/examples/ranking/app/models/play.rb +7 -0
  24. data/examples/ranking/bin/bundle +114 -0
  25. data/examples/ranking/bin/rails +4 -0
  26. data/examples/ranking/bin/rake +4 -0
  27. data/examples/ranking/bin/setup +33 -0
  28. data/examples/ranking/config/application.rb +39 -0
  29. data/examples/ranking/config/boot.rb +4 -0
  30. data/examples/ranking/config/credentials.yml.enc +1 -0
  31. data/examples/ranking/config/database.yml +86 -0
  32. data/examples/ranking/config/environment.rb +5 -0
  33. data/examples/ranking/config/environments/development.rb +60 -0
  34. data/examples/ranking/config/environments/production.rb +75 -0
  35. data/examples/ranking/config/environments/test.rb +53 -0
  36. data/examples/ranking/config/initializers/cors.rb +16 -0
  37. data/examples/ranking/config/initializers/filter_parameter_logging.rb +8 -0
  38. data/examples/ranking/config/initializers/inflections.rb +16 -0
  39. data/examples/ranking/config/initializers/timescale.rb +3 -0
  40. data/examples/ranking/config/locales/en.yml +33 -0
  41. data/examples/ranking/config/puma.rb +43 -0
  42. data/examples/ranking/config/routes.rb +6 -0
  43. data/examples/ranking/config/storage.yml +34 -0
  44. data/examples/ranking/config.ru +6 -0
  45. data/examples/ranking/db/migrate/20220209120747_create_games.rb +10 -0
  46. data/examples/ranking/db/migrate/20220209120910_create_plays.rb +19 -0
  47. data/examples/ranking/db/migrate/20220209143347_create_score_per_hours.rb +5 -0
  48. data/examples/ranking/db/schema.rb +47 -0
  49. data/examples/ranking/db/seeds.rb +7 -0
  50. data/examples/ranking/db/views/score_per_hours_v01.sql +7 -0
  51. data/examples/ranking/lib/tasks/.keep +0 -0
  52. data/examples/ranking/log/.keep +0 -0
  53. data/examples/ranking/public/robots.txt +1 -0
  54. data/examples/ranking/storage/.keep +0 -0
  55. data/examples/ranking/tmp/.keep +0 -0
  56. data/examples/ranking/tmp/pids/.keep +0 -0
  57. data/examples/ranking/tmp/storage/.keep +0 -0
  58. data/examples/ranking/vendor/.keep +0 -0
  59. data/lib/{timescale → timescaledb}/acts_as_hypertable/core.rb +1 -1
  60. data/lib/{timescale → timescaledb}/acts_as_hypertable.rb +6 -6
  61. data/lib/{timescale → timescaledb}/chunk.rb +1 -1
  62. data/lib/{timescale → timescaledb}/compression_settings.rb +1 -1
  63. data/lib/{timescale → timescaledb}/continuous_aggregates.rb +3 -3
  64. data/lib/{timescale → timescaledb}/dimensions.rb +1 -1
  65. data/lib/{timescale → timescaledb}/hypertable.rb +4 -4
  66. data/lib/{timescale → timescaledb}/job.rb +1 -1
  67. data/lib/{timescale → timescaledb}/job_stats.rb +1 -1
  68. data/lib/{timescale → timescaledb}/migration_helpers.rb +2 -2
  69. data/lib/{timescale → timescaledb}/scenic/adapter.rb +2 -2
  70. data/lib/timescaledb/scenic/extension.rb +72 -0
  71. data/lib/{timescale → timescaledb}/schema_dumper.rb +4 -4
  72. data/lib/{timescale → timescaledb}/stats_report.rb +2 -2
  73. data/lib/timescaledb/version.rb +3 -0
  74. data/lib/timescaledb.rb +64 -0
  75. data/{timescale.gemspec → timescaledb.gemspec} +3 -3
  76. metadata +73 -23
  77. data/lib/timescale/version.rb +0 -3
  78. data/lib/timescale.rb +0 -62
@@ -0,0 +1,34 @@
1
+ test:
2
+ service: Disk
3
+ root: <%= Rails.root.join("tmp/storage") %>
4
+
5
+ local:
6
+ service: Disk
7
+ root: <%= Rails.root.join("storage") %>
8
+
9
+ # Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10
+ # amazon:
11
+ # service: S3
12
+ # access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
13
+ # secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
14
+ # region: us-east-1
15
+ # bucket: your_own_bucket-<%= Rails.env %>
16
+
17
+ # Remember not to checkin your GCS keyfile to a repository
18
+ # google:
19
+ # service: GCS
20
+ # project: your_project
21
+ # credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
22
+ # bucket: your_own_bucket-<%= Rails.env %>
23
+
24
+ # Use bin/rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
25
+ # microsoft:
26
+ # service: AzureStorage
27
+ # storage_account_name: your_account_name
28
+ # storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
29
+ # container: your_container_name-<%= Rails.env %>
30
+
31
+ # mirror:
32
+ # service: Mirror
33
+ # primary: local
34
+ # mirrors: [ amazon, google, microsoft ]
@@ -0,0 +1,6 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require_relative "config/environment"
4
+
5
+ run Rails.application
6
+ Rails.application.load_server
@@ -0,0 +1,10 @@
1
+ class CreateGames < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :games do |t|
4
+ t.string :name
5
+ t.string :description
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ class CreatePlays < ActiveRecord::Migration[7.0]
2
+ def change
3
+ enable_extension("timescaledb") unless extensions.include? "timescaledb"
4
+ hypertable_options = {
5
+ time_column: 'created_at',
6
+ chunk_time_interval: '1 day',
7
+ compress_segmentby: 'game_id',
8
+ compress_orderby: 'created_at',
9
+ compression_interval: '7 days'
10
+ }
11
+ create_table :plays, hypertable: hypertable_options, id: false do |t|
12
+ t.references :game, null: false, foreign_key: false
13
+ t.integer :score
14
+ t.decimal :total_time
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ class CreateScorePerHours < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_scenic_continuous_aggregate :score_per_hours
4
+ end
5
+ end
@@ -0,0 +1,47 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # This file is the source Rails uses to define your schema when running `bin/rails
6
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
10
+ #
11
+ # It's strongly recommended that you check this file into your version control system.
12
+
13
+ ActiveRecord::Schema[7.0].define(version: 2022_02_09_143347) do
14
+ # These are extensions that must be enabled in order to support this database
15
+ enable_extension "plpgsql"
16
+ enable_extension "timescaledb"
17
+
18
+ create_table "games", force: :cascade do |t|
19
+ t.string "name"
20
+ t.string "description"
21
+ t.datetime "created_at", null: false
22
+ t.datetime "updated_at", null: false
23
+ end
24
+
25
+ create_table "plays", id: false, force: :cascade do |t|
26
+ t.bigint "game_id", null: false
27
+ t.integer "score"
28
+ t.decimal "total_time"
29
+ t.datetime "created_at", null: false
30
+ t.datetime "updated_at", null: false
31
+ t.index ["created_at"], name: "plays_created_at_idx", order: :desc
32
+ t.index ["game_id"], name: "index_plays_on_game_id"
33
+ end
34
+
35
+ create_hypertable "plays", time_column: "created_at", chunk_time_interval: "1 minute", compress_segmentby: "game_id", compress_orderby: "created_at ASC", compression_interval: "P7D"
36
+
37
+ create_continuous_aggregate("score_per_hours", <<-SQL)
38
+ SELECT plays.game_id,
39
+ time_bucket('PT1H'::interval, plays.created_at) AS bucket,
40
+ avg(plays.score) AS avg,
41
+ max(plays.score) AS max,
42
+ min(plays.score) AS min
43
+ FROM plays
44
+ GROUP BY plays.game_id, (time_bucket('PT1H'::interval, plays.created_at))
45
+ SQL
46
+
47
+ end
@@ -0,0 +1,7 @@
1
+ # This file should contain all the record creation needed to seed the database with its default values.
2
+ # The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup).
3
+ #
4
+ # Examples:
5
+ #
6
+ # movies = Movie.create([{ name: "Star Wars" }, { name: "Lord of the Rings" }])
7
+ # Character.create(name: "Luke", movie: movies.first)
@@ -0,0 +1,7 @@
1
+ SELECT game_id,
2
+ time_bucket(INTERVAL '1 hour', created_at) AS bucket,
3
+ AVG(score),
4
+ MAX(score),
5
+ MIN(score)
6
+ FROM plays
7
+ GROUP BY game_id, bucket;
File without changes
File without changes
@@ -0,0 +1 @@
1
+ # See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Timescale
3
+ module Timescaledb
4
4
  module ActsAsHypertable
5
5
  module Core
6
6
  def self.included(base)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Timescale
3
+ module Timescaledb
4
4
  # If you want your model to hook into its underlying hypertable
5
5
  # as well as have access to TimescaleDB specific data, methods, and more,
6
6
  # specify this macro in your model.
@@ -10,7 +10,7 @@ module Timescale
10
10
  #
11
11
  # @see https://docs.timescale.com/api/latest/hypertable/create_hypertable/ for
12
12
  # how to use the SQL `create_hypertable` function.
13
- # @see Timescale::MigrationHelpers#create_table for how to create a new hypertable
13
+ # @see Timescaledb::MigrationHelpers#create_table for how to create a new hypertable
14
14
  # via a Rails migration utilizing the standard `create_table` method.
15
15
  #
16
16
  # @example Enabling the macro on your model
@@ -18,7 +18,7 @@ module Timescale
18
18
  # acts_as_hypertable
19
19
  # end
20
20
  #
21
- # @see Timescale::ActsAsHypertable#acts_as_hypertable
21
+ # @see Timescaledb::ActsAsHypertable#acts_as_hypertable
22
22
  # for configuration options
23
23
  module ActsAsHypertable
24
24
  DEFAULT_OPTIONS = {
@@ -26,7 +26,7 @@ module Timescale
26
26
  }.freeze
27
27
 
28
28
  def acts_as_hypertable?
29
- included_modules.include?(Timescale::ActsAsHypertable::Core)
29
+ included_modules.include?(Timescaledb::ActsAsHypertable::Core)
30
30
  end
31
31
 
32
32
  # == Configuration options
@@ -45,7 +45,7 @@ module Timescale
45
45
  def acts_as_hypertable(options = {})
46
46
  return if acts_as_hypertable?
47
47
 
48
- include Timescale::ActsAsHypertable::Core
48
+ include Timescaledb::ActsAsHypertable::Core
49
49
 
50
50
  class_attribute :hypertable_options, instance_writer: false
51
51
 
@@ -59,4 +59,4 @@ module Timescale
59
59
  end
60
60
  end
61
61
 
62
- ActiveRecord::Base.extend Timescale::ActsAsHypertable
62
+ ActiveRecord::Base.extend Timescaledb::ActsAsHypertable
@@ -1,4 +1,4 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class Chunk < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.chunks"
4
4
  self.primary_key = "chunk_name"
@@ -1,4 +1,4 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class CompressionSetting < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.compression_settings"
4
4
  belongs_to :hypertable, foreign_key: :hypertable_name
@@ -1,13 +1,13 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class ContinuousAggregate < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.continuous_aggregates"
4
4
  self.primary_key = 'materialization_hypertable_name'
5
5
 
6
6
  has_many :jobs, foreign_key: "hypertable_name",
7
- class_name: "Timescale::Job"
7
+ class_name: "Timescaledb::Job"
8
8
 
9
9
  has_many :chunks, foreign_key: "hypertable_name",
10
- class_name: "Timescale::Chunk"
10
+ class_name: "Timescaledb::Chunk"
11
11
 
12
12
  scope :resume, -> do
13
13
  {
@@ -1,4 +1,4 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class Dimension < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.dimensions"
4
4
  end
@@ -1,4 +1,4 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class Hypertable < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.hypertables"
4
4
  self.primary_key = "hypertable_name"
@@ -8,15 +8,15 @@ module Timescale
8
8
 
9
9
  has_many :compression_settings,
10
10
  foreign_key: "hypertable_name",
11
- class_name: "Timescale::CompressionSetting"
11
+ class_name: "Timescaledb::CompressionSetting"
12
12
 
13
13
  has_one :dimensions,
14
14
  foreign_key: "hypertable_name",
15
- class_name: "Timescale::Dimension"
15
+ class_name: "Timescaledb::Dimension"
16
16
 
17
17
  has_many :continuous_aggregates,
18
18
  foreign_key: "hypertable_name",
19
- class_name: "Timescale::ContinuousAggregate"
19
+ class_name: "Timescaledb::ContinuousAggregate"
20
20
 
21
21
  def chunks_detailed_size
22
22
  struct_from "SELECT * from chunks_detailed_size('#{self.hypertable_name}')"
@@ -1,4 +1,4 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class Job < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.jobs"
4
4
  self.primary_key = "job_id"
@@ -1,4 +1,4 @@
1
- module Timescale
1
+ module Timescaledb
2
2
  class JobStat < ActiveRecord::Base
3
3
  self.table_name = "timescaledb_information.job_stats"
4
4
 
@@ -1,7 +1,7 @@
1
1
  require 'active_record/connection_adapters/postgresql_adapter'
2
2
 
3
3
  # Useful methods to run TimescaleDB in you Ruby app.
4
- module Timescale
4
+ module Timescaledb
5
5
  # Migration helpers can help you to setup hypertables by default.
6
6
  module MigrationHelpers
7
7
  # create_table can receive `hypertable` argument
@@ -102,4 +102,4 @@ module Timescale
102
102
  end
103
103
  end
104
104
 
105
- ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.include(Timescale::MigrationHelpers)
105
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.include(Timescaledb::MigrationHelpers)
@@ -1,7 +1,7 @@
1
1
  require 'scenic/adapters/postgres'
2
2
  require 'scenic/adapters/postgres/views'
3
3
 
4
- module Timescale
4
+ module Timescaledb
5
5
  module Scenic
6
6
  class Views < ::Scenic::Adapters::Postgres::Views
7
7
  # All of the views that this connection has defined, excluding any
@@ -45,7 +45,7 @@ module Timescale
45
45
  # definition, since it's not part of the DDL).
46
46
  #
47
47
  # Our schema dumper implementation will handle dumping the continuous
48
- # aggregate definintions, but we need to override Scenic's schema dumping
48
+ # aggregate definitions, but we need to override Scenic's schema dumping
49
49
  # to exclude those continuous aggregates.
50
50
  def views
51
51
  Views.new(connection).all
@@ -0,0 +1,72 @@
1
+ # Scenic does not include `WITH` option that is used with continuous aggregates.
2
+ module Timescaledb
3
+ module Scenic
4
+ module Extension
5
+ # @override Scenic::Adapters::Postgres#create_materialized_view
6
+ # Creates a materialized view in the database
7
+ #
8
+ # @param name The name of the materialized view to create
9
+ # @param sql_definition The SQL schema that defines the materialized view.
10
+ # @param with [String] Default: nil. Set with: "..." to add "WITH (...)".
11
+ # @param no_data [Boolean] Default: false. Set to true to not create data.
12
+ # materialized view without running the associated query. You will need
13
+ # to perform a non-concurrent refresh to populate with data.
14
+ #
15
+ # This is typically called in a migration via {Statements#create_view}.
16
+ # @return [void]
17
+ def create_materialized_view(name, sql_definition, with: nil, no_data: false)
18
+ execute <<-SQL
19
+ CREATE MATERIALIZED VIEW #{quote_table_name(name)}
20
+ #{"WITH (#{with})" if with} AS
21
+ #{sql_definition.rstrip.chomp(';')}
22
+ #{'WITH NO DATA' if no_data};
23
+ SQL
24
+ end
25
+
26
+ # @override Scenic::Adapters::Postgres#create_view
27
+ # to add the `with: ` keyword that can be used for such option.
28
+ #
29
+ def create_view(name, version: nil, with: nil, sql_definition: nil, materialized: false, no_data: false)
30
+ if version.present? && sql_definition.present?
31
+ raise(
32
+ ArgumentError,
33
+ "sql_definition and version cannot both be set",
34
+ )
35
+ end
36
+
37
+ if version.blank? && sql_definition.blank?
38
+ version = 1
39
+ end
40
+
41
+ sql_definition ||= definition(name, version)
42
+
43
+ if materialized
44
+ ::Scenic.database.create_materialized_view(
45
+ name,
46
+ sql_definition,
47
+ no_data: no_data,
48
+ with: with
49
+ )
50
+ else
51
+ ::Scenic.database.create_view(name, sql_definition, with: with)
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def definition(name, version)
58
+ ::Scenic::Definition.new(name, version).to_sql
59
+ end
60
+ end
61
+ module MigrationHelpers
62
+ # Create a timescale continuous aggregate view
63
+ def create_scenic_continuous_aggregate(name)
64
+ ::Scenic.database.create_view(name, materialized: true, no_data: true, with: "timescaledb.continuous")
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+
71
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.include(Timescaledb::Scenic::MigrationHelpers)
72
+ Scenic::Adapters::Postgres.prepend(Timescaledb::Scenic::Extension)
@@ -1,7 +1,7 @@
1
1
  require 'active_record/connection_adapters/postgresql_adapter'
2
2
  require 'active_support/core_ext/string/indent'
3
3
 
4
- module Timescale
4
+ module Timescaledb
5
5
  module SchemaDumper
6
6
  def tables(stream)
7
7
  super # This will call #table for each table in the database
@@ -10,7 +10,7 @@ module Timescale
10
10
 
11
11
  def table(table_name, stream)
12
12
  super(table_name, stream)
13
- if hypertable = Timescale::Hypertable.find_by(hypertable_name: table_name)
13
+ if hypertable = Timescaledb::Hypertable.find_by(hypertable_name: table_name)
14
14
  timescale_hypertable(hypertable, stream)
15
15
  timescale_retention_policy(hypertable, stream)
16
16
  end
@@ -58,7 +58,7 @@ module Timescale
58
58
  end
59
59
 
60
60
  def timescale_continuous_aggregates(stream)
61
- Timescale::ContinuousAggregates.all.each do |aggregate|
61
+ Timescaledb::ContinuousAggregates.all.each do |aggregate|
62
62
  opts = if (refresh_policy = aggregate.jobs.refresh_continuous_aggregate.first)
63
63
  interval = timescale_interval(refresh_policy.schedule_interval)
64
64
  end_offset = timescale_interval(refresh_policy.config["end_offset"])
@@ -85,4 +85,4 @@ module Timescale
85
85
  end
86
86
  end
87
87
 
88
- ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaDumper.prepend(Timescale::SchemaDumper)
88
+ ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaDumper.prepend(Timescaledb::SchemaDumper)
@@ -1,6 +1,6 @@
1
1
  require "active_support/core_ext/numeric/conversions"
2
2
 
3
- module Timescale
3
+ module Timescaledb
4
4
  module StatsReport
5
5
  module_function
6
6
  def resume(scope=Hypertable.all)
@@ -19,7 +19,7 @@ module Timescale
19
19
  end
20
20
 
21
21
  def compression_resume(scope)
22
- sum = -> (method) { (scope.map(&method).inject(:+) || 0).to_s(:human_size)}
22
+ sum = -> (method) { (scope.map(&method).inject(:+) || 0).to_formatted_s(:human_size)}
23
23
  {
24
24
  uncompressed: sum[:before_total_bytes],
25
25
  compressed: sum[:after_total_bytes]
@@ -0,0 +1,3 @@
1
+ module Timescaledb
2
+ VERSION = '0.2.0'
3
+ end
@@ -0,0 +1,64 @@
1
+ require 'active_record'
2
+
3
+ require_relative 'timescaledb/acts_as_hypertable'
4
+ require_relative 'timescaledb/acts_as_hypertable/core'
5
+ require_relative 'timescaledb/chunk'
6
+ require_relative 'timescaledb/compression_settings'
7
+ require_relative 'timescaledb/continuous_aggregates'
8
+ require_relative 'timescaledb/dimensions'
9
+ require_relative 'timescaledb/hypertable'
10
+ require_relative 'timescaledb/job'
11
+ require_relative 'timescaledb/job_stats'
12
+ require_relative 'timescaledb/schema_dumper'
13
+ require_relative 'timescaledb/stats_report'
14
+ require_relative 'timescaledb/migration_helpers'
15
+ require_relative 'timescaledb/version'
16
+
17
+ module Timescaledb
18
+ module_function
19
+
20
+ def chunks
21
+ Chunk.all
22
+ end
23
+
24
+ def hypertables
25
+ Hypertable.all
26
+ end
27
+
28
+ def continuous_aggregates
29
+ ContinuousAggregates.all
30
+ end
31
+
32
+ def compression_settings
33
+ CompressionSettings.all
34
+ end
35
+
36
+ def jobs
37
+ Job.all
38
+ end
39
+
40
+ def job_stats
41
+ JobStats.all
42
+ end
43
+
44
+ def stats(scope=Hypertable.all)
45
+ StatsReport.resume(scope)
46
+ end
47
+
48
+ def default_hypertable_options
49
+ Timescaledb::ActsAsHypertable::DEFAULT_OPTIONS
50
+ end
51
+ end
52
+
53
+ begin
54
+ require 'scenic'
55
+ require_relative 'timescaledb/scenic/adapter'
56
+ require_relative 'timescaledb/scenic/extension'
57
+
58
+ Scenic.configure do |config|
59
+ config.database = Timescaledb::Scenic::Adapter.new
60
+ end
61
+
62
+ rescue LoadError
63
+ # This is expected when the scenic gem is not being used
64
+ end
@@ -1,14 +1,14 @@
1
- require_relative 'lib/timescale/version'
1
+ require_relative 'lib/timescaledb/version'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "timescaledb"
5
- spec.version = Timescale::VERSION
5
+ spec.version = Timescaledb::VERSION
6
6
  spec.authors = ["Jônatas Davi Paganini"]
7
7
  spec.email = ["jonatasdp@gmail.com"]
8
8
 
9
9
  spec.summary = %q{TimescaleDB helpers for Ruby ecosystem.}
10
10
  spec.description = %q{Functions from timescaledb available in the ActiveRecord models.}
11
- spec.homepage = "https://github.com/jonatas/timescale"
11
+ spec.homepage = "https://github.com/jonatas/timescaledb"
12
12
  spec.license = "MIT"
13
13
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
14