gts 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/gts CHANGED
@@ -19,13 +19,18 @@ opt_parser = OptionParser.new do |opt|
19
19
  options[:port] = port
20
20
  end
21
21
 
22
+ opt.on("-o","--output FILENAME","output file name; if given csv file with captured data is created") do |filename|
23
+ options[:output_file] = filename
24
+ end
25
+
26
+ opt.on("-l", "--logfile FILENAME", "file for writing logs. If omitted, logs are written to STDOUT.") do |filename|
27
+ options[:log_file] = filename
28
+ end
29
+
22
30
  opt.on("-d","--daemon","run in daemon mode?") do
23
31
  options[:daemon] = true
24
32
  end
25
33
 
26
- opt.on("-o","--output FILENAME","output file name; if given csv file with captured data is created") do |filename|
27
- options[:output_file] = filename
28
- end
29
34
 
30
35
  opt.on("-x","--debug","show debugging information") do
31
36
  options[:debug] = true
@@ -40,16 +45,24 @@ end
40
45
 
41
46
  opt_parser.parse!
42
47
 
48
+ if options[:log_file]
49
+ Gts.set_log_filename options[:log_file]
50
+ end
51
+
43
52
  puts "Starting GTS #{Gts::VERSION} on address #{options[:address]} and port #{options[:port]}"
44
53
  if options[:debug]
45
54
  Gts.set_log_level :debug
46
55
  puts "Debugging level logs enabled!"
47
56
  end
57
+
48
58
  puts "Known devices: " + Gts.registered_handlers.map{|k,v| [k] }.join(", ")
49
59
 
50
60
  Signal.trap("INT") { Gts::Server.stop! }
51
61
  Signal.trap("TERM") { Gts::Server.stop! }
52
62
 
53
63
  Gts.server = Gts::Server
64
+ if options[:daemon]
65
+ Gts.daemonize
66
+ end
54
67
  Gts.storage = Gts::RedisStorage.new(:host => "0.0.0.0", :port => 6379) # we use just this one so far, TODO should be configurable
55
68
  Gts.server.start!(:address => options[:address], :port => options[:port], :output_file => options[:output_file])
data/lib/gts.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "logger"
2
+ require "fileutils"
2
3
 
3
4
  module Gts
4
5
 
@@ -35,16 +36,29 @@ module Gts
35
36
  begin
36
37
  @@logger
37
38
  rescue
38
- @@logger = Logger.new(STDOUT)
39
- @@logger.datetime_format = "%d.%m.%Y %H:%M:%S"
40
- @@logger.formatter = proc do |severity, datetime, progname, msg|
41
- "#{datetime} #{severity}: #{msg}\n"
42
- end
43
- @@logger.level = log_level
39
+ set_logger
44
40
  @@logger
45
41
  end
46
42
  end
47
43
 
44
+ def self.set_logger
45
+ @@logger = Logger.new(log_filename)
46
+ @@logger.datetime_format = "%d.%m.%Y %H:%M:%S"
47
+ @@logger.formatter = proc do |severity, datetime, progname, msg|
48
+ "#{datetime} #{severity}: #{msg}\n"
49
+ end
50
+ @@logger.level = log_level
51
+ end
52
+
53
+ def self.set_log_filename(filename)
54
+ @@log_filename = File.expand_path(filename)
55
+ FileUtils.touch filename
56
+ end
57
+
58
+ def self.log_filename
59
+ @@log_filename
60
+ end
61
+
48
62
  def self.server=(server_instance)
49
63
  @@server = server_instance
50
64
  end
@@ -61,6 +75,24 @@ module Gts
61
75
  @@storage
62
76
  end
63
77
 
78
+ def self.daemonize
79
+ if RUBY_VERSION < "1.9"
80
+ exit if fork
81
+ Process.setsid
82
+ exit if fork
83
+ Dir.chdir "/"
84
+ STDIN.reopen "/dev/null"
85
+ STDERR.reopen ("/dev/null"), "a"
86
+ else
87
+ orig_stdout = STDOUT.clone
88
+ Process.daemon
89
+ STDOUT.reopen orig_stdout
90
+ end
91
+ puts "Running in background with PID #{Process.pid}"
92
+ STDOUT.reopen ("/dev/null"), "a"
93
+ set_logger # reopen logger, just to make sure
94
+ end
95
+
64
96
  end
65
97
 
66
98
  require "gts/version"
@@ -2,7 +2,8 @@ module Gts
2
2
 
3
3
  class AbstractGPSTrackerHandler
4
4
 
5
- class CantParseGPSData < StandardError; end
5
+ class GtsError < StandardError; end
6
+ class CantParseGPSData < GtsError; end
6
7
 
7
8
  def self.register!
8
9
  Gts.register_handler(self)
@@ -16,7 +16,7 @@ module Gts
16
16
  # uptime
17
17
  def parse(str)
18
18
  command, *@args = str.split(/\s+/)
19
- @command = command.to_sym
19
+ @command = command.to_s.to_sym
20
20
  [@command, @args]
21
21
  end
22
22
 
@@ -8,7 +8,12 @@ module Gts
8
8
  Gts::Command.register :dump, self, "Dumps captured GPS data from tracking devices into json"
9
9
 
10
10
  def execute
11
- Gts.storage.dump.map{|l| JSON.parse(l) }.to_json
11
+ dump = Gts.storage.dump
12
+ if dump
13
+ dump.map{|l| JSON.parse(l) }.to_json
14
+ else
15
+ [].to_json
16
+ end
12
17
  end
13
18
 
14
19
  end
@@ -1,3 +1,3 @@
1
1
  module Gts
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: