103 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class Gitlab::Serverless::Service
 | 
						|
  include Gitlab::Utils::StrongMemoize
 | 
						|
 | 
						|
  def initialize(attributes)
 | 
						|
    @attributes = attributes
 | 
						|
  end
 | 
						|
 | 
						|
  def name
 | 
						|
    @attributes.dig('metadata', 'name')
 | 
						|
  end
 | 
						|
 | 
						|
  def namespace
 | 
						|
    @attributes.dig('metadata', 'namespace')
 | 
						|
  end
 | 
						|
 | 
						|
  def environment_scope
 | 
						|
    @attributes.dig('environment_scope')
 | 
						|
  end
 | 
						|
 | 
						|
  def environment
 | 
						|
    @attributes.dig('environment')
 | 
						|
  end
 | 
						|
 | 
						|
  def podcount
 | 
						|
    @attributes.dig('podcount')
 | 
						|
  end
 | 
						|
 | 
						|
  def created_at
 | 
						|
    strong_memoize(:created_at) do
 | 
						|
      timestamp = @attributes.dig('metadata', 'creationTimestamp')
 | 
						|
      DateTime.parse(timestamp) if timestamp
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def image
 | 
						|
    @attributes.dig(
 | 
						|
      'spec',
 | 
						|
      'runLatest',
 | 
						|
      'configuration',
 | 
						|
      'build',
 | 
						|
      'template',
 | 
						|
      'name')
 | 
						|
  end
 | 
						|
 | 
						|
  def description
 | 
						|
    knative_07_description || knative_05_06_description
 | 
						|
  end
 | 
						|
 | 
						|
  def cluster
 | 
						|
    @attributes.dig('cluster')
 | 
						|
  end
 | 
						|
 | 
						|
  def url
 | 
						|
    proxy_url || knative_06_07_url || knative_05_url
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def proxy_url
 | 
						|
    if cluster&.serverless_domain
 | 
						|
      ::Serverless::Domain.new(
 | 
						|
        function_name: name,
 | 
						|
        serverless_domain_cluster: cluster.serverless_domain,
 | 
						|
        environment: environment
 | 
						|
      ).uri.to_s
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def knative_07_description
 | 
						|
    @attributes.dig(
 | 
						|
      'spec',
 | 
						|
      'template',
 | 
						|
      'metadata',
 | 
						|
      'annotations',
 | 
						|
      'Description'
 | 
						|
    )
 | 
						|
  end
 | 
						|
 | 
						|
  def knative_05_06_description
 | 
						|
    @attributes.dig(
 | 
						|
      'spec',
 | 
						|
      'runLatest',
 | 
						|
      'configuration',
 | 
						|
      'revisionTemplate',
 | 
						|
      'metadata',
 | 
						|
      'annotations',
 | 
						|
      'Description')
 | 
						|
  end
 | 
						|
 | 
						|
  def knative_05_url
 | 
						|
    domain = @attributes.dig('status', 'domain')
 | 
						|
    return unless domain
 | 
						|
 | 
						|
    "http://#{domain}"
 | 
						|
  end
 | 
						|
 | 
						|
  def knative_06_07_url
 | 
						|
    @attributes.dig('status', 'url')
 | 
						|
  end
 | 
						|
end
 |