ji2p 0.0.3-jruby-java-universal-java-9

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 (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
data/lib/core_ext.rb ADDED
@@ -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
data/lib/gen_server.rb ADDED
@@ -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
data/lib/ji2p.rb ADDED
@@ -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