Add two new ActiveRecord models
- Namespace::Storagestatistics will persist root namespace statistics - Namespace::AggregationSchedule will save information when a new update to the namespace statistics needs to be scheduled Both tables use 'namespace_id' as primary key
This commit is contained in:
parent
d6c7d4c48d
commit
bde41ee866
12 changed files with 113 additions and 0 deletions
|
@ -35,6 +35,8 @@ class Namespace < ApplicationRecord
|
||||||
belongs_to :parent, class_name: "Namespace"
|
belongs_to :parent, class_name: "Namespace"
|
||||||
has_many :children, class_name: "Namespace", foreign_key: :parent_id
|
has_many :children, class_name: "Namespace", foreign_key: :parent_id
|
||||||
has_one :chat_team, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
|
has_one :chat_team, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
|
||||||
|
has_one :root_storage_statistics, class_name: 'Namespace::RootStorageStatistics'
|
||||||
|
has_one :aggregation_schedule, class_name: 'Namespace::AggregationSchedule'
|
||||||
|
|
||||||
validates :owner, presence: true, unless: ->(n) { n.type == "Group" }
|
validates :owner, presence: true, unless: ->(n) { n.type == "Group" }
|
||||||
validates :name,
|
validates :name,
|
||||||
|
|
7
app/models/namespace/aggregation_schedule.rb
Normal file
7
app/models/namespace/aggregation_schedule.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class Namespace::AggregationSchedule < ApplicationRecord
|
||||||
|
self.primary_key = :namespace_id
|
||||||
|
|
||||||
|
belongs_to :namespace
|
||||||
|
end
|
10
app/models/namespace/root_storage_statistics.rb
Normal file
10
app/models/namespace/root_storage_statistics.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class Namespace::RootStorageStatistics < ApplicationRecord
|
||||||
|
self.primary_key = :namespace_id
|
||||||
|
|
||||||
|
belongs_to :namespace
|
||||||
|
has_one :route, through: :namespace
|
||||||
|
|
||||||
|
delegate :all_projects, to: :namespace
|
||||||
|
end
|
|
@ -0,0 +1,22 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class CreateNamespaceRootStorageStatistics < ActiveRecord::Migration[5.1]
|
||||||
|
DOWNTIME = false
|
||||||
|
|
||||||
|
def change
|
||||||
|
create_table :namespace_root_storage_statistics, id: false, primary_key: :namespace_id do |t|
|
||||||
|
t.integer :namespace_id, null: false, primary_key: true
|
||||||
|
t.datetime_with_timezone :updated_at, null: false
|
||||||
|
|
||||||
|
t.bigint :repository_size, null: false, default: 0
|
||||||
|
t.bigint :lfs_objects_size, null: false, default: 0
|
||||||
|
t.bigint :wiki_size, null: false, default: 0
|
||||||
|
t.bigint :build_artifacts_size, null: false, default: 0
|
||||||
|
t.bigint :storage_size, null: false, default: 0
|
||||||
|
t.bigint :packages_size, null: false, default: 0
|
||||||
|
|
||||||
|
t.index :namespace_id, unique: true
|
||||||
|
t.foreign_key :namespaces, column: :namespace_id, on_delete: :cascade
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,14 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class CreateNamespaceAggregationSchedules < ActiveRecord::Migration[5.1]
|
||||||
|
DOWNTIME = false
|
||||||
|
|
||||||
|
def change
|
||||||
|
create_table :namespace_aggregation_schedules, id: false, primary_key: :namespace_id do |t|
|
||||||
|
t.integer :namespace_id, null: false, primary_key: true
|
||||||
|
|
||||||
|
t.index :namespace_id, unique: true
|
||||||
|
t.foreign_key :namespaces, column: :namespace_id, on_delete: :cascade
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
17
db/schema.rb
17
db/schema.rb
|
@ -2055,6 +2055,21 @@ ActiveRecord::Schema.define(version: 20190620112608) do
|
||||||
t.index ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
|
t.index ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "namespace_aggregation_schedules", primary_key: "namespace_id", id: :integer, default: nil, force: :cascade do |t|
|
||||||
|
t.index ["namespace_id"], name: "index_namespace_aggregation_schedules_on_namespace_id", unique: true, using: :btree
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "namespace_root_storage_statistics", primary_key: "namespace_id", id: :integer, default: nil, force: :cascade do |t|
|
||||||
|
t.datetime_with_timezone "updated_at", null: false
|
||||||
|
t.bigint "repository_size", default: 0, null: false
|
||||||
|
t.bigint "lfs_objects_size", default: 0, null: false
|
||||||
|
t.bigint "wiki_size", default: 0, null: false
|
||||||
|
t.bigint "build_artifacts_size", default: 0, null: false
|
||||||
|
t.bigint "storage_size", default: 0, null: false
|
||||||
|
t.bigint "packages_size", default: 0, null: false
|
||||||
|
t.index ["namespace_id"], name: "index_namespace_root_storage_statistics_on_namespace_id", unique: true, using: :btree
|
||||||
|
end
|
||||||
|
|
||||||
create_table "namespace_statistics", id: :serial, force: :cascade do |t|
|
create_table "namespace_statistics", id: :serial, force: :cascade do |t|
|
||||||
t.integer "namespace_id", null: false
|
t.integer "namespace_id", null: false
|
||||||
t.integer "shared_runners_seconds", default: 0, null: false
|
t.integer "shared_runners_seconds", default: 0, null: false
|
||||||
|
@ -3757,6 +3772,8 @@ ActiveRecord::Schema.define(version: 20190620112608) do
|
||||||
add_foreign_key "merge_trains", "users", on_delete: :cascade
|
add_foreign_key "merge_trains", "users", on_delete: :cascade
|
||||||
add_foreign_key "milestones", "namespaces", column: "group_id", name: "fk_95650a40d4", on_delete: :cascade
|
add_foreign_key "milestones", "namespaces", column: "group_id", name: "fk_95650a40d4", on_delete: :cascade
|
||||||
add_foreign_key "milestones", "projects", name: "fk_9bd0a0c791", on_delete: :cascade
|
add_foreign_key "milestones", "projects", name: "fk_9bd0a0c791", on_delete: :cascade
|
||||||
|
add_foreign_key "namespace_aggregation_schedules", "namespaces", on_delete: :cascade
|
||||||
|
add_foreign_key "namespace_root_storage_statistics", "namespaces", on_delete: :cascade
|
||||||
add_foreign_key "namespace_statistics", "namespaces", on_delete: :cascade
|
add_foreign_key "namespace_statistics", "namespaces", on_delete: :cascade
|
||||||
add_foreign_key "namespaces", "namespaces", column: "custom_project_templates_group_id", name: "fk_e7a0b20a6b", on_delete: :nullify
|
add_foreign_key "namespaces", "namespaces", column: "custom_project_templates_group_id", name: "fk_e7a0b20a6b", on_delete: :nullify
|
||||||
add_foreign_key "namespaces", "plans", name: "fk_fdd12e5b80", on_delete: :nullify
|
add_foreign_key "namespaces", "plans", name: "fk_fdd12e5b80", on_delete: :nullify
|
||||||
|
|
7
spec/factories/namespace/aggregation_schedules.rb
Normal file
7
spec/factories/namespace/aggregation_schedules.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :namespace_aggregation_schedules, class: Namespace::AggregationSchedule do
|
||||||
|
namespace
|
||||||
|
end
|
||||||
|
end
|
7
spec/factories/namespace/root_storage_statistics.rb
Normal file
7
spec/factories/namespace/root_storage_statistics.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :namespace_root_storage_statistics, class: Namespace::RootStorageStatistics do
|
||||||
|
namespace
|
||||||
|
end
|
||||||
|
end
|
|
@ -19,5 +19,13 @@ FactoryBot.define do
|
||||||
owner.namespace = namespace
|
owner.namespace = namespace
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trait :with_aggregation_schedule do
|
||||||
|
association :aggregation_schedule, factory: :namespace_aggregation_schedules
|
||||||
|
end
|
||||||
|
|
||||||
|
trait :with_root_storage_statistics do
|
||||||
|
association :root_storage_statistics, factory: :namespace_root_storage_statistics
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
7
spec/models/namespace/aggregation_schedule_spec.rb
Normal file
7
spec/models/namespace/aggregation_schedule_spec.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
RSpec.describe Namespace::AggregationSchedule, type: :model do
|
||||||
|
it { is_expected.to belong_to :namespace }
|
||||||
|
end
|
10
spec/models/namespace/root_storage_statistics_spec.rb
Normal file
10
spec/models/namespace/root_storage_statistics_spec.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
RSpec.describe Namespace::RootStorageStatistics, type: :model do
|
||||||
|
it { is_expected.to belong_to :namespace }
|
||||||
|
it { is_expected.to have_one(:route).through(:namespace) }
|
||||||
|
|
||||||
|
it { is_expected.to delegate_method(:all_projects).to(:namespace) }
|
||||||
|
end
|
|
@ -15,6 +15,8 @@ describe Namespace do
|
||||||
it { is_expected.to have_many :project_statistics }
|
it { is_expected.to have_many :project_statistics }
|
||||||
it { is_expected.to belong_to :parent }
|
it { is_expected.to belong_to :parent }
|
||||||
it { is_expected.to have_many :children }
|
it { is_expected.to have_many :children }
|
||||||
|
it { is_expected.to have_one :root_storage_statistics }
|
||||||
|
it { is_expected.to have_one :aggregation_schedule }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
|
|
Loading…
Reference in a new issue