geoptima 0.0.5 → 0.0.6

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/show_geoptima CHANGED
@@ -7,7 +7,7 @@ $: << '../lib'
7
7
  require 'date'
8
8
  require 'geoptima'
9
9
 
10
- Geoptima::assert_version("0.0.5")
10
+ Geoptima::assert_version("0.0.6")
11
11
 
12
12
  $debug=false
13
13
 
@@ -39,8 +39,12 @@ while arg=ARGV.shift do
39
39
  $export_stats=true
40
40
  when 'm'
41
41
  $map_headers=true
42
+ when 'a'
43
+ $combine_all=true
42
44
  when 'l'
43
45
  $more_headers=true
46
+ when 'C'
47
+ $chart_spec = ARGV.shift
44
48
  when 'E'
45
49
  $event_names += ARGV.shift.split(/[\,\;\:\.]+/)
46
50
  when 'T'
@@ -75,16 +79,18 @@ Usage: ./showGeoptimaEvents.rb <-dvxEh> <-L limit> <-E types> <-T min,max> file
75
79
  -m map headers to classic NetView compatible version #{cw $map_headers}
76
80
  -l longer header list (phone and operator fields) #{cw $more_headers}
77
81
  -s seperate the export files by event type #{cw $seperate}
82
+ -a combine all IMEI's into a single dataset #{cw $combine_all}
78
83
  -h show this help
79
- -L limit verbose output to specific number of lines #{cw $print_limit}
84
+ -C use specified chart specification file for stats and charts: #{$chart_spec}
80
85
  -E comma-seperated list of event types to show and export (default: all; current: #{$event_names.join(',')})
81
86
  -T time range to limit results to (default: all; current: #{$time_range})
87
+ -L limit verbose output to specific number of lines #{cw $print_limit}
82
88
  EOHELP
83
89
  exit 0
84
90
  end
85
91
 
86
92
  $verbose = $verbose || $debug
87
- $datasets = Geoptima::Dataset.make_datasets($files, :locate => true, :time_range => $time_range)
93
+ $datasets = Geoptima::Dataset.make_datasets($files, :locate => true, :time_range => $time_range, :combine_all => $combine_all)
88
94
 
89
95
  class Export
90
96
  attr_reader :files, :imei, :names, :headers
@@ -108,7 +114,7 @@ class Export
108
114
  puts "Created header for name #{name}: #{a[name].join(',')}" if($debug)
109
115
  a
110
116
  end
111
- @headers[nil] = @headers.values.flatten
117
+ @headers[nil] = @headers.values.flatten.sort
112
118
  files && files.each do |key,file|
113
119
  file.puts map_headers(base_headers+more_headers+header(key)).join("\t")
114
120
  end
@@ -118,14 +124,21 @@ class Export
118
124
  end
119
125
  end
120
126
  end
127
+ def export_imei
128
+ ($combine_all || $more_headers)
129
+ end
121
130
  def base_headers
122
- ['Time','Event','Latitude','Longitude']
131
+ ['Time','Event','Latitude','Longitude'] +
132
+ (export_imei ? ['IMEI'] : [])
123
133
  end
124
134
  def more_headers
125
- $more_headers ? ['IMSI','IMEI','MSISDN','MCC','MNC','LAC','CI','RSSI','Platform','Model','OS','Operator'] : []
135
+ $more_headers ?
136
+ ['IMSI','MSISDN','MCC','MNC','LAC','CI','LAC-CI','RSSI','Platform','Model','OS','Operator'] :
137
+ []
126
138
  end
127
139
  def base_fields(event)
128
- [event.time_key,event.name,event.latitude,event.longitude]
140
+ [event.time_key,event.name,event.latitude,event.longitude] +
141
+ (export_imei ? [event.file.imei] : [])
129
142
  end
130
143
  def more_fields(event,dataset)
131
144
  more_headers.map do |h|
@@ -136,6 +149,8 @@ class Export
136
149
  dataset.recent(event,'service.lac')
137
150
  when 'CI'
138
151
  dataset.recent(event,'service.cell_id')
152
+ when 'LAC-CI'
153
+ "#{dataset.recent(event,'service.lac')}-#{dataset.recent(event,'service.cell_id')}"
139
154
  when 'MCC'
140
155
  dataset[h] || dataset.recent(event,'service.mcc')
141
156
  when 'MNC'
@@ -144,8 +159,6 @@ class Export
144
159
  dataset['carrierName']
145
160
  when 'IMSI'
146
161
  dataset.imsi
147
- when 'IMEI'
148
- dataset.imei
149
162
  else
150
163
  dataset[h]
151
164
  end
@@ -7,7 +7,7 @@ $: << '../lib'
7
7
  require 'date'
8
8
  require 'geoptima'
9
9
 
10
- Geoptima::assert_version("0.0.5")
10
+ Geoptima::assert_version("0.0.6")
11
11
 
12
12
  $debug=false
13
13
 
@@ -39,8 +39,12 @@ while arg=ARGV.shift do
39
39
  $export_stats=true
40
40
  when 'm'
41
41
  $map_headers=true
42
+ when 'a'
43
+ $combine_all=true
42
44
  when 'l'
43
45
  $more_headers=true
46
+ when 'C'
47
+ $chart_spec = ARGV.shift
44
48
  when 'E'
45
49
  $event_names += ARGV.shift.split(/[\,\;\:\.]+/)
46
50
  when 'T'
@@ -75,16 +79,18 @@ Usage: ./showGeoptimaEvents.rb <-dvxEh> <-L limit> <-E types> <-T min,max> file
75
79
  -m map headers to classic NetView compatible version #{cw $map_headers}
76
80
  -l longer header list (phone and operator fields) #{cw $more_headers}
77
81
  -s seperate the export files by event type #{cw $seperate}
82
+ -a combine all IMEI's into a single dataset #{cw $combine_all}
78
83
  -h show this help
79
- -L limit verbose output to specific number of lines #{cw $print_limit}
84
+ -C use specified chart specification file for stats and charts: #{$chart_spec}
80
85
  -E comma-seperated list of event types to show and export (default: all; current: #{$event_names.join(',')})
81
86
  -T time range to limit results to (default: all; current: #{$time_range})
87
+ -L limit verbose output to specific number of lines #{cw $print_limit}
82
88
  EOHELP
83
89
  exit 0
84
90
  end
85
91
 
86
92
  $verbose = $verbose || $debug
87
- $datasets = Geoptima::Dataset.make_datasets($files, :locate => true, :time_range => $time_range)
93
+ $datasets = Geoptima::Dataset.make_datasets($files, :locate => true, :time_range => $time_range, :combine_all => $combine_all)
88
94
 
89
95
  class Export
90
96
  attr_reader :files, :imei, :names, :headers
@@ -108,7 +114,7 @@ class Export
108
114
  puts "Created header for name #{name}: #{a[name].join(',')}" if($debug)
109
115
  a
110
116
  end
111
- @headers[nil] = @headers.values.flatten
117
+ @headers[nil] = @headers.values.flatten.sort
112
118
  files && files.each do |key,file|
113
119
  file.puts map_headers(base_headers+more_headers+header(key)).join("\t")
114
120
  end
@@ -118,14 +124,21 @@ class Export
118
124
  end
119
125
  end
120
126
  end
127
+ def export_imei
128
+ ($combine_all || $more_headers)
129
+ end
121
130
  def base_headers
122
- ['Time','Event','Latitude','Longitude']
131
+ ['Time','Event','Latitude','Longitude'] +
132
+ (export_imei ? ['IMEI'] : [])
123
133
  end
124
134
  def more_headers
125
- $more_headers ? ['IMSI','IMEI','MSISDN','MCC','MNC','LAC','CI','RSSI','Platform','Model','OS','Operator'] : []
135
+ $more_headers ?
136
+ ['IMSI','MSISDN','MCC','MNC','LAC','CI','LAC-CI','RSSI','Platform','Model','OS','Operator'] :
137
+ []
126
138
  end
127
139
  def base_fields(event)
128
- [event.time_key,event.name,event.latitude,event.longitude]
140
+ [event.time_key,event.name,event.latitude,event.longitude] +
141
+ (export_imei ? [event.file.imei] : [])
129
142
  end
130
143
  def more_fields(event,dataset)
131
144
  more_headers.map do |h|
@@ -136,6 +149,8 @@ class Export
136
149
  dataset.recent(event,'service.lac')
137
150
  when 'CI'
138
151
  dataset.recent(event,'service.cell_id')
152
+ when 'LAC-CI'
153
+ "#{dataset.recent(event,'service.lac')}-#{dataset.recent(event,'service.cell_id')}"
139
154
  when 'MCC'
140
155
  dataset[h] || dataset.recent(event,'service.mcc')
141
156
  when 'MNC'
@@ -144,8 +159,6 @@ class Export
144
159
  dataset['carrierName']
145
160
  when 'IMSI'
146
161
  dataset.imsi
147
- when 'IMEI'
148
- dataset.imei
149
162
  else
150
163
  dataset[h]
151
164
  end
data/geoptima.gemspec CHANGED
@@ -30,6 +30,7 @@ EOF
30
30
  s.extra_rdoc_files = %w( README.rdoc )
31
31
  s.rdoc_options = ["--quiet", "--title", "Geoptima.rb", "--line-numbers", "--main", "README.rdoc", "--inline-source"]
32
32
 
33
- s.add_dependency('json',">= 1.6.5")
33
+ s.add_dependency('multi_json',">= 1.1.0")
34
+ s.add_dependency('json_pure',">= 1.6.5")
34
35
  s.required_ruby_version = ">= 1.8.6"
35
36
  end
data/lib/geoptima/data.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rubygems'
4
- require 'json'
4
+ require 'multi_json'
5
5
  require 'date'
6
6
 
7
7
  #
@@ -46,8 +46,9 @@ module Geoptima
46
46
  "ftpSpeed" => ["timeoffset","interface","direction","delay","peak","speed"],
47
47
  "browserDedicatedTest" => ["timeoffset","url","pageRenders","pageRendered","pageSize","success"]
48
48
  }
49
- attr_reader :header, :name, :data, :fields, :time, :latitude, :longitude
50
- def initialize(start,name,header,data)
49
+ attr_reader :file, :header, :name, :data, :fields, :time, :latitude, :longitude
50
+ def initialize(file,start,name,header,data)
51
+ @file = file
51
52
  @name = name
52
53
  @header = header
53
54
  @data = data
@@ -97,7 +98,8 @@ module Geoptima
97
98
  attr_reader :path, :json, :count
98
99
  def initialize(path)
99
100
  @path = path
100
- @json = JSON.parse(File.read(path))
101
+ # @json = JSON.parse(File.read(path))
102
+ @json = MultiJson.decode(File.read(path))
101
103
  @fields = {}
102
104
  if $debug
103
105
  puts "Read Geoptima: #{geoptima.to_json}"
@@ -118,6 +120,9 @@ module Geoptima
118
120
  def subscriber
119
121
  @subscriber ||= geoptima['subscriber']
120
122
  end
123
+ def imei
124
+ @imei ||= self['imei']
125
+ end
121
126
  def [](key)
122
127
  @fields[key] ||= subscriber[key] || subscriber[key.downcase]
123
128
  end
@@ -182,7 +187,7 @@ module Geoptima
182
187
  data = events[index...(index+header.length)]
183
188
  if data && data.length == header.length
184
189
  @count += 1
185
- a << Event.new(start,event_type,header,data)
190
+ a << Event.new(self,start,event_type,header,data)
186
191
  else
187
192
  puts "Invalid '#{event_type}' data block #{block}: #{data.inspect}"
188
193
  break a
@@ -381,8 +386,9 @@ module Geoptima
381
386
  unless geoptima.valid?
382
387
  puts "INVALID: #{geoptima.start}\t#{file}\n\n"
383
388
  else
384
- datasets[geoptima['imei']] ||= Geoptima::Dataset.new(geoptima['imei'], options)
385
- datasets[geoptima['imei']] << geoptima
389
+ key = options[:combine_all] ? 'all' : geoptima['imei']
390
+ datasets[key] ||= Geoptima::Dataset.new(key, options)
391
+ datasets[key] << geoptima
386
392
  end
387
393
  end
388
394
  datasets
@@ -1,6 +1,6 @@
1
1
  module Geoptima
2
2
 
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
 
5
5
  def self.version_as_int(ver)
6
6
  base = 1
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geoptima
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Craig Taverner
@@ -15,12 +15,28 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-09 00:00:00 Z
18
+ date: 2012-03-13 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: json
21
+ name: multi_json
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 19
29
+ segments:
30
+ - 1
31
+ - 1
32
+ - 0
33
+ version: 1.1.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: json_pure
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
24
40
  none: false
25
41
  requirements:
26
42
  - - ">="
@@ -32,7 +48,7 @@ dependencies:
32
48
  - 5
33
49
  version: 1.6.5
34
50
  type: :runtime
35
- version_requirements: *id001
51
+ version_requirements: *id002
36
52
  description: |
37
53
  Geoptima is a suite of applications for measuring and locating mobile/cellular subscriber experience on GPS enabled smartphones.
38
54
  It is produced by AmanziTel AB in Helsingborg, Sweden, and supports many phone manufacturers, with free downloads from the