geoptima 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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