maatkit-ruby 0.1.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.
- data/Changelog +0 -0
- data/MIT-LICENSE +21 -0
- data/README +26 -0
- data/lib/maatkit-ruby.rb +11 -0
- data/lib/maatkit-ruby/mk-archiver.rb +473 -0
- data/lib/maatkit-ruby/mk-checksum-filter.rb +122 -0
- data/lib/maatkit-ruby/mk-deadlock-logger.rb +223 -0
- data/lib/maatkit-ruby/mk-duplicate-key-checker.rb +239 -0
- data/lib/maatkit-ruby/mk-error-log.rb +240 -0
- data/lib/maatkit-ruby/mk-fifo-split.rb +130 -0
- data/lib/maatkit-ruby/mk-find.rb +137 -0
- data/lib/maatkit-ruby/mk-heartbeat.rb +300 -0
- data/lib/maatkit-ruby/mk-index-usage.rb +164 -0
- data/lib/maatkit-ruby/mk-kill.rb +124 -0
- data/lib/maatkit-ruby/mk-loadavg.rb +313 -0
- data/lib/maatkit-ruby/mk-log-player.rb +316 -0
- data/lib/maatkit-ruby/mk-merge-mqd-results.rb +248 -0
- data/lib/maatkit-ruby/mk-parallel-dump.rb +400 -0
- data/lib/maatkit-ruby/mk-parallel-restore.rb +133 -0
- data/lib/maatkit-ruby/mk-profile-compact.rb +87 -0
- data/lib/maatkit-ruby/mk-purge-logs.rb +99 -0
- data/lib/maatkit-ruby/mk-query-advisor.rb +105 -0
- data/lib/maatkit-ruby/mk-query-digest.rb +149 -0
- data/lib/maatkit-ruby/mk-query-profiler.rb +106 -0
- data/lib/maatkit-ruby/mk-show-grants.rb +103 -0
- data/lib/maatkit-ruby/mk-slave-delay.rb +102 -0
- data/lib/maatkit-ruby/mk-slave-find.rb +98 -0
- data/lib/maatkit-ruby/mk-slave-move.rb +99 -0
- data/lib/maatkit-ruby/mk-slave-prefetch.rb +124 -0
- data/lib/maatkit-ruby/mk-slave-restart.rb +116 -0
- data/lib/maatkit-ruby/mk-table-checksum.rb +151 -0
- data/lib/maatkit-ruby/mk-table-sync.rb +468 -0
- data/lib/maatkit-ruby/mk-upgrade.rb +118 -0
- data/lib/maatkit-ruby/mk-variable-advisor.rb +99 -0
- data/lib/maatkit-ruby/mk-visual-explain.rb +98 -0
- data/lib/maatkit-ruby/version.rb +17 -0
- data/setup.rb +1585 -0
- data/test/test_helper.rb +2 -0
- data/test/test_maatkit_ruby.rb +11 -0
- metadata +105 -0
@@ -0,0 +1,240 @@
|
|
1
|
+
# = maatkit-ruby - A maatkit gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/maatkit-ruby
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# Find new and different MySQL error log entries.
|
10
|
+
#
|
11
|
+
# Maatkit::ErrorLog.new( array, str, array)
|
12
|
+
#
|
13
|
+
class Maatkit::ErrorLog
|
14
|
+
|
15
|
+
#
|
16
|
+
# Prompt for a password when connecting to MySQL.
|
17
|
+
attr_accessor :ask_pass # FALSE
|
18
|
+
|
19
|
+
#
|
20
|
+
# short form: -A; type: string
|
21
|
+
# Default character set. If the value is utf8, sets Perl's binmode on STDOUT to utf8, passes the
|
22
|
+
# mysql_enable_utf8 option to DBD::mysql, and runs SET NAMES UTF8 after connecting to MySQL. Any other
|
23
|
+
# value sets binmode on STDOUT without the utf8 layer, and runs SET NAMES after connecting to MySQL.
|
24
|
+
attr_accessor :charset # (No # value)
|
25
|
+
|
26
|
+
#
|
27
|
+
# type: Array
|
28
|
+
# Read this comma-separated list of config files; if specified, this must be the first option on the
|
29
|
+
# command line.
|
30
|
+
attr_accessor :config # /etc/maatkit/maatkit.conf,/etc/maatkit/mk_error_log.conf,/home/joel/.maatkit.conf,/home/joel/.mk_error_log.conf
|
31
|
+
|
32
|
+
#
|
33
|
+
# default: yes
|
34
|
+
# Continue parsing even if there is an error.
|
35
|
+
attr_accessor :continue_on_error # TRUE
|
36
|
+
|
37
|
+
#
|
38
|
+
# short form: -F; type: string
|
39
|
+
# Only read mysql options from the given file. You must give an absolute pathname.
|
40
|
+
attr_accessor :defaults_file # (No # value)
|
41
|
+
|
42
|
+
#
|
43
|
+
# Show help and exit.
|
44
|
+
attr_accessor :help # TRUE
|
45
|
+
|
46
|
+
#
|
47
|
+
# short form: -h; type: string
|
48
|
+
# Connect to host.
|
49
|
+
attr_accessor :host # (No # value)
|
50
|
+
|
51
|
+
#
|
52
|
+
# default: yes
|
53
|
+
# Load known, built-in patterns.
|
54
|
+
# mk-error-log has a built-in list of known patterns. This are normally loaded by default, but if you
|
55
|
+
# don't want them to be used you can disable them from being loaded by specifying "--no-known-patterns".
|
56
|
+
attr_accessor :known_patterns # TRUE
|
57
|
+
|
58
|
+
#
|
59
|
+
# type: string
|
60
|
+
# Load a list of known patterns from this file.
|
61
|
+
# Patterns in the file should be formatted like this:
|
62
|
+
# name1
|
63
|
+
# level1
|
64
|
+
# pattern1
|
65
|
+
# nameN
|
66
|
+
# levelN
|
67
|
+
# patternN
|
68
|
+
# Each pattern has three parts: name, level and regex pattern. Patterns are separated by a blank line.
|
69
|
+
# A pattern's name is what is printed under the Message column in the "OUTPUT". Likewise, its level is
|
70
|
+
# printed under the Level column. The regex pattern is what mk-error-log uses to match this pattern.
|
71
|
+
# Any Perl regular expression should be valid.
|
72
|
+
# Here is a simple example:
|
73
|
+
# InnoDB: The first specified data file did not exist!
|
74
|
+
# info
|
75
|
+
# InnoDB: The first specified data file \S+
|
76
|
+
# InnoDB: Rolling back of trx complete
|
77
|
+
# info
|
78
|
+
# InnoDB: Rolling back of trx id .*?complete
|
79
|
+
# See also "--save-patterns".
|
80
|
+
attr_accessor :load_patterns # (No # value)
|
81
|
+
|
82
|
+
#
|
83
|
+
# short form: -p; type: string
|
84
|
+
# Password to use when connecting.
|
85
|
+
attr_accessor :password # (No # value)
|
86
|
+
|
87
|
+
#
|
88
|
+
# type: string
|
89
|
+
# Create the given PID file when daemonized. The file contains the process ID of the daemonized
|
90
|
+
# instance. The PID file is removed when the daemonized instance exits. The program checks for the
|
91
|
+
# existence of the PID file when starting; if it exists and the process with the matching PID exists, the
|
92
|
+
# program exits.
|
93
|
+
attr_accessor :pid # (No # value)
|
94
|
+
|
95
|
+
#
|
96
|
+
# short form: -P; type: int
|
97
|
+
# Port number to use for connection.
|
98
|
+
attr_accessor :port # (No # value)
|
99
|
+
|
100
|
+
#
|
101
|
+
# type: string
|
102
|
+
# Read and write resume position to this file; resume parsing from last position.
|
103
|
+
# By default mk-error-log parses an error logs from start (pos 0) to finish. This option allows the tool
|
104
|
+
# to start parsing an error log from where it last ended as long as the file has the same name and inode
|
105
|
+
# (e.g. it hasn't been rotated) and its size is larger. If the log file's name or inode is different,
|
106
|
+
# then a new resume file is started and the old resume file is saved with the old error log's inode
|
107
|
+
# appended to its file name. If the log file's size is smaller (e.g. the log was truncated), then
|
108
|
+
# parsing begins from the start.
|
109
|
+
# A resume file is a simple, four line text file like:
|
110
|
+
# file:/path/to/err.log
|
111
|
+
# inode:12345
|
112
|
+
# pos:67890
|
113
|
+
# size:987100
|
114
|
+
# The resume file is read at startup and updated when mk-error-log finishes parsing the log. Note that
|
115
|
+
# CTRL-C prevents the resume file from being updated.
|
116
|
+
# If the resume file doesn't exist it is created.
|
117
|
+
# A line is printed before the main report which tells when and at what position parsing began for the
|
118
|
+
# error log if it was resumed.
|
119
|
+
attr_accessor :resume # (No # value)
|
120
|
+
|
121
|
+
#
|
122
|
+
# type: string
|
123
|
+
# After running save all new and old patterns to this file.
|
124
|
+
# This option causes mk-error-log to save every pattern it has to the file. This file can be used for
|
125
|
+
# subsequent runs with "--load-patterns". The patterns are saved in descending order of frequency, so
|
126
|
+
# the most frequent patterns are at top.
|
127
|
+
attr_accessor :save_patterns # (No # value)
|
128
|
+
|
129
|
+
#
|
130
|
+
# type: string; default: wait_timeout=10000
|
131
|
+
# Set these MySQL variables. Immediately after connecting to MySQL, this string will be appended to SET
|
132
|
+
# and executed.
|
133
|
+
attr_accessor :set_vars # wait_timeout=10000
|
134
|
+
|
135
|
+
#
|
136
|
+
# type: string
|
137
|
+
# Parse only events newer than this value (parse events since this date).
|
138
|
+
# This option allows you to ignore events older than a certain value and parse only those events which
|
139
|
+
# are more recent than the value. The value can be several types:
|
140
|
+
# * Simple time value N with optional suffix: N[shmd], where
|
141
|
+
# # s=seconds, h=hours, m=minutes, d=days (default s if no suffix
|
142
|
+
# # given); this is like saying "since N[shmd] ago"
|
143
|
+
# * Full date with optional hours:minutes:seconds: YYYY-MM-DD [HH:MM::SS]
|
144
|
+
# * Short, MySQL-style date: YYMMDD [HH:MM:SS]
|
145
|
+
# Events are assumed to be in chronological--older events at the beginning of the log and newer events at
|
146
|
+
# the end of the log. "--since" is strict: it ignores all events until one is found that is new enough.
|
147
|
+
# Therefore, if the events are not consistently timestamped, some may be ignored which are actually new
|
148
|
+
# enough.
|
149
|
+
# See also "--until".
|
150
|
+
attr_accessor :since # (No # value)
|
151
|
+
|
152
|
+
#
|
153
|
+
# short form: -S; type: string
|
154
|
+
# Socket file to use for connection.
|
155
|
+
attr_accessor :socket # (No # value)
|
156
|
+
|
157
|
+
#
|
158
|
+
# type: string
|
159
|
+
# Parse only events older than this value (parse events until this date).
|
160
|
+
# This option allows you to ignore events newer than a certain value and parse only those events which
|
161
|
+
# are older than the value. The value can be one of the same types listed for "--since".
|
162
|
+
# Unlike "--since", "--until" is not strict: all events are parsed until one has a timestamp that is
|
163
|
+
# equal to or greater than "--until". Then all subsequent events are ignored.
|
164
|
+
attr_accessor :until # (No # value)
|
165
|
+
|
166
|
+
#
|
167
|
+
# short form: -u; type: string
|
168
|
+
# User for login if not current user.
|
169
|
+
attr_accessor :user # (No # value)
|
170
|
+
|
171
|
+
#
|
172
|
+
# Show version and exit.
|
173
|
+
attr_accessor :version # FALSE
|
174
|
+
|
175
|
+
#
|
176
|
+
# Sets the executable path, otherwise the environment path will be used.
|
177
|
+
#
|
178
|
+
attr_accessor :path_to_mk_error_log
|
179
|
+
|
180
|
+
#
|
181
|
+
# Returns a new ErrorLog Object
|
182
|
+
#
|
183
|
+
def initialize()
|
184
|
+
end
|
185
|
+
|
186
|
+
#
|
187
|
+
# Execute the command
|
188
|
+
#
|
189
|
+
def start(options = nil)
|
190
|
+
tmp = Tempfile.new('tmp')
|
191
|
+
command = option_string() + options.to_s + " 2> " + tmp.path
|
192
|
+
success = system(command)
|
193
|
+
if success
|
194
|
+
begin
|
195
|
+
while (line = tmp.readline)
|
196
|
+
line.chomp
|
197
|
+
selected_string = line
|
198
|
+
end
|
199
|
+
rescue EOFError
|
200
|
+
tmp.close
|
201
|
+
end
|
202
|
+
return selected_string
|
203
|
+
else
|
204
|
+
tmp.close!
|
205
|
+
return success
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def config
|
210
|
+
option_string()
|
211
|
+
end
|
212
|
+
|
213
|
+
private
|
214
|
+
|
215
|
+
def option_string()
|
216
|
+
|
217
|
+
unless @path_to_mk_error_log
|
218
|
+
ostring = "mk-error-log "
|
219
|
+
else
|
220
|
+
ostring = @path_to_mk_error_log + " "
|
221
|
+
end
|
222
|
+
|
223
|
+
self.instance_variables.each do |i|
|
224
|
+
tmp_value = self.instance_variable_get "#{i}"
|
225
|
+
tmp_string = i.gsub("_", "-").gsub("@", "--")
|
226
|
+
unless tmp_string == "--path-to-mk-error-log"
|
227
|
+
if (tmp_value.is_a? TrueClass) || (tmp_value.is_a? FalseClass)
|
228
|
+
ostring += "#{tmp_string} "
|
229
|
+
else
|
230
|
+
ostring += "#{tmp_string} #{tmp_value} "
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
return ostring
|
236
|
+
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
240
|
+
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# = maatkit-ruby - A maatkit gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/maatkit-ruby
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# Split files and pipe lines to a fifo without really splitting.
|
10
|
+
#
|
11
|
+
# Maatkit::FifoSplit.new( array, str, array)
|
12
|
+
#
|
13
|
+
class Maatkit::FifoSplit
|
14
|
+
|
15
|
+
#
|
16
|
+
# type: Array
|
17
|
+
# Read this comma-separated list of config files; if specified, this must be the first option on the
|
18
|
+
# command line.
|
19
|
+
attr_accessor :config # /etc/maatkit/maatkit.conf,/etc/maatkit/mk-fifo-split.conf,/home/joel/.maatkit.conf,/home/joel/.mk-fifo-split.conf
|
20
|
+
|
21
|
+
#
|
22
|
+
# type: string; default: /tmp/mk-fifo-split
|
23
|
+
# The name of the fifo from which the lines can be read.
|
24
|
+
attr_accessor :fifo # /tmp/mk-fifo-split
|
25
|
+
|
26
|
+
#
|
27
|
+
# Remove the fifo if it exists already, then create it again.
|
28
|
+
attr_accessor :force # FALSE
|
29
|
+
|
30
|
+
#
|
31
|
+
# Show help and exit.
|
32
|
+
attr_accessor :help # TRUE
|
33
|
+
|
34
|
+
#
|
35
|
+
# type: int; default: 1000
|
36
|
+
# The number of lines to read in each chunk.
|
37
|
+
attr_accessor :lines # 1000
|
38
|
+
|
39
|
+
#
|
40
|
+
# type: int; default: 0
|
41
|
+
# Begin at the Nth line. If the argument is 0, all lines are printed to the fifo. If 1, then beginning
|
42
|
+
# at the first line, lines are printed (exactly the same as 0). If 2, the first line is skipped, and the
|
43
|
+
# 2nd and subsequent lines are printed to the fifo.
|
44
|
+
attr_accessor :offset # (No # value)
|
45
|
+
|
46
|
+
#
|
47
|
+
# type: string
|
48
|
+
# Create the given PID file. The file contains the process ID of the script. The PID file is removed
|
49
|
+
# when the script exits. Before starting, the script checks if the PID file already exists. If it does
|
50
|
+
# not, then the script creates and writes its own PID to it. If it does, then the script checks the
|
51
|
+
# following: if the file contains a PID and a process is running with that PID, then the script dies; or,
|
52
|
+
# if there is no process running with that PID, then the script overwrites the file with its own PID and
|
53
|
+
# starts; else, if the file contains no PID, then the script dies.
|
54
|
+
attr_accessor :pid # (No # value)
|
55
|
+
|
56
|
+
#
|
57
|
+
# Print out statistics between chunks. The statistics are the number of chunks, the number of lines,
|
58
|
+
# elapsed time, and lines per second overall and during the last chunk.
|
59
|
+
attr_accessor :statistics # FALSE
|
60
|
+
|
61
|
+
#
|
62
|
+
# Show version and exit.
|
63
|
+
attr_accessor :version # FALSE
|
64
|
+
|
65
|
+
#
|
66
|
+
# Sets the executable path, otherwise the environment path will be used.
|
67
|
+
#
|
68
|
+
attr_accessor :path_to_mk_fifo_split
|
69
|
+
|
70
|
+
#
|
71
|
+
# Returns a new FifoSplit Object
|
72
|
+
#
|
73
|
+
def initialize()
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# Execute the command
|
78
|
+
#
|
79
|
+
def start(options = nil)
|
80
|
+
tmp = Tempfile.new('tmp')
|
81
|
+
command = option_string() + options.to_s + " 2> " + tmp.path
|
82
|
+
success = system(command)
|
83
|
+
if success
|
84
|
+
begin
|
85
|
+
while (line = tmp.readline)
|
86
|
+
line.chomp
|
87
|
+
selected_string = line
|
88
|
+
end
|
89
|
+
rescue EOFError
|
90
|
+
tmp.close
|
91
|
+
end
|
92
|
+
return selected_string
|
93
|
+
else
|
94
|
+
tmp.close!
|
95
|
+
return success
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def config
|
100
|
+
option_string()
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def option_string()
|
106
|
+
|
107
|
+
unless @path_to_mk_fifo_split
|
108
|
+
ostring = "mk-fifo-split "
|
109
|
+
else
|
110
|
+
ostring = @path_to_mk_fifo_split + " "
|
111
|
+
end
|
112
|
+
|
113
|
+
self.instance_variables.each do |i|
|
114
|
+
tmp_value = self.instance_variable_get "#{i}"
|
115
|
+
tmp_string = i.gsub("_", "-").gsub("@", "--")
|
116
|
+
unless tmp_string == "--path-to-mk-fifo-split"
|
117
|
+
if (tmp_value.is_a? TrueClass) || (tmp_value.is_a? FalseClass)
|
118
|
+
ostring += "#{tmp_string} "
|
119
|
+
else
|
120
|
+
ostring += "#{tmp_string} #{tmp_value} "
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
return ostring
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# = maatkit-ruby - A maatkit gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/maatkit-ruby
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# Find MySQL tables and execute actions, like GNU find.
|
10
|
+
#
|
11
|
+
# Maatkit::Find.new( array, str, array)
|
12
|
+
#
|
13
|
+
class Maatkit::Find
|
14
|
+
|
15
|
+
attr_accessor :ask_pass # FALSE
|
16
|
+
attr_accessor :autoinc # (No value)
|
17
|
+
attr_accessor :avgrowlen # (No value)
|
18
|
+
attr_accessor :case_insensitive # FALSE
|
19
|
+
attr_accessor :charset # (No value)
|
20
|
+
attr_accessor :checksum # (No value)
|
21
|
+
attr_accessor :cmin # (No value)
|
22
|
+
attr_accessor :collation # (No value)
|
23
|
+
attr_accessor :column_name # (No value)
|
24
|
+
attr_accessor :column_type # (No value)
|
25
|
+
attr_accessor :comment # (No value)
|
26
|
+
attr_accessor :config # /etc/maatkit/maatkit.conf,/etc/maatkit/mk_find.conf,/home/joel/.maatkit.conf,/home/joel/.mk_find.conf
|
27
|
+
attr_accessor :connection_id # (No value)
|
28
|
+
attr_accessor :createopts # (No value)
|
29
|
+
attr_accessor :ctime # (No value)
|
30
|
+
attr_accessor :datafree # (No value)
|
31
|
+
attr_accessor :datasize # (No value)
|
32
|
+
attr_accessor :day_start # FALSE
|
33
|
+
attr_accessor :dblike # (No value)
|
34
|
+
attr_accessor :dbregex # (No value)
|
35
|
+
attr_accessor :defaults_file # (No value)
|
36
|
+
attr_accessor :empty # FALSE
|
37
|
+
attr_accessor :engine # (No value)
|
38
|
+
attr_accessor :exec # (No value)
|
39
|
+
attr_accessor :exec_dsn # (No value)
|
40
|
+
attr_accessor :exec_plus # (No value)
|
41
|
+
attr_accessor :function # (No value)
|
42
|
+
attr_accessor :help # TRUE
|
43
|
+
attr_accessor :host # (No value)
|
44
|
+
attr_accessor :indexsize # (No value)
|
45
|
+
attr_accessor :kmin # (No value)
|
46
|
+
attr_accessor :ktime # (No value)
|
47
|
+
attr_accessor :mmin # (No value)
|
48
|
+
attr_accessor :mtime # (No value)
|
49
|
+
attr_accessor :or # FALSE
|
50
|
+
attr_accessor :password # (No value)
|
51
|
+
attr_accessor :pid # (No value)
|
52
|
+
attr_accessor :port # (No value)
|
53
|
+
attr_accessor :print # FALSE
|
54
|
+
attr_accessor :printf # (No value)
|
55
|
+
attr_accessor :procedure # (No value)
|
56
|
+
attr_accessor :quote # TRUE
|
57
|
+
attr_accessor :rowformat # (No value)
|
58
|
+
attr_accessor :rows # (No value)
|
59
|
+
attr_accessor :server_id # (No value)
|
60
|
+
attr_accessor :set_vars # wait_timeout=10000
|
61
|
+
attr_accessor :socket # (No value)
|
62
|
+
attr_accessor :tablesize # (No value)
|
63
|
+
attr_accessor :tbllike # (No value)
|
64
|
+
attr_accessor :tblregex # (No value)
|
65
|
+
attr_accessor :tblversion # (No value)
|
66
|
+
attr_accessor :trigger # (No value)
|
67
|
+
attr_accessor :trigger_table # (No value)
|
68
|
+
attr_accessor :user # (No value)
|
69
|
+
attr_accessor :version # FALSE
|
70
|
+
attr_accessor :view # (No value)
|
71
|
+
|
72
|
+
#
|
73
|
+
# Sets the executable path, otherwise the environment path will be used.
|
74
|
+
#
|
75
|
+
attr_accessor :path_to_mk_find
|
76
|
+
|
77
|
+
#
|
78
|
+
# Returns a new Find Object
|
79
|
+
#
|
80
|
+
def initialize()
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# Execute the command
|
85
|
+
#
|
86
|
+
def start(options = nil)
|
87
|
+
tmp = Tempfile.new('tmp')
|
88
|
+
command = option_string() + options.to_s + " 2> " + tmp.path
|
89
|
+
success = system(command)
|
90
|
+
if success
|
91
|
+
begin
|
92
|
+
while (line = tmp.readline)
|
93
|
+
line.chomp
|
94
|
+
selected_string = line
|
95
|
+
end
|
96
|
+
rescue EOFError
|
97
|
+
tmp.close
|
98
|
+
end
|
99
|
+
return selected_string
|
100
|
+
else
|
101
|
+
tmp.close!
|
102
|
+
return success
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def config
|
107
|
+
option_string()
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
def option_string()
|
113
|
+
|
114
|
+
unless @path_to_mk_find
|
115
|
+
ostring = "mk-find "
|
116
|
+
else
|
117
|
+
ostring = @path_to_mk_find + " "
|
118
|
+
end
|
119
|
+
|
120
|
+
self.instance_variables.each do |i|
|
121
|
+
tmp_value = self.instance_variable_get "#{i}"
|
122
|
+
tmp_string = i.gsub("_", "-").gsub("@", "--")
|
123
|
+
unless tmp_string == "--path-to-mk-find"
|
124
|
+
if (tmp_value.is_a? TrueClass) || (tmp_value.is_a? FalseClass)
|
125
|
+
ostring += "#{tmp_string} "
|
126
|
+
else
|
127
|
+
ostring += "#{tmp_string} #{tmp_value} "
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
return ostring
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|