saseo 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8584935e166a1c98a8850d9247901ed8d5d4d68e
4
- data.tar.gz: a7f7978c8849140dc105cbe2c67cec42494a179e
3
+ metadata.gz: 8ace1b2a4acc3bc9335423feaa6ac2683d316c05
4
+ data.tar.gz: 539126fd909b07cb23d26775b9925892d7b0d078
5
5
  SHA512:
6
- metadata.gz: 052d69970c0f6eef0023976c481d9d1372bc075dd343cbd3ad6f5c553518f512331188d5b8a3fc3193ef632e7d7dcf3bd31edbceae3aaf470157279cabd37ce5
7
- data.tar.gz: 435bc66217e046e9d3ccdb884f83b55b09b6163058995b446ff72f209a4128da730eb6dd03e679cb11fb6d90dc1aee9bf1078ceac98401531ce22909e2c8205c
6
+ metadata.gz: 2477b4227cf676ae414d8d42fbc2a306b46aa48ed53d2b14b2d9542db00d6b08093d2f597b5ee71b6fbd080d579060483d4caa4148a06038c007ad25570395bf
7
+ data.tar.gz: 28a75ce72cffcb90be7b39307b73f8230c4223b53265f64f8a7e84283b968ca02c11b9fe8ce3246c600b5932f1e9faacae1cead6caf1016c919ae2a2a80faae5
@@ -0,0 +1,9 @@
1
+ class AddIndexes < ActiveRecord::Migration
2
+ def change
3
+ add_index :saseo_versions, [:transaction_id, :table_name, :item_id], name: :saseo_transaction_item_id_idx
4
+ add_index :saseo_versions, [:table_name, :action_timestamp, :item_id], name: :saseo_item_id_idx
5
+
6
+ add_index :saseo_versions, [:transaction_id, :table_name, :item_uuid], name: :saseo_transaction_item_uuid_idx
7
+ add_index :saseo_versions, [:table_name, :action_timestamp, :item_uuid], name: :saseo_item_uuid_idx
8
+ end
9
+ end
data/db/saseo/schema.rb CHANGED
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20151028181502) do
14
+ ActiveRecord::Schema.define(version: 20151108210618) do
15
15
 
16
16
  # These are extensions that must be enabled in order to support this database
17
17
  enable_extension "plpgsql"
@@ -29,4 +29,9 @@ ActiveRecord::Schema.define(version: 20151028181502) do
29
29
  t.jsonb "new_data"
30
30
  end
31
31
 
32
+ add_index "saseo_versions", ["table_name", "action_timestamp", "item_id"], name: "saseo_item_id_idx", using: :btree
33
+ add_index "saseo_versions", ["table_name", "action_timestamp", "item_uuid"], name: "saseo_item_uuid_idx", using: :btree
34
+ add_index "saseo_versions", ["transaction_id", "table_name", "item_id"], name: "saseo_transaction_item_id_idx", using: :btree
35
+ add_index "saseo_versions", ["transaction_id", "table_name", "item_uuid"], name: "saseo_transaction_item_uuid_idx", using: :btree
36
+
32
37
  end
@@ -1,9 +1,9 @@
1
1
  class InitialSchema < ActiveRecord::Migration
2
- def change
3
-
2
+ def up
4
3
  enable_extension 'uuid-ossp'
4
+ execute 'CREATE SCHEMA saseo'
5
5
 
6
- create_table 'saseo_source_versions', id: :uuid, force: true do |t|
6
+ create_table 'saseo.saseo_source_versions', id: :uuid, force: true do |t|
7
7
  t.integer 'transaction_id', null: false, limit: 8 # bigint
8
8
  t.string 'table_name', null: false
9
9
  t.string 'action', null: false
@@ -13,4 +13,10 @@ class InitialSchema < ActiveRecord::Migration
13
13
  t.jsonb 'new_data'
14
14
  end
15
15
  end
16
+
17
+ def down
18
+ drop_table 'saseo.saseo_source_versions'
19
+ disable_extension 'uuid-ossp'
20
+ execute 'DROP SCHEMA IF EXISTS saseo'
21
+ end
16
22
  end
@@ -17,14 +17,4 @@ ActiveRecord::Schema.define(version: 20151028181502) do
17
17
  enable_extension "plpgsql"
18
18
  enable_extension "uuid-ossp"
19
19
 
20
- create_table "saseo_source_versions", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t|
21
- t.integer "transaction_id", limit: 8, null: false
22
- t.string "table_name", null: false
23
- t.string "action", null: false
24
- t.datetime "action_timestamp", null: false
25
- t.string "whodunnit", null: false
26
- t.jsonb "old_data"
27
- t.jsonb "new_data"
28
- end
29
-
30
20
  end
@@ -3,7 +3,7 @@ class AddSaseoTriggerTo<%= @table_name.camelcase %> < ActiveRecord::Migration
3
3
  # originally copied from:
4
4
  # https://wiki.postgresql.org/wiki/Audit_trigger
5
5
  trigger_definition = <<SQL
6
- CREATE TRIGGER <%= @table_name %>_saseo_trigger AFTER INSERT OR UPDATE OR DELETE ON <%= @table_name %> FOR EACH ROW EXECUTE PROCEDURE saseo_audit_func();
6
+ CREATE TRIGGER <%= @table_name %>_saseo_trigger AFTER INSERT OR UPDATE OR DELETE ON <%= @table_name %> FOR EACH ROW EXECUTE PROCEDURE saseo.audit_func();
7
7
  SQL
8
8
  execute(trigger_definition)
9
9
  end
@@ -4,7 +4,9 @@ class AddSaseoTriggerFunction < ActiveRecord::Migration
4
4
  uuid_extension_sql = 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
5
5
 
6
6
  audit_table_sql = <<SQL
7
- CREATE TABLE saseo_source_versions (
7
+ CREATE schema saseo;
8
+
9
+ CREATE TABLE saseo.saseo_source_versions (
8
10
  id uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
9
11
  transaction_id bigint NOT NULL,
10
12
  table_name text NOT NULL,
@@ -13,19 +15,18 @@ CREATE TABLE saseo_source_versions (
13
15
  whodunnit text NOT NULL,
14
16
  old_data jsonb,
15
17
  new_data jsonb
16
- )
17
- SQL
18
-
18
+ );
19
19
 
20
+ SQL
20
21
  # originally copied from:
21
22
  # https://wiki.postgresql.org/wiki/Audit_trigger
22
23
  #
23
24
  # modified to use NOTIFY
24
25
  #
25
26
  # a trigger must be added to every table
26
- # CREATE TRIGGER identities_saseo_trigger AFTER INSERT OR UPDATE OR DELETE ON identities FOR EACH ROW EXECUTE PROCEDURE saseo_audit_func();
27
+ # CREATE TRIGGER identities_saseo_trigger AFTER INSERT OR UPDATE OR DELETE ON identities FOR EACH ROW EXECUTE PROCEDURE saseo.audit_func();
27
28
  whodunnit_sql = <<SQL
28
- CREATE OR REPLACE FUNCTION saseo_whodunnit() RETURNS TEXT AS $body$
29
+ CREATE OR REPLACE FUNCTION saseo.whodunnit() RETURNS TEXT AS $body$
29
30
  BEGIN
30
31
  return current_setting('saseo.whodunnit');
31
32
  EXCEPTION WHEN undefined_object THEN
@@ -35,7 +36,7 @@ $body$
35
36
  LANGUAGE plpgsql
36
37
  SQL
37
38
  audit_sql = <<SQL
38
- CREATE OR REPLACE FUNCTION saseo_audit_func() RETURNS TRIGGER AS $body$
39
+ CREATE OR REPLACE FUNCTION saseo.audit_func() RETURNS TRIGGER AS $body$
39
40
  DECLARE
40
41
  v_old_data json;
41
42
  v_new_data json;
@@ -43,7 +44,7 @@ DECLARE
43
44
  v_channel text;
44
45
  v_audit_uuid uuid;
45
46
  BEGIN
46
- v_whodunnit := saseo_whodunnit();
47
+ v_whodunnit := saseo.whodunnit();
47
48
  v_audit_uuid := uuid_generate_v4();
48
49
 
49
50
  v_channel := upper('SASEO' || '_' || TG_TABLE_NAME::TEXT || '_' || TG_OP || '_AUDIT');
@@ -52,38 +53,38 @@ BEGIN
52
53
  v_old_data := row_to_json(OLD);
53
54
  v_new_data := row_to_json(NEW);
54
55
 
55
- INSERT INTO saseo_source_versions VALUES(v_audit_uuid, txid_current(), TG_TABLE_NAME, DEFAULT, TG_OP, v_whodunnit, v_old_data::JSONB, v_new_data::JSONB);
56
+ INSERT INTO saseo.saseo_source_versions VALUES(v_audit_uuid, txid_current(), TG_TABLE_NAME, DEFAULT, TG_OP, v_whodunnit, v_old_data::JSONB, v_new_data::JSONB);
56
57
  PERFORM pg_notify(v_channel, v_audit_uuid::TEXT);
57
58
 
58
59
  RETURN NEW;
59
60
  ELSIF (TG_OP = 'DELETE') THEN
60
61
  v_old_data := row_to_json(OLD);
61
62
 
62
- INSERT INTO saseo_source_versions VALUES(v_audit_uuid, txid_current(), TG_TABLE_NAME, DEFAULT, TG_OP, v_whodunnit, v_old_data::JSONB, NULL);
63
+ INSERT INTO saseo.saseo_source_versions VALUES(v_audit_uuid, txid_current(), TG_TABLE_NAME, DEFAULT, TG_OP, v_whodunnit, v_old_data::JSONB, NULL);
63
64
  PERFORM pg_notify(v_channel, v_audit_uuid::TEXT);
64
65
 
65
66
  RETURN OLD;
66
67
  ELSIF (TG_OP = 'INSERT') THEN
67
68
  v_new_data := row_to_json(NEW);
68
69
 
69
- INSERT INTO saseo_source_versions VALUES(v_audit_uuid, txid_current(), TG_TABLE_NAME, DEFAULT, TG_OP, v_whodunnit, NULL, v_new_data::JSONB);
70
+ INSERT INTO saseo.saseo_source_versions VALUES(v_audit_uuid, txid_current(), TG_TABLE_NAME, DEFAULT, TG_OP, v_whodunnit, NULL, v_new_data::JSONB);
70
71
  PERFORM pg_notify(v_channel, v_audit_uuid::TEXT);
71
72
 
72
73
  RETURN NEW;
73
74
  ELSE
74
- RAISE WARNING '[SASEO_AUDIT_FUNC] - Other action occurred: %, at %',TG_OP,now();
75
+ RAISE WARNING '[SASEO.AUDIT_FUNC] - Other action occurred: %, at %',TG_OP,now();
75
76
  RETURN NULL;
76
77
  END IF;
77
78
 
78
79
  EXCEPTION
79
80
  WHEN data_exception THEN
80
- RAISE WARNING '[SASEO_AUDIT_FUNC] - UDF ERROR [DATA EXCEPTION] - SQLSTATE: %, SQLERRM: %',SQLSTATE,SQLERRM;
81
+ RAISE WARNING '[SASEO.AUDIT_FUNC] - UDF ERROR [DATA EXCEPTION] - SQLSTATE: %, SQLERRM: %',SQLSTATE,SQLERRM;
81
82
  RETURN NULL;
82
83
  WHEN unique_violation THEN
83
- RAISE WARNING '[SASEO_AUDIT_FUNC] - UDF ERROR [UNIQUE] - SQLSTATE: %, SQLERRM: %',SQLSTATE,SQLERRM;
84
+ RAISE WARNING '[SASEO.AUDIT_FUNC] - UDF ERROR [UNIQUE] - SQLSTATE: %, SQLERRM: %',SQLSTATE,SQLERRM;
84
85
  RETURN NULL;
85
86
  WHEN OTHERS THEN
86
- RAISE WARNING '[SASEO_AUDIT_FUNC] - UDF ERROR [OTHER] - SQLSTATE: %, SQLERRM: %',SQLSTATE,SQLERRM;
87
+ RAISE WARNING '[SASEO.AUDIT_FUNC] - UDF ERROR [OTHER] - SQLSTATE: %, SQLERRM: %',SQLSTATE,SQLERRM;
87
88
  RETURN NULL;
88
89
  END;
89
90
  $body$
@@ -96,9 +97,9 @@ SQL
96
97
  end
97
98
 
98
99
  def down
99
- execute('DROP FUNCTION IF EXISTS saseo_audit_func() CASCADE')
100
- execute('DROP FUNCTION IF EXISTS saseo_whodunnit() CASCADE')
101
- execute('DROP TABLE IF EXISTS saseo_source_versions CASCADE')
100
+ execute('DROP FUNCTION IF EXISTS saseo.audit_func() CASCADE')
101
+ execute('DROP FUNCTION IF EXISTS saseo.whodunnit() CASCADE')
102
+ execute('DROP TABLE IF EXISTS saseo.saseo_source_versions CASCADE')
102
103
  execute('DROP EXTENSION IF EXISTS "uuid-ossp" CASCADE')
103
104
 
104
105
  end
@@ -8,6 +8,7 @@ module Saseo
8
8
  DATABASE_URL = nil
9
9
  DATABASE_CONFIG_PATH = 'saseo/config/saseo_database.yml'
10
10
  TABLE_NAME = 'saseo_versions'
11
+ SOURCE_TABLE_SCHEMA = 'saseo'
11
12
  SOURCE_TABLE_NAME = 'saseo_source_versions'
12
13
  CONSUMER_PHILOTIC_SUBSCRIPTION = 'saseo_audit'
13
14
 
@@ -5,7 +5,7 @@ module Saseo
5
5
  module Models
6
6
  module Source
7
7
  class Version < Saseo::Models::Source::Base
8
- self.table_name = Saseo.config.source_table_name
8
+ self.table_name = "#{Saseo.config.source_table_schema}.#{Saseo.config.source_table_name}"
9
9
 
10
10
  validates :transaction_id, presence: true
11
11
  validates :table_name, presence: true
@@ -21,7 +21,7 @@ module Saseo
21
21
 
22
22
  def channels=(val)
23
23
  if val == :all
24
- tables = Saseo::Models::Source::Base.connection.tables
24
+ tables = db_connection.tables
25
25
 
26
26
  @channels = tables.reduce([]) do |channels, table|
27
27
  %w[insert update delete].each do |operation|
@@ -38,19 +38,21 @@ module Saseo
38
38
  self.channels = channels
39
39
  listen channels: self.channels, loop: loop, timeout: timeout do |channel, pid, payload|
40
40
  uuid = payload
41
- logger.debug { "received NOTIFY for source version: #{uuid}"}
42
- Saseo::Models::Source::Base.transaction do
41
+ logger.debug { "received NOTIFY for source version: #{uuid}" }
43
42
 
44
- record = Saseo::Models::Source::Version.find(uuid)
45
- Saseo::Publishing::DataChangeMessage.publish(record)
46
- record.delete
47
- logger.debug { "deleted source version: #{uuid}"}
48
- end
43
+ record = Saseo::Models::Source::Version.find(uuid)
44
+ Saseo::Publishing::DataChangeMessage.publish(record)
45
+ record.delete
46
+ logger.debug { "deleted source version: #{uuid}" }
49
47
  end
50
48
  end
51
49
 
50
+ def db_connection
51
+ Saseo::Models::Source::Base.connection
52
+ end
53
+
52
54
  def notify(channel, payload)
53
- conn = Saseo::Models::Source::Base.connection.instance_variable_get(:@connection)
55
+ conn = db_connection.instance_variable_get(:@connection)
54
56
  conn.async_exec "SELECT pg_notify('#{channel}', '#{payload.to_s}')"
55
57
  end
56
58
 
data/lib/saseo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Saseo
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saseo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Keyes
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-03 00:00:00.000000000 Z
11
+ date: 2015-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -201,6 +201,7 @@ files:
201
201
  - bin/console
202
202
  - bin/setup
203
203
  - db/saseo/migrate/20151028181502_initial_schema.rb
204
+ - db/saseo/migrate/20151108210618_add_indexes.rb
204
205
  - db/saseo/schema.rb
205
206
  - db/saseo_source/migrate/20151028181502_initial_schema.rb
206
207
  - db/saseo_source/schema.rb