#435: added Statistic model

This commit is contained in:
Vokhmin Alexey V 2014-10-06 23:16:12 +04:00
parent 134dac6083
commit 5649e2e873
10 changed files with 213 additions and 103 deletions

View File

@ -1,6 +1,8 @@
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
AIRBRAKE_IGNORE = [ActionController::InvalidAuthenticityToken, AIRBRAKE_IGNORE = [
AbstractController::ActionNotFound] ActionController::InvalidAuthenticityToken,
AbstractController::ActionNotFound
]
protect_from_forgery protect_from_forgery

View File

@ -0,0 +1,7 @@
class StatisticsController < ApplicationController
def index
# TODO
end
end

36
app/models/statistic.rb Normal file
View File

@ -0,0 +1,36 @@
class Statistic < ActiveRecord::Base
# TYPES = %w()
belongs_to :user
belongs_to :project
validates :user_id,
uniqueness: { scope: [:project_id, :type, :activity_at] },
presence: true
validates :email,
presence: true
validates :project_id,
presence: true
validates :project_name_with_owner,
presence: true
validates :type,
presence: true
validates :counter,
presence: true
validates :activity_at,
presence: true
attr_accessible :user_id,
:email,
:project_id,
:project_name_with_owner,
:type,
:counter,
:activity_at
end

View File

@ -0,0 +1,3 @@
- set_meta_tags title: t('.header')
= t('.hello')

View File

@ -9,6 +9,7 @@ en:
build_lists: Task monitoring build_lists: Task monitoring
groups: Groups groups: Groups
advisories: Advisories advisories: Advisories
statistics: Statistics
bottom_menu: bottom_menu:
copyright: ROSA Lab © %{year} copyright: ROSA Lab © %{year}
about: About the company about: About the company

View File

@ -9,6 +9,7 @@ ru:
build_lists: Мониторинг задач build_lists: Мониторинг задач
groups: Группы groups: Группы
advisories: Бюллетени advisories: Бюллетени
statistics: Статистика
bottom_menu: bottom_menu:
copyright: ROSA Лаб. © %{year} copyright: ROSA Лаб. © %{year}
about: О компании about: О компании

View File

@ -0,0 +1,5 @@
en:
statistics:
index:
header: Statistics
hello: QQqqq

View File

@ -13,6 +13,7 @@ Rosa::Application.routes.draw do
match '/sitemap.xml.gz' => 'sitemap#show', via: [:get, :post, :head], as: :sitemap match '/sitemap.xml.gz' => 'sitemap#show', via: [:get, :post, :head], as: :sitemap
match '/robots.txt' => 'sitemap#robots', via: [:get, :post, :head], as: :robots match '/robots.txt' => 'sitemap#robots', via: [:get, :post, :head], as: :robots
resources :statistics, only: [:index]
resource :contact, only: [:new, :create, :sended] do resource :contact, only: [:new, :create, :sended] do
get '/' => 'contacts#new' get '/' => 'contacts#new'
get :sended get :sended

View File

@ -0,0 +1,32 @@
class CreateStatistics < ActiveRecord::Migration
def up
create_table :statistics do |t|
t.integer :user_id, null: false
t.string :email, null: false
t.integer :project_id, null: false
t.string :project_name_with_owner, null: false
t.string :type, null: false
t.integer :counter, null: false, default: 0
t.datetime :activity_at, null: false
t.timestamps
end
add_index :statistics, :user_id, algorithm: :concurrently
add_index :statistics, :project_id, algorithm: :concurrently
add_index :statistics, :type, algorithm: :concurrently
add_index :statistics, [:user_id, :type, :activity_at], algorithm: :concurrently
add_index :statistics, [:project_id, :type, :activity_at], algorithm: :concurrently
add_index :statistics, [:type, :activity_at], algorithm: :concurrently
add_index :statistics, :activity_at, algorithm: :concurrently
add_index :statistics, [:user_id, :project_id, :type, :activity_at], unique: true,
name: 'index_statistics_on_all_keys'
end
def down
drop_table :statistics
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140924203530) do ActiveRecord::Schema.define(version: 20141006182907) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -31,8 +31,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.text "description", default: "" t.text "description", default: ""
t.text "references", default: "" t.text "references", default: ""
t.text "update_type", default: "" t.text "update_type", default: ""
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["advisory_id"], :name => "index_advisories_on_advisory_id", :unique => true t.index ["advisory_id"], :name => "index_advisories_on_advisory_id", :unique => true
t.index ["update_type"], :name => "index_advisories_on_update_type" t.index ["update_type"], :name => "index_advisories_on_update_type"
end end
@ -90,8 +90,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "version" t.string "version"
t.string "release" t.string "release"
t.string "package_type" t.string "package_type"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.boolean "actual", default: false t.boolean "actual", default: false
t.string "sha1" t.string "sha1"
t.integer "epoch" t.integer "epoch"
@ -151,6 +151,31 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.index ["project_id"], :name => "index_build_lists_on_project_id" t.index ["project_id"], :name => "index_build_lists_on_project_id"
end end
create_table "projects", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "owner_id"
t.string "owner_type"
t.string "visibility", default: "open"
t.text "description"
t.string "ancestry"
t.boolean "has_issues", default: true
t.string "srpm_file_name"
t.integer "srpm_file_size"
t.datetime "srpm_updated_at"
t.string "srpm_content_type"
t.boolean "has_wiki", default: false
t.string "default_branch", default: "master"
t.boolean "is_package", default: true, null: false
t.integer "maintainer_id"
t.boolean "publish_i686_into_x86_64", default: false
t.string "owner_uname", null: false
t.boolean "architecture_dependent", default: false, null: false
t.integer "autostart_status"
t.index ["name", "owner_id", "owner_type"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true, :case_sensitive => false
end
create_table "build_scripts", force: true do |t| create_table "build_scripts", force: true do |t|
t.integer "project_id", null: false t.integer "project_id", null: false
t.string "treeish", null: false t.string "treeish", null: false
@ -160,6 +185,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["project_id", "treeish"], :name => "index_build_scripts_on_project_id_and_treeish", :unique => true t.index ["project_id", "treeish"], :name => "index_build_scripts_on_project_id_and_treeish", :unique => true
t.index ["project_id"], :name => "fk__build_scripts_project_id"
t.foreign_key ["project_id"], "projects", ["id"], :on_update => :no_action, :on_delete => :no_action, :name => "fk_build_scripts_project_id"
end end
create_table "comments", force: true do |t| create_table "comments", force: true do |t|
@ -195,8 +222,6 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.text "message" t.text "message"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["eventable_id", "eventable_type"], :name => "index_event_logs_on_eventable_id_and_eventable_type"
t.index ["user_id"], :name => "index_event_logs_on_user_id"
end end
create_table "flash_notifies", force: true do |t| create_table "flash_notifies", force: true do |t|
@ -204,8 +229,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.text "body_en", null: false t.text "body_en", null: false
t.string "status", null: false t.string "status", null: false
t.boolean "published", default: true, null: false t.boolean "published", default: true, null: false
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
end end
create_table "groups", force: true do |t| create_table "groups", force: true do |t|
@ -225,8 +250,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.text "data" t.text "data"
t.integer "project_id" t.integer "project_id"
t.string "name" t.string "name"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
end end
create_table "issues", force: true do |t| create_table "issues", force: true do |t|
@ -251,8 +276,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "key_id", null: false t.string "key_id", null: false
t.integer "user_id", null: false t.integer "user_id", null: false
t.integer "repository_id", null: false t.integer "repository_id", null: false
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["repository_id"], :name => "index_key_pairs_on_repository_id", :unique => true t.index ["repository_id"], :name => "index_key_pairs_on_repository_id", :unique => true
end end
@ -261,16 +286,16 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.integer "user_id", null: false t.integer "user_id", null: false
t.string "key_id", null: false t.string "key_id", null: false
t.text "public", null: false t.text "public", null: false
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["repository_id"], :name => "index_key_pairs_backup_on_repository_id", :unique => true t.index ["repository_id"], :name => "index_key_pairs_backup_on_repository_id", :unique => true
end end
create_table "labelings", force: true do |t| create_table "labelings", force: true do |t|
t.integer "label_id", null: false t.integer "label_id", null: false
t.integer "issue_id" t.integer "issue_id"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["issue_id"], :name => "index_labelings_on_issue_id" t.index ["issue_id"], :name => "index_labelings_on_issue_id"
end end
@ -278,16 +303,16 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "name", null: false t.string "name", null: false
t.string "color", null: false t.string "color", null: false
t.integer "project_id" t.integer "project_id"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["project_id"], :name => "index_labels_on_project_id" t.index ["project_id"], :name => "index_labels_on_project_id"
end end
create_table "mass_builds", force: true do |t| create_table "mass_builds", force: true do |t|
t.integer "build_for_platform_id", null: false t.integer "build_for_platform_id", null: false
t.string "name" t.string "name"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.string "arch_names" t.string "arch_names"
t.integer "user_id" t.integer "user_id"
t.integer "build_lists_count", default: 0, null: false t.integer "build_lists_count", default: 0, null: false
@ -310,6 +335,46 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.integer "status", default: 2000, null: false t.integer "status", default: 2000, null: false
end end
create_table "users", force: true do |t|
t.string "name"
t.string "email", default: "", null: false
t.string "encrypted_password", limit: 128, default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at"
t.datetime "updated_at"
t.text "ssh_key"
t.string "uname"
t.string "role"
t.string "language", default: "en"
t.integer "own_projects_count", default: 0, null: false
t.text "professional_experience"
t.string "site"
t.string "company"
t.string "location"
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.datetime "avatar_updated_at"
t.integer "failed_attempts", default: 0
t.string "unlock_token"
t.datetime "locked_at"
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "authentication_token"
t.integer "build_priority", default: 50
t.boolean "sound_notifications", default: true
t.boolean "hide_email", default: true, null: false
t.index ["authentication_token"], :name => "index_users_on_authentication_token"
t.index ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true
t.index ["email"], :name => "index_users_on_email", :unique => true
t.index ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
t.index ["uname"], :name => "index_users_on_uname", :unique => true
t.index ["unlock_token"], :name => "index_users_on_unlock_token", :unique => true
end
create_table "node_instructions", force: true do |t| create_table "node_instructions", force: true do |t|
t.integer "user_id", null: false t.integer "user_id", null: false
t.text "encrypted_instruction", null: false t.text "encrypted_instruction", null: false
@ -317,6 +382,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "status" t.string "status"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["user_id"], :name => "fk__node_instructions_user_id"
t.foreign_key ["user_id"], "users", ["id"], :on_update => :no_action, :on_delete => :no_action, :name => "fk_node_instructions_user_id"
end end
create_table "platform_arch_settings", force: true do |t| create_table "platform_arch_settings", force: true do |t|
@ -324,8 +391,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.integer "arch_id", null: false t.integer "arch_id", null: false
t.integer "time_living", null: false t.integer "time_living", null: false
t.boolean "default" t.boolean "default"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["platform_id", "arch_id"], :name => "index_platform_arch_settings_on_platform_id_and_arch_id", :unique => true t.index ["platform_id", "arch_id"], :name => "index_platform_arch_settings_on_platform_id_and_arch_id", :unique => true
end end
@ -340,7 +407,7 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "owner_type" t.string "owner_type"
t.string "visibility", default: "open", null: false t.string "visibility", default: "open", null: false
t.string "platform_type", default: "main", null: false t.string "platform_type", default: "main", null: false
t.string "distrib_type" t.string "distrib_type", null: false
t.integer "status" t.integer "status"
t.datetime "last_regenerated_at" t.datetime "last_regenerated_at"
t.integer "last_regenerated_status" t.integer "last_regenerated_status"
@ -398,8 +465,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.integer "build_count", default: 0, null: false t.integer "build_count", default: 0, null: false
t.integer "arch_id", null: false t.integer "arch_id", null: false
t.integer "project_id", null: false t.integer "project_id", null: false
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["project_id", "arch_id"], :name => "index_project_statistics_on_project_id_and_arch_id", :unique => true t.index ["project_id", "arch_id"], :name => "index_project_statistics_on_project_id_and_arch_id", :unique => true
end end
@ -409,8 +476,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "sha1" t.string "sha1"
t.string "tag_name" t.string "tag_name"
t.integer "format_id" t.integer "format_id"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
end end
create_table "project_to_repositories", force: true do |t| create_table "project_to_repositories", force: true do |t|
@ -422,31 +489,6 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.index ["repository_id", "project_id"], :name => "index_project_to_repositories_on_repository_id_and_project_id", :unique => true t.index ["repository_id", "project_id"], :name => "index_project_to_repositories_on_repository_id_and_project_id", :unique => true
end end
create_table "projects", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "owner_id"
t.string "owner_type"
t.string "visibility", default: "open"
t.text "description"
t.string "ancestry"
t.boolean "has_issues", default: true
t.boolean "has_wiki", default: false
t.string "srpm_file_name"
t.string "srpm_content_type"
t.integer "srpm_file_size"
t.datetime "srpm_updated_at"
t.string "default_branch", default: "master"
t.boolean "is_package", default: true, null: false
t.integer "maintainer_id"
t.boolean "publish_i686_into_x86_64", default: false
t.string "owner_uname", null: false
t.boolean "architecture_dependent", default: false, null: false
t.integer "autostart_status"
t.index ["name", "owner_id", "owner_type"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true, :case_sensitive => false
end
create_table "pull_requests", force: true do |t| create_table "pull_requests", force: true do |t|
t.integer "issue_id", null: false t.integer "issue_id", null: false
t.integer "to_project_id", null: false t.integer "to_project_id", null: false
@ -455,9 +497,9 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "from_ref", null: false t.string "from_ref", null: false
t.string "from_project_owner_uname" t.string "from_project_owner_uname"
t.string "from_project_name" t.string "from_project_name"
t.index ["from_project_id"], :name => "index_pull_requests_on_from_project_id" t.index ["from_project_id"], :name => "index_pull_requests_on_head_project_id"
t.index ["issue_id"], :name => "index_pull_requests_on_issue_id" t.index ["issue_id"], :name => "index_pull_requests_on_issue_id"
t.index ["to_project_id"], :name => "index_pull_requests_on_to_project_id" t.index ["to_project_id"], :name => "index_pull_requests_on_base_project_id"
end end
create_table "register_requests", force: true do |t| create_table "register_requests", force: true do |t|
@ -505,8 +547,8 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.integer "status", default: 0 t.integer "status", default: 0
t.datetime "last_regenerated_at" t.datetime "last_regenerated_at"
t.integer "last_regenerated_status" t.integer "last_regenerated_status"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.string "last_regenerated_log_sha1" t.string "last_regenerated_log_sha1"
t.index ["repository_id", "platform_id"], :name => "index_repository_statuses_on_repository_id_and_platform_id", :unique => true t.index ["repository_id", "platform_id"], :name => "index_repository_statuses_on_repository_id_and_platform_id", :unique => true
end end
@ -533,12 +575,32 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.text "key", null: false t.text "key", null: false
t.string "fingerprint", null: false t.string "fingerprint", null: false
t.integer "user_id", null: false t.integer "user_id", null: false
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["fingerprint"], :name => "index_ssh_keys_on_fingerprint", :unique => true t.index ["fingerprint"], :name => "index_ssh_keys_on_fingerprint", :unique => true
t.index ["user_id"], :name => "index_ssh_keys_on_user_id" t.index ["user_id"], :name => "index_ssh_keys_on_user_id"
end end
create_table "statistics", force: true do |t|
t.integer "user_id", null: false
t.string "email", null: false
t.integer "project_id", null: false
t.string "project_name_with_owner", null: false
t.string "type", null: false
t.integer "counter", default: 0, null: false
t.datetime "activity_at", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.index ["activity_at"], :name => "index_statistics_on_activity_at"
t.index ["project_id", "type", "activity_at"], :name => "index_statistics_on_project_id_and_type_and_activity_at"
t.index ["project_id"], :name => "index_statistics_on_project_id"
t.index ["type", "activity_at"], :name => "index_statistics_on_type_and_activity_at"
t.index ["type"], :name => "index_statistics_on_type"
t.index ["user_id", "project_id", "type", "activity_at"], :name => "index_statistics_on_all_keys", :unique => true
t.index ["user_id", "type", "activity_at"], :name => "index_statistics_on_user_id_and_type_and_activity_at"
t.index ["user_id"], :name => "index_statistics_on_user_id"
end
create_table "subscribes", force: true do |t| create_table "subscribes", force: true do |t|
t.string "subscribeable_type" t.string "subscribeable_type"
t.integer "user_id" t.integer "user_id"
@ -557,50 +619,10 @@ ActiveRecord::Schema.define(version: 20140924203530) do
t.string "status", default: "active" t.string "status", default: "active"
t.text "description" t.text "description"
t.string "authentication_token", null: false t.string "authentication_token", null: false
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.index ["authentication_token"], :name => "index_tokens_on_authentication_token", :unique => true t.index ["authentication_token"], :name => "index_tokens_on_authentication_token", :unique => true
t.index ["subject_id", "subject_type"], :name => "index_tokens_on_subject_id_and_subject_type" t.index ["subject_id", "subject_type"], :name => "index_tokens_on_subject_id_and_subject_type"
end end
create_table "users", force: true do |t|
t.string "name"
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at"
t.datetime "updated_at"
t.text "ssh_key"
t.string "uname"
t.string "role"
t.string "language", default: "en"
t.integer "own_projects_count", default: 0, null: false
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.text "professional_experience"
t.string "site"
t.string "company"
t.string "location"
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.datetime "avatar_updated_at"
t.integer "failed_attempts", default: 0
t.string "unlock_token"
t.datetime "locked_at"
t.string "authentication_token"
t.integer "build_priority", default: 50
t.boolean "sound_notifications", default: true
t.boolean "hide_email", default: true, null: false
t.index ["authentication_token"], :name => "index_users_on_authentication_token"
t.index ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true
t.index ["email"], :name => "index_users_on_email", :unique => true
t.index ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
t.index ["uname"], :name => "index_users_on_uname", :unique => true
t.index ["unlock_token"], :name => "index_users_on_unlock_token", :unique => true
end
end end