argos-ruby 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDNkNTlmYzhjMjk2YzhlNGMzNjVjNDY3NDM5MjZjNzE4YzYwMzMxZA==
5
+ data.tar.gz: !binary |-
6
+ MzVlNThiZTM1NzUxMTQ1ODQwMDZiNjU2NGFjYzIwMDY4MDRjZTIyMA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Zjc1OWM3ZjE1MmI3ZDZiMzIyYThkMzYwODZhZTMxNjM3MWRiMTQ0MTY4YTFh
10
+ YzU1YTY0NzZjNmE1YmQxYTgwOGZlMWM5YTgwNTczZjJmNGIzODkxOGI0NmNl
11
+ ODk3ZTAwY2FhNGZkMTA1YjFkMDdlMGM4ZmY5MjY5ZjYyMmJlZjI=
12
+ data.tar.gz: !binary |-
13
+ NmY0NDdmM2NmYzc2ODdjNjQwZmQ1NzQ4N2M3YzBhYTg2YTMwZWVmMzg3MDNm
14
+ ODNlNDJlNTRiNTY3YzM2ZmI0YmM5NTFkODEzODJjMjk1MjRmN2ZhYWRlMDg3
15
+ OGE5M2M3MGE1MDFiYjY0MDM5NjYyYjg0ZTcxNTNiM2E2Zjk5NDE=
data/bin/argos-ruby CHANGED
@@ -5,6 +5,7 @@
5
5
  require_relative "../lib/argos"
6
6
  require "optparse"
7
7
  require "yaml"
8
+ require "fileutils"
8
9
 
9
10
  param = { format: "json",
10
11
  action: "parse",
@@ -93,8 +94,9 @@ Dir[glob].reject {|f| File.directory? f}.select {|f|
93
94
  argos.log = log
94
95
 
95
96
  case param[:action]
96
- when "source"
97
+ when "source","metadata"
97
98
  result << Argos.source(argos).merge(glob: glob, bundle: bundle)
99
+
98
100
  when "parse"
99
101
 
100
102
  arr = argos.parse(filename)
@@ -119,13 +121,21 @@ if ["parse", "messages"].include? param[:action]
119
121
  log.info "Documents: #{result.size}, ds: #{ds_count}, diag: #{diag_count}, bundle: #{bundle}, glob: #{glob}"
120
122
 
121
123
 
122
- elsif "source" == param[:action]
124
+ elsif /source|metadata/ =~ param[:action]
125
+ # Count the total number of files in the bundle
123
126
  result = result.select {|s| s[:size] > 0 }
124
127
  sum_count = result.map {|s| s[:size]}.inject { |sum, c| sum + c }
125
128
  result = result.map {|s|
126
129
  s[:total] = sum_count
127
130
  s
128
131
  }
132
+ unless param[:dest].nil?
133
+ jsonfile = "#{param[:dest].gsub(/\$/, "")}/bundle-#{bundle}-metadata.json"
134
+ FileUtils.mkpath(File.dirname(jsonfile))
135
+ log.debug "Argos bundle metadata: #{jsonfile}"
136
+ File.open(jsonfile, "w") { |file| file.write(result.to_json) }
137
+
138
+ end
129
139
  if argosfiles != result.size
130
140
  log.warn "Argos file count: #{argosfiles} differs from parsed files: #{result.size}"
131
141
  end
data/lib/argos/command.rb CHANGED
@@ -16,49 +16,7 @@ module Argos
16
16
  @param = PARAM_DEFAULT
17
17
  end
18
18
 
19
- def param(argv=ARGV)
20
- optparser = OptionParser.new(ARGV) do |opts|
21
19
 
22
- opts.banner = "argos-ruby [OPTIONS] {filename|glob}
23
- For more information and source: https://github.com/npolar/argos-ruby
24
-
25
- Options:\n
26
- "
27
-
28
- opts.on_tail("--version", "-v", "Library version") do
29
- puts Argos.library_version
30
- exit
31
- end
32
-
33
- opts.on("--action=ACTION", "-a", "Action") do |action|
34
- param[:action] = action
35
- end
36
-
37
- opts.on("--filter=FILTER", "-f", "Filter") do |filter|
38
- param[:filter] = filter
39
- end
40
-
41
- opts.on("--level=LEVEL", "-l=LEVEL", "Log level") do |level|
42
-
43
- param[:level] = case level
44
- when /debug|0/i
45
- Logger::DEBUG
46
- when /info|1/i
47
- Logger::INFO
48
- when /warn|2/i
49
- Logger::WARN
50
- when /error|3/i
51
- Logger::ERROR
52
- when /fatal|4/i
53
- Logger::FATAL
54
- else
55
- param[:level]
56
- end
57
- end
58
-
59
- end
60
- optparser.parse!
61
- end
62
20
 
63
21
  end
64
22
  end
data/lib/argos/diag.rb CHANGED
@@ -21,7 +21,7 @@ module Argos
21
21
 
22
22
  attr_reader :bundle, :filename, :filter, :filtername, :sha1, :valid, :filesize, :updated, :multiplicates, :errors
23
23
 
24
- START_REGEX = /^\s*\d{5,6}\s+Date : \d{2}.\d{2}.\d{2} \d{2}:\d{2}:\d{2}/
24
+ START_REGEX = /^(\s*Prog\s\d{4,}|\s*\d{5,6}\s+Date : \d{2}.\d{2}.\d{2} \d{2}:\d{2}:\d{2})/
25
25
  $start_diag ='^\s*\d{5,6}\s+Date : \d{2}.\d{2}.\d{2} \d{2}:\d{2}:\d{2}'
26
26
 
27
27
  # Diag format 1
@@ -54,7 +54,8 @@ module Argos
54
54
 
55
55
 
56
56
  def initialize
57
- @errors = []
57
+ @errors = []
58
+ @programs = []
58
59
  end
59
60
 
60
61
  def filter?
@@ -80,7 +81,7 @@ module Argos
80
81
  @total = linecount = 0
81
82
  @valid = false
82
83
 
83
- #filename = File.realpath(filename)
84
+ filename = File.realpath(filename)
84
85
  @filename = filename
85
86
  if filename.nil? or not File.exists? filename
86
87
  raise ArgumentError, "Missing ARGOS DS file: \"#{filename}\""
@@ -109,7 +110,14 @@ module Argos
109
110
  File.open(filename, :encoding => "iso-8859-1").each do |line|
110
111
  line = line.to_s.strip
111
112
  linecount+=1
112
- if line =~ /#{$start_diag}/
113
+
114
+ if line =~ /Prog\s(\d{4,})$/
115
+ @program = line.split(" ").last
116
+ log.info "Program: #{@program}"
117
+ @programs << @program
118
+ end
119
+
120
+ if line =~ START_REGEX
113
121
  match+=1
114
122
  if contact !=""
115
123
  check_format(contact.strip, startline)
@@ -120,14 +128,16 @@ module Argos
120
128
  contact = contact + " " +line
121
129
  end
122
130
  end
131
+
123
132
  check_format(contact.strip, startline)
124
-
133
+
134
+ @programs = @programs.uniq
125
135
  if filter?
126
136
  total = self.size
127
137
  filtered = self.select{|diag| filter.call(diag)}
128
138
  log.info "Selected #{filtered.size}/#{total} Argos DIAG segments sha1:#{sha1} #{filename}"
129
139
  self.clear
130
-
140
+ # programs may be wrong now!
131
141
  filtered.each do |filtered|
132
142
  self << filtered
133
143
  end
@@ -152,6 +162,8 @@ module Argos
152
162
  if contact =~ /#{$FORMAT_1}/ or contact =~ /#{$FORMAT_2}/ or contact =~ /#{$FORMAT_2}/
153
163
  self << create_diag_hash(contact)
154
164
  true
165
+ elsif contact =~ /Prog\s\d{5,}$/
166
+ true
155
167
  else
156
168
  error = "#{filename}:#{line_num} sha1:#{@sha1} Invalid format:\n" + contact
157
169
  @errors << error
@@ -228,12 +240,17 @@ module Argos
228
240
  }
229
241
 
230
242
  idbase = diag.clone
231
- idbase.delete :filename
243
+ idbase.delete :location
232
244
  id = Digest::SHA1.hexdigest(idbase.to_json)
233
245
 
234
246
  diag[:parser] = Argos.library_version
235
247
  diag[:id] = id
236
248
  diag[:bundle] = bundle
249
+ if @program
250
+ diag[:program] = @program
251
+ end
252
+
253
+
237
254
  diag
238
255
  end
239
256
 
data/lib/argos/ds.rb CHANGED
@@ -354,7 +354,7 @@ module Argos
354
354
 
355
355
  idbase = m.clone
356
356
  idbase.delete :errors
357
- idbase.delete :filename
357
+ idbase.delete :location
358
358
  idbase.delete :warn
359
359
 
360
360
  id = Digest::SHA1.hexdigest(idbase.to_json)
data/lib/argos.rb CHANGED
@@ -17,7 +17,7 @@ require_relative "argos/diag"
17
17
  #
18
18
  # For information about Argos, see: http://www.argos-system.org
19
19
  module Argos
20
- VERSION = "1.0.4"
20
+ VERSION = "1.0.5"
21
21
  # Detect Argos type ("ds" or "diag" or nil)
22
22
  #
23
23
  # @param filename [String] Argos (DS or DIAG) file
@@ -119,7 +119,7 @@ module Argos
119
119
  longitude_mean: longitude_mean,
120
120
  location: "file://"+argos.filename,
121
121
  bytes: argos.filesize,
122
- updated: argos.updated.utc.iso8601,
122
+ modified: argos.updated.utc.iso8601,
123
123
  messages: argos.messages.size,
124
124
  filter: argos.filtername.nil? ? argos.filter : argos.filtername,
125
125
  size: argos.size,
@@ -0,0 +1,52 @@
1
+ Prog 14660
2
+
3
+ 080683 Date : 03.05.08 10:50:50 LC : 1 IQ : 50
4
+ Lat1 : 78.246N Lon1 : 15.533E Lat2 : 74.710N Lon2 : 33.046E
5
+ Nb mes : 008 Nb mes>-120dB : 000 Best level : -124 dB
6
+ Pass duration : 420s NOPC : 1
7
+ Calcul freq : 401 651795.4 Hz Altitude : 0 m
8
+ 03 01 146 144
9
+
10
+ 080683 Date : 03.05.08 10:57:20 LC : 1 IQ : 56
11
+ Lat1 : 78.207N Lon1 : 15.519E Lat2 : 81.674N Lon2 : 23.273E
12
+ Nb mes : 007 Nb mes>-120dB : 000 Best level : -122 dB
13
+ Pass duration : 601s NOPC : 3
14
+ Calcul freq : 401 651801.5 Hz Altitude : 500 m
15
+ 03 01 146 144
16
+
17
+ Prog 9999
18
+
19
+ 02170 Date : 03.02.09 17:47:56 LC : 3 IQ : 66
20
+ Lat1 : 33.385N Lon1 : 111.811W Lat2 : 35.397N Lon2 : 121.727W
21
+ Nb mes : 009 Nb mes>-120dB : 000 Best level : -126 dB
22
+ Pass duration : 811s NOPC : 3
23
+ Calcul freq : 401 637664.9 Hz Altitude : 352 m
24
+ 00 7B 5D E0
25
+ C2 51 81 51
26
+ 14 6A 30 00
27
+ 3F FC 03 00
28
+ 03 FF C0 30
29
+ 00 3F FC 0C
30
+ 3F FF FF C0
31
+ 02170 Date : 03.02.09 18:04:26 LC : 3 IQ : 66
32
+ Lat1 : 33.385N Lon1 : 111.810W Lat2 : 37.544N Lon2 : 131.878W
33
+ Nb mes : 007 Nb mes>-120dB : 000 Best level : -123 dB
34
+ Pass duration : 630s NOPC : 3
35
+ Calcul freq : 401 637664.6 Hz Altitude : 352 m
36
+ 00 0D DD E0
37
+ C2 51 81 51
38
+ 14 86 AC 01
39
+ FF 00 00 00
40
+ 00 0E 7F E0
41
+ 00 2B 00 7F
42
+ C0 00 00 00
43
+ 03 80 E9 7F
44
+
45
+ Prog 14660
46
+
47
+ 080683 Date : 03.05.08 10:59:59 LC : 1 IQ : 50
48
+ Lat1 : 78.246N Lon1 : 15.533E Lat2 : 74.710N Lon2 : 33.046E
49
+ Nb mes : 008 Nb mes>-120dB : 000 Best level : -124 dB
50
+ Pass duration : 420s NOPC : 1
51
+ Calcul freq : 401 651795.4 Hz Altitude : 0 m
52
+ 03 01 146 144
@@ -60,13 +60,22 @@ module Argos
60
60
  :technology=>"argos",
61
61
  :type=>"diag",
62
62
  :location=>"file://"+VALID_DIAG,
63
- :id => "ea2243d95df7d70a02a4fb66bc8876f10fdabf12",
63
+ :id => "a4e59580432b7b621f66c0cdc3087127554acd1d",
64
64
  :parser => "argos-ruby-#{Argos::VERSION}",
65
65
  :bundle => nil,
66
66
  :source =>"f53ae3ab454f3e210347439aa440c084f775f9a4"}
67
67
  end
68
68
  end
69
+
70
+ it "should parse program from Prog header if present" do
71
+ @diag.parse(diagfile("Prog_header.ds")).map {|diag|
72
+ diag[:program]||nil }. should == ["14660", "9999", "14660", "9999", "14660"]
73
+ end
74
+
75
+
69
76
  end
77
+
78
+
70
79
  #describe '#check_format' do
71
80
  # it 'should return true if this is a recognized Diag format' do
72
81
  # str ="02170 Date : 03.02.09 17:47:56 LC : 3 IQ : 66 Lat1 : 33.385N Lon1 : 111.811W Lat2 : 35.397N Lon2 : 121.727W Nb mes : 009 Nb mes>-120dB : 000 Best level : -126 dB Pass duration : 811s NOPC : 3 Calcul freq : 401 637664.9 Hz Altitude : 352 m 00 7B 5D E0 C2 51 81 51 14 6A 30 00 3F FC 03 00 03 FF C0 30 00 3F FC 0C 3F FF FF C0"
@@ -92,7 +92,7 @@ module Argos
92
92
  :longitude=>22.319, :altitude=>0.0, :headers=>12,
93
93
  :measured=>"1999-12-30T18:43:52Z", :identical=>3, :sensor_data=>["78", "00", "00"],
94
94
  :technology=>"argos", :type=>"ds", :location=>"file://"+VALID_DS, :parser => "argos-ruby-#{Argos::VERSION}",
95
- :source=>"3a39e0bd0b944dca4f4fbf17bc0680704cde2994", :id=>"c78642c2bbfd4188df8940cd966b40cef33f2881",
95
+ :source=>"3a39e0bd0b944dca4f4fbf17bc0680704cde2994", :id=>"4369c31c191bd55a998e6293ff4639da3984a95d",
96
96
  :bundle=>nil}]
97
97
  end
98
98
  end
@@ -117,7 +117,7 @@ module Argos
117
117
  :warn=>["missing-position", "sensors-count-mismatch"],
118
118
  :parser=>"argos-ruby-#{Argos::VERSION}",
119
119
  :bundle=>nil,
120
- :id=>"e81e2f255b62fa88e20351de8d5b2de9bf6b3028"}]
120
+ :id=>"f2c82a5ca1330b312925949a15ac300d07452a12"}]
121
121
  end
122
122
 
123
123
  end
data/spec/argos_spec.rb CHANGED
@@ -28,7 +28,7 @@ module Argos
28
28
  :messages=>449,
29
29
  :filter=>nil,
30
30
  :size=>843,
31
- :updated => "2013-10-21T17:02:32Z",
31
+ :modified => "2013-10-21T17:02:32Z",
32
32
  :parser=>Argos.library_version }
33
33
  end
34
34
  end
@@ -53,7 +53,7 @@ module Argos
53
53
  :longitude_mean=>30.752,
54
54
  :location=>"file://#{diagfile("990660_A.DIA")}",
55
55
  :bytes=>222056,
56
- :updated=>"2013-10-21T18:31:55Z",
56
+ :modified=>"2013-10-21T18:31:55Z",
57
57
  :messages=>448,
58
58
  :filter=>nil,
59
59
  :size=>448,
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argos-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
5
- prerelease:
4
+ version: 1.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Espen Egeland
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-01-13 00:00:00.000000000 Z
12
+ date: 2014-01-21 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ! '>='
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ! '>='
29
26
  - !ruby/object:Gem::Version
@@ -48,6 +45,7 @@ files:
48
45
  - lib/argos/ds.rb
49
46
  - lib/argos/exception.rb
50
47
  - spec/argos/_diag/990660_A.DIA
48
+ - spec/argos/_diag/Prog_header.ds
51
49
  - spec/argos/_diag/dup.diag
52
50
  - spec/argos/_diag/error.diag
53
51
  - spec/argos/_diag/valid_2009-03-02_DB_DIAG.txt
@@ -62,26 +60,25 @@ files:
62
60
  homepage: http://github.com/npolar/argos-ruby
63
61
  licenses:
64
62
  - GPL-3.0
63
+ metadata: {}
65
64
  post_install_message:
66
65
  rdoc_options: []
67
66
  require_paths:
68
67
  - lib
69
68
  required_ruby_version: !ruby/object:Gem::Requirement
70
- none: false
71
69
  requirements:
72
70
  - - ! '>='
73
71
  - !ruby/object:Gem::Version
74
72
  version: '0'
75
73
  required_rubygems_version: !ruby/object:Gem::Requirement
76
- none: false
77
74
  requirements:
78
75
  - - ! '>='
79
76
  - !ruby/object:Gem::Version
80
77
  version: '0'
81
78
  requirements: []
82
79
  rubyforge_project:
83
- rubygems_version: 1.8.25
80
+ rubygems_version: 2.2.1
84
81
  signing_key:
85
- specification_version: 3
82
+ specification_version: 4
86
83
  summary: Argos satellite tracking data parsers
87
84
  test_files: []