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 +22 -9
- data/examples/show_geoptima.rb +22 -9
- data/geoptima.gemspec +2 -1
- data/lib/geoptima/data.rb +13 -7
- data/lib/geoptima/version.rb +1 -1
- metadata +22 -6
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.
|
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
|
-
-
|
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 ?
|
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/examples/show_geoptima.rb
CHANGED
@@ -7,7 +7,7 @@ $: << '../lib'
|
|
7
7
|
require 'date'
|
8
8
|
require 'geoptima'
|
9
9
|
|
10
|
-
Geoptima::assert_version("0.0.
|
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
|
-
-
|
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 ?
|
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('
|
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 '
|
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
|
-
|
385
|
-
datasets[
|
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
|
data/lib/geoptima/version.rb
CHANGED
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:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
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-
|
18
|
+
date: 2012-03-13 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
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: *
|
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
|