norikra 1.0.4-java → 1.0.5-java

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ce8a8150bb6cbe05216febc333446432d42865e
4
- data.tar.gz: 1af0f92f1dbde76cdf1f3647f324cb268c2e08a6
3
+ metadata.gz: 61894f524fea6b1a2baee5b6ded868b7b5897ad1
4
+ data.tar.gz: 07f714981b43d62258643265a8773e01077f5a4a
5
5
  SHA512:
6
- metadata.gz: 13411deed106009ffc5e7006998213c6a2827c920de934a50254b35fca0adeae2bce86a888ea0b500339f84720973c1e25a6107769f2511d22a94e0ac47e80bc
7
- data.tar.gz: c8735a94f2fe9e435418d23ce630ae7775e2db0e3a3934a7bdc564fb370aa84edcc5ad9e1850163e452fc3ed8a1a602baa46a7d6f45af544546dbec873d2623c
6
+ metadata.gz: 372de0fa852cd3de9ed4a3adaab4a1946d004728522856dba8b4aad70bdfc82d9601e4c08a043d367d61f824cd449c57af0bc5bdb33e88dc123e429485fe9efa
7
+ data.tar.gz: f396b95240f6aab7a660a1e31af55c8f904b9fbd8c793c11c3f2c96702f1b4f96de73643beafdf357a2fb5ba58c1ec8f70e04430e54a3de4fe17aa70e3ed83d8
data/lib/norikra/cli.rb CHANGED
@@ -68,6 +68,7 @@ module Norikra
68
68
  option :'log-filesize', :type => :string, :default => nil, :desc => 'log rotation size [10MB]'
69
69
  option :'log-backups' , :type => :numeric, :default => nil, :desc => 'log rotation backups [10]'
70
70
  option :'log-buffer-lines', :type => :numeric, :default => nil, :desc => 'log lines to fetch from API [1000]'
71
+ option :'log4j-properties-path', :type => :string, :default => nil, :desc => 'path to log4j.properties. ignore other log* options when this option is present'
71
72
 
72
73
  ### Loglevel options
73
74
  option :'more-quiet', :type => :boolean, :default => false, :desc => 'set loglevel as ERROR'
@@ -226,6 +227,7 @@ module Norikra
226
227
  filesize: options[:'log-filesize'], backups: options[:'log-backups'],
227
228
  bufferlines: options[:'log-buffer-lines'],
228
229
  }
230
+ conf[:log4j_properties_path] = options[:'log4j-properties-path']
229
231
 
230
232
  server_options = {
231
233
  host: options[:host],
@@ -169,6 +169,7 @@ module Norikra
169
169
  def register(query)
170
170
  info "registering query", :name => query.name, :targets => query.targets, :expression => query.expression
171
171
  raise Norikra::ClientError, "query name '#{query.name}' already exists" if @queries.select{|q| q.name == query.name }.size > 0
172
+ raise Norikra::ClientError, "query '#{query.name}' is invalid query for Norikra" if query.invalid?
172
173
 
173
174
  query.targets.each do |target_name|
174
175
  open(target_name) unless @targets.any?{|t| t.name == target_name}
@@ -309,6 +310,7 @@ module Norikra
309
310
 
310
311
  @mutex.synchronize do
311
312
  raise Norikra::ClientError, "query '#{query.name}' already exists" unless @queries.select{|q| q.name == query.name }.empty?
313
+ raise Norikra::ClientError, "query '#{query.name}' is invalid query for Norikra" if query.invalid?
312
314
  if lo_target_name = Norikra::Query.loopback(query.group)
313
315
  raise Norikra::ClientError, "loopback target '#{lo_target_name}'" unless Norikra::Target.valid?(lo_target_name)
314
316
  end
@@ -37,8 +37,6 @@ module Norikra
37
37
  module Log
38
38
  @@logger = nil
39
39
 
40
- @@level = nil
41
- @@levelnum = nil
42
40
  @@devmode = false
43
41
 
44
42
  @@test_flag = false
@@ -56,9 +54,8 @@ module Norikra
56
54
  @@test_flag = true
57
55
  end
58
56
 
59
- @@level = level.upcase
60
- raise ArgumentError, "unknown log level: #{@@level}" unless LOG_LEVELS.include?(@@level)
61
- @@levelnum = LOG_LEVELS.index(@@level)
57
+ level = level.upcase
58
+ raise ArgumentError, "unknown log level: #{level}" unless LOG_LEVELS.include?(level)
62
59
 
63
60
  p = java.util.Properties.new
64
61
  p.setProperty('log4j.appender.default.layout', 'org.apache.log4j.PatternLayout')
@@ -93,7 +90,7 @@ module Norikra
93
90
  p.setProperty('log4j.appender.builtin.MaxFileSize', opts[:filesize] || LOGFILE_DEFAULT_MAX_SIZE)
94
91
  p.setProperty('log4j.appender.builtin.MaxBackupIndex', opts[:backups].to_s || LOGFILE_DEFAULT_MAX_BACKUP_INDEX.to_s)
95
92
  end
96
- p.setProperty('log4j.rootLogger', "#{@@level},default")
93
+ p.setProperty('log4j.rootLogger', "#{level},default")
97
94
  org.apache.log4j.PropertyConfigurator.configure(p)
98
95
 
99
96
  @@logger = Logger.new('norikra.log', opts)
@@ -101,7 +98,7 @@ module Norikra
101
98
  else # for test(rspec)
102
99
  p.setProperty('log4j.appender.default', 'org.apache.log4j.varia.NullAppender')
103
100
  p.setProperty('log4j.appender.builtin', 'org.apache.log4j.varia.NullAppender')
104
- p.setProperty('log4j.rootLogger', "#{@@level},default")
101
+ p.setProperty('log4j.rootLogger', "#{level},default")
105
102
  org.apache.log4j.PropertyConfigurator.configure(p)
106
103
  @@logger = opts[:logger]
107
104
  end
@@ -109,6 +106,12 @@ module Norikra
109
106
  @@devmode = devmode
110
107
  end
111
108
 
109
+ def self.init_with_log4j_properties_path(log4j_properties_path)
110
+ org.apache.log4j.PropertyConfigurator.configure(log4j_properties_path)
111
+ @@logger = Logger.new('norikra.log')
112
+ @@devmode = false
113
+ end
114
+
112
115
  def self.swap(logger) # for tests
113
116
  @@mon.synchronize do
114
117
  original,@@logger = @@logger, logger
@@ -120,31 +123,26 @@ module Norikra
120
123
  def self.logger; @@logger ; end
121
124
 
122
125
  def trace(message, data=nil)
123
- return if LEVEL_TRACE < @@levelnum
124
126
  from = @@devmode ? caller_locations(1,1) : nil
125
127
  @@logger.trace(message, data, from)
126
128
  end
127
129
 
128
130
  def debug(message, data=nil)
129
- return if LEVEL_DEBUG < @@levelnum
130
131
  from = @@devmode ? caller_locations(1,1) : nil
131
132
  @@logger.debug(message, data, from)
132
133
  end
133
134
 
134
135
  def info(message, data=nil)
135
- return if LEVEL_INFO < @@levelnum
136
136
  from = @@devmode ? caller_locations(1,1) : nil
137
137
  @@logger.info(message, data, from)
138
138
  end
139
139
 
140
140
  def warn(message, data=nil)
141
- return if LEVEL_WARN < @@levelnum
142
141
  from = @@devmode ? caller_locations(1,1) : nil
143
142
  @@logger.warn(message, data, from)
144
143
  end
145
144
 
146
145
  def error(message, data=nil)
147
- return if LEVEL_ERROR < @@levelnum
148
146
  from = @@devmode ? caller_locations(1,1) : nil
149
147
  @@logger.error(message, data, from)
150
148
  end
@@ -175,36 +173,42 @@ module Norikra
175
173
  end
176
174
 
177
175
  def trace(message, data=nil, from=nil)
176
+ return unless @log4j.isTraceEnabled
178
177
  line = format(from, message, data)
179
178
  push('trace', line)
180
179
  @log4j.trace(line)
181
180
  end
182
181
 
183
182
  def debug(message, data=nil, from=nil)
183
+ return unless @log4j.isDebugEnabled
184
184
  line = format(from, message, data)
185
185
  push('debug', line)
186
186
  @log4j.debug(line)
187
187
  end
188
188
 
189
189
  def info(message, data=nil, from=nil)
190
+ return unless @log4j.isInfoEnabled
190
191
  line = format(from, message, data)
191
192
  push('info', line)
192
193
  @log4j.info(line)
193
194
  end
194
195
 
195
196
  def warn(message, data=nil, from=nil)
197
+ return unless @log4j.isWarnEnabled
196
198
  line = format(from, message, data)
197
199
  push('warn', line)
198
200
  @log4j.warn(line)
199
201
  end
200
202
 
201
203
  def error(message, data=nil, from=nil)
204
+ return unless @log4j.isErrorEnabled
202
205
  line = format(from, message, data)
203
206
  push('error', line)
204
207
  @log4j.error(line)
205
208
  end
206
209
 
207
210
  def fatal(message, data=nil, from=nil)
211
+ return unless @log4j.isFatalEnabled
208
212
  line = format(from, message, data)
209
213
  push('fatal', line)
210
214
  @log4j.fatal(line)
data/lib/norikra/query.rb CHANGED
@@ -61,6 +61,11 @@ module Norikra
61
61
  {name: @name, group: @group, expression: @expression}
62
62
  end
63
63
 
64
+ def invalid?
65
+ # check query is invalid as Norikra query or not
66
+ self.ast.listup('selectionListElement').any?{|node| node.children.map(&:name).any?{|name| name == '*' } }
67
+ end
68
+
64
69
  def targets
65
70
  return @targets if @targets
66
71
  @targets = (self.ast.listup(:stream).map(&:targets).flatten + self.subqueries.map(&:targets).flatten).sort.uniq
@@ -96,8 +96,13 @@ module Norikra
96
96
 
97
97
  @thread_conf = self.class.threading_configuration(conf[:thread])
98
98
  @log_conf = self.class.log_configuration(conf[:log])
99
+ @log4j_properties_path = conf[:log4j_properties_path]
99
100
 
100
- Norikra::Log.init(@log_conf[:level], @log_conf[:dir], {filesize: @log_conf[:filesize], backups: @log_conf[:backups], bufferlines: @log_conf[:bufferlines]})
101
+ if @log4j_properties_path
102
+ Norikra::Log.init_with_log4j_properties_path(@log4j_properties_path)
103
+ else
104
+ Norikra::Log.init(@log_conf[:level], @log_conf[:dir], {filesize: @log_conf[:filesize], backups: @log_conf[:backups], bufferlines: @log_conf[:bufferlines]})
105
+ end
101
106
 
102
107
  info "thread configurations", @thread_conf
103
108
  info "logging configurations", @log_conf
@@ -1,3 +1,3 @@
1
1
  module Norikra
2
- VERSION = "1.0.4"
2
+ VERSION = "1.0.5"
3
3
  end
@@ -18,6 +18,16 @@ class Norikra::WebUI::API < Sinatra::Base
18
18
  @@engine = engine
19
19
  end
20
20
 
21
+ before do
22
+ content_type :json
23
+ headers 'Access-Control-Allow-Origin' => '*',
24
+ 'Access-Control-Allow-Methods' => ['OPTIONS', 'GET', 'POST'],
25
+ 'Access-Control-Allow-Headers' => 'Content-Type'
26
+ if request.request_method == 'OPTIONS'
27
+ halt 200
28
+ end
29
+ end
30
+
21
31
  def logging(type, handler, args=[], opts={})
22
32
  if type == :manage
23
33
  debug "WebAPI", :handler => handler.to_s, :args => args
data/spec/query_spec.rb CHANGED
@@ -21,6 +21,8 @@ describe Norikra::Query do
21
21
  expect(q.fields).to eql(['param', 'path', 'size'].sort)
22
22
  expect(q.fields('TestTable')).to eql(['param','path','size'].sort)
23
23
  expect(q.fields(nil)).to eql([])
24
+
25
+ expect(q.invalid?).to be_false
24
26
  end
25
27
  end
26
28
 
@@ -86,6 +88,8 @@ describe Norikra::Query do
86
88
  expect(q.fields).to eql([])
87
89
  expect(q.fields('TestTable')).to eql([])
88
90
  expect(q.fields(nil)).to eql([])
91
+
92
+ expect(q.invalid?).to be_false
89
93
  end
90
94
  end
91
95
 
@@ -103,6 +107,8 @@ describe Norikra::Query do
103
107
  expect(q.fields).to eql(['name.string', 'param', 'path', 'size'].sort)
104
108
  expect(q.fields('TestTable')).to eql(['name.string', 'param','path','size'].sort)
105
109
  expect(q.fields(nil)).to eql([])
110
+
111
+ expect(q.invalid?).to be_false
106
112
  end
107
113
  end
108
114
 
@@ -120,6 +126,8 @@ describe Norikra::Query do
120
126
  expect(q.fields).to eql(['path', 'size'].sort)
121
127
  expect(q.fields('TestTable')).to eql(['path', 'size'].sort)
122
128
  expect(q.fields(nil)).to eql([])
129
+
130
+ expect(q.invalid?).to be_false
123
131
  end
124
132
  end
125
133
 
@@ -137,6 +145,8 @@ describe Norikra::Query do
137
145
  expect(q.fields('StreamA')).to eql(['size','data'].sort)
138
146
  expect(q.fields('StreamB')).to eql(['size','header'].sort)
139
147
  expect(q.fields(nil)).to eql(['product'])
148
+
149
+ expect(q.invalid?).to be_false
140
150
  end
141
151
 
142
152
  it 'returns query instances collectly parsed, with field accessing views' do
@@ -152,12 +162,14 @@ describe Norikra::Query do
152
162
  expect(q.fields('StreamA')).to eql(['size','data','ts1'].sort)
153
163
  expect(q.fields('StreamB')).to eql(['size','header','ts2'].sort)
154
164
  expect(q.fields(nil)).to eql(['product'])
165
+
166
+ expect(q.invalid?).to be_false
155
167
  end
156
168
  end
157
169
 
158
170
  context 'with query with subquery (where clause)' do
159
171
  it 'returns query instances collectly parsed' do
160
- expression = 'select * from RfidEvent as RFID where "Dock 1" = (select name from Zones.std:unique(zoneName) where zoneId = RFID.zoneId)'
172
+ expression = 'select zoneId from RfidEvent as RFID where "Dock 1" = (select name from Zones.std:unique(zoneName) where zoneId = RFID.zoneId)'
161
173
  q = Norikra::Query.new(
162
174
  :name => 'TestTable query4', :expression => expression
163
175
  )
@@ -169,6 +181,8 @@ describe Norikra::Query do
169
181
  expect(q.fields('RfidEvent')).to eql(['zoneId'])
170
182
  expect(q.fields('Zones')).to eql(['name','zoneName','zoneId'].sort)
171
183
  expect(q.fields(nil)).to eql([])
184
+
185
+ expect(q.invalid?).to be_false
172
186
  end
173
187
  end
174
188
 
@@ -186,12 +200,14 @@ describe Norikra::Query do
186
200
  expect(q.fields('RfidEvent')).to eql(['zoneId'])
187
201
  expect(q.fields('Zones')).to eql(['name','zoneName','zoneId'].sort)
188
202
  expect(q.fields(nil)).to eql([])
203
+
204
+ expect(q.invalid?).to be_false
189
205
  end
190
206
  end
191
207
 
192
208
  context 'with query with subquery (from clause)' do
193
209
  it 'returns query instances collectly parsed' do
194
- expression = "select * from BarData(ticker='MSFT', sub(closePrice, (select movAgv from SMA20Stream(ticker='MSFT').std:lastevent())) > 0)"
210
+ expression = "select ticker, closePrice from BarData(ticker='MSFT', sub(closePrice, (select movAgv from SMA20Stream(ticker='MSFT').std:lastevent())) > 0)"
195
211
  q = Norikra::Query.new(
196
212
  :name => 'TestTable query6', :expression => expression
197
213
  )
@@ -203,6 +219,8 @@ describe Norikra::Query do
203
219
  expect(q.fields('BarData')).to eql(['ticker','closePrice'].sort)
204
220
  expect(q.fields('SMA20Stream')).to eql(['movAgv','ticker'].sort)
205
221
  expect(q.fields(nil)).to eql([])
222
+
223
+ expect(q.invalid?).to be_false
206
224
  end
207
225
  end
208
226
 
@@ -220,6 +238,8 @@ describe Norikra::Query do
220
238
  expect(q.fields).to eql(['params.path', 'size', 'opts.$0'].sort)
221
239
  expect(q.fields('TestTable')).to eql(['params.path', 'size', 'opts.$0'].sort)
222
240
  expect(q.fields(nil)).to eql([])
241
+
242
+ expect(q.invalid?).to be_false
223
243
  end
224
244
  end
225
245
 
@@ -237,6 +257,8 @@ describe Norikra::Query do
237
257
  expect(q.fields).to eql(['params.$$path.$1', 'size.$0.bytes', 'opts.num.$0'].sort)
238
258
  expect(q.fields('TestTable')).to eql(['params.$$path.$1', 'size.$0.bytes', 'opts.num.$0'].sort)
239
259
  expect(q.fields(nil)).to eql([])
260
+
261
+ expect(q.invalid?).to be_false
240
262
  end
241
263
 
242
264
  it 'can parse with nested function calls correctly' do
@@ -249,6 +271,8 @@ describe Norikra::Query do
249
271
  expression = 'SELECT path.f1.substring(0, path.f1.index("?")) AS urlpath, COUNT(*) AS count FROM TestTable.win:time_batch(60 seconds) GROUP BY path.f1.substring(0, path.f1.index("?"))'
250
272
  q = Norikra::Query.new(:name => 'TestTable query8.2', :expression => expression)
251
273
  expect(q.fields).to eql(['path.f1'])
274
+
275
+ expect(q.invalid?).to be_false
252
276
  end
253
277
  end
254
278
 
@@ -259,6 +283,8 @@ describe Norikra::Query do
259
283
  expect(q.fields).to eql(['path.source', 'ts'].sort)
260
284
  expect(q.fields('TestTable')).to eql(['path.source', 'ts'].sort)
261
285
  expect(q.fields(nil)).to eql([])
286
+
287
+ expect(q.invalid?).to be_false
262
288
  end
263
289
  end
264
290
 
@@ -277,6 +303,18 @@ describe Norikra::Query do
277
303
  expect(q.fields).to eql(['name', 'content', 'type', 'source'].sort)
278
304
  expect(q.fields('EventA')).to eql(['name', 'content', 'type', 'source'].sort)
279
305
  expect(q.fields(nil)).to eql([])
306
+
307
+ expect(q.invalid?).to be_false
308
+ end
309
+ end
310
+
311
+ context 'with "*" selection list' do
312
+ it 'returns query instance which is singed as invalid for norikra query' do
313
+ expression = "select * from target1 where key1=1"
314
+ q = Norikra::Query.new(
315
+ name: 'Invalid query 1', expression: expression
316
+ )
317
+ expect(q.invalid?).to be_true
280
318
  end
281
319
  end
282
320
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: norikra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: java
6
6
  authors:
7
7
  - TAGOMORI Satoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2014-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mizuno