slackbot_frd 0.0.1 → 0.0.2

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: c5c6be64e04fc7a8be46b5dacab72fee1612e5b5
4
- data.tar.gz: 9180a45cb3f7acbe6db6fb9cd74c4ca0f85c85e4
3
+ metadata.gz: 13a08ffadb9cd54f73c63639c08a1ea18ec13433
4
+ data.tar.gz: cc02227f5e2563e12055fa7acbdab07d36b68921
5
5
  SHA512:
6
- metadata.gz: 395ab58d08a47f062b529998bd0fe4a515930d3013176b0e60a58ffba5d587fc18e51c5b4c5629cb2c03c027d464dd867637c4041b012d4c629a509221eaeffe
7
- data.tar.gz: e767617e733d4c580d08fb04a82e944f46d0cfb388f5e4265e5fd7c933cbb4684d3476befc95210bff29c85d56c81d41fe6464e399d5abce550ab1abce169242
6
+ metadata.gz: f7c931ec908432fd850989608a8009842daa1dec90bcd4bc82bb240efa84fe32c9904a99e2bd2825b46e0e391e533e25577a3cef15d99a3bbd64695dbfc250fa
7
+ data.tar.gz: 646772e155bff7d015d64df6a78524a46dda856ccf05fd68b3031afdbc2c1f44d5efa74b5ced7a61ea4715e92b14da38a85ac5cace09346aecc9c814ccee7e84
data/bin/slackbot-frd CHANGED
@@ -17,7 +17,7 @@ DEBUG = true
17
17
  PID_FILE_WATCHER = "/tmp/slackbot-frd-watcher.pid"
18
18
  PID_FILE_CONNECTION = "/tmp/slackbot-frd-connection.pid"
19
19
  BOT_LIST_FILE = "/tmp/slackbot-frd-bot-list.pid"
20
- ERROR_FILE = "/tmp/slackbot-frd-error-file.pid"
20
+ ERROR_FILE = "/tmp/slackbot-frd.errors"
21
21
  DEFAULT_CONFIG_FILE = "slackbot-frd.conf"
22
22
  LOG_FILE = "slackbot-frd.log"
23
23
 
@@ -32,6 +32,22 @@ class SlackbotFrdBin < Thor
32
32
  # TODO
33
33
  end
34
34
 
35
+ desc "genconfig", "Generate a skeleton config file"
36
+ long_desc <<-LONGDESC
37
+ genconfig will generate a skeleton config file that
38
+ can be customized
39
+ LONGDESC
40
+ def genconfig
41
+ File.write(config_file_location, <<-CONFIG_FILE_SKELETON)
42
+ {
43
+ "token" : "<put-token-here>",
44
+ "botdir" : ".",
45
+ "daemonize" : false,
46
+ "bots" : []
47
+ }
48
+ CONFIG_FILE_SKELETON
49
+ end
50
+
35
51
  desc "start [bot1] [bot2] [botx...]", "Start all specified bots, or all bots"
36
52
  long_desc <<-LONGDESC
37
53
  start [bot1] [bot2] [botx...] will start the specified bots.
@@ -47,8 +63,16 @@ class SlackbotFrdBin < Thor
47
63
  option 'config-file'.to_sym, type: :string, aliases: 'c'
48
64
  option :token, type: :string, aliases: 't'
49
65
  def start(*bots)
66
+ if running?(watcher_pid)
67
+ SlackbotFrd::Log.warn("Already running. Not starting again")
68
+ return
69
+ end
70
+
71
+ delete_pid_files
72
+ delfile(ERROR_FILE)
73
+
50
74
  config_file = options['config-file'.to_sym]
51
- config_file = "#{Dir.pwd}/#{DEFAULT_CONFIG_FILE}" unless config_file
75
+ config_file = config_file_location unless config_file
52
76
  json = config_file_json(config_file) if config_file
53
77
  json ||= {}
54
78
 
@@ -92,6 +116,9 @@ class SlackbotFrdBin < Thor
92
116
  # first kill the watcher, then kill the connection
93
117
  kill_pid(watcher_pid)
94
118
  kill_pid(connection_pid)
119
+
120
+ delete_pid_files
121
+ delfile(ERROR_FILE)
95
122
  end
96
123
 
97
124
  desc "restart", "Stop all bots and restart them"
@@ -104,6 +131,10 @@ class SlackbotFrdBin < Thor
104
131
  stop
105
132
  start(set_bots)
106
133
  end
134
+ private
135
+ def config_file_location
136
+ "#{Dir.pwd}/#{DEFAULT_CONFIG_FILE}"
137
+ end
107
138
 
108
139
  private
109
140
  def config_file_json(config_file)
@@ -137,27 +168,33 @@ class SlackbotFrdBin < Thor
137
168
 
138
169
  private
139
170
  def watch_connection(bots, token, botdir, daemonize = false)
171
+ Process.daemon if daemonize
140
172
  until errors
141
- pid = Process.fork do
142
- Process.daemon if daemonize
143
- loop { BotStarter.start_bots(ERROR_FILE, token, botdir, bots) }
144
- end
173
+ pid = Process.fork { BotStarter.start_bots(ERROR_FILE, token, botdir, bots) }
145
174
  set_connection_pid(pid)
146
175
  Process.wait(pid)
147
176
  end
148
177
  if errors
149
- puts "Could not start connection: #{errors}"
178
+ SlackbotFrd::Log.error("Slack connection encountered errors: #{errors}")
179
+ delfile(ERROR_FILE)
150
180
  end
181
+ delete_pid_files
182
+ end
183
+
184
+ private
185
+ def delfile(file)
186
+ File.delete(file) if File.exists?(file)
151
187
  end
152
188
 
153
189
  private
154
190
  def errors
155
- return File.read(ERROR_FILE).split if File.exists?(ERROR_FILE)
191
+ return File.read(ERROR_FILE).split("\n") if File.exists?(ERROR_FILE)
156
192
  nil
157
193
  end
158
194
 
159
195
  private
160
196
  def running?(pid)
197
+ return false unless pid
161
198
  begin
162
199
  Process.getpgid(pid.to_i)
163
200
  return true
@@ -168,12 +205,14 @@ class SlackbotFrdBin < Thor
168
205
 
169
206
  private
170
207
  def watcher_pid
171
- File.read(PID_FILE_WATCHER).to_i
208
+ File.read(PID_FILE_WATCHER).to_i if File.exists?(PID_FILE_WATCHER)
209
+ nil
172
210
  end
173
211
 
174
212
  private
175
213
  def connection_pid
176
- File.read(PID_FILE_CONNECTION).to_i
214
+ File.read(PID_FILE_CONNECTION).to_i if File.exists?(PID_FILE_CONNECTION)
215
+ nil
177
216
  end
178
217
 
179
218
  private
@@ -188,8 +227,8 @@ class SlackbotFrdBin < Thor
188
227
 
189
228
  private
190
229
  def delete_pid_files
191
- File.delete(PID_FILE_WATCHER)
192
- File.delete(PID_FILE_CONNECTION)
230
+ delfile(PID_FILE_WATCHER)
231
+ delfile(PID_FILE_CONNECTION)
193
232
  end
194
233
  end
195
234
 
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'file-append'
3
4
  require 'thor'
4
5
 
5
6
  require 'slackbot_frd/lib/slack_connection'
@@ -15,7 +16,7 @@ class BotStarter
15
16
  bot_enabled = ->(bot) { bots.empty? || bots.include?(bot) }
16
17
 
17
18
  # Create a new Connection to pass to the bot classes
18
- slack_connection = SlackbotFrd::SlackConnection.new(token)
19
+ slack_connection = SlackbotFrd::SlackConnection.new(token, errors_file)
19
20
 
20
21
  load_bot_files(botdir)
21
22
 
@@ -32,9 +33,8 @@ class BotStarter
32
33
  end
33
34
 
34
35
  if bots.count == 0
35
- @error ||= []
36
- @error.push("No bots loaded")
37
36
  SlackbotFrd::Log.error("Not starting: no bots found")
37
+ File.append(errors_file, "Not starting: no bots found")
38
38
  else
39
39
  SlackbotFrd::Log.debug("Starting SlackConnection")
40
40
  slack_connection.start
@@ -1,5 +1,6 @@
1
1
  require 'faye/websocket'
2
2
  require 'eventmachine'
3
+ require 'file-append'
3
4
  require 'json'
4
5
 
5
6
  require 'slackbot_frd/lib/errors'
@@ -22,13 +23,14 @@ module SlackbotFrd
22
23
 
23
24
  attr_accessor :token
24
25
 
25
- def initialize(token)
26
+ def initialize(token, errors_file)
26
27
  unless token
27
28
  SlackbotFrd::Log::error("No token passed to #{self.class}")
28
29
  raise NoTokenError.new
29
30
  end
30
31
 
31
32
  @token = token
33
+ @errors_file = errors_file
32
34
  @event_id = 0
33
35
  @on_connected_callbacks = []
34
36
  @on_disconnected_callbacks = []
@@ -57,7 +59,7 @@ module SlackbotFrd
57
59
  unless wss_url
58
60
  str = "No Real Time stream opened by slack. Check for correct authentication token"
59
61
  SlackbotFrd::Log.error(str)
60
- File.append(@errors_file, str)
62
+ File.append(@errors_file, "#{str}\n") if @errors_file
61
63
  return
62
64
  end
63
65
  @ws = Faye::WebSocket::Client.new(wss_url)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slackbot_frd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Porter
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: file-append
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: byebug
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -163,7 +177,7 @@ files:
163
177
  - lib/slackbot_frd/slack_methods/im_channels_list.rb
164
178
  - lib/slackbot_frd/slack_methods/rtm_start.rb
165
179
  - lib/slackbot_frd/slack_methods/users_list.rb
166
- homepage: http://rubygems.org/gems/slackbot_frd
180
+ homepage: https://github.com/FreedomBen/slackbot_frd
167
181
  licenses:
168
182
  - MIT
169
183
  metadata: {}