gts 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/bin/gts CHANGED
@@ -51,4 +51,5 @@ Signal.trap("INT") { Gts::Server.stop! }
51
51
  Signal.trap("TERM") { Gts::Server.stop! }
52
52
 
53
53
  Gts.server = Gts::Server
54
+ Gts.storage = Gts::RedisStorage.new(:host => "0.0.0.0", :port => 6379) # we use just this one so far, TODO should be configurable
54
55
  Gts.server.start!(:address => options[:address], :port => options[:port], :output_file => options[:output_file])
data/gts.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "eventmachine"
19
19
  gem.add_dependency "json"
20
- gem.add_dependency "awesome_print"
20
+ gem.add_dependency "redis"
21
21
  gem.add_development_dependency "rspec"
22
22
 
23
23
  end
data/lib/gts/command.rb CHANGED
@@ -8,10 +8,13 @@ module Gts
8
8
  class UnknownCommand < CommandError; end
9
9
 
10
10
  @@known_commands = {}
11
+ @@known_commands_descriptions = {}
12
+
11
13
  attr_reader :args
12
14
 
13
- def self.register(name, handler)
15
+ def self.register(name, handler, desc="")
14
16
  @@known_commands[name] = handler
17
+ @@known_commands_descriptions[name] = desc
15
18
  end
16
19
 
17
20
  def self.execute(command_str)
@@ -20,6 +23,11 @@ module Gts
20
23
  command_handler(command_name.to_sym).execute
21
24
  end
22
25
 
26
+ def self.known_commands_descriptions
27
+ @@known_commands_descriptions
28
+ end
29
+
30
+
23
31
  private
24
32
 
25
33
  def self.command_handler(command_name)
@@ -0,0 +1,16 @@
1
+ require "gts/command"
2
+ require "json"
3
+
4
+ module Gts
5
+
6
+ class DumpCommand < Command
7
+
8
+ Gts::Command.register :dump, self, "Dumps captured GPS data from tracking devices into json"
9
+
10
+ def execute
11
+ Gts.storage.dump.map{|l| JSON.parse(l) }.to_json
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+ require "gts/command"
2
+
3
+ module Gts
4
+
5
+ class DumpSizeCommand < Command
6
+
7
+ Gts::Command.register :dump_size, self, "Returns number of records saved in the storage"
8
+ Gts::Command.register :ds, self, "Alias for dump_size"
9
+
10
+ def execute
11
+ Gts.storage.size.to_s
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,17 @@
1
+ require "gts/command"
2
+
3
+ module Gts
4
+
5
+ class HelpCommand < Command
6
+
7
+ Gts::Command.register :help, self, "Returns this list"
8
+
9
+ def execute
10
+ Gts::Command.known_commands_descriptions.map { |k, v|
11
+ "#{k.to_s.ljust(30)} - #{v}"
12
+ }.join("\n")
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -4,8 +4,8 @@ module Gts
4
4
 
5
5
  class ListKnownDevicesCommand < Command
6
6
 
7
- Gts::Command.register :list_known_devices, self
8
- Gts::Command.register :ld, self
7
+ Gts::Command.register :list_known_devices, self, "Lists all IMEIs together with the type of device"
8
+ Gts::Command.register :ld, self, "Alias for list_known_devices"
9
9
 
10
10
  def execute
11
11
  Gts.server.list_known_devices
@@ -0,0 +1,16 @@
1
+ require "gts/command"
2
+
3
+ module Gts
4
+
5
+ class StorageInfoCommand < Command
6
+
7
+ Gts::Command.register :storage_info, self, "Returns information about storage engine"
8
+ Gts::Command.register :si, self, "Alias for storage_info"
9
+
10
+ def execute
11
+ Gts.storage.info
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -4,7 +4,7 @@ module Gts
4
4
 
5
5
  class UptimeCommand < Command
6
6
 
7
- Gts::Command.register :uptime, self
7
+ Gts::Command.register :uptime, self, "Returns number of h/m/s since the server was started"
8
8
 
9
9
  def execute
10
10
  Gts.server.uptime
data/lib/gts/server.rb CHANGED
@@ -96,6 +96,7 @@ module Gts
96
96
  logger.info "Got correct data [from #{client_ip_address}, imei: #{parsed_data[:imei]}]"
97
97
  formatted_data = parsed_data.map{|k,v| "\t#{k}: #{v}\n" }.join
98
98
  logger.debug "Parsed data:\n" + formatted_data
99
+ Gts.storage.append parsed_data.to_json
99
100
  log_data_to_csv_file(parsed_data)
100
101
  rescue GtsError => e
101
102
  if parsed_data.is_a?(Hash) && parsed_data[:imei]
@@ -0,0 +1,26 @@
1
+ module Gts
2
+ class Storage
3
+
4
+ # append new item to the end of the list
5
+ def append(value)
6
+
7
+ end
8
+
9
+ # get all the elements in the list and empty it
10
+ def dump
11
+
12
+ end
13
+
14
+ # get the count of the elements in the list
15
+ def size
16
+
17
+ end
18
+
19
+ def info
20
+
21
+ end
22
+
23
+ end
24
+ end
25
+
26
+ Dir[File.dirname(__FILE__) +"/storages/*.rb"].each {|file| require file }
@@ -0,0 +1,46 @@
1
+ require "redis"
2
+
3
+ module Gts
4
+
5
+ class RedisStorage < Gts::Storage
6
+
7
+ attr_reader :redis, :host, :port, :list_id
8
+
9
+ def initialize(opts)
10
+ @host = opts[:host] || "0.0.0.0"
11
+ @port = opts[:port] || "6379"
12
+ @list_id = opts[:list_id] || "gts_data"
13
+ @redis = Redis.new(:host => @host, :port => @port)
14
+ begin
15
+ @redis.ping
16
+ rescue Redis::CannotConnectError
17
+ puts "Failed to start. Redis is not running or wrong host/port provided."
18
+ exit
19
+ end
20
+ end
21
+
22
+ # append new item to the end of the list
23
+ def append(value)
24
+ redis.rpush list_id, value
25
+ end
26
+
27
+ # get all the elements in the list and empty it
28
+ def dump
29
+ current_size = size
30
+ dumped_items = redis.lrange list_id, 0, current_size - 1
31
+ redis.ltrim list_id, current_size, size - 1
32
+ dumped_items
33
+ end
34
+
35
+ # get the count of the elements in the list
36
+ def size
37
+ redis.llen list_id
38
+ end
39
+
40
+ def info
41
+ redis.info.map{ |k,v| "#{k}: #{v}" }.join("\n")
42
+ end
43
+
44
+ end
45
+
46
+ end
data/lib/gts/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gts
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/gts.rb CHANGED
@@ -53,6 +53,14 @@ module Gts
53
53
  @@server
54
54
  end
55
55
 
56
+ def self.storage=(storage)
57
+ @@storage = storage
58
+ end
59
+
60
+ def self.storage
61
+ @@storage
62
+ end
63
+
56
64
  end
57
65
 
58
66
  require "gts/version"
@@ -60,4 +68,5 @@ require "gts/utils/phone_system"
60
68
  require "gts/abstract_gps_tracker_handler"
61
69
  require "gts/handlers/tk102_handler"
62
70
  require "gts/command"
71
+ require "gts/storage"
63
72
  require "gts/server"
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.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -44,7 +44,7 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
- name: awesome_print
47
+ name: redis
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
@@ -94,10 +94,16 @@ files:
94
94
  - lib/gts/abstract_gps_tracker_handler.rb
95
95
  - lib/gts/command.rb
96
96
  - lib/gts/command_parser.rb
97
+ - lib/gts/commands/dump_command.rb
98
+ - lib/gts/commands/dump_size_command.rb
99
+ - lib/gts/commands/help_command.rb
97
100
  - lib/gts/commands/list_known_devices_command.rb
101
+ - lib/gts/commands/storage_info_command.rb
98
102
  - lib/gts/commands/uptime_command.rb
99
103
  - lib/gts/handlers/tk102_handler.rb
100
104
  - lib/gts/server.rb
105
+ - lib/gts/storage.rb
106
+ - lib/gts/storages/redis_storage.rb
101
107
  - lib/gts/utils/phone_codes.yml
102
108
  - lib/gts/utils/phone_system.rb
103
109
  - lib/gts/version.rb