norikra 1.3.0.beta.1-java → 1.3.0-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: dab9c348735650b1a4de5cb5cf1c75f2efd92cdc
4
- data.tar.gz: 566b75a8325c7e9d61d3382b20def317f6d46ef8
3
+ metadata.gz: 433cc2c4627c7ffb89e53593554c0d753efed3fa
4
+ data.tar.gz: f84997f4d922a907e393ca4874d824fad15696a2
5
5
  SHA512:
6
- metadata.gz: 1800a71b713db3cfd166e85913039b46032afb74def7c3a597db4860a9013011843aa5803c9db61b338786fbdb7b05afa850fc3509c9ceb20cffc28fa8bf4c37
7
- data.tar.gz: 29e0060543f2d18c7b7eb95778d1de4ddac8d0bdd4a3b246781d1a04ad7a3ef9590373a8d65c9de9714f087d71b6439e823c0641fac9c4b3540b429b22d945bd
6
+ metadata.gz: d8dc68faee3c58a89bbddd63f397c502a2d6b390dfa8b45b13ccb7f5b32a37e67f950a9fea03c7572b5e2d2db7b577f642508901aac4c81a618b3370cd880077
7
+ data.tar.gz: 3956670365f70aa0afde000dde7eba43414e81a646f5dfd00ae7ef22d532ca505101815056443203f41d13e9027e4ed832d258f8bcab5d6625e33697582e748b
@@ -1 +1 @@
1
- jruby-1.7.18
1
+ jruby-1.7.19
@@ -10,3 +10,5 @@ jdk:
10
10
  matrix:
11
11
  allow_failures:
12
12
  - rvm: jruby-head
13
+ sudo: false
14
+ cache: bundler
data/Changes.md CHANGED
@@ -3,6 +3,18 @@
3
3
  Changes of norikra.
4
4
 
5
5
  ## v1
6
+ * v1.3.0
7
+ * Esper-5.2 bundle
8
+ * Dependency update for msgpack.gem
9
+ * Dynamic plugin reloading
10
+ * Add experimental `shutoff` mode to reject input data under high memory pressure
11
+ * Fix number of Jetty threads while running to reduce GC troubles under high memory pressure
12
+ * Add `/engine_statistics` API endpoint
13
+ * Add GC statistics in Engine statistics
14
+ * Add `--ui-context-path` option to mount Norikra WebUI atop of path user specified on reverse proxy servers
15
+ * Fix Bug:
16
+ * not to rewrite field names in subqueries (issue #64)
17
+ * not to load stats files containing multibyte characters
6
18
  * v1.2.2
7
19
  * Change API for custom listner plugins (incompatible with 1.2.0, 1.2.1)
8
20
  * v1.2.1
data/README.md CHANGED
@@ -64,6 +64,10 @@ See: http://norikra.github.io/
64
64
 
65
65
  ## Changes
66
66
 
67
+ * v1.3
68
+ * Dynamic plugin reloading by SIGHUP
69
+ * Esper-5.2 bundle
70
+ * Dependency update for msgpack.gem
67
71
  * v1.2
68
72
  * `NULLABLE()` fields
69
73
  * Pluggable listeners
@@ -28,6 +28,8 @@ module Norikra
28
28
  option :'shutoff-threshold', type: :numeric, default: 90, desc: 'threshold percent of heap memory usage to turn "shutoff mode" on'
29
29
  option :'shutoff-check-interval', type: :numeric, default: 10, desc: 'interval seconds to turn "shutoff mode" on/off'
30
30
 
31
+ option :'ui-context-path', type: :string, default: nil, desc: 'Web UI context path'
32
+
31
33
  ### Daemonize options
32
34
  option :daemonize, type: :boolean, default: false, aliases: "-d", \
33
35
  desc: 'daemonize Norikra server [false (foreground)]'
@@ -251,6 +253,7 @@ module Norikra
251
253
  host: options[:host],
252
254
  port: options[:port],
253
255
  ui_port: options[:'ui-port'],
256
+ ui_context_path: options[:'ui-context-path'],
254
257
  }
255
258
 
256
259
  server = Norikra::Server.new( server_options, conf )
@@ -55,6 +55,7 @@ module Norikra
55
55
  started: s[:started].rfc2822,
56
56
  uptime: self.uptime,
57
57
  memory: self.memory_statistics,
58
+ garbage_collector: self.gc_statistics,
58
59
  input_events: s[:events][:input],
59
60
  processed_events: s[:events][:processed],
60
61
  output_events: s[:events][:output],
@@ -96,6 +97,21 @@ module Norikra
96
97
  { heap: heap, nonheap: non_heap }
97
98
  end
98
99
 
100
+ def gc_statistics
101
+ gcBeans = Java::JavaLangManagement::ManagementFactory.getGarbageCollectorMXBeans()
102
+
103
+ gc = {}
104
+ gcBeans.each do |bean|
105
+ name = bean.getName()
106
+ gc[name] = {
107
+ total_count: bean.getCollectionCount(),
108
+ total_time: bean.getCollectionTime(),
109
+ }
110
+ end
111
+
112
+ gc
113
+ end
114
+
99
115
  def camelize(sym)
100
116
  sym.to_s.split(/_/).map(&:capitalize).join
101
117
  end
@@ -556,7 +572,9 @@ module Norikra
556
572
  administrator = @service.getEPAdministrator
557
573
 
558
574
  statement_model = administrator.compileEPL(query.expression)
575
+ trace("rewriting query"){ { source: statement_model.toEPL, event_type_name_map: event_type_name_map } }
559
576
  Norikra::Query.rewrite_query(statement_model, event_type_name_map)
577
+ trace("query rewrite result"){ { result: statement_model.toEPL } }
560
578
 
561
579
  @running_listeners[query.name] = listener = create_listener(query)
562
580
 
@@ -50,7 +50,7 @@ module Norikra
50
50
  # http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/RollingFileAppender.html
51
51
 
52
52
  if level.upcase == 'TEST' # with opts[:logger] as DummyLogger instance
53
- level = LOG_LEVEL_DEFAULT
53
+ level = opts[:level] || LOG_LEVEL_DEFAULT
54
54
  @@test_flag = true
55
55
  end
56
56
 
@@ -303,7 +303,7 @@ module Norikra
303
303
  traverse_fields(rewriter, recaller, statement_model)
304
304
  end
305
305
 
306
- def self.rewrite_event_field_name(statement_model, mapping)
306
+ def self.rewrite_event_field_name(statement_model, mapping, fqfs_prefixes=nil)
307
307
  # mapping: {target_name => query_event_type_name}
308
308
  # mapping is for target name rewriting of fully qualified field name access
309
309
 
@@ -318,7 +318,7 @@ module Norikra
318
318
 
319
319
  query = Norikra::Query.new(name: 'dummy name by .rewrite_event_field_name', expression: statement_model.toEPL)
320
320
  targets = query.targets
321
- fqfs_prefixes = targets + query.aliases
321
+ fqfs_prefixes ||= (targets + query.aliases)
322
322
 
323
323
  default_target = (targets.size == 1 ? targets.first : nil)
324
324
 
@@ -371,7 +371,7 @@ module Norikra
371
371
  end
372
372
  }
373
373
  recaller = lambda {|node|
374
- Norikra::Query.rewrite_event_field_name(node.getModel, mapping)
374
+ Norikra::Query.rewrite_event_field_name(node.getModel, mapping, fqfs_prefixes)
375
375
  }
376
376
 
377
377
  traverse_fields(rewriter, recaller, statement_model)
@@ -1,4 +1,4 @@
1
- require 'msgpack-rpc-over-http-jruby'
1
+ require 'msgpack-rpc-over-http'
2
2
 
3
3
  module Norikra::RPC
4
4
  class ClientError < MessagePack::RPCOverHTTP::RemoteError; end
@@ -1,6 +1,6 @@
1
1
  require 'mizuno/server'
2
2
  require 'rack/builder'
3
- require 'msgpack-rpc-over-http-jruby'
3
+ require 'msgpack-rpc-over-http'
4
4
 
5
5
  require_relative 'handler'
6
6
  require_relative 'gatekeeper'
@@ -35,7 +35,7 @@ module Norikra::RPC
35
35
  info "RPC server #{@host}:#{@port}, #{@threads} threads"
36
36
  @thread = Thread.new do
37
37
  @mizuno = Mizuno::Server.new
38
- @mizuno.run(@app, embedded: true, threads: @threads, port: @port, host: @host)
38
+ @mizuno.run(@app, embedded: true, threads: @threads, min_threads: @threads, port: @port, host: @host)
39
39
  end
40
40
  end
41
41
 
@@ -101,6 +101,8 @@ module Norikra
101
101
  @port = server_options[:port] || Norikra::RPC::HTTP::DEFAULT_LISTEN_PORT
102
102
  @ui_port = server_options[:ui_port] || Norikra::WebUI::HTTP::DEFAULT_LISTEN_PORT
103
103
 
104
+ @ui_context_path = server_options[:ui_context_path] || "/"
105
+
104
106
  @thread_conf = self.class.threading_configuration(conf[:thread])
105
107
  @log_conf = self.class.log_configuration(conf[:log])
106
108
  @log4j_properties_path = conf[:log4j_properties_path]
@@ -134,7 +136,8 @@ module Norikra
134
136
  @webserver = Norikra::WebUI::HTTP.new(
135
137
  engine: @engine,
136
138
  host: @host, port: @ui_port,
137
- threads: @thread_conf[:web][:threads]
139
+ threads: @thread_conf[:web][:threads],
140
+ context_path: @ui_context_path
138
141
  )
139
142
  end
140
143
 
@@ -1,3 +1,3 @@
1
1
  module Norikra
2
- VERSION = "1.3.0.beta.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -1,6 +1,7 @@
1
1
  module Norikra::WebUI
2
2
  end
3
3
 
4
+ require 'norikra/webui/helpers'
4
5
  require 'norikra/webui/handler'
5
6
  require 'norikra/webui/api'
6
7
  require 'norikra/webui/http'
@@ -186,5 +186,11 @@ class Norikra::WebUI::API < Sinatra::Base
186
186
  }
187
187
  end
188
188
 
189
+ get '/engine_statistics' do
190
+ logging(:show, :json_engine_statistics) do
191
+ json engine.statistics
192
+ end
193
+ end
194
+
189
195
  # post('/listen') # get all events as stream, during connection keepaliving
190
196
  end
@@ -15,6 +15,8 @@ class Norikra::WebUI::Handler < Sinatra::Base
15
15
  set :views, File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'views'))
16
16
  set :erb, escape_html: true
17
17
 
18
+ helpers Norikra::WebUI::Helpers
19
+
18
20
  enable :sessions
19
21
 
20
22
  def norikra_version; Norikra::VERSION ; end
@@ -101,7 +103,7 @@ class Norikra::WebUI::Handler < Sinatra::Base
101
103
  target_name = params[:target]
102
104
  logging(:manage, :close, [target_name]) do
103
105
  engine.close(target_name)
104
- redirect '/'
106
+ redirect url_for('/')
105
107
  end
106
108
  end
107
109
 
@@ -115,7 +117,7 @@ class Norikra::WebUI::Handler < Sinatra::Base
115
117
  error: error_message,
116
118
  },
117
119
  }
118
- redirect '/#query_add'
120
+ redirect url_for("/#query_add")
119
121
  }
120
122
 
121
123
  logging(:manage, :register, [query_name, query_group, expression], on_error_hook: error_hook) do
@@ -126,7 +128,7 @@ class Norikra::WebUI::Handler < Sinatra::Base
126
128
  query_group = nil
127
129
  end
128
130
  engine.register(Norikra::Query.new(name: query_name, group: query_group, expression: expression))
129
- redirect '/#queries'
131
+ redirect url_for("/#queries")
130
132
  end
131
133
  end
132
134
 
@@ -134,7 +136,7 @@ class Norikra::WebUI::Handler < Sinatra::Base
134
136
  query_name = params[:query_name]
135
137
  logging(:manage, :deregister, [query_name]) do
136
138
  engine.deregister(query_name)
137
- redirect '/#queries'
139
+ redirect url_for("/#queries")
138
140
  end
139
141
  end
140
142
 
@@ -142,7 +144,7 @@ class Norikra::WebUI::Handler < Sinatra::Base
142
144
  query_name = params[:query_name]
143
145
  logging(:manage, :suspend, [query_name]) do
144
146
  engine.suspend(query_name)
145
- redirect '/#queries'
147
+ redirect url_for("/#queries")
146
148
  end
147
149
  end
148
150
 
@@ -150,7 +152,7 @@ class Norikra::WebUI::Handler < Sinatra::Base
150
152
  query_name = params[:query_name]
151
153
  logging(:manage, :resume, [query_name]) do
152
154
  engine.resume(query_name)
153
- redirect '/#queries'
155
+ redirect url_for("/#queries")
154
156
  end
155
157
  end
156
158
 
@@ -0,0 +1,6 @@
1
+
2
+ module Norikra::WebUI::Helpers
3
+ def url_for(ref)
4
+ "#{request.script_name}#{ref}"
5
+ end
6
+ end
@@ -26,10 +26,12 @@ module Norikra::WebUI
26
26
  Norikra::WebUI::Handler.engine = @engine
27
27
  Norikra::WebUI::API.engine = @engine
28
28
  @app = Rack::Builder.new {
29
- map '/api' do
30
- run Norikra::WebUI::API
29
+ map opts[:context_path] do
30
+ map '/api' do
31
+ run Norikra::WebUI::API
32
+ end
33
+ run Norikra::WebUI::Handler
31
34
  end
32
- run Norikra::WebUI::Handler
33
35
  }
34
36
  end
35
37
 
@@ -37,7 +39,7 @@ module Norikra::WebUI
37
39
  info "WebUI server #{@host}:#{@port}, #{@threads} threads"
38
40
  @thread = Thread.new do
39
41
  @mizuno = Mizuno::Server.new
40
- @mizuno.run(@app, :embedded => true, :threads => @threads, :port => @port, :host => @host)
42
+ @mizuno.run(@app, embedded: true, threads: @threads, min_threads: @threads, port: @port, host: @host)
41
43
  end
42
44
  end
43
45
 
@@ -19,11 +19,11 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib", "esper"]
21
21
 
22
- spec.add_runtime_dependency "mizuno", "~> 0.6"
22
+ spec.add_runtime_dependency "mizuno", ">= 0.6.9"
23
23
  spec.add_runtime_dependency "rack"
24
24
  spec.add_runtime_dependency "thor"
25
- spec.add_runtime_dependency "msgpack-rpc-over-http-jruby", ">= 0.0.6"
26
- spec.add_runtime_dependency "norikra-client-jruby", ">= 1.1.0"
25
+ spec.add_runtime_dependency "msgpack-rpc-over-http", ">= 0.0.7"
26
+ spec.add_runtime_dependency "norikra-client", "~> 1.3.0"
27
27
  spec.add_runtime_dependency "sinatra"
28
28
  spec.add_runtime_dependency "sinatra-contrib"
29
29
  spec.add_runtime_dependency "erubis"
@@ -0,0 +1,133 @@
1
+ require_relative './spec_helper'
2
+
3
+ require 'norikra/engine'
4
+ require 'norikra/output_pool'
5
+ require 'norikra/typedef_manager'
6
+
7
+ include Norikra::SpecHelper
8
+
9
+ describe "Query" do
10
+ describe "#rewrite_query" do
11
+ it "keep outer alias not replaced" do
12
+ expression = 'select a, (select sum(b) from mytarget.win:length(3) as alias2 where alias1.c=alias2.c) as x from mytarget as alias1'
13
+ expected = 'select a, (select sum(b) from M1.win:length(3) as alias2 where alias1.c=alias2.c) as x from M1 as alias1'
14
+ with_engine do
15
+ statement_model = administrator.compileEPL(expression)
16
+ mapping = {"mytarget"=>"M1"}
17
+ Norikra::Query.rewrite_query(statement_model, mapping)
18
+ expect(statement_model.toEPL).to eql(expected)
19
+ end
20
+ end
21
+ end
22
+ describe "#rewrite_event_field_name" do
23
+ it "keep outer alias not replaced" do
24
+ expression = 'select a, (select sum(b) from mytarget.win:length(3) as alias2 where alias1.c=alias2.c) as x from mytarget as alias1'
25
+ expected = 'select a, (select sum(b) from mytarget.win:length(3) as alias2 where alias1.c=alias2.c) as x from mytarget as alias1'
26
+ with_engine do
27
+ statement_model = administrator.compileEPL(expression)
28
+ mapping = {}
29
+ Norikra::Query.rewrite_event_field_name(statement_model, mapping)
30
+ expect(statement_model.toEPL).to eql(expected)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ describe "Engine(running)" do
37
+ before :each do
38
+ @typedef_manager = Norikra::TypedefManager.new
39
+ @output_pool = Norikra::OutputPool.new
40
+ @engine = Norikra::Engine.new(@output_pool, @typedef_manager, {})
41
+ @engine.start
42
+ end
43
+ after :each do
44
+ @engine.stop
45
+ end
46
+
47
+ context "subquery using outer target alias" do
48
+ it 'should not raise' do
49
+ begin
50
+ target_name = "mytarget"
51
+ query_name = "q1"
52
+ query_group = "g1"
53
+ expression = "select a,(select sum(b) from mytarget.win:length(3) as alias2 where alias1.c=alias2.c) as x from mytarget as alias1"
54
+ query = Norikra::Query.new(name: query_name, group: query_group, expression: expression)
55
+ @engine.register(query)
56
+
57
+ events = [
58
+ {"a"=>1, "b"=>2, "c"=>3},
59
+ {"a"=>2, "b"=>2, "c"=>4},
60
+ {"a"=>3, "b"=>2, "c"=>3},
61
+ {"a"=>4, "b"=>2, "c"=>4},
62
+ {"a"=>5, "b"=>2, "c"=>5},
63
+ {"a"=>6, "b"=>2, "c"=>5},
64
+ {"a"=>7, "b"=>2, "c"=>5},
65
+ {"a"=>8, "b"=>2, "c"=>5}
66
+ ]
67
+ events.each do |e|
68
+ @engine.send("mytarget", [e])
69
+ end
70
+
71
+ output = @engine.output_pool.pop(query_name)
72
+
73
+ expect(output).not_to be_nil
74
+ expect(output.size).to eql 8
75
+ expect(output[0][1]).to eql({"a"=>1, "x"=>2})
76
+ expect(output[1][1]).to eql({"a"=>2, "x"=>2})
77
+ expect(output[2][1]).to eql({"a"=>3, "x"=>4})
78
+ expect(output[3][1]).to eql({"a"=>4, "x"=>4})
79
+ expect(output[4][1]).to eql({"a"=>5, "x"=>2})
80
+ expect(output[5][1]).to eql({"a"=>6, "x"=>4})
81
+ expect(output[6][1]).to eql({"a"=>7, "x"=>6})
82
+ expect(output[7][1]).to eql({"a"=>8, "x"=>6})
83
+ rescue Object => e
84
+ puts $dummylogger.output
85
+ raise e
86
+ end
87
+ end
88
+ end
89
+
90
+ context "simple select" do
91
+ it 'returns all events' do
92
+ target_name = "mytarget"
93
+ query_name = "q1"
94
+ query_group = "g1"
95
+ expression = "select a,b,c from #{target_name}"
96
+ query = Norikra::Query.new(name: query_name, group: query_group, expression: expression)
97
+ @engine.register(query)
98
+
99
+ e1 = {"a"=>1, "b"=>2, "c"=>3}
100
+ e2 = {"a"=>6, "b"=>5, "c"=>4}
101
+ @engine.send(target_name, [e1]);
102
+ @engine.send(target_name, [e2]);
103
+
104
+ output = @engine.output_pool.pop(query_name)
105
+
106
+ expect(output).not_to be_nil
107
+ expect(output.size).to eql 2
108
+ expect(output[0][1]).to eql e1
109
+ expect(output[1][1]).to eql e2
110
+ end
111
+
112
+ it 'returns sum,avg' do
113
+ target_name = "mytarget"
114
+ query_name = "q1"
115
+ query_group = "g1"
116
+ expression = "select sum(a),avg(b),c from #{target_name}"
117
+ query = Norikra::Query.new(name: query_name, group: query_group, expression: expression)
118
+ @engine.register(query)
119
+
120
+ e1 = {"a"=>1, "b"=>2, "c"=>3}
121
+ e2 = {"a"=>6, "b"=>5, "c"=>4}
122
+ @engine.send(target_name, [e1]);
123
+ @engine.send(target_name, [e2]);
124
+
125
+ output = @engine.output_pool.pop(query_name)
126
+
127
+ expect(output).not_to be_nil
128
+ expect(output.size).to eql 2
129
+ expect(output[0][1]).to eql({"sum(a)"=>1,"avg(b)"=>2.0,"c"=>3})
130
+ expect(output[1][1]).to eql({"sum(a)"=>7,"avg(b)"=>3.5,"c"=>4})
131
+ end
132
+ end
133
+ end
@@ -9,6 +9,7 @@ require 'norikra/logger'
9
9
 
10
10
  $dummylogger = Norikra::DummyLogger.new
11
11
  Norikra::Log.init('test', nil, {:logger => $dummylogger})
12
+ # Norikra::Log.init('test', nil, {:logger => $dummylogger, :level=>"TRACE"})
12
13
 
13
14
  require 'norikra/engine'
14
15
 
@@ -12,12 +12,12 @@
12
12
  <!-- TODO: logo favicon <link rel="shortcut icon" href="../../assets/ico/favicon.png"> -->
13
13
 
14
14
  <!-- Bootstrap core CSS -->
15
- <link href="/css/bootstrap.css" rel="stylesheet">
15
+ <link href="<%= url_for("/css/bootstrap.css") %>" rel="stylesheet">
16
16
  <!-- Bootstrap theme -->
17
- <link href="/css/bootstrap-theme.min.css" rel="stylesheet">
17
+ <link href="<%= url_for("/css/bootstrap-theme.min.css") %>" rel="stylesheet">
18
18
 
19
19
  <!-- Custom styles for this template -->
20
- <link href="/css/norikra.css" rel="stylesheet">
20
+ <link href="<%= url_for("/css/norikra.css") %>" rel="stylesheet">
21
21
 
22
22
  <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
23
23
  <!--[if lt IE 9]>
@@ -60,9 +60,8 @@
60
60
  <!-- Placed at the end of the document so the pages load faster -->
61
61
  <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
62
62
  <!-- <script src="//code.jquery.com/jquery.js"></script> -->
63
- <script src="/js/jquery.min.js"></script>
64
- <script src="/js/bootstrap.min.js"></script>
65
- <script src="/js/norikra.webui.js"></script>
63
+ <script src="<%= url_for("/js/jquery.min.js") %>"></script>
64
+ <script src="<%= url_for("/js/bootstrap.min.js") %>"></script>
65
+ <script src="<%= url_for("/js/norikra.webui.js") %>"></script>
66
66
  </body>
67
67
  </html>
68
-
@@ -75,12 +75,12 @@
75
75
  <td><%= query.targets.join(", ") %></td>
76
76
  <td><%= query.suspended? ? "suspended" : "" %></td>
77
77
  <td>
78
- <button class="btn btn-default btn-xs show-query-expression" data-load="/json/query/<%= query.name %>">show query</button>
78
+ <button class="btn btn-default btn-xs show-query-expression" data-load="<%= url_for("/json/query/#{query.name}") %>">show query</button>
79
79
  </td>
80
80
  <td style="text-align: right;"><%= pool[query.name] %></td>
81
81
  <td>
82
82
  <% if pool[query.name].to_i > 0 %>
83
- <button class="btn btn-info btn-xs show-query-events-sample" data-load="/json/events_sample/<%= query.name %>">
83
+ <button class="btn btn-info btn-xs show-query-events-sample" data-load="<%= url_for("/json/events_sample/#{query.name}") %>">
84
84
  <span class="glyphicon glyphicon-search"></span>
85
85
  </button>
86
86
  <% end %>
@@ -104,7 +104,7 @@
104
104
  <pre><%= query.expression %></pre>
105
105
  </div>
106
106
  <div class="modal-footer">
107
- <form class="form-inline" action="/resume" method="POST">
107
+ <form class="form-inline" action="<%= url_for("/resume") %>" method="POST">
108
108
  <input type="hidden" name="query_name" value="<%= query.name %>" />
109
109
  <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
110
110
  <button type="submit" class="btn btn-primary">Resume</button>
@@ -131,7 +131,7 @@
131
131
  <pre><%= query.expression %></pre>
132
132
  </div>
133
133
  <div class="modal-footer">
134
- <form class="form-inline" action="/suspend" method="POST">
134
+ <form class="form-inline" action="<%= url_for("/suspend") %>" method="POST">
135
135
  <input type="hidden" name="query_name" value="<%= query.name %>" />
136
136
  <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
137
137
  <button type="submit" class="btn btn-danger">Suspend</button>
@@ -160,7 +160,7 @@
160
160
  <pre><%= query.expression %></pre>
161
161
  </div>
162
162
  <div class="modal-footer">
163
- <form class="form-inline" action="/deregister" method="POST">
163
+ <form class="form-inline" action="<%= url_for("/deregister") %>" method="POST">
164
164
  <input type="hidden" name="query_name" value="<%= query.name %>" />
165
165
  <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
166
166
  <button type="submit" class="btn btn-danger">Remove</button>
@@ -183,7 +183,7 @@
183
183
  <% if input_data[:query_add][:error] %>
184
184
  <div class="alert alert-danger"><%= input_data[:query_add][:error] %></div>
185
185
  <% end %>
186
- <form action="/register", method="POST">
186
+ <form action="<%= url_for("/register") %>" method="POST">
187
187
  <div class="row">
188
188
  <div class="col-sm-8 form-group">
189
189
  <label for="addQueryExpression">Query</label>
@@ -218,7 +218,7 @@
218
218
  <td><%= target[:auto_field] %></td>
219
219
  <td>
220
220
  <% if target[:fields].size > 0 %>
221
- <button class="btn btn-default btn-xs show-target-fields" data-load="/json/target/<%= target[:name] %>">show fields</button>
221
+ <button class="btn btn-default btn-xs show-target-fields" data-load="<%= url_for("/json/target/#{target[:name]}") %>">show fields</button>
222
222
  <% else %>
223
223
  (lazy target)
224
224
  <% end %>
@@ -242,7 +242,7 @@
242
242
  <p>name: <%= target[:name] %></p>
243
243
  </div>
244
244
  <div class="modal-footer">
245
- <form class="form-inline" action="/close" method="POST">
245
+ <form class="form-inline" action="<%= url_for("/close") %>" method="POST">
246
246
  <input type="hidden" name="target" value="<%= target[:name] %>" />
247
247
  <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
248
248
  <button type="submit" class="btn btn-danger">Remove</button>
@@ -263,13 +263,13 @@
263
263
  <h1 id="stats">Target/Query stat dump</h1>
264
264
  </div>
265
265
 
266
- <a href="/stat/dump" class="btn btn-info btn-lg" role="button">Download JSON</a>
266
+ <a href="<%= url_for("/stat/dump") %>" class="btn btn-info btn-lg" role="button">Download JSON</a>
267
267
 
268
268
  <div class="page-header">
269
269
  <h1 id="logs">Server logs</h1>
270
270
  </div>
271
271
 
272
- <button id="show_server_logs" class="btn btn-info btn-lg" data-url="/logs">Show server logs</button>
272
+ <button id="show_server_logs" class="btn btn-info btn-lg" data-url="<%= url_for("/logs") %>">Show server logs</button>
273
273
 
274
274
  <div id="logsection" style="display: none;">
275
275
  <table id="logtable" class="table logs">
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: norikra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0.beta.1
4
+ version: 1.3.0
5
5
  platform: java
6
6
  authors:
7
7
  - TAGOMORI Satoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-31 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - ~>
16
+ - - '>='
17
17
  - !ruby/object:Gem::Version
18
- version: '0.6'
18
+ version: 0.6.9
19
19
  name: mizuno
20
20
  prerelease: false
21
21
  type: :runtime
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0.6'
26
+ version: 0.6.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
@@ -57,29 +57,29 @@ dependencies:
57
57
  requirements:
58
58
  - - '>='
59
59
  - !ruby/object:Gem::Version
60
- version: 0.0.6
61
- name: msgpack-rpc-over-http-jruby
60
+ version: 0.0.7
61
+ name: msgpack-rpc-over-http
62
62
  prerelease: false
63
63
  type: :runtime
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
- version: 0.0.6
68
+ version: 0.0.7
69
69
  - !ruby/object:Gem::Dependency
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - '>='
72
+ - - ~>
73
73
  - !ruby/object:Gem::Version
74
- version: 1.1.0
75
- name: norikra-client-jruby
74
+ version: 1.3.0
75
+ name: norikra-client
76
76
  prerelease: false
77
77
  type: :runtime
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: 1.1.0
82
+ version: 1.3.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
@@ -240,6 +240,7 @@ files:
240
240
  - lib/norikra/webui.rb
241
241
  - lib/norikra/webui/api.rb
242
242
  - lib/norikra/webui/handler.rb
243
+ - lib/norikra/webui/helpers.rb
243
244
  - lib/norikra/webui/http.rb
244
245
  - norikra.gemspec
245
246
  - public/css/bootstrap-theme.css
@@ -261,6 +262,7 @@ files:
261
262
  - spec/engine_spec.rb
262
263
  - spec/field_spec.rb
263
264
  - spec/fieldset_spec.rb
265
+ - spec/issue64_spec.rb
264
266
  - spec/listener_spec.rb
265
267
  - spec/output_pool_spec.rb
266
268
  - spec/query_spec.rb
@@ -288,12 +290,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
288
290
  version: '0'
289
291
  required_rubygems_version: !ruby/object:Gem::Requirement
290
292
  requirements:
291
- - - '>'
293
+ - - '>='
292
294
  - !ruby/object:Gem::Version
293
- version: 1.3.1
295
+ version: '0'
294
296
  requirements: []
295
297
  rubyforge_project:
296
- rubygems_version: 2.1.9
298
+ rubygems_version: 2.4.5
297
299
  signing_key:
298
300
  specification_version: 4
299
301
  summary: Schema-less stream processing server with SQL
@@ -301,6 +303,7 @@ test_files:
301
303
  - spec/engine_spec.rb
302
304
  - spec/field_spec.rb
303
305
  - spec/fieldset_spec.rb
306
+ - spec/issue64_spec.rb
304
307
  - spec/listener_spec.rb
305
308
  - spec/output_pool_spec.rb
306
309
  - spec/query_spec.rb
@@ -310,3 +313,4 @@ test_files:
310
313
  - spec/target_spec.rb
311
314
  - spec/typedef_manager_spec.rb
312
315
  - spec/typedef_spec.rb
316
+ has_rdoc: