peplum-template 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c0d6c39c431c4ade9a4d96500048847342b80a0a15c5d4f7cfe123278662bb0f
4
+ data.tar.gz: bf8d5f760b771c9409c49befdff81a2c58403142d62a9b6276397cc93f7183ee
5
+ SHA512:
6
+ metadata.gz: 9b4f72c06b677097b32268507e4f57a84ff5785b363b3fd1370aacac342efd8c1eaa15c73599eca14b7c027e44789cf1472c2f850c3c11c893ef3111e0763735
7
+ data.tar.gz: ba15f06884e7646db3f7d96b4f06baf606b0ebe9db82d40e56aba2d3516c76289f5d734b5a40e03eca3a88e27e8006e2a28daa5dc4c8d75fe0078aea6e508d60
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "peplum/template"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ require "irb"
11
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,44 @@
1
+ require 'json'
2
+ require 'tmpdir'
3
+ require 'net/http'
4
+
5
+ def response
6
+ if @last_response['Content-Type'].include? 'json'
7
+ data = JSON.load( @last_response.body )
8
+ else
9
+ data = @last_response.body
10
+ end
11
+ {
12
+ code: @last_response.code,
13
+ data: data
14
+ }
15
+ end
16
+
17
+ def response_data
18
+ response[:data]
19
+ end
20
+
21
+ def request( method, resource = nil, parameters = nil )
22
+ uri = URI( "http://127.0.0.1:7331/#{resource}" )
23
+
24
+ Net::HTTP.start( uri.host, uri.port) do |http|
25
+ case method
26
+ when :get
27
+ uri.query = URI.encode_www_form( parameters ) if parameters
28
+ request = Net::HTTP::Get.new( uri )
29
+
30
+ when :post
31
+ request = Net::HTTP::Post.new( uri )
32
+ request.body = parameters.to_json
33
+
34
+ when :delete
35
+ request = Net::HTTP::Delete.new( uri )
36
+
37
+ when :put
38
+ request = Net::HTTP::Put.new( uri )
39
+ request.body = parameters.to_json
40
+ end
41
+
42
+ @last_response = http.request( request )
43
+ end
44
+ end
data/examples/rest.rb ADDED
@@ -0,0 +1,56 @@
1
+ require 'peplum/template'
2
+ require 'pp'
3
+ require_relative 'rest/helpers'
4
+
5
+ # Boot up our REST server for easy integration.
6
+ rest_pid = Peplum::Template::Application.spawn( :rest, daemonize: true )
7
+ at_exit { Cuboid::Processes::Manager.kill rest_pid }
8
+
9
+ # Wait for the REST server to boot up.
10
+ while sleep 1
11
+ begin
12
+ request :get
13
+ rescue Errno::ECONNREFUSED
14
+ next
15
+ end
16
+
17
+ break
18
+ end
19
+
20
+ # Assign an Agent to the REST service for it to provide us with Instances.
21
+ template_agent = Peplum::Template::Application.spawn( :agent, daemonize: true )
22
+ request :put, 'agent/url', template_agent.url
23
+ at_exit { template_agent.shutdown rescue nil }
24
+
25
+ # Create a new Instance and run with the following options.
26
+ request :post, 'instances', {
27
+ peplum: {
28
+ objects: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
29
+ max_workers: 5
30
+ },
31
+ native: {
32
+ my_option_bool: true,
33
+ my_option_array: [1,2,3],
34
+ my_option_hash: { 4 => '5', '6' => 7 }
35
+ }
36
+ }
37
+
38
+ # The ID is used to represent that instance and allow us to manage it from here on out.
39
+ instance_id = response_data['id']
40
+
41
+ while sleep( 1 )
42
+ # Continue looping while instance status is 'busy'.
43
+ request :get, "instances/#{instance_id}"
44
+ break if !response_data['busy']
45
+ end
46
+
47
+ puts '*' * 88
48
+
49
+ # Get the report.
50
+ request :get, "instances/#{instance_id}/report.json"
51
+
52
+ # Print out the report.
53
+ puts JSON.pretty_generate( JSON.load( response_data['data'] ) )
54
+
55
+ # Shutdown the Instance.
56
+ request :delete, "instances/#{instance_id}"
data/examples/rpc.rb ADDED
@@ -0,0 +1,29 @@
1
+ require 'pp'
2
+ require 'peplum/template'
3
+
4
+ # Spawn an Agent as a daemon.
5
+ template_agent = Peplum::Template::Application.spawn( :agent, daemonize: true )
6
+ at_exit { template_agent.shutdown rescue nil }
7
+
8
+ # Spawn and connect to an Instance.
9
+ template = Peplum::Template::Application.connect( template_agent.spawn )
10
+ # Don't forget this!
11
+ at_exit { template.shutdown }
12
+
13
+ template.run(
14
+ peplum: {
15
+ objects: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
16
+ max_workers: 5
17
+ },
18
+ native: {
19
+ my_option_bool: true,
20
+ my_option_array: [1,2,3],
21
+ my_option_hash: { 4 => '5', '6' => 7 }
22
+ }
23
+ )
24
+
25
+ # Waiting to complete.
26
+ sleep 1 while template.running?
27
+
28
+ # Hooray!
29
+ puts JSON.pretty_generate( template.generate_report.data )
@@ -0,0 +1,53 @@
1
+ module Peplum
2
+ class Template
3
+ class Application
4
+
5
+ module Native
6
+
7
+ # TODO: Populate it with some actual payload code.
8
+ #
9
+ # Run payload against `objects` based on given `options`
10
+ #
11
+ # @param [Array] objects Objects that this worker should process.
12
+ # @param [Hash, NilClass] options Worker options.
13
+ # @abstract
14
+ def run( objects, options )
15
+ # Signal that we started work or something to our peers...
16
+ Template::Application.shared_hash.set( Process.pid, options )
17
+
18
+ # Access peer's services.
19
+ Template::Application.peers.each do |peer|
20
+ p peer.my_service.foo
21
+ pp peer.my_service.shared_hash_to_hash
22
+ end
23
+
24
+ pp [objects, options]
25
+ end
26
+
27
+ # Distribute `objects` into `chunks` amount of groups, one for each worker.
28
+ #
29
+ # @param [Array] objects All objects that need to be processed.
30
+ # @param [Integer] chunks Amount of object groups that should be generated.
31
+ #
32
+ # @return [Array<Array<Object>>] `objects` split in `chunks` amount of groups
33
+ # @abstract
34
+ def group( objects, chunks )
35
+ objects.chunk chunks
36
+ end
37
+
38
+ # TODO: Populate it with some actual merging code.
39
+ #
40
+ # Merge result `data` for reporting.
41
+ #
42
+ # @param [Array] data Report data from workers.
43
+ # @abstract
44
+ def merge( data )
45
+ data
46
+ end
47
+
48
+ extend self
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ module Peplum
2
+ class Template
3
+ module Services
4
+
5
+ class MyService
6
+
7
+ def foo
8
+ 'bar'
9
+ end
10
+
11
+ def shared_hash_to_hash
12
+ Template::Application.shared_hash.to_h
13
+ end
14
+
15
+ end
16
+
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'peplum'
4
+
5
+ module Peplum
6
+ class Template
7
+
8
+ class Application < Peplum::Application
9
+ require_relative "application/native"
10
+ require_relative 'application/services/my_service'
11
+
12
+ # TODO: Adjust accordingly.
13
+ provision_memory 100 * 1024 * 1024
14
+
15
+ # TODO: Adjust accordingly.
16
+ provision_disk 100 * 1024 * 1024
17
+
18
+ # TODO: Is a service necessary?
19
+ instance_service_for :my_service, Services::MyService
20
+
21
+ def native_app
22
+ Native
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Peplum
4
+ class Template
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'peplum'
4
+
5
+ module Peplum
6
+ class Template
7
+
8
+ require_relative "template/version"
9
+
10
+ class Error < Peplum::Error; end
11
+
12
+ require_relative "template/application"
13
+
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/peplum/template/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "peplum-template"
7
+ spec.version = Peplum::Template::VERSION
8
+ spec.authors = ["Tasos Laskos"]
9
+ spec.email = ["tasos.laskos@ecsypno.com"]
10
+
11
+ spec.summary = "Peplum template project."
12
+ spec.description = "Peplum template project."
13
+ spec.homepage = "http://ecsypno.com/"
14
+ spec.required_ruby_version = ">= 2.6.0"
15
+
16
+ spec.files = Dir.glob( 'bin/*')
17
+ spec.files += Dir.glob( 'lib/**/*')
18
+ spec.files += Dir.glob( 'examples/**/*')
19
+ spec.files += %w(peplum-template.gemspec)
20
+
21
+
22
+ spec.add_dependency "peplum"
23
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: peplum-template
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tasos Laskos
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-05-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: peplum
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Peplum template project.
28
+ email:
29
+ - tasos.laskos@ecsypno.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/console
35
+ - bin/setup
36
+ - examples/rest.rb
37
+ - examples/rest/helpers.rb
38
+ - examples/rpc.rb
39
+ - lib/peplum/template.rb
40
+ - lib/peplum/template/application.rb
41
+ - lib/peplum/template/application/native.rb
42
+ - lib/peplum/template/application/services/my_service.rb
43
+ - lib/peplum/template/version.rb
44
+ - peplum-template.gemspec
45
+ homepage: http://ecsypno.com/
46
+ licenses: []
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 2.6.0
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubygems_version: 3.4.13
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: Peplum template project.
67
+ test_files: []