Sha256: b252e958634ac27018bd9e80b95b93f86131afcce9cb6961ae0d6be321e7321e

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

#!/usr/bin/env ruby

require 'thor'
require 'json'

class PortManager < Thor
    PORT_FILE = '/var/harbr/ports'
    PORT_RANGE = 60535..65535
    PORTS = {}

    no_commands {
        def load_ports
            if File.exist?(PORT_FILE)
                PORTS.merge!(JSON.parse(File.read(PORT_FILE)))
            end
        end

        def save_ports
            File.write(PORT_FILE, PORTS.to_json)
        end
    }

    desc "assign KEY", "Assign a random port to a given key"
    def assign(key)
        load_ports
        if PORTS.value?(key.downcase)
            puts "Key #{key} is already assigned to a port"
            return
        end

        available_ports = PORT_RANGE.to_a - PORTS.keys.map(&:to_i)
        if available_ports.empty?
            puts 'No available ports'
            return
        end

        port = available_ports.sample
        PORTS[port.to_s.downcase] = key
        save_ports
        puts "Assigned port: #{port} to key: #{key}"
    end

    

    desc "release PORT", "Release a specified port"
    def release(port)
        load_ports
        if PORTS.delete(port.to_s)
            save_ports
            puts "Released port: #{port}"
        else
            puts "Port #{port} is not assigned"
        end
    end

    desc "pool", "List all assigned ports"
    def pool
        load_ports
        puts 'Assigned Ports:'
        PORTS.each { |port, key| puts "Port: #{port}, Key: #{key}" }
    end

    desc "key KEY", "Get the port for a given key"
    def key(key)
        load_ports
        port = PORTS.key(key.downcase)
        if port
            port = port.to_i
            puts port
        else
            puts "No port assigned to key #{key}"
        end
    end
end

PortManager.start(ARGV)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
portr-0.0.1 exe/port