gts 0.1.2 → 0.1.3

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/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: