km-db 0.2.1 → 0.3.2

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 (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +2 -4
  5. data/Gemfile.lock +179 -20
  6. data/Procfile +2 -0
  7. data/Procfile.work +1 -0
  8. data/README.md +186 -0
  9. data/Rakefile +1 -0
  10. data/bin/kmdb-flush +13 -0
  11. data/bin/kmdb-import +13 -0
  12. data/bin/kmdb-partition +15 -0
  13. data/bin/kmdb-pool +8 -0
  14. data/bin/kmdb-realias +12 -0
  15. data/bin/kmdb-ui +6 -0
  16. data/bin/kmdb-work +17 -0
  17. data/config/amazon-rds-ca-cert.pem +260 -0
  18. data/config.ru +8 -0
  19. data/km-db.gemspec +17 -17
  20. data/lib/kmdb/{belongs_to_user.rb → concerns/belongs_to_user.rb} +3 -3
  21. data/lib/kmdb/concerns/has_properties.rb +35 -0
  22. data/lib/kmdb/jobs/find_files.rb +32 -0
  23. data/lib/kmdb/jobs/list_files.rb +37 -0
  24. data/lib/kmdb/jobs/locked.rb +10 -0
  25. data/lib/kmdb/jobs/parse_file.rb +109 -0
  26. data/lib/kmdb/jobs/record_batch.rb +65 -0
  27. data/lib/kmdb/jobs/redo_unaliasing.rb +31 -0
  28. data/lib/kmdb/jobs/unalias_user.rb +32 -0
  29. data/lib/kmdb/migrations/01_kmdb_initial.rb +78 -0
  30. data/lib/kmdb/migrations/02_kmdb_partitions.rb +28 -0
  31. data/lib/kmdb/migrations/03_kmdb_blacklist.rb +20 -0
  32. data/lib/kmdb/models/alias.rb +36 -0
  33. data/lib/kmdb/models/blacklisted_property.rb +20 -0
  34. data/lib/kmdb/models/custom_record.rb +53 -0
  35. data/lib/kmdb/models/dumpfile.rb +33 -0
  36. data/lib/kmdb/models/event.rb +56 -0
  37. data/lib/kmdb/models/event_batch.rb +72 -0
  38. data/lib/kmdb/models/global_uid.rb +42 -0
  39. data/lib/kmdb/models/ignored_user.rb +20 -0
  40. data/lib/kmdb/models/json_file.rb +56 -0
  41. data/lib/kmdb/models/key.rb +28 -0
  42. data/lib/kmdb/models/property.rb +44 -0
  43. data/lib/kmdb/models/s3_object.rb +54 -0
  44. data/lib/kmdb/models/user.rb +53 -0
  45. data/lib/kmdb/models/whitelisted_event.rb +20 -0
  46. data/lib/kmdb/parser.rb +4 -4
  47. data/lib/kmdb/redis.rb +17 -0
  48. data/lib/kmdb/resque.rb +38 -0
  49. data/lib/kmdb/s3_bucket.rb +33 -0
  50. data/lib/kmdb/services/partitioner.rb +65 -0
  51. data/lib/kmdb/version.rb +1 -1
  52. data/lib/kmdb.rb +31 -6
  53. metadata +236 -186
  54. data/README.markdown +0 -91
  55. data/bin/km_db_import +0 -36
  56. data/lib/kmdb/custom_record.rb +0 -54
  57. data/lib/kmdb/dumpfile.rb +0 -23
  58. data/lib/kmdb/event.rb +0 -39
  59. data/lib/kmdb/has_properties.rb +0 -33
  60. data/lib/kmdb/key.rb +0 -56
  61. data/lib/kmdb/migration.rb +0 -63
  62. data/lib/kmdb/parallel_parser.rb +0 -85
  63. data/lib/kmdb/property.rb +0 -33
  64. data/lib/kmdb/user.rb +0 -83
metadata CHANGED
@@ -1,234 +1,284 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: km-db
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
11
5
  platform: ruby
12
- authors:
13
- - HouseTrip
6
+ authors:
7
+ - Julien Letessier
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-03-23 00:00:00 +00:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 23
28
- segments:
29
- - 1
30
- - 0
31
- - 0
32
- version: 1.0.0
33
- prerelease: false
11
+ date: 2015-06-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
34
14
  name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
35
20
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 31
44
- segments:
45
- - 2
46
- - 4
47
- - 0
48
- version: 2.4.0
49
21
  prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
50
28
  name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.4.0
51
34
  type: :development
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
63
35
  prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.4.0
41
+ - !ruby/object:Gem::Dependency
64
42
  name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
65
48
  type: :development
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
77
- prerelease: false
78
- name: json
79
- type: :development
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- requirement: &id005 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
91
49
  prerelease: false
92
- name: sqlite3-ruby
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
93
62
  type: :development
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- requirement: &id006 !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
105
63
  prerelease: false
106
- name: yajl-ruby
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: oj
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
107
76
  type: :runtime
108
- version_requirements: *id006
109
- - !ruby/object:Gem::Dependency
110
- requirement: &id007 !ruby/object:Gem::Requirement
111
- none: false
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 0
118
- version: "0"
119
77
  prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
120
84
  name: progressbar
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
121
90
  type: :runtime
122
- version_requirements: *id007
123
- - !ruby/object:Gem::Dependency
124
- requirement: &id008 !ruby/object:Gem::Requirement
125
- none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
131
- - 0
132
- version: "0"
133
- prerelease: false
134
- name: parallel
135
- type: :runtime
136
- version_requirements: *id008
137
- - !ruby/object:Gem::Dependency
138
- requirement: &id009 !ruby/object:Gem::Requirement
139
- none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- hash: 3
144
- segments:
145
- - 0
146
- version: "0"
147
91
  prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
148
98
  name: andand
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
149
104
  type: :runtime
150
- version_requirements: *id009
151
- - !ruby/object:Gem::Dependency
152
- requirement: &id010 !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ~>
156
- - !ruby/object:Gem::Version
157
- hash: 27
158
- segments:
159
- - 2
160
- - 3
161
- - 12
162
- version: 2.3.12
163
105
  prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
164
112
  name: activerecord
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '4.1'
165
118
  type: :runtime
166
- version_requirements: *id010
167
- description: Process KISSmetrics data dumps
168
- email:
169
- - jtl@housetrip.com
170
- executables:
171
- - km_db_import
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '4.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: resque
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: resque-lock
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: foreman
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: fog
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: mysql2
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description:
196
+ email:
197
+ - julien.letessier@gmail.com
198
+ executables:
199
+ - kmdb-flush
200
+ - kmdb-import
201
+ - kmdb-partition
202
+ - kmdb-pool
203
+ - kmdb-realias
204
+ - kmdb-ui
205
+ - kmdb-work
172
206
  extensions: []
173
-
174
207
  extra_rdoc_files: []
175
-
176
- files:
208
+ files:
209
+ - ".gitignore"
210
+ - ".ruby-version"
177
211
  - Gemfile
178
212
  - Gemfile.lock
179
- - README.markdown
213
+ - Procfile
214
+ - Procfile.work
215
+ - README.md
180
216
  - Rakefile
181
- - bin/km_db_import
217
+ - bin/kmdb-flush
218
+ - bin/kmdb-import
219
+ - bin/kmdb-partition
220
+ - bin/kmdb-pool
221
+ - bin/kmdb-realias
222
+ - bin/kmdb-ui
223
+ - bin/kmdb-work
224
+ - config.ru
225
+ - config/amazon-rds-ca-cert.pem
182
226
  - km-db.gemspec
183
227
  - lib/kmdb.rb
184
- - lib/kmdb/belongs_to_user.rb
185
- - lib/kmdb/custom_record.rb
186
- - lib/kmdb/dumpfile.rb
187
- - lib/kmdb/event.rb
188
- - lib/kmdb/has_properties.rb
189
- - lib/kmdb/key.rb
190
- - lib/kmdb/migration.rb
191
- - lib/kmdb/parallel_parser.rb
228
+ - lib/kmdb/concerns/belongs_to_user.rb
229
+ - lib/kmdb/concerns/has_properties.rb
230
+ - lib/kmdb/jobs/find_files.rb
231
+ - lib/kmdb/jobs/list_files.rb
232
+ - lib/kmdb/jobs/locked.rb
233
+ - lib/kmdb/jobs/parse_file.rb
234
+ - lib/kmdb/jobs/record_batch.rb
235
+ - lib/kmdb/jobs/redo_unaliasing.rb
236
+ - lib/kmdb/jobs/unalias_user.rb
237
+ - lib/kmdb/migrations/01_kmdb_initial.rb
238
+ - lib/kmdb/migrations/02_kmdb_partitions.rb
239
+ - lib/kmdb/migrations/03_kmdb_blacklist.rb
240
+ - lib/kmdb/models/alias.rb
241
+ - lib/kmdb/models/blacklisted_property.rb
242
+ - lib/kmdb/models/custom_record.rb
243
+ - lib/kmdb/models/dumpfile.rb
244
+ - lib/kmdb/models/event.rb
245
+ - lib/kmdb/models/event_batch.rb
246
+ - lib/kmdb/models/global_uid.rb
247
+ - lib/kmdb/models/ignored_user.rb
248
+ - lib/kmdb/models/json_file.rb
249
+ - lib/kmdb/models/key.rb
250
+ - lib/kmdb/models/property.rb
251
+ - lib/kmdb/models/s3_object.rb
252
+ - lib/kmdb/models/user.rb
253
+ - lib/kmdb/models/whitelisted_event.rb
192
254
  - lib/kmdb/parser.rb
193
- - lib/kmdb/property.rb
194
- - lib/kmdb/user.rb
255
+ - lib/kmdb/redis.rb
256
+ - lib/kmdb/resque.rb
257
+ - lib/kmdb/s3_bucket.rb
258
+ - lib/kmdb/services/partitioner.rb
195
259
  - lib/kmdb/user_error.rb
196
260
  - lib/kmdb/version.rb
197
- has_rdoc: true
198
261
  homepage: https://github.com/housetrip/km-db
199
262
  licenses: []
200
-
263
+ metadata: {}
201
264
  post_install_message:
202
265
  rdoc_options: []
203
-
204
- require_paths:
266
+ require_paths:
205
267
  - lib
206
- required_ruby_version: !ruby/object:Gem::Requirement
207
- none: false
208
- requirements:
268
+ required_ruby_version: !ruby/object:Gem::Requirement
269
+ requirements:
209
270
  - - ">="
210
- - !ruby/object:Gem::Version
211
- hash: 3
212
- segments:
213
- - 0
214
- version: "0"
215
- required_rubygems_version: !ruby/object:Gem::Requirement
216
- none: false
217
- requirements:
271
+ - !ruby/object:Gem::Version
272
+ version: '0'
273
+ required_rubygems_version: !ruby/object:Gem::Requirement
274
+ requirements:
218
275
  - - ">="
219
- - !ruby/object:Gem::Version
220
- hash: 23
221
- segments:
222
- - 1
223
- - 3
224
- - 6
225
- version: 1.3.6
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
226
278
  requirements: []
227
-
228
279
  rubyforge_project:
229
- rubygems_version: 1.3.9.5
280
+ rubygems_version: 2.2.2
230
281
  signing_key:
231
- specification_version: 3
282
+ specification_version: 4
232
283
  summary: Process KISSmetrics data dumps
233
284
  test_files: []
234
-
data/README.markdown DELETED
@@ -1,91 +0,0 @@
1
- The `km-db` gem should be useful to KissMetrics (KM) users.
2
- Its aim is to efficiently process data obtained with KM's "Data Export" feature.
3
-
4
- It is meant to :
5
-
6
- * import KM event dumps into a SQL database (preferably MySQL / PostgreSQL)
7
- * quickly process KM event dumps
8
-
9
- Once imported, you can run complex queries against your visit history, for instance run multivariate analysis.
10
-
11
- Beware though, KM data can be huge, and processing it is taxing !
12
-
13
-
14
- Installing
15
- ----------
16
-
17
- Add this to your Gemfile if you're using Bundler:
18
-
19
- gem 'km-db', :git => 'git://github.com/HouseTrip/km-db.git'
20
-
21
-
22
- Importing data
23
- --------------
24
-
25
- Running reports on raw logs can be less effective than running against a (relational) database.
26
- `km-db` provides a `km_db_import` executable. Run it with:
27
-
28
- $ bundle exec km_db_import <data-dump-directory>…
29
-
30
- By default, you events will be imported in `test.db`, a SQLite database.
31
-
32
- You can create `km_db.yml` or `config/km_db.yml` to have it import using another adapter, for instance:
33
-
34
- ---- km_db.yml ----
35
- adapter: mysql2
36
- database: km_events
37
- user: root
38
-
39
- Remember to add `sqlite3-ruby` or `mysql2` to your Gemfile.
40
-
41
-
42
- Using imported data
43
- -------------------
44
-
45
- The `KMDB` module exposes four `ActiveRecord` classes:
46
- `Event`, `Property`, `User` are the main domain objects.
47
- `Key` is used to intern strings (event and property names) for performance.
48
-
49
- ### Finding events and properties
50
-
51
- All visits during Jan. 2012:
52
-
53
- KMDB::Event.before('2012-02-1').after('2012-01-01').named('visited site').by_date
54
-
55
- All of a user's visit:
56
-
57
- KMDB::User.last.events.named('visited site')
58
-
59
- A user's referers:
60
-
61
- KMDB::User.last.properties.named('referer').map(&:value)
62
-
63
- Load some properties with events (uses a left join by default):
64
-
65
- KMDB::User.last.events.with_properties('a prop', 'another prop').map(&:another_prop)
66
-
67
- Note that many more complex queries will require building SQL queries directly.
68
-
69
-
70
- Processing data
71
- ---------------
72
-
73
- You don't have to import to filter your data.
74
-
75
- The two classes you're looking for are `KMDB::Parser` and `KMDB::ParallelParser`.
76
- The latter runs your filter task on all available CPUs, using the `parallel` gem.
77
-
78
- The following example counts the number of *aliasing* events in all JSON files under `dumps/`:
79
-
80
- require 'rubygems'
81
- require 'kmdb'
82
-
83
- counter = 0
84
- parser = KMDB::Parser.new
85
- parser.add_filter do |text,event|
86
- counter += 1 if event['_p2']
87
- end
88
- parser.run('dumps/')
89
- puts counter
90
-
91
- Note that it will not work with `ParallelParser`, as the `counter` variable will be different for each process.
data/bin/km_db_import DELETED
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env ruby
2
- =begin
3
-
4
- Import KM events from the raw dumps.
5
-
6
- =end
7
-
8
- require 'rubygems'
9
- require 'kmdb'
10
-
11
- if KMDB::Event.connection.class.to_s =~ /(mysql|pgsql)/i
12
- parser_class = KMDB::ParallelParser
13
- else
14
- parser_class = KMDB::Parser
15
- end
16
-
17
- parser = parser_class.new(:resume => 'import',
18
- :verbose => true)
19
-
20
- # import events by category
21
- parser.add_filter { |text, event|
22
- if event['_p2']
23
- KMDB::User.alias! event['_p'], event['_p2']
24
- elsif event['_n']
25
- KMDB::Event.record event
26
- else
27
- KMDB::Property.set event
28
- end
29
-
30
- event
31
- }
32
-
33
- parser.run(ARGV) # heavy lifting here
34
- KMDB::Event.connection.reconnect! # reconnect to database (breaks because of processes forking off)
35
- KMDB::User.resolve_alias_chains! # detect and filter alias chains
36
- KMDB::Key.fix_duplicates! # remove key duplicates
@@ -1,54 +0,0 @@
1
- =begin
2
-
3
- Base class for KM data.
4
- Connect to a secondary database to store events, users, & properties.
5
-
6
- FIXME: the database connection is hard-coded for now.
7
-
8
- =end
9
-
10
- require 'active_record'
11
- require 'erb'
12
- require 'yaml'
13
- require 'kmdb/migration'
14
-
15
-
16
- module KMDB
17
- class CustomRecord < ActiveRecord::Base
18
- DefaultConfig = {
19
- 'adapter' => 'sqlite3',
20
- 'database' => "test.db"
21
- }
22
-
23
- def self.disable_index
24
- connection.execute %Q{
25
- ALTER TABLE `#{table_name}` DISABLE KEYS;
26
- }
27
- end
28
-
29
- def self.enable_index
30
- connection.execute %Q{
31
- ALTER TABLE `#{table_name}` ENABLE KEYS;
32
- }
33
- end
34
-
35
- def self.find_or_create(options)
36
- find(:first, :conditions => options) || create(options)
37
- end
38
-
39
- def self.connect_to_km_db!
40
- config = DefaultConfig.dup
41
- ['km_db.yml', 'config/km_db.yml'].each do |config_path|
42
- next unless File.exist?(config_path)
43
- config.merge! YAML.load(ERB.new(File.open(config_path).read).result)
44
- break
45
- end
46
- establish_connection(config)
47
-
48
- unless connection.table_exists?('events')
49
- SetupEventsDatabase.up
50
- self.reset_column_information
51
- end
52
- end
53
- end
54
- end
data/lib/kmdb/dumpfile.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'kmdb/custom_record'
2
-
3
- module KMDB
4
- class Dumpfile < CustomRecord
5
- set_table_name "dumpfiles"
6
-
7
- validates_presence_of :offset
8
- validates_presence_of :path
9
-
10
- def set(offset)
11
- update_attributes!(:offset => offset)
12
- end
13
-
14
- def offset
15
- attributes['offset'] || 0
16
- end
17
-
18
- def self.get(pathname, job = nil)
19
- job ||= 'nil'
20
- find_or_create(:path => pathname.cleanpath.to_s, :job => job)
21
- end
22
- end
23
- end