harbr 0.0.3 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90e673e0e33206181428629abfc84ab183035492ac8cc2086db07044508e2837
4
- data.tar.gz: 50e1981a9f69c5bc1ee39ad0c7c9cbb4f0109026f7c34df7c291d5915ee16416
3
+ metadata.gz: 982d7720d122df743daabe03e8dab68bae4f7a9bce1630273d6048020bbfb7a5
4
+ data.tar.gz: 8e34045027b5b1f3c34585249ee8e9ce34a0cad3dc6a791e457098b53f6ad149
5
5
  SHA512:
6
- metadata.gz: ae41ff56df3bc5a5792a3285deb68eb1bcfc8f52377b2616260750ab848fe673066f5401385400c590a1d1c8abcbde2bd18e2645ced9c9978ea6755371e514c4
7
- data.tar.gz: c6161573a840e91d343fdc7fad17074e06d352cbd722b8147b34178f7218771436f953ccd82e8408cdee6d327d72423b7ccaab457214c837ac0d7e6f38d4bfef
6
+ metadata.gz: 3501f933ff90e155ccf27a59288902a8855efd329a9dc51a9abb379e44ee0542170978b45eff28ba740927ef2b4ff7975273a5018970d9e5d5c87719324f17eb
7
+ data.tar.gz: 3eb0f64c9c7447ed11cefc5527704b0d8dd78bd49563adb488bc07b32639dfde665d3a50b244995d4a07af18716d8cd9da1408a3f23a648dee6d34871e57f6bc
data/exe/harbr CHANGED
@@ -1,12 +1,42 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'thor'
3
3
  require 'listen'
4
+ require 'dddr'
5
+ require 'harbr'
6
+ require 'sucker_punch'
7
+ require 'terminal-table'
4
8
 
5
9
  class HarbrCLI < Thor
6
10
  DEFAULT_DIRECTORY = '/var/harbr'
11
+ DEFAULT_DIRECTORY_DATA_DIR = "#{DEFAULT_DIRECTORY}/.data"
7
12
  @@listener = nil
8
13
 
14
+ Dddr.configure do |config|
15
+ config.data_dir = DEFAULT_DIRECTORY_DATA_DIR
16
+ end
17
+
18
+
9
19
  no_commands do
20
+
21
+ def display_containers_table(containers)
22
+ return puts "No containers available." if containers.empty?
23
+
24
+ # Define headers based on Container attributes
25
+ headers = ['Name', 'Host Header', 'IP', 'Port']
26
+
27
+ rows = containers.map do |container|
28
+ [container.name, container.host_header, container.ip, container.port]
29
+ end
30
+
31
+ table = ::Terminal::Table.new(headings: headers, rows: rows)
32
+ puts ""
33
+ puts "Harbr Containers"
34
+ puts ""
35
+ puts table
36
+ puts ""
37
+ end
38
+
39
+
10
40
  def check_and_create_directory(path)
11
41
  unless Dir.exist?(path)
12
42
  puts "Creating directory: #{path}"
@@ -47,13 +77,25 @@ class HarbrCLI < Thor
47
77
  return if @@listener
48
78
 
49
79
  puts "Starting Harbr, listening to #{directory}"
80
+
50
81
  @@listener = Listen.to(directory) do |modified, added, removed|
51
- puts "Modified: #{modified}" unless modified.empty?
52
- puts "Added: #{added}" unless added.empty?
53
- puts "Removed: #{removed}" unless removed.empty?
82
+ unless added.empty?
83
+ next if added.first.include? "vendor"
84
+ next if added.first.include? ".git"
85
+ /\/var\/harbr\/(?<container>.+)\/.*/.match(added.first)
86
+ config = "/var/harbr/#{$1}/config/manifest.yml"
87
+ Harbr::Container::Job.perform_async(config)
88
+ end
54
89
 
55
- puts directory
56
- # Add your logic here for handling these changes
90
+ # unless removed.empty?
91
+ # /\/var\/harbr\/(?<container>.+)\/.*/.match(removed.first)
92
+ # config = "/var/harbr/#{$1}/config/manifest.yml"
93
+
94
+ # puts $1
95
+
96
+
97
+ # end
98
+
57
99
  end
58
100
  @@listener.start # not blocking
59
101
  sleep
@@ -89,6 +131,13 @@ class HarbrCLI < Thor
89
131
  puts "Harbr is not running or already active."
90
132
  end
91
133
  end
134
+
135
+ desc "containers", "show all containers"
136
+ def containers
137
+ container_repo = Harbr::Container::Repository.new
138
+ display_containers_table(container_repo.all)
139
+ end
140
+
92
141
  end
93
142
 
94
143
  HarbrCLI.start(ARGV)
@@ -0,0 +1,43 @@
1
+ # Define HTTP routers
2
+ [http.routers]
3
+ [http.routers.traefik-dashboard]
4
+ rule = "Host(`traefik.harbr.zero2one.ee`)"
5
+ service = "api@internal"
6
+ entryPoints = ["http"]
7
+
8
+
9
+ # Define the router for the Traefik Dashboard and API
10
+ [http.routers.traefik-dashboard]
11
+ rule = "Host(`traefik.harbr.zero2one.ee`)"
12
+ service = "api@internal"
13
+ entryPoints = ["http"]
14
+
15
+ [http.routers.tallinn-router]
16
+ rule = "Host(`tallinn.laki.zero2one.ee`)"
17
+ service = "tallinn-service"
18
+
19
+ [http.routers.vidtreon-router]
20
+ rule = "Host(`vidtreon.harbr.zero2one.ee`)"
21
+ service = "vidtreon-service"
22
+
23
+ [http.routers.sild-router]
24
+ rule = "Host(`sild.harbr.zero2one.ee`)"
25
+ service = "sild-service"
26
+
27
+
28
+
29
+ [http.services]
30
+ [http.services.tallinn-service]
31
+ [http.services.tallinn-service.loadBalancer]
32
+ [[http.services.tallinn-service.loadBalancer.servers]]
33
+ url = "http://10.80.172.9:80"
34
+
35
+ [http.services.vidtreon-service]
36
+ [http.services.vidtreon-service.loadBalancer]
37
+ [[http.services.vidtreon-service.loadBalancer.servers]]
38
+ url = "http://127.0.0.1:9292"
39
+
40
+ [http.services.sild-service]
41
+ [http.services.sild-service.loadBalancer]
42
+ [[http.services.sild-service.loadBalancer.servers]]
43
+ url = "http://127.0.0.1:9393"
data/lib/harbr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbr
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.5"
5
5
  end
data/lib/harbr.rb CHANGED
@@ -1,8 +1,83 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  require_relative "harbr/version"
3
+ require 'dddr'
4
+ require 'sucker_punch'
4
5
 
5
6
  module Harbr
6
7
  class Error < StandardError; end
7
- # Your code goes here...
8
+ class Container
9
+ class Job
10
+ include SuckerPunch::Job
11
+
12
+ def perform(config)
13
+
14
+ puts "Harbr Job!"
15
+ puts config
16
+
17
+ end
18
+ end
19
+
20
+ include Dddr::Entity
21
+ attr_accessor :name, :host_header, :ip, :port
22
+ end
23
+
24
+ class Port
25
+
26
+ include Dddr::Entity
27
+ attr_accessor :host_header, :number
28
+
29
+ queries do
30
+ def has_port_number?(number)
31
+ all.find {|port| port.number == number.to_i}
32
+ end
33
+ def assigned_a_port?(host_header)
34
+ all.find {|port| port.host_header == host_header}
35
+ end
36
+ end
37
+ class Pool
38
+ def initialize(port_range=50000..51000)
39
+
40
+ @repository = Port::Repository.new
41
+
42
+ port_range.each do |number|
43
+
44
+ port = Port.new
45
+ port.number = number
46
+
47
+ unless @repository.has_port_number? number
48
+ @repository.add(port)
49
+ puts port.number.to_s + " added!"
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ def get_port(host_header)
56
+
57
+ port = @repository.assigned_a_port?(host_header)
58
+ return port unless port.nil?
59
+
60
+ port = ports.shuffle.sample
61
+ port.host_header = host_header
62
+ @repository.update(port)
63
+ port
64
+ end
65
+
66
+ def return_port(port)
67
+ port.host_header = nil
68
+ @repository.update(port)
69
+ port.host_header.nil?
70
+ end
71
+
72
+ def ports
73
+ @repository.all
74
+ end
75
+
76
+ end
77
+
78
+
79
+ end
80
+
81
+
82
+ # Your code goes here...
8
83
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: harbr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delaney Kuldvee Burke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-02 00:00:00.000000000 Z
11
+ date: 2023-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dddr
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: sucker_punch
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.2
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.2
41
83
  description: Harbr is a versatile tool designed to streamline the deployment, management,
42
84
  and scaling of Rack-based applications. It integrates with version control and process
43
85
  supervision systems to ensure smooth and consistent application delivery.
@@ -57,6 +99,7 @@ files:
57
99
  - Rakefile
58
100
  - exe/harbr
59
101
  - hero.png
102
+ - lib/examples/harbr.toml
60
103
  - lib/harbr.rb
61
104
  - lib/harbr/version.rb
62
105
  - sig/harbr.rbs