norikra 1.0.4-java → 1.0.5-java

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