Sha256: 645d08ff84820ce09cee9c48161ce4b07e7a56a36108fe1f8147844383199d19

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

module Kubec
  module Status
    # :nodoc:
    class Pod < Base
      fields %w[Name Ready Status Restarts Age]

      # :nodoc:
      class Item < Hash
        FIELDS = %i[name ready status restarts age].freeze

        attr_reader :spec, :metadata, :status, :containers

        def initialize(data)
          @data = data
          @metadata = data.dig('metadata')
          @spec = data.dig('spec')
          @status = data.dig('status')
          @containers = data.dig('status', 'containerStatuses')

          FIELDS.each { |field| send("setup_#{field}") }
        end

        protected

        def setup_name
          self['Name'] = metadata['name']
        end

        def setup_ready
          total = containers.size
          ready = containers.select do |item|
            item['state'].key?('running')
          end.size
          self['Ready'] = "#{ready}/#{total}"
        end

        def setup_status
          self['Status'] = status['phase']
        end

        def setup_restarts
          self['Restarts'] = containers.map do |c|
            c['restartCount'].to_i
          end.sum
        end

        def setup_age
          created_at = DateTime.parse(status['startTime']).to_time
          secs = (Time.now - created_at).ceil
          self['Age'] =
            Utils::HumanizeTime
            .humanize(secs, short: true, join: false).first
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kubec-0.3.1 lib/kubec/status/pod.rb
kubec-0.3.0 lib/kubec/status/pod.rb
kubec-0.2.0 lib/kubec/status/pod.rb