Sha256: 12813e0b26b2b5910a5ead513b61aba97cd70934b8f7de1072bf971ac83fcf5e

Contents?: true

Size: 1.78 KB

Versions: 13

Compression:

Stored size: 1.78 KB

Contents

module GitlabJanitor
  class ImageCleaner
    class Store

      attr_reader :logger, :filename, :images

      def initialize(logger:, filename: './images.txt')
        @filename = filename
        @logger = logger
      end

      def parse_images
        Docker::Image.all.map do |m|
          tags = m.info.fetch('RepoTags', []) || []
          tags = [m.info['id']] if tags.empty? || tags.first == '<none>:<none>'
          m.info['RepoTags'] = tags

          tags.map do |name|
            Model.new(m, name, self)
          end
        end.flatten
      end

      def load
        containers = Docker::Container.all(all: true).each_with_object({}) do |c, res|
          res[c.info['ImageID']] = true
          res[c.info['Image']] = true
        end

        File.open(@filename, 'a+') do |file|
          i = 0
          @images = file.readlines.select(&:present?).each_with_object({}) do |line, imgs|
            i += 1
            name, image_id, loaded_at = line.strip.split(' ')
            loaded_at = Time.now.to_i if containers[name] || containers[image_id]

            imgs[name] = { id: image_id, loaded_at: Time.at(loaded_at.to_i) }
          rescue StandardError => e
            logger.error "Unable to load from line #{i} '#{line}': #{e}"
          end
        end
        @images
      end

      def image(img)
        @images[img.name] ||= { id: img.id, loaded_at: Time.now }
      end

      def save(imgs = parse_images, skip_older: Time.at(0))
        @images = @images.delete_if do |_k, img|
          img[:loaded_at] < skip_older
        end

        imgs.each {|m| image(m) }

        File.open(@filename, 'w+') do |file|
          @images.each do |name, data|
            file.puts("#{name} #{data[:id]} #{data[:loaded_at].to_i}")
          end
        end
      end

    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
gitlab-janitor-1.0.5.229406 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.4.134297 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.4.134295 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.4.94895 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.4.94868 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.4.94864 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.3.92955 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.2.92954 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.2.92951 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.2.92948 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.2.92942 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.2.92940 lib/gitlab_janitor/image_cleaner/store.rb
gitlab-janitor-1.0.2.92939 lib/gitlab_janitor/image_cleaner/store.rb