drbqs 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/Gemfile +10 -7
  2. data/README.md +52 -11
  3. data/Rakefile +32 -10
  4. data/VERSION +1 -1
  5. data/bin/drbqs-manage +3 -93
  6. data/bin/drbqs-node +3 -89
  7. data/bin/drbqs-server +3 -117
  8. data/bin/drbqs-ssh +6 -0
  9. data/drbqs.gemspec +118 -97
  10. data/example/README.md +2 -2
  11. data/lib/drbqs/config/config.rb +88 -0
  12. data/lib/drbqs/config/process_list.rb +194 -0
  13. data/lib/drbqs/config/ssh_host.rb +41 -0
  14. data/lib/drbqs/{execute_node.rb → manage/execute_node.rb} +6 -4
  15. data/lib/drbqs/manage/manage.rb +100 -0
  16. data/lib/drbqs/manage/send_signal.rb +45 -0
  17. data/lib/drbqs/manage/ssh_execute.rb +23 -0
  18. data/lib/drbqs/manage/ssh_shell.rb +143 -0
  19. data/lib/drbqs/node/connection.rb +69 -0
  20. data/lib/drbqs/{client.rb → node/node.rb} +48 -18
  21. data/lib/drbqs/node/task_client.rb +94 -0
  22. data/lib/drbqs/server/acl_file.rb +15 -0
  23. data/lib/drbqs/server/check_alive.rb +23 -0
  24. data/lib/drbqs/server/history.rb +49 -0
  25. data/lib/drbqs/server/message.rb +142 -0
  26. data/lib/drbqs/server/node_list.rb +59 -0
  27. data/lib/drbqs/server/queue.rb +128 -0
  28. data/lib/drbqs/{server.rb → server/server.rb} +66 -74
  29. data/lib/drbqs/server/server_hook.rb +72 -0
  30. data/lib/drbqs/server/transfer_setting.rb +30 -0
  31. data/lib/drbqs/task/command_task.rb +43 -0
  32. data/lib/drbqs/{task.rb → task/task.rb} +18 -39
  33. data/lib/drbqs/{task_generator.rb → task/task_generator.rb} +2 -0
  34. data/lib/drbqs/utility/argument.rb +27 -0
  35. data/lib/drbqs/utility/command_line/command_base.rb +27 -0
  36. data/lib/drbqs/utility/command_line/command_manage.rb +121 -0
  37. data/lib/drbqs/utility/command_line/command_node.rb +103 -0
  38. data/lib/drbqs/utility/command_line/command_server.rb +165 -0
  39. data/lib/drbqs/utility/command_line/command_ssh.rb +126 -0
  40. data/lib/drbqs/utility/command_line.rb +15 -0
  41. data/lib/drbqs/utility/misc.rb +72 -0
  42. data/lib/drbqs/{server_define.rb → utility/server_define.rb} +23 -8
  43. data/lib/drbqs/utility/temporary.rb +49 -0
  44. data/lib/drbqs/{ssh/transfer.rb → utility/transfer/file_transfer.rb} +18 -58
  45. data/lib/drbqs/utility/transfer/transfer_client.rb +90 -0
  46. data/lib/drbqs.rb +10 -22
  47. data/spec/config/config_spec.rb +84 -0
  48. data/spec/config/process_list_spec.rb +149 -0
  49. data/spec/config/ssh_host_spec.rb +81 -0
  50. data/spec/integration_test/01_basic_usage_spec.rb +54 -0
  51. data/spec/integration_test/02_use_generator_spec.rb +53 -0
  52. data/spec/integration_test/03_use_temporary_file_spec.rb +26 -0
  53. data/spec/integration_test/04_use_unix_domain_spec.rb +34 -0
  54. data/spec/integration_test/05_server_exit_signal_spec.rb +23 -0
  55. data/spec/integration_test/06_node_exit_after_task_spec.rb +42 -0
  56. data/spec/integration_test/07_command_server_with_node_spec.rb +44 -0
  57. data/spec/integration_test/definition/server01.rb +20 -0
  58. data/spec/integration_test/definition/server02.rb +16 -0
  59. data/spec/integration_test/definition/task_obj_definition.rb +49 -0
  60. data/spec/manage/manage_spec.rb +33 -0
  61. data/spec/manage/send_signal_spec.rb +39 -0
  62. data/spec/{ssh_shell_spec.rb → manage/ssh_shell_spec.rb} +8 -8
  63. data/spec/node/connection_spec.rb +66 -0
  64. data/spec/node/task_client_spec.rb +212 -0
  65. data/spec/server/acl_file_spec.rb +9 -0
  66. data/spec/{server_check_alive_spec.rb → server/check_alive_spec.rb} +15 -11
  67. data/spec/{data → server/data}/acl.txt +0 -0
  68. data/spec/{history_spec.rb → server/history_spec.rb} +9 -5
  69. data/spec/server/message_spec.rb +195 -0
  70. data/spec/server/node_list_spec.rb +111 -0
  71. data/spec/server/queue_spec.rb +239 -0
  72. data/spec/{server_hook_spec.rb → server/server_hook_spec.rb} +23 -17
  73. data/spec/server/server_spec.rb +89 -0
  74. data/spec/server/transfer_setting_spec.rb +37 -0
  75. data/spec/spec_helper.rb +65 -0
  76. data/spec/task/file_transfer_spec.rb +107 -0
  77. data/spec/{task_generator_spec.rb → task/task_generator_spec.rb} +2 -2
  78. data/spec/{task_spec.rb → task/task_spec.rb} +3 -1
  79. data/spec/utility/argument_spec.rb +39 -0
  80. data/spec/utility/command_line/command_base_spec.rb +33 -0
  81. data/spec/utility/command_line/commands_spec.rb +15 -0
  82. data/spec/utility/misc_spec.rb +77 -0
  83. data/spec/utility/server_define_spec.rb +59 -0
  84. data/spec/utility/temporary_spec.rb +39 -0
  85. metadata +158 -93
  86. data/example/drbqs-manage-test.rb +0 -3
  87. data/example/drbqs-node-test.rb +0 -3
  88. data/example/drbqs-server-test.rb +0 -3
  89. data/lib/drbqs/acl_file.rb +0 -13
  90. data/lib/drbqs/config.rb +0 -98
  91. data/lib/drbqs/connection.rb +0 -67
  92. data/lib/drbqs/history.rb +0 -34
  93. data/lib/drbqs/manage.rb +0 -84
  94. data/lib/drbqs/message.rb +0 -119
  95. data/lib/drbqs/node_list.rb +0 -52
  96. data/lib/drbqs/queue.rb +0 -138
  97. data/lib/drbqs/server_hook.rb +0 -67
  98. data/lib/drbqs/ssh/host.rb +0 -26
  99. data/lib/drbqs/ssh/shell.rb +0 -139
  100. data/lib/drbqs/task_client.rb +0 -86
  101. data/lib/drbqs/utils.rb +0 -19
  102. data/spec/acl_file_spec.rb +0 -9
  103. data/spec/config_spec.rb +0 -14
  104. data/spec/connection_spec.rb +0 -49
  105. data/spec/manage_spec.rb +0 -57
  106. data/spec/message_spec.rb +0 -81
  107. data/spec/node_list_spec.rb +0 -68
  108. data/spec/queue_spec.rb +0 -59
  109. data/spec/server_define_spec.rb +0 -45
  110. data/spec/server_spec.rb +0 -56
  111. data/spec/task_client_spec.rb +0 -53
  112. data/spec/test/test1.rb +0 -13
  113. data/spec/test1_spec.rb +0 -80
  114. data/spec/test2_spec.rb +0 -69
  115. data/spec/transfer_spec.rb +0 -13
data/drbqs.gemspec CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{drbqs}
8
- s.version = "0.0.13"
8
+ s.version = "0.0.14"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Takayuki YAMAGUCHI"]
12
- s.date = %q{2011-04-23}
12
+ s.date = %q{2011-07-19}
13
13
  s.description = %q{Task queuing system over network that is implemented by dRuby.}
14
14
  s.email = %q{d@ytak.info}
15
- s.executables = ["drbqs-manage", "drbqs-node", "drbqs-server"]
15
+ s.executables = ["drbqs-manage", "drbqs-node", "drbqs-server", "drbqs-ssh"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE.txt",
18
18
  "README.md"
@@ -28,12 +28,10 @@ Gem::Specification.new do |s|
28
28
  "bin/drbqs-manage",
29
29
  "bin/drbqs-node",
30
30
  "bin/drbqs-server",
31
+ "bin/drbqs-ssh",
31
32
  "drbqs.gemspec",
32
33
  "example/README.md",
33
34
  "example/command/server_def.rb",
34
- "example/drbqs-manage-test.rb",
35
- "example/drbqs-node-test.rb",
36
- "example/drbqs-server-test.rb",
37
35
  "example/error/error.rb",
38
36
  "example/error/server_def.rb",
39
37
  "example/server/server.rb",
@@ -44,121 +42,144 @@ Gem::Specification.new do |s|
44
42
  "example/transfer/file.rb",
45
43
  "example/transfer/server_def.rb",
46
44
  "lib/drbqs.rb",
47
- "lib/drbqs/acl_file.rb",
48
- "lib/drbqs/client.rb",
49
- "lib/drbqs/config.rb",
50
- "lib/drbqs/connection.rb",
51
- "lib/drbqs/execute_node.rb",
52
- "lib/drbqs/history.rb",
53
- "lib/drbqs/manage.rb",
54
- "lib/drbqs/message.rb",
55
- "lib/drbqs/node_list.rb",
56
- "lib/drbqs/queue.rb",
57
- "lib/drbqs/server.rb",
58
- "lib/drbqs/server_define.rb",
59
- "lib/drbqs/server_hook.rb",
60
- "lib/drbqs/ssh/host.rb",
61
- "lib/drbqs/ssh/shell.rb",
62
- "lib/drbqs/ssh/transfer.rb",
63
- "lib/drbqs/task.rb",
64
- "lib/drbqs/task_client.rb",
65
- "lib/drbqs/task_generator.rb",
66
- "lib/drbqs/utils.rb",
67
- "spec/acl_file_spec.rb",
68
- "spec/config_spec.rb",
69
- "spec/connection_spec.rb",
70
- "spec/data/acl.txt",
71
- "spec/history_spec.rb",
72
- "spec/manage_spec.rb",
73
- "spec/message_spec.rb",
74
- "spec/node_list_spec.rb",
75
- "spec/queue_spec.rb",
76
- "spec/server_check_alive_spec.rb",
77
- "spec/server_define_spec.rb",
78
- "spec/server_hook_spec.rb",
79
- "spec/server_spec.rb",
45
+ "lib/drbqs/config/config.rb",
46
+ "lib/drbqs/config/process_list.rb",
47
+ "lib/drbqs/config/ssh_host.rb",
48
+ "lib/drbqs/manage/execute_node.rb",
49
+ "lib/drbqs/manage/manage.rb",
50
+ "lib/drbqs/manage/send_signal.rb",
51
+ "lib/drbqs/manage/ssh_execute.rb",
52
+ "lib/drbqs/manage/ssh_shell.rb",
53
+ "lib/drbqs/node/connection.rb",
54
+ "lib/drbqs/node/node.rb",
55
+ "lib/drbqs/node/task_client.rb",
56
+ "lib/drbqs/server/acl_file.rb",
57
+ "lib/drbqs/server/check_alive.rb",
58
+ "lib/drbqs/server/history.rb",
59
+ "lib/drbqs/server/message.rb",
60
+ "lib/drbqs/server/node_list.rb",
61
+ "lib/drbqs/server/queue.rb",
62
+ "lib/drbqs/server/server.rb",
63
+ "lib/drbqs/server/server_hook.rb",
64
+ "lib/drbqs/server/transfer_setting.rb",
65
+ "lib/drbqs/task/command_task.rb",
66
+ "lib/drbqs/task/task.rb",
67
+ "lib/drbqs/task/task_generator.rb",
68
+ "lib/drbqs/utility/argument.rb",
69
+ "lib/drbqs/utility/command_line.rb",
70
+ "lib/drbqs/utility/command_line/command_base.rb",
71
+ "lib/drbqs/utility/command_line/command_manage.rb",
72
+ "lib/drbqs/utility/command_line/command_node.rb",
73
+ "lib/drbqs/utility/command_line/command_server.rb",
74
+ "lib/drbqs/utility/command_line/command_ssh.rb",
75
+ "lib/drbqs/utility/misc.rb",
76
+ "lib/drbqs/utility/server_define.rb",
77
+ "lib/drbqs/utility/temporary.rb",
78
+ "lib/drbqs/utility/transfer/file_transfer.rb",
79
+ "lib/drbqs/utility/transfer/transfer_client.rb",
80
+ "spec/config/config_spec.rb",
81
+ "spec/config/process_list_spec.rb",
82
+ "spec/config/ssh_host_spec.rb",
83
+ "spec/integration_test/01_basic_usage_spec.rb",
84
+ "spec/integration_test/02_use_generator_spec.rb",
85
+ "spec/integration_test/03_use_temporary_file_spec.rb",
86
+ "spec/integration_test/04_use_unix_domain_spec.rb",
87
+ "spec/integration_test/05_server_exit_signal_spec.rb",
88
+ "spec/integration_test/06_node_exit_after_task_spec.rb",
89
+ "spec/integration_test/07_command_server_with_node_spec.rb",
90
+ "spec/integration_test/definition/server01.rb",
91
+ "spec/integration_test/definition/server02.rb",
92
+ "spec/integration_test/definition/task_obj_definition.rb",
93
+ "spec/manage/manage_spec.rb",
94
+ "spec/manage/send_signal_spec.rb",
95
+ "spec/manage/ssh_shell_spec.rb",
96
+ "spec/node/connection_spec.rb",
97
+ "spec/node/task_client_spec.rb",
98
+ "spec/server/acl_file_spec.rb",
99
+ "spec/server/check_alive_spec.rb",
100
+ "spec/server/data/acl.txt",
101
+ "spec/server/history_spec.rb",
102
+ "spec/server/message_spec.rb",
103
+ "spec/server/node_list_spec.rb",
104
+ "spec/server/queue_spec.rb",
105
+ "spec/server/server_hook_spec.rb",
106
+ "spec/server/server_spec.rb",
107
+ "spec/server/transfer_setting_spec.rb",
80
108
  "spec/spec_helper.rb",
81
- "spec/ssh_shell_spec.rb",
82
- "spec/task_client_spec.rb",
83
- "spec/task_generator_spec.rb",
84
- "spec/task_spec.rb",
85
- "spec/test/test1.rb",
86
- "spec/test1_spec.rb",
87
- "spec/test2_spec.rb",
88
- "spec/transfer_spec.rb"
109
+ "spec/task/file_transfer_spec.rb",
110
+ "spec/task/task_generator_spec.rb",
111
+ "spec/task/task_spec.rb",
112
+ "spec/utility/argument_spec.rb",
113
+ "spec/utility/command_line/command_base_spec.rb",
114
+ "spec/utility/command_line/commands_spec.rb",
115
+ "spec/utility/misc_spec.rb",
116
+ "spec/utility/server_define_spec.rb",
117
+ "spec/utility/temporary_spec.rb"
89
118
  ]
90
119
  s.homepage = %q{http://github.com/ytaka/drbqs}
91
120
  s.licenses = ["GPL3"]
92
121
  s.require_paths = ["lib"]
93
122
  s.rubygems_version = %q{1.6.2}
94
123
  s.summary = %q{dRuby Queueing System}
95
- s.test_files = [
96
- "spec/acl_file_spec.rb",
97
- "spec/config_spec.rb",
98
- "spec/connection_spec.rb",
99
- "spec/history_spec.rb",
100
- "spec/manage_spec.rb",
101
- "spec/message_spec.rb",
102
- "spec/node_list_spec.rb",
103
- "spec/queue_spec.rb",
104
- "spec/server_check_alive_spec.rb",
105
- "spec/server_define_spec.rb",
106
- "spec/server_hook_spec.rb",
107
- "spec/server_spec.rb",
108
- "spec/spec_helper.rb",
109
- "spec/ssh_shell_spec.rb",
110
- "spec/task_client_spec.rb",
111
- "spec/task_generator_spec.rb",
112
- "spec/task_spec.rb",
113
- "spec/test/test1.rb",
114
- "spec/test1_spec.rb",
115
- "spec/test2_spec.rb",
116
- "spec/transfer_spec.rb"
117
- ]
118
124
 
119
125
  if s.respond_to? :specification_version then
120
126
  s.specification_version = 3
121
127
 
122
128
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
123
- s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
124
- s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
125
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
126
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
129
+ s.add_development_dependency(%q<rspec>, [">= 2.6.0"])
130
+ s.add_development_dependency(%q<yard>, [">= 0.7.2"])
131
+ s.add_development_dependency(%q<bundler>, [">= 1.0.15"])
132
+ s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
127
133
  s.add_development_dependency(%q<rcov>, [">= 0"])
128
- s.add_development_dependency(%q<filename>, [">= 0.0.5"])
129
- s.add_development_dependency(%q<net-ssh>, [">= 2.1.3"])
130
- s.add_development_dependency(%q<net-ssh-shell>, [">= 0.1.0"])
134
+ s.add_development_dependency(%q<filename>, [">= 0.1.0"])
135
+ s.add_development_dependency(%q<user_config>, [">= 0.0.1"])
136
+ s.add_development_dependency(%q<net-ssh>, [">= 2.1.4"])
137
+ s.add_development_dependency(%q<net-ssh-shell>, [">= 0.2.0"])
138
+ s.add_development_dependency(%q<net-sftp>, [">= 2.0.5"])
139
+ s.add_development_dependency(%q<sys-proctable>, [">= 0"])
140
+ s.add_runtime_dependency(%q<filename>, [">= 0.1.0"])
141
+ s.add_runtime_dependency(%q<user_config>, [">= 0.0.2"])
131
142
  s.add_runtime_dependency(%q<net-ssh>, [">= 2.1.3"])
132
143
  s.add_runtime_dependency(%q<net-ssh-shell>, [">= 0.1.0"])
133
- s.add_runtime_dependency(%q<filename>, [">= 0.0.5"])
134
- s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
144
+ s.add_runtime_dependency(%q<net-sftp>, [">= 2.0.5"])
145
+ s.add_runtime_dependency(%q<sys-proctable>, [">= 0"])
135
146
  else
136
- s.add_dependency(%q<rspec>, [">= 2.5.0"])
137
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
138
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
139
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
147
+ s.add_dependency(%q<rspec>, [">= 2.6.0"])
148
+ s.add_dependency(%q<yard>, [">= 0.7.2"])
149
+ s.add_dependency(%q<bundler>, [">= 1.0.15"])
150
+ s.add_dependency(%q<jeweler>, [">= 1.6.2"])
140
151
  s.add_dependency(%q<rcov>, [">= 0"])
141
- s.add_dependency(%q<filename>, [">= 0.0.5"])
142
- s.add_dependency(%q<net-ssh>, [">= 2.1.3"])
143
- s.add_dependency(%q<net-ssh-shell>, [">= 0.1.0"])
152
+ s.add_dependency(%q<filename>, [">= 0.1.0"])
153
+ s.add_dependency(%q<user_config>, [">= 0.0.1"])
154
+ s.add_dependency(%q<net-ssh>, [">= 2.1.4"])
155
+ s.add_dependency(%q<net-ssh-shell>, [">= 0.2.0"])
156
+ s.add_dependency(%q<net-sftp>, [">= 2.0.5"])
157
+ s.add_dependency(%q<sys-proctable>, [">= 0"])
158
+ s.add_dependency(%q<filename>, [">= 0.1.0"])
159
+ s.add_dependency(%q<user_config>, [">= 0.0.2"])
144
160
  s.add_dependency(%q<net-ssh>, [">= 2.1.3"])
145
161
  s.add_dependency(%q<net-ssh-shell>, [">= 0.1.0"])
146
- s.add_dependency(%q<filename>, [">= 0.0.5"])
147
- s.add_dependency(%q<rspec>, [">= 2.5.0"])
162
+ s.add_dependency(%q<net-sftp>, [">= 2.0.5"])
163
+ s.add_dependency(%q<sys-proctable>, [">= 0"])
148
164
  end
149
165
  else
150
- s.add_dependency(%q<rspec>, [">= 2.5.0"])
151
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
152
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
153
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
166
+ s.add_dependency(%q<rspec>, [">= 2.6.0"])
167
+ s.add_dependency(%q<yard>, [">= 0.7.2"])
168
+ s.add_dependency(%q<bundler>, [">= 1.0.15"])
169
+ s.add_dependency(%q<jeweler>, [">= 1.6.2"])
154
170
  s.add_dependency(%q<rcov>, [">= 0"])
155
- s.add_dependency(%q<filename>, [">= 0.0.5"])
156
- s.add_dependency(%q<net-ssh>, [">= 2.1.3"])
157
- s.add_dependency(%q<net-ssh-shell>, [">= 0.1.0"])
171
+ s.add_dependency(%q<filename>, [">= 0.1.0"])
172
+ s.add_dependency(%q<user_config>, [">= 0.0.1"])
173
+ s.add_dependency(%q<net-ssh>, [">= 2.1.4"])
174
+ s.add_dependency(%q<net-ssh-shell>, [">= 0.2.0"])
175
+ s.add_dependency(%q<net-sftp>, [">= 2.0.5"])
176
+ s.add_dependency(%q<sys-proctable>, [">= 0"])
177
+ s.add_dependency(%q<filename>, [">= 0.1.0"])
178
+ s.add_dependency(%q<user_config>, [">= 0.0.2"])
158
179
  s.add_dependency(%q<net-ssh>, [">= 2.1.3"])
159
180
  s.add_dependency(%q<net-ssh-shell>, [">= 0.1.0"])
160
- s.add_dependency(%q<filename>, [">= 0.0.5"])
161
- s.add_dependency(%q<rspec>, [">= 2.5.0"])
181
+ s.add_dependency(%q<net-sftp>, [">= 2.0.5"])
182
+ s.add_dependency(%q<sys-proctable>, [">= 0"])
162
183
  end
163
184
  end
164
185
 
data/example/README.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  We execute server by the following command:
6
6
 
7
- ruby drbqs-server-test.rb sum/server_def.rb
7
+ ../bin/drbqs-server sum/server_def.rb
8
8
 
9
9
  For nodes we type the following command:
10
10
 
11
- ruby drbqs-client-test.rb -l sum/sum.rb --log-stdout
11
+ ../bin/drbqs-node -l sum/sum.rb --log-stdout
@@ -0,0 +1,88 @@
1
+ require 'user_config'
2
+ require 'drbqs/config/ssh_host'
3
+ require 'drbqs/config/process_list'
4
+
5
+ module DRbQS
6
+
7
+ ACL_DEFAULT_PATH = 'acl.txt'
8
+ ACL_SAMPLE_PATH = 'acl.txt.sample'
9
+ HOST_FILE_DIRECTORY = 'host'
10
+ HOST_FILE_SAMPLE_PATH = 'host.yaml.sample'
11
+ SHELL_FILE_DIRECTORY = 'shell'
12
+ SHELL_BASHRC = 'bashrc'
13
+
14
+ class Config
15
+ class Directory < UserConfig
16
+ end
17
+
18
+ DRBQS_CONFIG_DIRECTORY = '.drbqs'
19
+
20
+ @@home_directory = nil
21
+
22
+ def self.set_home_directory(path)
23
+ @@home_directory = File.expand_path(path)
24
+ end
25
+
26
+ def self.get_home_directory
27
+ @@home_directory || ENV['HOME']
28
+ end
29
+
30
+ ACL_SAMPLE =<<SAMPLE
31
+ deny all
32
+ allow localhost
33
+ allow 127.0.0.1
34
+ SAMPLE
35
+
36
+ HOST_YAML_SAMPLE =<<SAMPLE
37
+ ---
38
+ :dest: user@example.com
39
+ :dir:
40
+ :shell: bash --noprofile --init-file ~/.drbqs/shell/bashrc
41
+ :rvm:
42
+ :rvm_init: ~/.rvm/scripts/rvm
43
+ :output:
44
+ SAMPLE
45
+
46
+ BASHRC_SAMPLE = <<SAMPLE
47
+ HISTFILE=$HOME/.drbqs/shell/bash_history
48
+ HISTSIZE=10000
49
+ HISTFILESIZE=20000
50
+ SAMPLE
51
+
52
+ attr_reader :directory, :list, :ssh_host
53
+
54
+ def initialize
55
+ home = self.class.get_home_directory
56
+ @directory = DRbQS::Config::Directory.new(DRBQS_CONFIG_DIRECTORY, :home => home)
57
+ @list = DRbQS::ProcessList.new(File.join(home, DRBQS_CONFIG_DIRECTORY))
58
+ @ssh_host = DRbQS::Config::SSHHost.new(@directory.file_path(HOST_FILE_DIRECTORY))
59
+ end
60
+
61
+ def directory_path
62
+ @directory.directory
63
+ end
64
+
65
+ def save_sample
66
+ @directory.open(ACL_SAMPLE_PATH, 'w') do |f|
67
+ f.print ACL_SAMPLE
68
+ end
69
+ @directory.open(File.join(HOST_FILE_DIRECTORY, HOST_FILE_SAMPLE_PATH), 'w') do |f|
70
+ f.print HOST_YAML_SAMPLE
71
+ end
72
+ @directory.open(File.join(SHELL_FILE_DIRECTORY, SHELL_BASHRC), 'w') do |f|
73
+ f.print BASHRC_SAMPLE
74
+ end
75
+ end
76
+
77
+ # Return path of ACL file if '.drbqs/acl.txt' exists.
78
+ def get_acl_file
79
+ @directory.exist?(ACL_DEFAULT_PATH)
80
+ end
81
+
82
+ def get_shell_file_directory
83
+ @directory.file_path(SHELL_FILE_DIRECTORY)
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,194 @@
1
+ module DRbQS
2
+ class ProcessList
3
+ PROCESS_ROOT_DIRECTORY = 'process'
4
+ SERVER_DIRECTORY = 'server'
5
+ NODE_DIRECTORY = 'node'
6
+
7
+ class ListDirectory
8
+ def initialize(dir)
9
+ @directory = dir
10
+ FileUtils.mkdir_p(@directory) unless File.exist?(@directory)
11
+ end
12
+
13
+ def path_under_directory(file)
14
+ File.join(@directory, file)
15
+ end
16
+ private :path_under_directory
17
+
18
+ # If +file+ exists then this method returns false.
19
+ # Otherwise, return true.
20
+ def save_file(file, data)
21
+ path = path_under_directory(file)
22
+ if File.exist?(path)
23
+ false
24
+ else
25
+ open(path, 'w') do |f|
26
+ f.print data.to_yaml
27
+ end
28
+ true
29
+ end
30
+ end
31
+ private :save_file
32
+
33
+ # If +file+ does not exist then this method returns nil.
34
+ def load_file(file)
35
+ path = path_under_directory(file)
36
+ if File.exist?(path)
37
+ YAML.load_file(path)
38
+ else
39
+ nil
40
+ end
41
+ end
42
+ private :load_file
43
+
44
+ def delete_file(file)
45
+ path = path_under_directory(file)
46
+ FileUtils.remove(path) if File.exist?(path)
47
+ end
48
+ private :delete_file
49
+
50
+ def entries
51
+ Dir.entries(@directory).delete_if do |dir|
52
+ /^\.+$/ =~ dir
53
+ end
54
+ end
55
+ private :entries
56
+
57
+ def server_of_key_exist?(uri, key)
58
+ if data = get(uri)
59
+ return data[:key] == key
60
+ end
61
+ false
62
+ end
63
+ end
64
+
65
+ class Server < ListDirectory
66
+ def uri_to_file(uri)
67
+ case uri
68
+ when /^druby.*:(\d+)$/
69
+ "druby_#{Regexp.last_match[1]}.yaml"
70
+ when /^drbunix:(.*)$/
71
+ "drbunix#{Regexp.last_match[1].gsub(/\//, '_')}.yaml"
72
+ else
73
+ raise ArgumentError, "Invalid uri of drbqs server: #{uri}"
74
+ end
75
+ end
76
+ private :uri_to_file
77
+
78
+ def file_to_uri(file)
79
+ s = file.sub(/\.yaml$/, '')
80
+ case s
81
+ when /^druby/
82
+ s.sub(/_/, '://:')
83
+ when /^drbunix$/
84
+ s.gsub(/_/, '/')
85
+ else
86
+ raise ArgumentError, "Invalid file name in process list: #{file}"
87
+ end
88
+ end
89
+ private :file_to_uri
90
+
91
+ def list
92
+ h = {}
93
+ entries.each do |file|
94
+ h[file_to_uri(file)] = load_file(file)
95
+ end
96
+ h
97
+ end
98
+
99
+ # If file exists then this method overwrites the file.
100
+ def save(uri, data)
101
+ unless save_file(uri_to_file(uri), data)
102
+ delete(uri)
103
+ save(uri, data)
104
+ end
105
+ end
106
+
107
+ def get(uri)
108
+ load_file(uri_to_file(uri))
109
+ end
110
+
111
+ def delete(uri)
112
+ delete_file(uri_to_file(uri))
113
+ end
114
+
115
+ def clear_process_not_exist
116
+ list.each do |uri, data|
117
+ if !DRbQS::Misc.process_running_normally?(data[:pid]) || !DRbQS::Manage.new(:uri => uri).server_respond?
118
+ delete(uri)
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ class Node < ListDirectory
125
+ def pid_to_file(pid)
126
+ sprintf("%010d.yaml", pid)
127
+ end
128
+ private :pid_to_file
129
+
130
+ def file_to_pid(file)
131
+ file.sub(/\.yaml$/, '').to_i
132
+ end
133
+ private :file_to_pid
134
+
135
+ def list
136
+ h = {}
137
+ entries.each do |file|
138
+ h[file_to_pid(file)] = load_file(file)
139
+ end
140
+ h
141
+ end
142
+
143
+ # If file exists then this method overwrites the file.
144
+ def save(pid, data)
145
+ unless save_file(pid_to_file(pid), data)
146
+ delete(pid)
147
+ save(pid, data)
148
+ end
149
+ end
150
+
151
+ def get(pid)
152
+ load_file(pid_to_file(pid))
153
+ end
154
+
155
+ def delete(pid)
156
+ delete_file(pid_to_file(pid))
157
+ end
158
+
159
+ def clear_process_not_exist
160
+ server = Hash.new do |h, k|
161
+ h[k] = Array.new
162
+ end
163
+ list.each do |pid, data|
164
+ if DRbQS::Misc.process_running_normally?(pid)
165
+ server[data[:uri]] << pid
166
+ else
167
+ delete(pid)
168
+ end
169
+ end
170
+ server.each do |server_uri, pid_ary|
171
+ unless DRbQS::Manage.new(:uri => server_uri).server_respond?
172
+ pid_ary.each do |pid|
173
+ delete(pid)
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ attr_reader :root, :server, :node
181
+
182
+ def initialize(home)
183
+ hostname = Socket.gethostname
184
+ @root = File.expand_path(File.join(home, PROCESS_ROOT_DIRECTORY))
185
+ @server = DRbQS::ProcessList::Server.new(File.join(@root, SERVER_DIRECTORY, hostname))
186
+ @node = DRbQS::ProcessList::Node.new(File.join(@root, NODE_DIRECTORY, hostname))
187
+ end
188
+
189
+ def clear_process_not_exist
190
+ @server.clear_process_not_exist
191
+ @node.clear_process_not_exist
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,41 @@
1
+ module DRbQS
2
+ class Config
3
+ class SSHHost
4
+ def initialize(dir)
5
+ @dir = File.expand_path(dir)
6
+ end
7
+
8
+ def config_files
9
+ (Dir.glob("#{@dir}/*.yaml") + Dir.glob("#{@dir}/*.yml")).sort
10
+ end
11
+ private :config_files
12
+
13
+ def config_names
14
+ config_files.map do |s|
15
+ File.basename(s).sub(/\.ya?ml$/, '')
16
+ end
17
+ end
18
+
19
+ def find_file(name)
20
+ config_files.find do |s|
21
+ File.basename(s).sub(/\.ya?ml$/, '') == name
22
+ end
23
+ end
24
+ private :find_file
25
+
26
+ def get_path(name)
27
+ name = name.to_s
28
+ name.size > 0 && find_file(name)
29
+ end
30
+
31
+ # +name+ is file name without extension.
32
+ def get_options(name)
33
+ if path = get_path(name)
34
+ return [path, YAML.load_file(path)]
35
+ end
36
+ [nil, {}]
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -1,6 +1,8 @@
1
1
  module DRbQS
2
2
 
3
3
  class ExecuteNode
4
+ attr_reader :pid
5
+
4
6
  def initialize(uri, log_prefix, log_level)
5
7
  @uri = uri
6
8
  @log_level = log_level
@@ -24,9 +26,9 @@ module DRbQS
24
26
 
25
27
  def create_process
26
28
  @pid << fork do
27
- client = DRbQS::Client.new(@uri, :log_level => @log_level, :log_file => get_log_file)
28
- client.connect
29
- client.calculate
29
+ node = DRbQS::Node.new(@uri, :log_level => @log_level, :log_file => get_log_file)
30
+ node.connect
31
+ node.calculate
30
32
  end
31
33
  end
32
34
  private :create_process
@@ -39,7 +41,7 @@ module DRbQS
39
41
  end
40
42
 
41
43
  def wait
42
- Process.waitall
44
+ Process.waitall
43
45
  end
44
46
  end
45
47