44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module Database
 | |
|     class PostgresTableSize < SharedModel
 | |
|       SMALL = 10.gigabytes
 | |
|       MEDIUM = 50.gigabytes
 | |
|       LARGE = 100.gigabytes
 | |
| 
 | |
|       CLASSIFICATION = {
 | |
|         small: 0...SMALL,
 | |
|         medium: SMALL...MEDIUM,
 | |
|         large: MEDIUM...LARGE,
 | |
|         over_limit: LARGE...
 | |
|       }.freeze
 | |
| 
 | |
|       self.primary_key = 'identifier'
 | |
|       self.table_name = 'postgres_table_sizes'
 | |
| 
 | |
|       scope :small, -> { where(size_in_bytes: CLASSIFICATION[:small]) }
 | |
|       scope :medium, -> { where(size_in_bytes: CLASSIFICATION[:medium]) }
 | |
|       scope :large, -> { where(size_in_bytes: CLASSIFICATION[:large]) }
 | |
|       scope :over_limit, -> { where(size_in_bytes: CLASSIFICATION[:over_limit]) }
 | |
| 
 | |
|       def self.by_table_name(table_name)
 | |
|         where(table_name: table_name).first
 | |
|       end
 | |
| 
 | |
|       def size_classification
 | |
|         case size_in_bytes
 | |
|         when CLASSIFICATION[:small]
 | |
|           'small'
 | |
|         when CLASSIFICATION[:medium]
 | |
|           'medium'
 | |
|         when CLASSIFICATION[:large]
 | |
|           'large'
 | |
|         when CLASSIFICATION[:over_limit]
 | |
|           'over_limit'
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |