unageanu-jiji 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -0
- data/base/agents/moving_average_agent.rb +78 -0
- data/base/shared_lib/moving_average.rb +34 -0
- data/bin/jiji +5 -0
- data/html/css/default.css +7 -0
- data/html/img/button_calendar_over.gif +0 -0
- data/html/img/button_cancel.gif +0 -0
- data/html/img/button_no.gif +0 -0
- data/html/img/button_no_gray.gif +0 -0
- data/html/img/button_no_over.gif +0 -0
- data/html/img/button_save.gif +0 -0
- data/html/img/button_save_gray.gif +0 -0
- data/html/img/button_save_over.gif +0 -0
- data/html/img/button_update_s.gif +0 -0
- data/html/img/button_update_s_gray.gif +0 -0
- data/html/img/button_update_s_over.gif +0 -0
- data/html/img/button_yes.gif +0 -0
- data/html/img/button_yes_gray.gif +0 -0
- data/html/img/button_yes_over.gif +0 -0
- data/html/index.html +29 -33
- data/html/js/agent-editor-page.js +178 -88
- data/html/js/agent-selector.js +68 -39
- data/html/js/bt-create-page.js +24 -11
- data/html/js/dialog.js +43 -34
- data/html/js/result-page.js +37 -25
- data/html/js/rt-setting-page.js +13 -6
- data/html/js/sidebar.js +8 -5
- data/html/js/templates.js +37 -3
- data/html/js/utils.js +47 -9
- data/html/swf/chart.swf +0 -0
- data/lib/jiji/agent/agent_manager.rb +2 -2
- data/lib/jiji/agent/agent_registry.rb +4 -1
- data/lib/jiji/command.rb +6 -0
- data/lib/jiji/process.rb +32 -10
- data/lib/jiji/process_manager.rb +7 -0
- data/lib/jiji/registry.rb +6 -4
- data/lib/jiji/server.rb +6 -1
- data/lib/jiji/service/output_service.rb +10 -6
- data/swf/chart/fx/chart/Chart.as +4 -1
- data/swf/chart/fx/chart/ui/Constants.as +3 -3
- data/swf/chart/fx/chart/ui/InformationWindow.as +45 -41
- data/swf/chart/fx/chart/ui/Pointer.as +6 -4
- data/swf/chart/fx/chart/ui/Scroll.as +3 -2
- data/swf/chart/fx/chart/ui/Stage.as +3 -3
- data/swf/chart/fx/chart/ui/TradeDetailWindow.as +9 -8
- data/swf/chart/fx/chart/ui/TradeResult.as +3 -17
- data/swf/chart/fx/chart/ui/graph/Graph.as +4 -2
- data/swf/chart/fx/chart/ui/graph/GraphManager.as +3 -1
- data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
- data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
- data/swf/chart/fx/net/StubFactory.as +3 -3
- data/test/all_tests.rb +1 -1
- data/test/test_AgentManager.rb +4 -4
- data/test/{test_AgentRegistory.rb → test_AgentRegistry.rb} +0 -0
- data/test/test_Collector.rb +1 -1
- data/test/test_Output_registry.rb +7 -3
- data/test/test_Process.rb +5 -5
- data/test/test_ProcessManager.rb +120 -68
- metadata +20 -14
- data/bin/jiji.rb +0 -6
- data/html/js/W3CDTF.js +0 -131
@@ -23,6 +23,8 @@ package fx.chart.ui.graph {
|
|
23
23
|
public function draw( data:Object, colors:Array ):void {
|
24
24
|
main.x = 0;
|
25
25
|
Util.clear( main );
|
26
|
+
Util.clear( axis );
|
27
|
+
Util.clear( lowAxis );
|
26
28
|
|
27
29
|
// データ数分のスプライトを作成
|
28
30
|
if ( !data["datas"] || data["datas"].length <= 0 ) { return; }
|
@@ -103,7 +105,7 @@ package fx.chart.ui.graph {
|
|
103
105
|
}
|
104
106
|
|
105
107
|
// 背景線を引く
|
106
|
-
drawAxis( data,
|
108
|
+
drawAxis( data, f );
|
107
109
|
|
108
110
|
// グラフ
|
109
111
|
drawLineGraph( data, f , colors, sprites );
|
@@ -170,7 +172,7 @@ package fx.chart.ui.graph {
|
|
170
172
|
var y:int = f(item);
|
171
173
|
lowAxis.graphics.moveTo( rect.left, y);
|
172
174
|
lowAxis.graphics.lineTo( rect.right, y);
|
173
|
-
createText( String(item), axis, Constants.TEXT_FORMAT_SCALE_Y, 0, y-
|
175
|
+
createText( String(item), axis, Constants.TEXT_FORMAT_SCALE_Y, 0, y-8, rect.left-2 );
|
174
176
|
} );
|
175
177
|
}
|
176
178
|
}
|
@@ -83,6 +83,7 @@ package fx.chart.ui.graph {
|
|
83
83
|
} else {
|
84
84
|
// 取得済みであればレイヤーを表示するだけ。
|
85
85
|
target.graph.setVisible(true);
|
86
|
+
target.draw();
|
86
87
|
}
|
87
88
|
}
|
88
89
|
}
|
@@ -92,6 +93,7 @@ package fx.chart.ui.graph {
|
|
92
93
|
var target:GraphInfo = infos[name[0]][name[1]];
|
93
94
|
target.visible = false;
|
94
95
|
target.graph.setVisible(false);
|
96
|
+
target.draw();
|
95
97
|
}
|
96
98
|
}
|
97
99
|
/**
|
@@ -122,7 +124,7 @@ package fx.chart.ui.graph {
|
|
122
124
|
if ( names.length <= 0 ) { return; }
|
123
125
|
ctrl.requestOutputDatas( names, function( map:Object ):void {
|
124
126
|
names.forEach( function( item:*,i:int,arr:Array ):void {
|
125
|
-
if ( map[item[0]][item[1]] ) {
|
127
|
+
if ( map[item[0]] && map[item[0]][item[1]] ) {
|
126
128
|
infos[item[0]][item[1]].datas = map[item[0]][item[1]] ;
|
127
129
|
// グラフ表示
|
128
130
|
if ( infos[item[0]][item[1]].visible ) {
|
Binary file
|
Binary file
|
@@ -70,7 +70,7 @@ dynamic class Stub extends Proxy {
|
|
70
70
|
var data:String = JSON.encode({
|
71
71
|
"method":name.toString(), "params":rest, "time":new Date().getTime()
|
72
72
|
});
|
73
|
-
log(data);
|
73
|
+
//log(data);
|
74
74
|
//request.method = URLRequestMethod.POST;
|
75
75
|
var variable:URLVariables = new URLVariables();
|
76
76
|
variable.request = data;
|
@@ -80,7 +80,7 @@ dynamic class Stub extends Proxy {
|
|
80
80
|
var loader:URLLoader = new URLLoader();
|
81
81
|
loader.addEventListener(flash.events.Event.COMPLETE, function( ev:flash.events.Event):void {
|
82
82
|
changeRequestCount(-1);
|
83
|
-
log(ev.target.data);
|
83
|
+
//log(ev.target.data);
|
84
84
|
var result:Object = JSON.decode( ev.target.data)[0];
|
85
85
|
if ( result["error"] ) {
|
86
86
|
fail.apply(null, [result["error"]] );
|
@@ -106,7 +106,7 @@ dynamic class Stub extends Proxy {
|
|
106
106
|
}
|
107
107
|
private function changeRequestCount( diff:int ):void {
|
108
108
|
requestCount+= diff;
|
109
|
-
log( "request count : " + String(requestCount) );
|
109
|
+
//log( "request count : " + String(requestCount) );
|
110
110
|
sf.listenerSupport.fire( fx.chart.ctrl.Event.REQUEST_COUNT_CHANGED,
|
111
111
|
{"requestCount":requestCount} );
|
112
112
|
}
|
data/test/all_tests.rb
CHANGED
data/test/test_AgentManager.rb
CHANGED
@@ -35,8 +35,8 @@ class AgentManagerTest < RUNIT::TestCase
|
|
35
35
|
logger = @permitter.proxy( logger, [/^(info|debug|warn|error|fatal)$/] )
|
36
36
|
@client = JIJI::SingleClickClient.new( ACCOUNT, CONF, logger )
|
37
37
|
|
38
|
-
@
|
39
|
-
class << @
|
38
|
+
@registry_mock = Object.new
|
39
|
+
class << @registry_mock
|
40
40
|
def output( agent_name, dir )
|
41
41
|
output = JIJI::Output.new( agent_name, "#{dir}/out" )
|
42
42
|
output = @permitter.proxy( output, [/^(get|each|put|<<)$/], [/^get$/] )
|
@@ -46,7 +46,7 @@ class AgentManagerTest < RUNIT::TestCase
|
|
46
46
|
@permitter = permitter
|
47
47
|
end
|
48
48
|
end
|
49
|
-
@
|
49
|
+
@registry_mock.permitter = @permitter
|
50
50
|
|
51
51
|
operator = JIJI::RmtOperator.new( @client, logger, nil )
|
52
52
|
operator.conf = CONF
|
@@ -58,7 +58,7 @@ class AgentManagerTest < RUNIT::TestCase
|
|
58
58
|
@m.conf = CONF
|
59
59
|
@m.trade_result_dao = trade_result_dao
|
60
60
|
@m.client = @client
|
61
|
-
@m.
|
61
|
+
@m.registry = @registry_mock
|
62
62
|
end
|
63
63
|
|
64
64
|
def teardown
|
File without changes
|
data/test/test_Collector.rb
CHANGED
@@ -10,12 +10,12 @@ require "logger"
|
|
10
10
|
require "testutils"
|
11
11
|
|
12
12
|
# アウトプットのテスト(レジストリから取り出す)
|
13
|
-
class
|
13
|
+
class OutputregistryTest < RUNIT::TestCase
|
14
14
|
|
15
15
|
include Test::Constants
|
16
16
|
|
17
17
|
def setup
|
18
|
-
@dir = File.dirname(__FILE__) + "/
|
18
|
+
@dir = File.dirname(__FILE__) + "/OutputregistryTest"
|
19
19
|
@registry = JIJI::Registry.new(@dir , nil)
|
20
20
|
@mng = @registry[:process_manager]
|
21
21
|
end
|
@@ -26,7 +26,11 @@ class OutputRegistoryTest < RUNIT::TestCase
|
|
26
26
|
begin
|
27
27
|
@registry.permitter.close
|
28
28
|
ensure
|
29
|
-
|
29
|
+
begin
|
30
|
+
@registry.client.close
|
31
|
+
ensure
|
32
|
+
@registry.server_logger.close
|
33
|
+
end
|
30
34
|
end
|
31
35
|
ensure
|
32
36
|
FileUtils.rm_rf "#{@dir}/logs"
|
data/test/test_Process.rb
CHANGED
@@ -36,14 +36,14 @@ class ProcessTest < RUNIT::TestCase
|
|
36
36
|
agent_mng.conf = CONF
|
37
37
|
agent_mng.conf.set( [:agent,:safe_level], 0)
|
38
38
|
|
39
|
-
|
40
|
-
class <<
|
39
|
+
registry_mock = Object.new
|
40
|
+
class << registry_mock
|
41
41
|
def output( agent_name, dir )
|
42
42
|
output = JIJI::Output.new( agent_name, "#{dir}/out" )
|
43
43
|
return output
|
44
44
|
end
|
45
45
|
end
|
46
|
-
agent_mng.
|
46
|
+
agent_mng.registry = registry_mock
|
47
47
|
|
48
48
|
p1 = JIJI::Process.new( "1", @dir, agent_mng, {} )
|
49
49
|
assert_equals p1.id, "1"
|
@@ -138,7 +138,7 @@ class ProcessTest < RUNIT::TestCase
|
|
138
138
|
|
139
139
|
|
140
140
|
# 再読み込み / ファイルに保存された設定値が読み込まれる。
|
141
|
-
p1 = JIJI::Process.new( "1", @dir, agent_mng )
|
141
|
+
p1 = JIJI::Process.new( "1", @dir, agent_mng, nil, registry_mock )
|
142
142
|
assert_equals p1.id, "1"
|
143
143
|
assert_equals p1.agent_manager, agent_mng
|
144
144
|
assert_equals p1["x"], "xxx"
|
@@ -150,7 +150,7 @@ class ProcessTest < RUNIT::TestCase
|
|
150
150
|
assert_equals p1.agent_manager.operator.trade_enable, false
|
151
151
|
|
152
152
|
# 別のプロセスを作成 / 設定値は別途保持される。
|
153
|
-
p2 = JIJI::Process.new( "2", @dir, agent_mng, {} )
|
153
|
+
p2 = JIJI::Process.new( "2", @dir, agent_mng, {}, registry_mock )
|
154
154
|
assert_equals p2.id, "2"
|
155
155
|
assert_equals p2.agent_manager, agent_mng
|
156
156
|
assert_equals p2["x"], nil
|
data/test/test_ProcessManager.rb
CHANGED
@@ -47,7 +47,11 @@ class ProcessManagerTest < RUNIT::TestCase
|
|
47
47
|
begin
|
48
48
|
@registry.permitter.close
|
49
49
|
ensure
|
50
|
-
|
50
|
+
begin
|
51
|
+
@registry.client.close
|
52
|
+
ensure
|
53
|
+
@registry.server_logger.close
|
54
|
+
end
|
51
55
|
end
|
52
56
|
# Thread.list.each {|t|
|
53
57
|
# puts "---#{t}"
|
@@ -219,72 +223,116 @@ class ProcessManagerTest < RUNIT::TestCase
|
|
219
223
|
assert_process_not_found(pid3)
|
220
224
|
|
221
225
|
end
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
#
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
226
|
+
|
227
|
+
#
|
228
|
+
#複数プロセスを同時に起動するテスト。
|
229
|
+
#
|
230
|
+
def test_multi_process
|
231
|
+
@mng.start
|
232
|
+
agents = [{
|
233
|
+
"name" => "aaa",
|
234
|
+
"class" => "MovingAverageAgent@moving_average.rb",
|
235
|
+
"id"=> "44c0d256-8994-4240-a6c6-8d9546aef8c4",
|
236
|
+
"properties" => {
|
237
|
+
"period" => 10,
|
238
|
+
"short" => 25,
|
239
|
+
"long" => 75
|
240
|
+
}
|
241
|
+
}]
|
242
|
+
|
243
|
+
# プロセスを追加
|
244
|
+
pid = @mng.create_back_test( "test", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
|
245
|
+
sleep 1
|
246
|
+
|
247
|
+
# プロセスを取得
|
248
|
+
process = @mng.get( pid )
|
249
|
+
assert_equals process.state, :RUNNING
|
250
|
+
assert_not_nil process.progress
|
251
|
+
assert_equals process.id, pid
|
252
|
+
|
253
|
+
#別のプロセスを追加
|
254
|
+
pid2 = @mng.create_back_test( "test2", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
|
255
|
+
sleep 1
|
256
|
+
|
257
|
+
#別のプロセスは待機中になる。
|
258
|
+
process = @mng.get( pid2 )
|
259
|
+
assert_equals process.state, :WAITING
|
260
|
+
assert_not_nil process.progress
|
261
|
+
assert_equals process.id, pid2
|
262
|
+
|
263
|
+
process = @mng.get( pid )
|
264
|
+
assert_equals process.state, :RUNNING
|
265
|
+
assert_not_nil process.progress
|
266
|
+
assert_equals process.id, pid
|
267
|
+
|
268
|
+
# 実行完了を待つ
|
269
|
+
sleep 1 while @mng.get( pid ).state == :RUNNING
|
270
|
+
|
271
|
+
process = @mng.get( pid )
|
272
|
+
assert_equals process.state, :FINISHED
|
273
|
+
assert_not_nil process.progress
|
274
|
+
assert_equals process.id, pid
|
275
|
+
|
276
|
+
sleep 1
|
277
|
+
|
278
|
+
#別のプロセスが開始される。
|
279
|
+
process = @mng.get( pid2 )
|
280
|
+
assert_equals process.state, :RUNNING
|
281
|
+
assert_not_nil process.progress
|
282
|
+
assert_equals process.id, pid2
|
283
|
+
|
284
|
+
# 別のプロセスを追加して削除
|
285
|
+
pid3 = @mng.create_back_test( "test3", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
|
286
|
+
sleep 1
|
287
|
+
process = @mng.get( pid3 )
|
288
|
+
assert_equals process.state, :WAITING
|
289
|
+
assert_not_nil process.progress
|
290
|
+
assert_equals process.id, pid3
|
291
|
+
|
292
|
+
@mng.delete_back_test( pid3 )
|
293
|
+
assert_process_not_found(pid3)
|
294
|
+
|
295
|
+
sleep 1 while @mng.get( pid2 ).state == :RUNNING
|
296
|
+
|
297
|
+
process = @mng.get( pid2 )
|
298
|
+
assert_equals process.state, :FINISHED
|
299
|
+
assert_not_nil process.progress
|
300
|
+
assert_equals process.id, pid2
|
301
|
+
|
302
|
+
sleep 10
|
303
|
+
|
304
|
+
## 待機状態のまま再起動
|
305
|
+
# プロセスを追加
|
306
|
+
pid4 = @mng.create_back_test( "test4", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
|
307
|
+
sleep 10
|
308
|
+
|
309
|
+
#別のプロセスを追加
|
310
|
+
pid5 = @mng.create_back_test( "test5", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
|
311
|
+
|
312
|
+
process = @mng.get( pid4 )
|
313
|
+
assert_equals process.state, :RUNNING
|
314
|
+
assert_not_nil process.progress
|
315
|
+
assert_equals process.id, pid4
|
316
|
+
|
317
|
+
process = @mng.get( pid5 )
|
318
|
+
assert_equals process.state, :WAITING
|
319
|
+
assert_not_nil process.progress
|
320
|
+
assert_equals process.id, pid5
|
321
|
+
|
322
|
+
recreate_registry
|
323
|
+
@mng = @registry[:process_manager]
|
324
|
+
|
325
|
+
# 実行中のものも待機中のものもキャンセル状態になる。
|
326
|
+
process = @mng.get( pid4 )
|
327
|
+
assert_equals process.state, :CANCELED
|
328
|
+
assert_not_nil process.progress
|
329
|
+
assert_equals process.id, pid4
|
330
|
+
|
331
|
+
process = @mng.get( pid5)
|
332
|
+
assert_equals process.state, :CANCELED
|
333
|
+
assert_not_nil process.progress
|
334
|
+
assert_equals process.id, pid5
|
335
|
+
end
|
288
336
|
|
289
337
|
def recreate_registry
|
290
338
|
begin
|
@@ -292,7 +340,11 @@ class ProcessManagerTest < RUNIT::TestCase
|
|
292
340
|
begin
|
293
341
|
@registry.permitter.close
|
294
342
|
ensure
|
295
|
-
|
343
|
+
begin
|
344
|
+
@registry.client.close
|
345
|
+
ensure
|
346
|
+
@registry.server_logger.close
|
347
|
+
end
|
296
348
|
end
|
297
349
|
ensure
|
298
350
|
return @registry = JIJI::Registry.new(@dir , nil)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unageanu-jiji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masaya Yamauchi
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-26 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
description:
|
66
66
|
email: y-masaya@red.hot.co.jp
|
67
67
|
executables:
|
68
|
-
- jiji
|
68
|
+
- jiji
|
69
69
|
extensions: []
|
70
70
|
|
71
71
|
extra_rdoc_files: []
|
@@ -73,7 +73,7 @@ extra_rdoc_files: []
|
|
73
73
|
files:
|
74
74
|
- README
|
75
75
|
- ChangeLog
|
76
|
-
- bin/jiji
|
76
|
+
- bin/jiji
|
77
77
|
- html/css/calendar.css
|
78
78
|
- html/css/datatable.css
|
79
79
|
- html/css/default.css
|
@@ -102,17 +102,29 @@ files:
|
|
102
102
|
- html/img/button_close.gif
|
103
103
|
- html/img/button_close_gray.gif
|
104
104
|
- html/img/button_close_over.gif
|
105
|
+
- html/img/button_no.gif
|
106
|
+
- html/img/button_no_gray.gif
|
107
|
+
- html/img/button_no_over.gif
|
105
108
|
- html/img/button_ok.gif
|
106
109
|
- html/img/button_ok_gray.gif
|
107
110
|
- html/img/button_ok_over.gif
|
108
111
|
- html/img/button_remove.gif
|
109
112
|
- html/img/button_remove_gray.gif
|
110
113
|
- html/img/button_remove_over.gif
|
114
|
+
- html/img/button_save.gif
|
115
|
+
- html/img/button_save_gray.gif
|
116
|
+
- html/img/button_save_over.gif
|
111
117
|
- html/img/button_start.gif
|
112
118
|
- html/img/button_start_over.gif
|
113
119
|
- html/img/button_update.gif
|
114
120
|
- html/img/button_update_gray.gif
|
115
121
|
- html/img/button_update_over.gif
|
122
|
+
- html/img/button_update_s.gif
|
123
|
+
- html/img/button_update_s_gray.gif
|
124
|
+
- html/img/button_update_s_over.gif
|
125
|
+
- html/img/button_yes.gif
|
126
|
+
- html/img/button_yes_gray.gif
|
127
|
+
- html/img/button_yes_over.gif
|
116
128
|
- html/img/circle.gif
|
117
129
|
- html/img/delta.gif
|
118
130
|
- html/img/dialog_info.jpg
|
@@ -411,8 +423,9 @@ files:
|
|
411
423
|
- html/js/templates.js
|
412
424
|
- html/js/utils.js
|
413
425
|
- html/js/uuid.js
|
414
|
-
- html/js/W3CDTF.js
|
415
426
|
- html/swf/chart.swf
|
427
|
+
- base/agents/moving_average_agent.rb
|
428
|
+
- base/shared_lib/moving_average.rb
|
416
429
|
- lib/jiji/agent/agent.rb
|
417
430
|
- lib/jiji/agent/agent_manager.rb
|
418
431
|
- lib/jiji/agent/agent_registry.rb
|
@@ -441,13 +454,6 @@ files:
|
|
441
454
|
- lib/jiji/service/system_service.rb
|
442
455
|
- lib/jiji/service/trade_result_service.rb
|
443
456
|
- lib/jiji/single_click_client.rb
|
444
|
-
- lib/jiji/strategy/bm.rb
|
445
|
-
- lib/jiji/strategy/bollinger-bands.rb
|
446
|
-
- lib/jiji/strategy/common.rb
|
447
|
-
- lib/jiji/strategy/diff.rb
|
448
|
-
- lib/jiji/strategy/macd.rb
|
449
|
-
- lib/jiji/strategy/moving-average.rb
|
450
|
-
- lib/jiji/strategy/vector.rb
|
451
457
|
- lib/jiji/util/block_to_session.rb
|
452
458
|
- lib/jiji/util/cache.rb
|
453
459
|
- lib/jiji/util/csv_append_support.rb
|
@@ -622,7 +628,7 @@ files:
|
|
622
628
|
- test/service/test_RateService.rb
|
623
629
|
- test/testutils.rb
|
624
630
|
- test/test_AgentManager.rb
|
625
|
-
- test/
|
631
|
+
- test/test_AgentRegistry.rb
|
626
632
|
- test/test_BackTestCollector.rb
|
627
633
|
- test/test_BlockToSession.rb
|
628
634
|
- test/test_Collector.rb
|
@@ -729,7 +735,7 @@ test_files:
|
|
729
735
|
- test/service/test_RateService.rb
|
730
736
|
- test/testutils.rb
|
731
737
|
- test/test_AgentManager.rb
|
732
|
-
- test/
|
738
|
+
- test/test_AgentRegistry.rb
|
733
739
|
- test/test_BackTestCollector.rb
|
734
740
|
- test/test_BlockToSession.rb
|
735
741
|
- test/test_Collector.rb
|
data/bin/jiji.rb
DELETED
data/html/js/W3CDTF.js
DELETED
@@ -1,131 +0,0 @@
|
|
1
|
-
// Date/W3CDTF.js -- W3C Date and Time Formats
|
2
|
-
|
3
|
-
Date.W3CDTF = function ( dtf ) {
|
4
|
-
var dd = new Date();
|
5
|
-
dd.setW3CDTF = Date.W3CDTF.prototype.setW3CDTF;
|
6
|
-
dd.getW3CDTF = Date.W3CDTF.prototype.getW3CDTF;
|
7
|
-
if ( dtf ) this.setW3CDTF( dtf );
|
8
|
-
return dd;
|
9
|
-
};
|
10
|
-
|
11
|
-
Date.W3CDTF.VERSION = "0.04";
|
12
|
-
|
13
|
-
Date.W3CDTF.prototype.setW3CDTF = function( dtf ) {
|
14
|
-
var sp = dtf.split( /[^0-9]/ );
|
15
|
-
|
16
|
-
// invalid format
|
17
|
-
if ( sp.length < 6 || sp.length > 8 ) return;
|
18
|
-
|
19
|
-
// invalid time zone
|
20
|
-
if ( sp.length == 7 ) {
|
21
|
-
if ( dtf.charAt( dtf.length-1 ) != "Z" ) return;
|
22
|
-
}
|
23
|
-
|
24
|
-
// to numeric
|
25
|
-
for( var i=0; i<sp.length; i++ ) sp[i] = sp[i]-0;
|
26
|
-
|
27
|
-
// invalid range
|
28
|
-
if ( sp[0] < 1970 || // year
|
29
|
-
sp[1] < 1 || sp[1] > 12 || // month
|
30
|
-
sp[2] < 1 || sp[2] > 31 || // day
|
31
|
-
sp[3] < 0 || sp[3] > 23 || // hour
|
32
|
-
sp[4] < 0 || sp[4] > 59 || // min
|
33
|
-
sp[5] < 0 || sp[5] > 60 ) { // sec
|
34
|
-
return; // invalid date
|
35
|
-
}
|
36
|
-
|
37
|
-
// get UTC milli-second
|
38
|
-
var msec = Date.UTC( sp[0], sp[1]-1, sp[2], sp[3], sp[4], sp[5] );
|
39
|
-
|
40
|
-
// time zene offset
|
41
|
-
if ( sp.length == 8 ) {
|
42
|
-
if ( dtf.indexOf("+") < 0 ) sp[6] *= -1;
|
43
|
-
if ( sp[6] < -12 || sp[6] > 13 ) return; // time zone offset hour
|
44
|
-
if ( sp[7] < 0 || sp[7] > 59 ) return; // time zone offset min
|
45
|
-
msec -= (sp[6]*60+sp[7]) * 60000;
|
46
|
-
}
|
47
|
-
|
48
|
-
// set by milli-second;
|
49
|
-
return this.setTime( msec );
|
50
|
-
};
|
51
|
-
|
52
|
-
Date.W3CDTF.prototype.getW3CDTF = function() {
|
53
|
-
var year = this.getFullYear();
|
54
|
-
var mon = this.getMonth()+1;
|
55
|
-
var day = this.getDate();
|
56
|
-
var hour = this.getHours();
|
57
|
-
var min = this.getMinutes();
|
58
|
-
var sec = this.getSeconds();
|
59
|
-
|
60
|
-
// time zone
|
61
|
-
var tzos = this.getTimezoneOffset();
|
62
|
-
var tzpm = ( tzos > 0 ) ? "-" : "+";
|
63
|
-
if ( tzos < 0 ) tzos *= -1;
|
64
|
-
var tzhour = tzos / 60;
|
65
|
-
var tzmin = tzos % 60;
|
66
|
-
|
67
|
-
// sprintf( "%02d", ... )
|
68
|
-
if ( mon < 10 ) mon = "0"+mon;
|
69
|
-
if ( day < 10 ) day = "0"+day;
|
70
|
-
if ( hour < 10 ) hour = "0"+hour;
|
71
|
-
if ( min < 10 ) min = "0"+min;
|
72
|
-
if ( sec < 10 ) sec = "0"+sec;
|
73
|
-
if ( tzhour < 10 ) tzhour = "0"+tzhour;
|
74
|
-
if ( tzmin < 10 ) tzmin = "0"+tzmin;
|
75
|
-
var dtf = year+"-"+mon+"-"+day+"T"+hour+":"+min+":"+sec+tzpm+tzhour+":"+tzmin;
|
76
|
-
return dtf;
|
77
|
-
};
|
78
|
-
|
79
|
-
/*
|
80
|
-
|
81
|
-
=head1 NAME
|
82
|
-
|
83
|
-
Date.W3CDTF - W3C Date and Time Formats
|
84
|
-
|
85
|
-
=head1 SYNOPSIS
|
86
|
-
|
87
|
-
var dd = new Date.W3CDTF(); // now
|
88
|
-
document.write( "getW3CDTF: "+ dd.getW3CDTF() +"\n" );
|
89
|
-
|
90
|
-
dd.setW3CDTF( "2005-04-23T17:20:00+09:00" );
|
91
|
-
document.write( "toLocaleString: "+ dd.toLocaleString() +"\n" );
|
92
|
-
|
93
|
-
=head1 DESCRIPTION
|
94
|
-
|
95
|
-
This module understands the W3CDTF date/time format, an ISO 8601 profile,
|
96
|
-
defined by W3C. This format as the native date format of RSS 1.0.
|
97
|
-
It can be used to parse these formats in order to create the appropriate objects.
|
98
|
-
|
99
|
-
=head1 METHODS
|
100
|
-
|
101
|
-
=head2 new()
|
102
|
-
|
103
|
-
This constructor method creates a new Date object which has
|
104
|
-
following methods in addition to Date's all native methods.
|
105
|
-
|
106
|
-
=head2 setW3CDTF( "2006-02-15T19:40:00Z" )
|
107
|
-
|
108
|
-
This method parse a W3CDTF datetime string and sets it.
|
109
|
-
|
110
|
-
=head2 getW3CDTF()
|
111
|
-
|
112
|
-
This method returns a W3CDTF datetime string.
|
113
|
-
Its timezone is always local timezone configured on OS.
|
114
|
-
|
115
|
-
=head1 SEE ALSO
|
116
|
-
|
117
|
-
http://www.w3.org/TR/NOTE-datetime
|
118
|
-
|
119
|
-
=head1 AUTHOR
|
120
|
-
|
121
|
-
Yusuke Kawasaki http://www.kawa.net/
|
122
|
-
|
123
|
-
=head1 COPYRIGHT AND LICENSE
|
124
|
-
|
125
|
-
Copyright (c) 2005-2006 Yusuke Kawasaki. All rights reserved.
|
126
|
-
This program is free software; you can redistribute it and/or
|
127
|
-
modify it under the Artistic license. Or whatever license I choose,
|
128
|
-
which I will do instead of keeping this documentation like it is.
|
129
|
-
|
130
|
-
=cut
|
131
|
-
*/
|