km-db 0.2.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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