From ff881732d29c177062e7a80dfa78b571a3287ef9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 21 Sep 2022 09:54:49 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=B7=B2=E8=AE=BE=E7=BD=AE=E8=AF=AD=E8=A8=80=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E4=B8=8D=E9=87=8D=E6=96=B0=E8=AE=BE=E7=BD=AE=E8=AF=AD?= =?UTF-8?q?=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/repository/languages_percentagable.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/concerns/repository/languages_percentagable.rb b/app/controllers/concerns/repository/languages_percentagable.rb index 53876327a..8f5d6ff25 100644 --- a/app/controllers/concerns/repository/languages_percentagable.rb +++ b/app/controllers/concerns/repository/languages_percentagable.rb @@ -11,6 +11,7 @@ module Repository::LanguagesPercentagable end def update_project_language(language) + return if @project.language.present? db_language = ProjectLanguage.find_or_create_by!(name: language.keys.first.downcase.upcase_first) @project.update_column(:project_language_id, db_language.id) rescue From 70f1e6827f18a9749b36136ec9da808d9d2e3f27 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 21 Sep 2022 10:06:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=B7=B2=E8=AE=BE=E7=BD=AE=E8=AF=AD=E8=A8=80=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E4=B8=8D=E9=87=8D=E6=96=B0=E8=AE=BE=E7=BD=AE=E8=AF=AD?= =?UTF-8?q?=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/repository/languages_percentagable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/repository/languages_percentagable.rb b/app/controllers/concerns/repository/languages_percentagable.rb index 8f5d6ff25..83374dad1 100644 --- a/app/controllers/concerns/repository/languages_percentagable.rb +++ b/app/controllers/concerns/repository/languages_percentagable.rb @@ -11,7 +11,7 @@ module Repository::LanguagesPercentagable end def update_project_language(language) - return if @project.language.present? + return if @project.project_language.present? db_language = ProjectLanguage.find_or_create_by!(name: language.keys.first.downcase.upcase_first) @project.update_column(:project_language_id, db_language.id) rescue From cc426833165934ade919c6ac5043c3a17bf794fc Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 23 Sep 2022 10:07:52 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=B4=BB?= =?UTF-8?q?=E8=B7=83=E5=BA=A6=E8=AE=A1=E7=AE=97=E8=AE=BF=E9=97=AE=E9=87=8F?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 9 ++++-- app/models/timeable_visit_record.rb | 28 +++++++++++++++++++ ...923012923_create_timeable_visit_records.rb | 13 +++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 app/models/timeable_visit_record.rb create mode 100644 db/migrate/20220923012923_create_timeable_visit_records.rb diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 32bb1f0eb..5ee1fdde3 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -47,8 +47,13 @@ class RepositoriesController < ApplicationController end def entries - @project.increment!(:visits) - CacheAsyncSetJob.perform_later("project_common_service", {visits: 1}, @project.id) + @week_project_visit_record, @month_project_visit_record = TimeableVisitRecord.build(@project.id) + if @week_project_visit_record.visits < 300 && @month_project_visit_record.visits < 1000 + @week_project_visit_record.increment!(:visits) + @month_project_visit_record.increment!(:visits) + @project.increment!(:visits) + CacheAsyncSetJob.perform_later("project_common_service", {visits: 1}, @project.id) + end if @project.educoder? @entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder.repo_name) else diff --git a/app/models/timeable_visit_record.rb b/app/models/timeable_visit_record.rb new file mode 100644 index 000000000..974e785e7 --- /dev/null +++ b/app/models/timeable_visit_record.rb @@ -0,0 +1,28 @@ +# == Schema Information +# +# Table name: timeable_visit_records +# +# id :integer not null, primary key +# time :string(255) +# project_id :integer +# visits :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_timeable_visit_records_on_project_id (project_id) +# index_timeable_visit_records_on_time (time) +# + +class TimeableVisitRecord < ApplicationRecord + + belongs_to :project + + def self.build(project_id) + week = TimeableVisitRecord.find_or_create_by!(time: Date.today.cweek, project_id: project_id) + month = TimeableVisitRecord.find_or_create_by!(time: Date.today.strftime("%Y%m"), project_id: project_id) + + return week, month + end +end diff --git a/db/migrate/20220923012923_create_timeable_visit_records.rb b/db/migrate/20220923012923_create_timeable_visit_records.rb new file mode 100644 index 000000000..ec105d20e --- /dev/null +++ b/db/migrate/20220923012923_create_timeable_visit_records.rb @@ -0,0 +1,13 @@ +class CreateTimeableVisitRecords < ActiveRecord::Migration[5.2] + def change + create_table :timeable_visit_records do |t| + t.string :time + t.references :project + t.integer :visits, default: 0 + + t.timestamps + end + + add_index :timeable_visit_records, :time + end +end From ef9592ef301f51267d4910c3b3ce520d482cbd09 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 23 Sep 2022 10:28:12 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E6=B4=BB?= =?UTF-8?q?=E8=B7=83=E5=BA=A6=E7=AE=97=E6=B3=95=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/cache/v2/project_common_service.rb | 2 ++ app/services/cache/v2/project_date_rank_service.rb | 8 ++++++-- app/services/cache/v2/project_rank_service.rb | 10 +++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/services/cache/v2/project_common_service.rb b/app/services/cache/v2/project_common_service.rb index 97023ae29..0d167c2a7 100644 --- a/app/services/cache/v2/project_common_service.rb +++ b/app/services/cache/v2/project_common_service.rb @@ -133,6 +133,8 @@ class Cache::V2::ProjectCommonService < ApplicationService end if @watchers.present? $redis_cache.hincrby(project_common_key, watchers_key, @watchers) + Cache::V2::ProjectRankService.call(@project_id, {watchers: @watchers}) + Cache::V2::ProjectDateRankService.call(@project_id, Date.today, {watchers: @watchers}) end if @praises.present? $redis_cache.hincrby(project_common_key, praises_key, @praises) diff --git a/app/services/cache/v2/project_date_rank_service.rb b/app/services/cache/v2/project_date_rank_service.rb index 08aae6f77..9d8ffca90 100644 --- a/app/services/cache/v2/project_date_rank_service.rb +++ b/app/services/cache/v2/project_date_rank_service.rb @@ -7,6 +7,7 @@ class Cache::V2::ProjectDateRankService < ApplicationService @project_id = project_id @rank_date = rank_date @visits = params[:visits] + @watchers = params[:watchers] @praises = params[:praises] @forks = params[:forks] @issues = params[:issues] @@ -35,6 +36,9 @@ class Cache::V2::ProjectDateRankService < ApplicationService if @visits.present? $redis_cache.zincrby(project_rank_key, @visits.to_i * 1, @project_id) end + if @watchers.present? + $redis_cache.zincrby(project_rank_key, @watchers.to_i * 5, @project_id) + end if @praises.present? $redis_cache.zincrby(project_rank_key, @praises.to_i * 5, @project_id) end @@ -42,13 +46,13 @@ class Cache::V2::ProjectDateRankService < ApplicationService $redis_cache.zincrby(project_rank_key, @forks.to_i * 10, @project_id) end if @issues.present? - $redis_cache.zincrby(project_rank_key, @issues.to_i * 10, @project_id) + $redis_cache.zincrby(project_rank_key, @issues.to_i * 5, @project_id) end if @pullrequests.present? $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) end if @commits.present? - $redis_cache.zincrby(project_rank_key, @commits.to_i * 1, @project_id) + $redis_cache.zincrby(project_rank_key, @commits.to_i * 5, @project_id) end $redis_cache.zscore(project_rank_key, @project_id) diff --git a/app/services/cache/v2/project_rank_service.rb b/app/services/cache/v2/project_rank_service.rb index 3265c0a6c..b88c416c4 100644 --- a/app/services/cache/v2/project_rank_service.rb +++ b/app/services/cache/v2/project_rank_service.rb @@ -5,6 +5,7 @@ class Cache::V2::ProjectRankService < ApplicationService def initialize(project_id, params={}) @project_id = project_id @visits = params[:visits] + @watchers = params[:watchers] @praises = params[:praises] @forks = params[:forks] @issues = params[:issues] @@ -51,6 +52,9 @@ class Cache::V2::ProjectRankService < ApplicationService if @visits.present? $redis_cache.zincrby(project_rank_key, @visits.to_i * 1, @project_id) end + if @watchers.present? + $redis_cache.zincrby(project_rank_key, @watchers.to_i * 5, @project_id) + end if @praises.present? $redis_cache.zincrby(project_rank_key, @praises.to_i * 5, @project_id) end @@ -58,13 +62,13 @@ class Cache::V2::ProjectRankService < ApplicationService $redis_cache.zincrby(project_rank_key, @forks.to_i * 10, @project_id) end if @issues.present? - $redis_cache.zincrby(project_rank_key, @issues.to_i * 10, @project_id) + $redis_cache.zincrby(project_rank_key, @issues.to_i * 5, @project_id) end if @pullrequests.present? $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) end if @commits.present? - $redis_cache.zincrby(project_rank_key, @commits.to_i * 1, @project_id) + $redis_cache.zincrby(project_rank_key, @commits.to_i * 5, @project_id) end reset_user_project_rank end @@ -74,7 +78,7 @@ class Cache::V2::ProjectRankService < ApplicationService def reset_project_rank load_project_common - score = @project_common["visits"].to_i * 1 + @project_common["praises"].to_i * 5 + @project_common["forks"].to_i * 10 + @project_common["issues"].to_i * 10 + @project_common["pullrequests"].to_i * 10 + @project_common["commits"].to_i * 1 + score = @project_common["visits"].to_i * 1 + @project_common["watchers"].to_i * 5 + @project_common["praises"].to_i * 5 + @project_common["forks"].to_i * 10 + @project_common["issues"].to_i * 5 + @project_common["pullrequests"].to_i * 10 + @project_common["commits"].to_i * 5 $redis_cache.zadd(project_rank_key, score, @project_id) reset_user_project_rank From d7f3a21addaf53da05a07759e3ab2864bc00c973 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 23 Sep 2022 17:56:39 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=91=A8?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE=E9=9C=80=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E5=B9=B4=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/timeable_visit_record.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/timeable_visit_record.rb b/app/models/timeable_visit_record.rb index 974e785e7..8411ddf66 100644 --- a/app/models/timeable_visit_record.rb +++ b/app/models/timeable_visit_record.rb @@ -20,7 +20,7 @@ class TimeableVisitRecord < ApplicationRecord belongs_to :project def self.build(project_id) - week = TimeableVisitRecord.find_or_create_by!(time: Date.today.cweek, project_id: project_id) + week = TimeableVisitRecord.find_or_create_by!(time: Date.today.strftime("%Y-%W"), project_id: project_id) month = TimeableVisitRecord.find_or_create_by!(time: Date.today.strftime("%Y%m"), project_id: project_id) return week, month