ji2p 0.0.4-universal-java-11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/bin/bundle +15 -0
  3. data/bin/ctxirb +119 -0
  4. data/bin/simple_http_server +20 -0
  5. data/bin/simple_outproxy +96 -0
  6. data/lib/actor_system/actor.rb +10 -0
  7. data/lib/actor_system/concurrent/processor.rb +21 -0
  8. data/lib/actor_system/concurrent/worker.rb +13 -0
  9. data/lib/actor_system/core/minimal.rb +84 -0
  10. data/lib/actor_system/core/observable_implementation.rb +58 -0
  11. data/lib/actor_system/core/props.rb +45 -0
  12. data/lib/actor_system/dispatcher.rb +12 -0
  13. data/lib/actor_system/mailbox.rb +7 -0
  14. data/lib/actor_system/message.rb +60 -0
  15. data/lib/core_ext.rb +41 -0
  16. data/lib/gen_server.rb +57 -0
  17. data/lib/ji2p.rb +37 -0
  18. data/lib/ji2p/bundler.rb +165 -0
  19. data/lib/ji2p/cluster.rb +6 -0
  20. data/lib/ji2p/cluster/etcd.rb +5 -0
  21. data/lib/ji2p/cluster/etcd/version3.rb +6 -0
  22. data/lib/ji2p/cluster/kubernetes.rb +5 -0
  23. data/lib/ji2p/cluster/kubernetes/kube_api.rb +6 -0
  24. data/lib/ji2p/concurrent.rb +24 -0
  25. data/lib/ji2p/concurrent_executor.rb +56 -0
  26. data/lib/ji2p/config.rb +15 -0
  27. data/lib/ji2p/control.rb +15 -0
  28. data/lib/ji2p/control/client_manager.rb +14 -0
  29. data/lib/ji2p/control/dest.rb +34 -0
  30. data/lib/ji2p/control/keypair.rb +176 -0
  31. data/lib/ji2p/control/server.rb +80 -0
  32. data/lib/ji2p/control/socket_manager.rb +77 -0
  33. data/lib/ji2p/control/tunnel_manager.rb +62 -0
  34. data/lib/ji2p/environment.rb +35 -0
  35. data/lib/ji2p/package/gem_installer.rb +91 -0
  36. data/lib/ji2p/package/gemfile.rb +234 -0
  37. data/lib/ji2p/package/jar_dependencies.rb +23 -0
  38. data/lib/ji2p/package/proxy_support.rb +50 -0
  39. data/lib/ji2p/rspec.rb +16 -0
  40. data/lib/ji2p/server.rb +10 -0
  41. data/lib/ji2p/server/api.rb +14 -0
  42. data/lib/ji2p/server/database.rb +66 -0
  43. data/lib/ji2p/server/http.rb +69 -0
  44. data/lib/ji2p/server/http_server.rb +37 -0
  45. data/lib/ji2p/server/initializer.rb +4 -0
  46. data/lib/ji2p/server/launcher.rb +40 -0
  47. data/lib/ji2p/server/models.rb +9 -0
  48. data/lib/ji2p/server/models/base_record.rb +7 -0
  49. data/lib/ji2p/server/models/keypair.rb +32 -0
  50. data/lib/ji2p/server/models/tunnel.rb +4 -0
  51. data/lib/ji2p/startup.rb +12 -0
  52. data/lib/ji2p/startup/bootstrap.rb +60 -0
  53. data/lib/ji2p/startup/client_application.rb +20 -0
  54. data/lib/ji2p/startup/router_manager.rb +21 -0
  55. data/lib/ji2p/startup/sinatra_app.rb +61 -0
  56. data/lib/ji2p/startup/worker.rb +63 -0
  57. data/lib/ji2p/utils/blocking_queue.rb +32 -0
  58. data/lib/ji2p/utils/byte_value.rb +61 -0
  59. data/lib/ji2p/version.rb +3 -0
  60. data/lib/ji2p_jars.rb +16 -0
  61. data/lib/maybe.rb +148 -0
  62. data/lib/net/i2p/client/mstreaming/0.9.43/mstreaming-0.9.43.jar +0 -0
  63. data/lib/net/i2p/client/streaming/0.9.43/streaming-0.9.43.jar +0 -0
  64. data/lib/net/i2p/i2p/0.9.43/i2p-0.9.43.jar +0 -0
  65. data/lib/net/i2p/router/0.9.43/router-0.9.43.jar +0 -0
  66. metadata +392 -0
@@ -0,0 +1,45 @@
1
+ require_relative 'observable_implementation.rb'
2
+
3
+ module ActorSystem
4
+ module Core
5
+ class Prop
6
+ include ObservableImplementation
7
+
8
+ def initialize name, value
9
+ @name = name
10
+ @value = value
11
+ end
12
+
13
+ def value= value
14
+ @value = value
15
+ notify_observers(value)
16
+ end
17
+ end
18
+ class BasicObserverHash
19
+ def initialize values={}
20
+ @internal_hash = values
21
+ end
22
+
23
+ def [](key)
24
+ @internal_hash[key]
25
+ end
26
+
27
+ def []=(key, value)
28
+ if @internal_hash[key].nil?
29
+ p = Prop.new key,value
30
+ p.add_observer self
31
+ @internal_hash[key] = p
32
+ else
33
+ @internal_hash[key].value = value
34
+ end
35
+ end
36
+
37
+ def observer_update value
38
+ puts "Received update = #{value}"
39
+ end
40
+ end
41
+
42
+ class Props < BasicObserverHash
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ module ActorSystem
2
+ module Dispatcher
3
+ class DispatcherImpl
4
+ end
5
+
6
+ class FiberDispatcher < DispatcherImpl
7
+ end
8
+
9
+ class ThreadDispatcher < DispatcherImpl
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ module ActorSystem
2
+ module Mailbox
3
+ class Impl
4
+ include ObservableImplementation
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,60 @@
1
+ module ActorSystem
2
+ module Message
3
+ def self.included cls
4
+ cls.class_exec do
5
+ extend Matcher
6
+
7
+ include MessageName
8
+ end
9
+ end
10
+
11
+ def self.extended receiver
12
+ receiver.instance_exec do
13
+ extend Matcher
14
+ extend MessageName
15
+ end
16
+ end
17
+
18
+ def self.=== object
19
+ if object.is_a? Symbol
20
+ true
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ module Matcher
27
+ def === other
28
+ other_message_name = Name.get other
29
+
30
+ message_name == other_message_name
31
+ end
32
+ end
33
+
34
+ module MessageName
35
+ def self.included cls
36
+ cls.class_exec do
37
+ extend ClassMethod
38
+
39
+ include InstanceMethod
40
+ end
41
+ end
42
+
43
+ def self.extended receiver
44
+ receiver.extend ClassMethod
45
+ end
46
+
47
+ module InstanceMethod
48
+ def message_name
49
+ self.class.message_name
50
+ end
51
+ end
52
+
53
+ module ClassMethod
54
+ def message_name
55
+ Name.get name
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,41 @@
1
+
2
+ class Hash
3
+ def to_properties
4
+ # Java::JavaUtil::Properties
5
+ props = java_import('java.util.Properties').first.new
6
+ self.each do |k,v|
7
+ props[k.to_s] = v.to_s
8
+ end
9
+ props
10
+ end
11
+
12
+ def self.from_properties props,convert_symbols=false
13
+ return unless props.is_a? java_import('java.util.Properties').first
14
+ hash = new
15
+ props.each do |k,v|
16
+ k = k.to_sym if convert_symbols
17
+ hash[k] = v
18
+ end
19
+ hash
20
+ end
21
+ end
22
+
23
+ class Object
24
+ def try(*a, &b)
25
+ if a.empty? && block_given?
26
+ yield self
27
+ else
28
+ public_send(*a, &b) if respond_to?(a.first)
29
+ end
30
+ end
31
+ end
32
+
33
+ class NilClass
34
+ def try(*args)
35
+ nil
36
+ end
37
+
38
+ def method_missing(method, *args)
39
+ nil
40
+ end
41
+ end
@@ -0,0 +1,57 @@
1
+ require "ostruct"
2
+ require "securerandom"
3
+
4
+ module GenServer
5
+ class << self
6
+ def call(pid, method, *args)
7
+ entry = fetch_entry(pid)
8
+ value, state = entry.module.send(method, entry.state, *args)
9
+ entry.state = state
10
+ update_entry(pid, entry)
11
+ value
12
+ end
13
+
14
+ def cast(pid, method, *args)
15
+ entry = fetch_entry(pid)
16
+ entry.state = entry.module.send(method, entry.state, *args)
17
+ update_entry(pid, entry)
18
+ nil
19
+ end
20
+
21
+ def start_link(mod, *args)
22
+ state = mod.init(*args)
23
+ add_entry(mod, state)
24
+ end
25
+
26
+ def terminate(pid)
27
+ remove_entry(pid)
28
+ end
29
+
30
+ private
31
+
32
+ def add_entry(mod, state)
33
+ SecureRandom.uuid.tap do |uuid|
34
+ entries[uuid] = OpenStruct.new(
35
+ :module => mod,
36
+ :state => state
37
+ )
38
+ end
39
+ end
40
+
41
+ def entries
42
+ @entries ||= {}
43
+ end
44
+
45
+ def fetch_entry(pid)
46
+ entries[pid]
47
+ end
48
+
49
+ def remove_entry(pid)
50
+ entries.delete(pid)
51
+ end
52
+
53
+ def update_entry(pid, entry)
54
+ entries[pid] = entry
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,37 @@
1
+ #require 'active_support'
2
+ #require 'active_support/core_ext'
3
+ #require 'active_support/dependencies'
4
+ require 'logger'
5
+ require 'java'
6
+ $CLASSPATH << "file:///#{File.expand_path(File.join(__dir__, '..', 'config'))}/"
7
+
8
+ require 'ji2p/environment.rb'
9
+
10
+ module Ji2p
11
+ require_relative 'ji2p/version.rb'
12
+ autoload :Cluster, File.expand_path('ji2p/cluster.rb', __dir__)
13
+ autoload :Control, File.expand_path('ji2p/control.rb', __dir__)
14
+ autoload :Server, File.expand_path('ji2p/server.rb', __dir__)
15
+ autoload :Startup, File.expand_path('ji2p/startup.rb', __dir__)
16
+ #ActiveSupport::Dependencies.autoload_paths << __dir__
17
+ #Dir.glob('**/').each do |dir|
18
+ # ActiveSupport::Dependencies.autoload_paths << File.expand_path(dir, __dir__)
19
+ #end
20
+
21
+ # https://github.com/jruby/jruby/wiki/RedBridge
22
+ java_import 'java.lang.System'
23
+ System.setProperty("org.jruby.embed.localcontext.scope", "singleton") # concurrent, threadsafe, etc.
24
+
25
+ def self.logger
26
+ @logger ||= Logger.new(STDOUT)
27
+ end
28
+
29
+ def self.disable_crypto_restriction
30
+ # java.lang.Class.for_name('javax.crypto.JceSecurity').get_declared_field('isRestricted').tap{|f| f.accessible = true; f.set nil, false}
31
+ security_class = java.lang.Class.for_name('javax.crypto.JceSecurity')
32
+ restricted_field = security_class.get_declared_field('isRestricted')
33
+ restricted_field.accessible = true
34
+ restricted_field.set nil, false
35
+ end
36
+
37
+ end
@@ -0,0 +1,165 @@
1
+ require 'fileutils'
2
+
3
+ module Ji2p
4
+ module Bundler
5
+ extend self
6
+
7
+ def setup!(options = {})
8
+ options = {:without => [:development]}.merge(options)
9
+ options[:without] = Array(options[:without])
10
+
11
+ ::Gem.clear_paths
12
+ ENV['GEM_HOME'] = ENV['GEM_PATH'] = Environment.ji2p_gem_home
13
+ ::Gem.paths = ENV
14
+
15
+ # set BUNDLE_GEMFILE ENV before requiring bundler to avoid bundler recurse and load unrelated Gemfile(s)
16
+ ENV["BUNDLE_GEMFILE"] = Environment::GEMFILE_PATH
17
+
18
+ require 'bundler'
19
+
20
+ ::Bundler.settings.set_local(:path, Environment::BUNDLE_DIR)
21
+ ::Bundler.settings.set_local(:without, options[:without])
22
+ # in the context of Bundler.setup it looks like this is useless here because Gemfile path can only be specified using
23
+ # the ENV, see https://github.com/bundler/bundler/blob/v1.8.3/lib/bundler/shared_helpers.rb#L103
24
+ ::Bundler.settings.set_local(:gemfile, Environment::GEMFILE_PATH)
25
+
26
+ ::Bundler.reset!
27
+ ::Bundler.setup
28
+ end
29
+
30
+ # execute bundle install and capture any $stdout output. any raised exception in the process will be trapped
31
+ # and returned. logs errors to $stdout.
32
+ # @param [Hash] options invoke options with default values, :max_tries => 10, :clean => false, :install => false, :update => false
33
+ # @option options [Boolean] :max_tries The number of times bundler is going to try the installation before failing (default: 10)
34
+ # @option options [Boolean] :clean It cleans the unused gems (default: false)
35
+ # @option options [Boolean] :install Run the installation of a set of gems defined in a Gemfile (default: false)
36
+ # @option options [Boolean, String, Array] :update Update the current environment, must be either false or a String or an Array of String (default: false)
37
+ # @option options [Boolean] :local Do not attempt to fetch gems remotely and use the gem cache instead (default: false)
38
+ # @option options [Boolean] :package Locks and then caches all dependencies to be reused later on (default: false)
39
+ # @option options [Boolean] :all It packages dependencies defined with :git or :path (default: false)
40
+ # @option options [Array] :without Exclude gems that are part of the specified named group (default: [:development])
41
+ # @return [String, Exception] the installation captured output and any raised exception or nil if none
42
+ def invoke!(options = {})
43
+ options = {:max_tries => 10, :clean => false, :install => false, :update => false, :local => false,
44
+ :jobs => 12, :all => false, :package => false, :without => [:development]}.merge(options)
45
+ options[:without] = Array(options[:without])
46
+ options[:update] = Array(options[:update]) if options[:update]
47
+
48
+ ::Gem.clear_paths
49
+ ENV['GEM_HOME'] = ENV['GEM_PATH'] = Ji2p::Environment.ji2p_gem_home
50
+ ::Gem.paths = ENV
51
+ # set BUNDLE_GEMFILE ENV before requiring bundler to avoid bundler recurse and load unrelated Gemfile(s).
52
+ # in the context of calling Bundler::CLI this is not really required since Bundler::CLI will look at
53
+ # Bundler.settings[:gemfile] unlike Bundler.setup. For the sake of consistency and defensive/future proofing, let's keep it here.
54
+ ENV["BUNDLE_GEMFILE"] = Ji2p::Environment::GEMFILE_PATH
55
+
56
+ require 'bundler'
57
+ require 'bundler/cli'
58
+
59
+ # force Rubygems sources to our Gemfile sources
60
+ ::Gem.sources = ::Gem::SourceList.from(options[:rubygems_source]) if options[:rubygems_source]
61
+
62
+ ::Bundler.settings.set_local(:path, Ji2p::Environment::BUNDLE_DIR)
63
+ ::Bundler.settings.set_local(:gemfile, Ji2p::Environment::GEMFILE_PATH)
64
+ ::Bundler.settings.set_local(:without, options[:without])
65
+ ::Bundler.settings.set_local(:force, options[:force])
66
+
67
+ if !debug?
68
+ # Will deal with transient network errors
69
+ execute_bundler_with_retry(options)
70
+ else
71
+ options[:verbose] = true
72
+ execute_bundler(options)
73
+ end
74
+ end
75
+
76
+ def execute_bundler_with_retry(options)
77
+ try = 0
78
+ # capture_stdout also traps any raised exception and pass them back as the function return [output, exception]
79
+ output, exception = capture_stdout do
80
+ loop do
81
+ begin
82
+ execute_bundler(options)
83
+ break
84
+ rescue ::Bundler::VersionConflict => e
85
+ $stderr.puts("Plugin version conflict, aborting")
86
+ raise(e)
87
+ rescue ::Bundler::GemNotFound => e
88
+ $stderr.puts("Plugin not found, aborting")
89
+ raise(e)
90
+ rescue => e
91
+ if try >= options[:max_tries]
92
+ $stderr.puts("Too many retries, aborting, caused by #{e.class}")
93
+ $stderr.puts(e.message) if ENV["DEBUG"]
94
+ raise(e)
95
+ end
96
+
97
+ try += 1
98
+ $stderr.puts("Error #{e.class}, retrying #{try}/#{options[:max_tries]}")
99
+ $stderr.puts(e.message)
100
+ sleep(0.5)
101
+ end
102
+ end
103
+ end
104
+ raise exception if exception
105
+
106
+ return output
107
+ end
108
+
109
+ def execute_bundler(options)
110
+ ::Bundler.reset!
111
+ ::Bundler::CLI.start(bundler_arguments(options))
112
+ end
113
+
114
+ def debug?
115
+ ENV["DEBUG"]
116
+ end
117
+
118
+ # build Bundler::CLI.start arguments array from the given options hash
119
+ # @param option [Hash] the invoke! options hash
120
+ # @return [Array<String>] Bundler::CLI.start string arguments array
121
+ def bundler_arguments(options = {})
122
+ arguments = []
123
+
124
+ if options[:install]
125
+ arguments << "install"
126
+ arguments << "--clean" if options[:clean]
127
+ if options[:local]
128
+ arguments << "--local"
129
+ arguments << "--no-prune" # From bundler docs: Don't remove stale gems from the cache.
130
+ end
131
+ elsif options[:update]
132
+ arguments << "update"
133
+ arguments << options[:update]
134
+ arguments << "--local" if options[:local]
135
+ elsif options[:clean]
136
+ arguments << "clean"
137
+ elsif options[:package]
138
+ arguments << "package"
139
+ arguments << "--all" if options[:all]
140
+ end
141
+
142
+ arguments << "--verbose" if options[:verbose]
143
+
144
+ arguments.flatten
145
+ end
146
+
147
+ # capture any $stdout from the passed block. also trap any exception in that block, in which case the trapped exception will be returned
148
+ # @param [Proc] the code block to execute
149
+ # @return [String, Exception] the captured $stdout string and any trapped exception or nil if none
150
+ def capture_stdout(&block)
151
+ old_stdout = $stdout
152
+ $stdout = StringIO.new("", "w")
153
+ begin
154
+ block.call
155
+ rescue => e
156
+ return [$stdout.string, e]
157
+ end
158
+
159
+ [$stdout.string, nil]
160
+ ensure
161
+ $stdout = old_stdout
162
+ end
163
+
164
+ end
165
+ end
@@ -0,0 +1,6 @@
1
+ module Ji2p
2
+ module Cluster
3
+ autoload :Etcd, File.expand_path('cluster/etcd.rb', __dir__)
4
+ autoload :Kubernetes, File.expand_path('cluster/kubernetes.rb', __dir__)
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Ji2p::Cluster
2
+ module Etcd
3
+ autoload :Version3, File.expand_path('etcd/version3.rb', __dir__)
4
+ end
5
+ end