appswarm 0.0.1

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.
Files changed (305) hide show
  1. data/.autotest +124 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +304 -0
  4. data/README.txt +373 -0
  5. data/Rakefile +153 -0
  6. data/TODO +7 -0
  7. data/apps/README.txt +17 -0
  8. data/apps/admin/admin.rb +79 -0
  9. data/apps/admin/controllers/admin.rb +81 -0
  10. data/apps/admin/controllers/settings.rb +63 -0
  11. data/apps/admin/controllers/users.rb +3 -0
  12. data/apps/admin/features/access.feature +21 -0
  13. data/apps/admin/features/mountLocal.feature +12 -0
  14. data/apps/admin/features/settings.feature +68 -0
  15. data/apps/admin/features/startApps.feature +27 -0
  16. data/apps/admin/layouts/main.rhtml +10 -0
  17. data/apps/admin/lib/settings.rb +52 -0
  18. data/apps/admin/static/admin.css +23 -0
  19. data/apps/admin/views/_log.rhtml +21 -0
  20. data/apps/admin/views/index.rhtml +43 -0
  21. data/apps/admin/views/info.rhtml +7 -0
  22. data/apps/admin/views/settings.rhtml +9 -0
  23. data/apps/admin/views/settings/_http_app.rhtml +15 -0
  24. data/apps/admin/views/settings/_web_server.rhtml +32 -0
  25. data/apps/admin/views/settings/index.rhtml +3 -0
  26. data/apps/admin/views/users/index.rhtml +6 -0
  27. data/apps/application_provider/application_provider.rb +11 -0
  28. data/apps/blog/blog.rb +27 -0
  29. data/apps/blog/controllers/blog.rb +29 -0
  30. data/apps/blog/views/index.rhtml +27 -0
  31. data/apps/browser_starter/browser_starter.rb +32 -0
  32. data/apps/crypto/crypto.rb +47 -0
  33. data/apps/crypto/crypto_rsa.rb +102 -0
  34. data/apps/crypto/spec/crypto_spec.rb +10 -0
  35. data/apps/directory_service/directory_service.rb +107 -0
  36. data/apps/directory_service/net_application.rb +92 -0
  37. data/apps/directory_service/spec/directory_service_spec.rb +36 -0
  38. data/apps/directory_service/spec/net_application_spec.rb +3 -0
  39. data/apps/global_application_interface/global_application.rb +52 -0
  40. data/apps/global_application_interface/global_application_interface.rb +84 -0
  41. data/apps/global_application_interface/spec/app_api_spec.rb +5 -0
  42. data/apps/global_tuple_space/global_tuple_space.rb +27 -0
  43. data/apps/global_web_proxy/features/session_handling.feature +7 -0
  44. data/apps/global_web_proxy/global_web_proxy.rb +221 -0
  45. data/apps/global_web_proxy/proxy/HTTPProxyServer-Dateien/rdoc-style.css +208 -0
  46. data/apps/global_web_proxy/proxy/HTTPProxyServer.html +566 -0
  47. data/apps/global_web_proxy/proxy/dnstest.rb +30 -0
  48. data/apps/global_web_proxy/proxy/proxy.rb +86 -0
  49. data/apps/global_web_proxy/proxy/wiki.html +267 -0
  50. data/apps/global_web_proxy/proxy/wiki.rb +115 -0
  51. data/apps/global_web_proxy/spec/res1 +112 -0
  52. data/apps/global_web_proxy/spec/res2 +125 -0
  53. data/apps/global_web_proxy/spec/web_proxy_spec.rb +88 -0
  54. data/apps/global_web_server/global_web_server.rb +120 -0
  55. data/apps/global_web_server/global_web_servlet.rb +6 -0
  56. data/apps/hello_world/controllers/hello_world.rb +11 -0
  57. data/apps/hello_world/features/show_on_local_web_server.feature +44 -0
  58. data/apps/hello_world/features/starting_apps.feature +6 -0
  59. data/apps/hello_world/features/through_global.feature +12 -0
  60. data/apps/hello_world/hello_world.rb +3 -0
  61. data/apps/hello_world/views/get.rhtml +10 -0
  62. data/apps/hello_world/views/index.rhtml +9 -0
  63. data/apps/hello_world/views/post.rhtml +10 -0
  64. data/apps/home/controllers/home.rb +11 -0
  65. data/apps/home/home.rb +12 -0
  66. data/apps/home/layouts/main.rhtml +16 -0
  67. data/apps/home/static/Zeichnung.svg +240 -0
  68. data/apps/home/static/home.css +134 -0
  69. data/apps/home/static/menu.css +99 -0
  70. data/apps/home/views/_appInfo.rhtml +22 -0
  71. data/apps/home/views/_dummy_fill.rhtml +3 -0
  72. data/apps/home/views/_info.rhtml +6 -0
  73. data/apps/home/views/_menu.rhtml +17 -0
  74. data/apps/home/views/index.rhtml +4 -0
  75. data/apps/home/views/overview.rhtml +2 -0
  76. data/apps/local_chunk_store/chunk_store.rb +15 -0
  77. data/apps/local_chunk_store/local_chunk_store.rb +123 -0
  78. data/apps/local_chunk_store/spec/local_chunk_store_spec.rb +30 -0
  79. data/apps/local_file_store/app_configuration.rb +78 -0
  80. data/apps/local_file_store/app_file_store.rb +32 -0
  81. data/apps/local_file_store/cached_file_store.rb +94 -0
  82. data/apps/local_file_store/features/testbed_handling_of_directories.feature +20 -0
  83. data/apps/local_file_store/local_file_store.rb +47 -0
  84. data/apps/local_file_store/spec/app_configuration_spec.rb +30 -0
  85. data/apps/local_file_store/spec/local_file_store_spec.rb +54 -0
  86. data/apps/local_object_storage/lib/cell.rb +29 -0
  87. data/apps/local_object_storage/lib/cellmgr.rb +57 -0
  88. data/apps/local_object_storage/lib/index.rb +43 -0
  89. data/apps/local_object_storage/lib/marshal.rb +96 -0
  90. data/apps/local_object_storage/lib/pagefile.rb +6 -0
  91. data/apps/local_object_storage/lib/persistent_object.rb +126 -0
  92. data/apps/local_object_storage/local_object_storage.rb +148 -0
  93. data/apps/local_object_storage/spec/local_object_storage_spec.rb +123 -0
  94. data/apps/local_secure_file_store/local_secure_file_store.rb +64 -0
  95. data/apps/local_secure_file_store/spec/local_secure_file_store_spec.rb +23 -0
  96. data/apps/local_tuple_space/local_tuple_space.rb +92 -0
  97. data/apps/local_tuple_space/spec/tuple_space_spec.rb +25 -0
  98. data/apps/local_web_server/features/parsing_args.feature +18 -0
  99. data/apps/local_web_server/local_web_server.rb +166 -0
  100. data/apps/logger/logger.rb +27 -0
  101. data/apps/master/master.rb +46 -0
  102. data/apps/master/spec/master_spec.rb +31 -0
  103. data/apps/my_spec_spec.rb +15 -0
  104. data/apps/name_service/name_service.rb +75 -0
  105. data/apps/name_service/spec/name_service_spec.rb +51 -0
  106. data/apps/network_discovery/network_discovery.rb +45 -0
  107. data/apps/network_discovery_localstore/network_discovery_localstore.rb +20 -0
  108. data/apps/network_discovery_udp/network_discovery_udp.rb +51 -0
  109. data/apps/network_lookup/network_lookup.rb +61 -0
  110. data/apps/network_node/abstract_node.rb +104 -0
  111. data/apps/network_node/drb_node.rb +90 -0
  112. data/apps/network_node/network_app.rb +9 -0
  113. data/apps/network_node/network_node.rb +471 -0
  114. data/apps/network_node/remote_service.rb +45 -0
  115. data/apps/network_node/secure_node.rb +125 -0
  116. data/apps/network_node/spec/drb_spec.rb +41 -0
  117. data/apps/network_node/spec/network_node_spec_not.rb +264 -0
  118. data/apps/new_network_node/new_network_node.rb +427 -0
  119. data/apps/new_network_node/spec/new_network_node_spec.rb +186 -0
  120. data/apps/node_broadcast/node_broadcast.rb +167 -0
  121. data/apps/node_broadcast/spec/node_broadcast_spec.rb +59 -0
  122. data/apps/permaspace/permaspace.rb +47 -0
  123. data/apps/plaindb/lib/btree.rb +38 -0
  124. data/apps/plaindb/plaindb.rb +199 -0
  125. data/apps/plaindb/spec/table_write_spec.rb +36 -0
  126. data/apps/routed_network/routed_network.rb +23 -0
  127. data/apps/routed_network/spec/routed_network_spec.rb +17 -0
  128. data/apps/session_manager/session_manager.rb +18 -0
  129. data/apps/spec_output.html +222 -0
  130. data/apps/todo/controllers/todo.rb +87 -0
  131. data/apps/todo/model/comment.rb +10 -0
  132. data/apps/todo/model/project.rb +20 -0
  133. data/apps/todo/model/todo.rb +16 -0
  134. data/apps/todo/model/user.rb +5 -0
  135. data/apps/todo/todo.rb +21 -0
  136. data/apps/todo/views/_commentList.rhtml +7 -0
  137. data/apps/todo/views/_createProject.rhtml +5 -0
  138. data/apps/todo/views/_partList.rhtml +12 -0
  139. data/apps/todo/views/_projectList.rhtml +16 -0
  140. data/apps/todo/views/edit.rhtml +11 -0
  141. data/apps/todo/views/editPart.rhtml +10 -0
  142. data/apps/todo/views/index.rhtml +2 -0
  143. data/apps/todo/views/question.rhtml +4 -0
  144. data/apps/transparent_network/transparent_network.rb +7 -0
  145. data/apps/udp_network/big_transfer.rb +97 -0
  146. data/apps/udp_network/features/information.feature +7 -0
  147. data/apps/udp_network/message_queue.rb +84 -0
  148. data/apps/udp_network/network_interface_api.rb +39 -0
  149. data/apps/udp_network/qos_queue.rb +186 -0
  150. data/apps/udp_network/simple_api.rb +180 -0
  151. data/apps/udp_network/spec/big_transfer_spec.rb +0 -0
  152. data/apps/udp_network/spec/qos_queue_spec.rb +99 -0
  153. data/apps/udp_network/spec/simple_api_spec.rb +35 -0
  154. data/apps/udp_network/spec/udp_network_spec.rb +115 -0
  155. data/apps/udp_network/spec/udp_transceiver_spec.rb +90 -0
  156. data/apps/udp_network/udp_network.rb +196 -0
  157. data/apps/udp_network/udp_transceiver.rb +329 -0
  158. data/apps/wiki/controllers/wiki.rb +56 -0
  159. data/apps/wiki/features/editing.feature +21 -0
  160. data/apps/wiki/layouts/main.rhtml +18 -0
  161. data/apps/wiki/lib/media_wiki_html.rb +35 -0
  162. data/apps/wiki/lib/wikicreole.rb +2147 -0
  163. data/apps/wiki/lib/wikicreole.tt +135 -0
  164. data/apps/wiki/lib/wikitest.rb +158 -0
  165. data/apps/wiki/lib/wikitest.tt +17 -0
  166. data/apps/wiki/model/menu.rb +15 -0
  167. data/apps/wiki/model/page.rb +31 -0
  168. data/apps/wiki/spec/wiki_creole_spec.rb +20 -0
  169. data/apps/wiki/spec/wiki_spec.rb +19 -0
  170. data/apps/wiki/static/Zeichnung.svg +240 -0
  171. data/apps/wiki/static/home.css +134 -0
  172. data/apps/wiki/static/mainMenu.css +32 -0
  173. data/apps/wiki/static/menu.css +99 -0
  174. data/apps/wiki/views/_mainMenu.rhtml +3 -0
  175. data/apps/wiki/views/_menu.rhtml +13 -0
  176. data/apps/wiki/views/edit.rhtml +13 -0
  177. data/apps/wiki/views/index.rhtml +2 -0
  178. data/apps/wiki/views/save.rhtml +1 -0
  179. data/apps/wiki/wiki.rb +17 -0
  180. data/bin/appswarm +47 -0
  181. data/cucumber.yml +2 -0
  182. data/data/PermaspaceApp/AFS_WikiApp_wiki_config +6 -0
  183. data/data/draft.txt +63 -0
  184. data/docs/appswarm_motivation.graffle +0 -0
  185. data/docs/appswarm_pics.graffle/QuickLook/Preview.pdf +0 -0
  186. data/docs/appswarm_pics.graffle/QuickLook/Thumbnail.tiff +0 -0
  187. data/docs/appswarm_pics.graffle/data.plist +63494 -0
  188. data/docs/appswarm_pics.graffle/image1.tiff +0 -0
  189. data/docs/appswarm_pics.graffle/image2.tif +0 -0
  190. data/docs/appswarm_pics.graffle/image3.tif +0 -0
  191. data/docs/appswarm_pics.graffle/image4.tif +0 -0
  192. data/docs/appswarm_pics.graffle/image5.tiff +0 -0
  193. data/docs/routing.graffle +0 -0
  194. data/features/step_definitions/appstart_steps.rb +28 -0
  195. data/features/step_definitions/cluster_steps.rb +18 -0
  196. data/features/step_definitions/testbed_steps.rb +64 -0
  197. data/features/step_definitions/webapp_steps.rb +257 -0
  198. data/features/support/env.rb +7 -0
  199. data/lib/appswarm.rb +127 -0
  200. data/lib/appswarm/README.txt +67 -0
  201. data/lib/appswarm/app_config.rb +19 -0
  202. data/lib/appswarm/application.rb +267 -0
  203. data/lib/appswarm/breaking_mutex.rb +41 -0
  204. data/lib/appswarm/cluster_funcs.rb +157 -0
  205. data/lib/appswarm/cross_spectool.rb +153 -0
  206. data/lib/appswarm/crypt.rb +10 -0
  207. data/lib/appswarm/crypt/crypto.rb +90 -0
  208. data/lib/appswarm/crypt/rsa_key +15 -0
  209. data/lib/appswarm/crypt/rsa_key.pub +5 -0
  210. data/lib/appswarm/crypt/test.rb +27 -0
  211. data/lib/appswarm/dir_tool.rb +41 -0
  212. data/lib/appswarm/event_api.rb +7 -0
  213. data/lib/appswarm/features_helper.rb +44 -0
  214. data/lib/appswarm/global_service.rb +38 -0
  215. data/lib/appswarm/http.rb +1 -0
  216. data/lib/appswarm/http/http_app.rb +257 -0
  217. data/lib/appswarm/http/http_controller.rb +267 -0
  218. data/lib/appswarm/http/http_provider.rb +80 -0
  219. data/lib/appswarm/http/static/favicon.ico +0 -0
  220. data/lib/appswarm/http/static/javascript/._prototype.js +0 -0
  221. data/lib/appswarm/http/static/javascript/prototype.js +2515 -0
  222. data/lib/appswarm/http/webrick_logger.rb +12 -0
  223. data/lib/appswarm/net_service.rb +69 -0
  224. data/lib/appswarm/package.rb +88 -0
  225. data/lib/appswarm/parallel_each.rb +46 -0
  226. data/lib/appswarm/protocols/protocol_dice.rb +25 -0
  227. data/lib/appswarm/proxy_testing.rb +48 -0
  228. data/lib/appswarm/public_api.rb +35 -0
  229. data/lib/appswarm/routing/matrix_math.rb +57 -0
  230. data/lib/appswarm/routing/pca.rb +211 -0
  231. data/lib/appswarm/routing/routetest.rb +85 -0
  232. data/lib/appswarm/routing/routing.rb +326 -0
  233. data/lib/appswarm/routing/spec/nods_spec.rb +23 -0
  234. data/lib/appswarm/routing/spec/pca_spec.rb +27 -0
  235. data/lib/appswarm/routing/spec/routing_spec.rb +91 -0
  236. data/lib/appswarm/secure_con.rb +437 -0
  237. data/lib/appswarm/secure_connection.rb +79 -0
  238. data/lib/appswarm/secure_marshal.rb +137 -0
  239. data/lib/appswarm/service.rb +76 -0
  240. data/lib/appswarm/simple_marshal.rb +96 -0
  241. data/lib/appswarm/simple_marshal_parser.rb +1243 -0
  242. data/lib/appswarm/simple_marshal_parser.tt +158 -0
  243. data/lib/appswarm/spec/application_spec.rb +50 -0
  244. data/lib/appswarm/spec/cluster_spec.rb +2 -0
  245. data/lib/appswarm/spec/hexdist_spec.rb +13 -0
  246. data/lib/appswarm/spec/http_controller_spec.rb +18 -0
  247. data/lib/appswarm/spec/main_spec.rb +6 -0
  248. data/lib/appswarm/spec/parallel_each_spec.rb +30 -0
  249. data/lib/appswarm/spec/secure_connection_spec.rb +108 -0
  250. data/lib/appswarm/spec/secure_marshal_spec.rb +93 -0
  251. data/lib/appswarm/spec/simple_marshal_spec.rb +87 -0
  252. data/lib/appswarm/spec/tools_spec.rb +13 -0
  253. data/lib/appswarm/spec/whiteboard_spec.rb +20 -0
  254. data/lib/appswarm/spec_helper.rb +18 -0
  255. data/lib/appswarm/test_bed.rb +207 -0
  256. data/lib/appswarm/tools.rb +284 -0
  257. data/lib/appswarm/tools/http_tunnel_client.rb +139 -0
  258. data/lib/appswarm/tools/http_tunnel_common.rb +8 -0
  259. data/lib/appswarm/tools/http_tunnel_server.rb +78 -0
  260. data/lib/appswarm/tools/parser/example_data.simple +102 -0
  261. data/lib/appswarm/tools/parser/match_test.rb +14 -0
  262. data/lib/appswarm/tools/parser/parser_lib.rb +165 -0
  263. data/lib/appswarm/tools/parser/parser_test.rb +104 -0
  264. data/lib/appswarm/tools/parser/spec/parser_spec.rb +44 -0
  265. data/lib/appswarm/tools/pipes.rb +95 -0
  266. data/lib/appswarm/tools/spec/tracing_spec.rb +16 -0
  267. data/lib/appswarm/tools/spec/waiting_queue_spec.rb +15 -0
  268. data/lib/appswarm/tools/thread_tool.rb +61 -0
  269. data/lib/appswarm/tools/tracing.rb +84 -0
  270. data/lib/appswarm/tools/treetop_test.rb +20 -0
  271. data/lib/appswarm/tools/treetop_test_grammar.rb +114 -0
  272. data/lib/appswarm/tools/treetop_test_grammar.tt +7 -0
  273. data/lib/appswarm/tools/waiting_prio_queue.rb +47 -0
  274. data/lib/appswarm/tools/waiting_queue.rb +34 -0
  275. data/lib/appswarm/whiteboard.rb +73 -0
  276. data/nettest.rb +50 -0
  277. data/packages/README.txt +1 -0
  278. data/packages/msandbox/data/packages/store/my.txt +1 -0
  279. data/packages/msandbox/interfaces.rb +172 -0
  280. data/packages/msandbox/old/defa.rb +3 -0
  281. data/packages/msandbox/old/test.rb +14 -0
  282. data/packages/msandbox/old/test2.rb +56 -0
  283. data/packages/msandbox/package.rb +67 -0
  284. data/packages/msandbox/packages/store/config.yml +1 -0
  285. data/packages/msandbox/packages/store/main.rb +27 -0
  286. data/packages/msandbox/packages/store/myinclude.rb +7 -0
  287. data/packages/msandbox/packages/store_test/config.yml +1 -0
  288. data/packages/msandbox/packages/store_test/main.rb +9 -0
  289. data/packages/msandbox/server.rb +146 -0
  290. data/packages/msandbox/test.rb +13 -0
  291. data/packages/msandbox/test2.rb +29 -0
  292. data/templates/web/appswarm/controllers/appswarm.rb +41 -0
  293. data/templates/web/appswarm/layouts/main.rhtml +20 -0
  294. data/templates/web/appswarm/models/asmenu.rb +14 -0
  295. data/templates/web/appswarm/models/asuser.rb +30 -0
  296. data/templates/web/appswarm/static/custom.css +15 -0
  297. data/templates/web/appswarm/static/home.css +134 -0
  298. data/templates/web/appswarm/static/mainMenu.css +32 -0
  299. data/templates/web/appswarm/static/menu.css +99 -0
  300. data/templates/web/appswarm/views/_mainMenu.rhtml +5 -0
  301. data/templates/web/appswarm/views/_menu.rhtml +13 -0
  302. data/templates/web/appswarm/views/_userInfo.rhtml +7 -0
  303. data/templates/web/appswarm/views/login.rhtml +9 -0
  304. data/tools/checkPort.rb +11 -0
  305. metadata +379 -0
data/Rakefile ADDED
@@ -0,0 +1,153 @@
1
+ require 'rubygems'
2
+ require 'hoe'
3
+ require 'spec/rake/spectask'
4
+ require 'rake/rdoctask.rb'
5
+ require File.expand_path('../lib/appswarm/dir_tool.rb',__FILE__)
6
+
7
+
8
+
9
+
10
+ # -*- ruby -*-
11
+
12
+ require './lib/appswarm.rb'
13
+
14
+ Hoe.new('appswarm', Appswarm::VERSION) do |p|
15
+ p.rubyforge_name = 'appswarm' # if different than lowercase project name
16
+ p.developer('David Kamphausen', 'david.kamphausen@web.de')
17
+ end
18
+
19
+ # vim: syntax=Ruby
20
+
21
+
22
+ Spec::Rake::SpecTask.new(:spec=>:build) do |t|
23
+ t.spec_files = FileList['**/spec/*_spec.rb'].map{|f|File.expand_path(f)}.select{|f|not (f=~/disabled/)}
24
+ t.warning = true
25
+ t.rcov = false
26
+ path="spec_output.html"
27
+ if ENV['CC_BUILD_ARTIFACTS']
28
+ path=File.join(ENV['CC_BUILD_ARTIFACTS'],path)
29
+ end
30
+ t.spec_opts=["-rlib/appswarm/spec_helper.rb --format html:"+File.expand_path(path)]
31
+ # t.spec_opts=["--format html:"+File.expand_path(path)]
32
+ end
33
+
34
+ def tt(ttFile)
35
+ sh "/usr/bin/tt #{ttFile}"
36
+ end
37
+
38
+ task :build=>:generate do
39
+
40
+ end
41
+
42
+ task :generate do
43
+ Dir["**/*.tt"].each{|ttFile|
44
+ tt(ttFile)
45
+ }
46
+ end
47
+
48
+
49
+ namespace :spec do
50
+ spec_cmd=`which spec`.chomp
51
+ #spec_cmd+=" -rdebug"
52
+ task :showall do
53
+ puts Dir["**/spec/*_spec.rb"].select{|f|not f=~/spec_helper.rb/}.join("\n")
54
+ end
55
+ ttFiles=lambda {
56
+ Dir["**/*.tt"].map{|f|f.gsub(/\.tt/,"_parser.rb")}
57
+ }
58
+
59
+ rule /^spec:/ do |t|
60
+ arguments = t.name.split(':')
61
+
62
+ file_name = arguments[1]
63
+ spec_name = arguments[2..-1]
64
+
65
+ spec_filename = "#{file_name}_spec.rb"
66
+ specs = Dir["**/#{spec_filename}"]
67
+ #pp specs
68
+
69
+ if path = specs.detect { |f| spec_filename == File.basename(f) }
70
+ run_file_name = path
71
+ else
72
+ puts "No specs found for #{t.name.inspect}"
73
+ exit
74
+ end
75
+
76
+ example = " -e '#{spec_name}'" unless spec_name.empty?
77
+ opts=""
78
+ #opts="-rubygems -rdebug"
79
+ opts="-rlib/appswarm/spec_helper.rb"
80
+ call="#{spec_cmd} #{opts} #{run_file_name} --format html:spec_output.html --colour #{example}"
81
+ puts call
82
+ sh call
83
+ end
84
+ end
85
+
86
+ task :create_manifest do
87
+ PKG_FILES=dir(".") do
88
+ files "README.txt","Rakefile","main.rb"
89
+ dirs("apps","lib") do
90
+ files("**/*")
91
+ end
92
+ end
93
+ File.open("Manifest.txt") do |f|
94
+ f.puts PKG_FILES
95
+ end
96
+ end
97
+
98
+
99
+ if false
100
+ PKG_VERSION="0.1"
101
+ PKG_FILES=dir(".") do
102
+ files "README.txt","Rakefile","main.rb"
103
+ dirs("apps","lib") do
104
+ files("**/*")
105
+ end
106
+ end
107
+
108
+
109
+ spec = Gem::Specification.new do |s|
110
+ s.platform = Gem::Platform::RUBY
111
+ s.summary = "A framework for building global application swarms."
112
+ s.name = 'appswarm'
113
+ s.author='David Kamphausen'
114
+ s.email='david.kamphausen@web.de'
115
+ s.homepage='http://rubyforge.org/projects/appswarm/'
116
+ s.version = PKG_VERSION
117
+ s.requirements << 'treetop' << 'mediacloth'
118
+ s.require_path = 'lib'
119
+ s.rubyforge_project='appswarm'
120
+ #s.autorequire = 'rake'
121
+ s.files = PKG_FILES
122
+ s.has_rdoc=true
123
+ s.description = <<EOF
124
+ AppSwarm is/will be an application framework for developing distributed
125
+ applications across a p2p network. It will be possible to develop very
126
+ different types of services, like database-services, object-brokers,
127
+ app-services, or name-services.
128
+ EOF
129
+ end
130
+
131
+ Rake::GemPackageTask.new(spec) do |pkg|
132
+ pkg.need_zip = true
133
+ pkg.need_tar = true
134
+ end
135
+ end
136
+
137
+ Rake::RDocTask.new do |rd|
138
+ rd.main = "README.txt"
139
+ rd.title="Appswarm"
140
+ rd.options << "--diagram" << "--image-format" << "png"
141
+ rd.rdoc_dir="docs/rdoc"
142
+ a=Dir["**/README.txt"]+Dir["**/*.rb"]
143
+ a=a.select{|f|not (f=~/_test/ or f=~/spec/)}
144
+ rd.rdoc_files.include(a)
145
+ end
146
+
147
+ require 'cucumber/rake/task'
148
+
149
+ Cucumber::Rake::Task.new do |t|
150
+ t.profile = "default"
151
+ end
152
+
153
+
data/TODO ADDED
@@ -0,0 +1,7 @@
1
+ * put parser-generation into rakefile
2
+
3
+ * implement configuration of app-instances (as an app, that starts others) - make it loadable/savable
4
+ * add rights management
5
+ * add signatures for packages (=apps)
6
+ * add monitor (cpu, bandwidth, memory, diskspace)
7
+ * add profiler (analyse slow responses within apps)
data/apps/README.txt ADDED
@@ -0,0 +1,17 @@
1
+ The directory "app" includes all local applications, that are NOT sandboxed and should thus be pretty strongly checked!!
2
+
3
+ == Applications
4
+ Every application has its name, that is CamelCasedApp. It's placed in lower-case underscored named directory (camel_cased) and without the App-postfix.
5
+ It's main class is defined within a file, that's named like containing directory.
6
+
7
+ apps/camel_case/camel_case.rb:
8
+ class CamelCaseApp<Application
9
+ end
10
+
11
+ There are different types of applications:
12
+ * Application (basic class)
13
+ * Service - a local service, that can be addressed by cluster.getApp(:serviceName)
14
+ * PortService (former NetService) - a Service listening on a special port, for external usage
15
+ * GlobalService - a Service, that's run locally but can be accessed by other nodes
16
+ * NetService - a Service, that runs on many nodes (like a directory service)
17
+ * NetApplication - an application that runs distributed on several nodes (like some special application)
@@ -0,0 +1,79 @@
1
+ require 'http.rb'
2
+
3
+ class AdminApp<HTTPApp
4
+
5
+ provides :adminApp
6
+ requires :localWebServer
7
+
8
+ AppDef=Struct.new(:klass,:name,:appId)
9
+
10
+ def startup
11
+ log "STARTUP"
12
+ startConfiguredApps
13
+ begin
14
+ getApp(:localWebServer).mount("/admin",createInstance("default")) #self,getControllers[0],"/")
15
+ rescue
16
+ end
17
+
18
+ super
19
+ end
20
+
21
+ def run
22
+ provides :admin
23
+ super
24
+
25
+ end
26
+
27
+ def quit
28
+ saveRunningApps
29
+ super
30
+ end
31
+
32
+ def instancesFor(provider,appName)
33
+ if provider.class.ancestors.map{|a|a.to_s}.member?("LocalWebServerApp")
34
+ [["defaultInstance","/"+appName+"/"]]
35
+ else
36
+ []
37
+ end
38
+ end
39
+
40
+
41
+ private
42
+ def startConfiguredApps
43
+ log "startConfiguredApps"
44
+ config=retrieveConfig
45
+ log "config got"
46
+ capps=config["configuredApps"]
47
+ apps=capps.content
48
+ log "APPS to load ",apps
49
+ apps||=[]
50
+ apps.each{|appDef|
51
+ begin
52
+
53
+ if cluster.getLocalApplications.select{|app|app.getAppId==appDef.appId}.length==0
54
+ log "RUN #{appDef.klass}"
55
+ cluster.run(appDef.klass.gsub(/App$/,''),{:appId=>appDef.appId,:appName=>appDef.name})
56
+ else
57
+ log "RUN #{appDef.klass} - is already running"
58
+ end
59
+ rescue Object=>e
60
+ log e,e.backtrace
61
+ end
62
+ }
63
+
64
+ unless getApp("Home")
65
+ cluster.run("Home")
66
+ end
67
+
68
+ end
69
+
70
+ def saveRunningApps
71
+ log "SAVE"
72
+ config=retrieveConfig
73
+ apps=cluster.getLocalApplications.map{|app|app}
74
+ apps=apps.select{|app|!Appswarm::BASIC_APPS.member?(app.class)}
75
+ as=apps.map{|app|AppDef.new(app.class.to_s,app.getAppName,app.getAppId)}
76
+ config["configuredApps"]=as
77
+ end
78
+
79
+ end
@@ -0,0 +1,81 @@
1
+ class Admin<HTTPController
2
+ layout :main
3
+
4
+ def index
5
+ @apps=@app.cluster.getLocalApplications
6
+ @appTypes=@app.cluster.getApplicationTypes
7
+
8
+ begin
9
+ @servers=@app.cluster.getApp(:networkLookup).getServers
10
+ rescue
11
+ @servers=[]
12
+ end
13
+ @options=@app.cluster.options
14
+ end
15
+
16
+ def settings(req)
17
+ @apps=@app.cluster.getLocalApplications
18
+ id=req.path[0]
19
+ app=@apps.select{|capp|capp.object_id.to_s==id}[0]
20
+ @appSettings=app.settings
21
+ end
22
+
23
+ def start(req)
24
+ appType=req.path[0]
25
+ @app.cluster.runAndWait(appType.gsub(/App$/,""))
26
+ redirect_to(url(:action=>:index))
27
+ end
28
+ def info(req)
29
+ appName=req.path[0]
30
+ @infoVar=@app.cluster.getAppByName(appName).info
31
+ end
32
+
33
+ def shutdown
34
+ @app.cluster.shutdown
35
+ redirect_to(url(:action=>:index))
36
+ end
37
+
38
+ def stop(req)
39
+ @apps=@app.cluster.getLocalApplications
40
+ id=req.path[0]
41
+ app=@apps.select{|capp|capp.object_id.to_s==id}[0]
42
+ @app.cluster.stopApp(app)
43
+ redirect_to(url(:action=>:index))
44
+ end
45
+ def clone(id)
46
+ @apps=@app.cluster.getLocalApplications
47
+ app=@apps.select{|capp|capp.object_id.to_s==id}[0]
48
+ @app.cluster.cloneApp(app)
49
+ redirect_to(url(:action=>:index))
50
+ end
51
+
52
+ def _log
53
+ logger=@app.getApp(:logger)
54
+ if logger
55
+ @loglist=logger.read(10000)
56
+ end
57
+ @loglist||=[]
58
+ end
59
+
60
+ def _settings_httpapp_instance
61
+ end
62
+ def _settings_string
63
+ end
64
+
65
+ # dummy
66
+
67
+ def xy
68
+ render_html "xy"
69
+ end
70
+ def blub
71
+ render_html "xasdy"
72
+ end
73
+ def helloasd
74
+ "<html><body>MUH asd"+
75
+ @app.cluster.getLocalApplications.map{|s|s.to_s}.join("<br>").to_h+
76
+ @app.getService(:permaspace).load("../README.txt").to_h+
77
+ "</body></html>"
78
+
79
+ redirect_to(url(:action=>:index))
80
+ end
81
+ end
@@ -0,0 +1,63 @@
1
+ class Settings<HTTPController
2
+ layout :main
3
+
4
+ def index(req)
5
+ getTargetApp(req)
6
+ end
7
+
8
+ def _editApp(req)
9
+ getTargetApp(req)
10
+ case @targetApp
11
+ when HTTPApp
12
+ @instances=@targetApp.instances
13
+ viewInstead :_http_app
14
+ else
15
+ viewInstead :_web_server
16
+ end
17
+ end
18
+
19
+ def add(req)
20
+ getTargetApp(req)
21
+ case @targetApp
22
+ when HTTPApp
23
+ instName=params["NewInstanceName"]
24
+ @targetApp.createInstance(instName) if instName
25
+ end
26
+
27
+ redirect_to(url(:action=>:index,:appId=>@targetApp.object_id))
28
+ end
29
+
30
+ def del(req)
31
+ getTargetApp(req)
32
+ case @targetApp
33
+ when HTTPApp
34
+ @targetApp.deleteInstance(params["instanceName"])
35
+ when LocalWebServerApp
36
+ @targetApp.deleteMount(params["mount"])
37
+ end
38
+ redirect_to(url(:action=>:index,:appId=>@targetApp.object_id))
39
+ end
40
+
41
+
42
+ def addMount(req)
43
+ getTargetApp(req)
44
+ httpApp=@app.cluster.getAppByName(params["httpApp"])
45
+ instance=httpApp.getInstanceByName(params["httpAppInstance"])
46
+ @targetApp.mount(params["mountPath"],instance)
47
+ redirect_to(url(:action=>:index,:appId=>@targetApp.object_id))
48
+ end
49
+
50
+ private
51
+ def getTargetApp(req)
52
+ @apps=@app.cluster.getLocalApplications
53
+ id=req.path[0]
54
+ id||=params["appId"]
55
+ apps=@apps.select{|capp|capp.object_id.to_s==id}
56
+ app=apps[0]
57
+
58
+ if app
59
+ @appSettings=app.settings
60
+ @targetApp=app
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,3 @@
1
+ class Users<HTTPController
2
+
3
+ end
@@ -0,0 +1,21 @@
1
+ Feature: Access restriction
2
+ In order to prevent others from accessing your node,
3
+ the admin console will only be available through a local-web-server.
4
+
5
+ Scenario: Access from local browser through local web server
6
+ Given a testbed with an "LocalWebServer" application
7
+ And a "Admin" application in it
8
+ And the default instance of the "Admin" application is offered on "LocalWebServer" under "/"
9
+ When the browser accesses the "LocalWebServer" application on "/"
10
+ Then it is given a valid html page
11
+
12
+
13
+ Scenario: Access from local browser through global web server
14
+ Given a testbed with a "GlobalWebServer" application
15
+ And a "Admin" application in it
16
+ And a "NameService" application in it
17
+ And a "GlobalWebProxy" application in it
18
+ When the "default" instance of "Admin" is offered on the "GlobalWebServer" application
19
+ And the "default" instance of "Admin" is globally mounted on "test.appswarm/my/path"
20
+ And a client accesses "http://test.appswarm/my/path" through "GlobalWebProxy"
21
+ Then the access is restricted
@@ -0,0 +1,12 @@
1
+ Feature: Mounting local web applications
2
+
3
+ @mountLocal
4
+ Scenario:
5
+ Given a testbed with a "LocalWebServer" application
6
+ And a "Admin" application in it
7
+ When a client accesses the "LocalWebServer" application on "/admin"
8
+ And I click on "Start WikiApp"
9
+ Then a "Wiki" application is running
10
+ And the resulting html page contains "WikiApp"
11
+ When I click on "Settings WikiApp"
12
+ #And I click on "