diff --git a/app/graphql/types/subscription/subscription_type.rb b/app/graphql/types/subscription/subscription_type.rb index 055746b2..414ddb48 100644 --- a/app/graphql/types/subscription/subscription_type.rb +++ b/app/graphql/types/subscription/subscription_type.rb @@ -8,7 +8,9 @@ class SubscriptionType < Types::BaseObject field :level, String, null: false field :status, String, null: false field :count, Integer, null: false - field :status_updated_at, GraphQL::Types::ISO8601DateTime, null: false + field :status_updated_at, GraphQL::Types::ISO8601DateTime, null: true + field :collect_at, GraphQL::Types::ISO8601DateTime, null: true + field :complete_at, GraphQL::Types::ISO8601DateTime, null: true end end end diff --git a/app/models/subject.rb b/app/models/subject.rb index 3249ed38..fd94dc18 100644 --- a/app/models/subject.rb +++ b/app/models/subject.rb @@ -10,6 +10,8 @@ # status_updated_at :datetime # created_at :datetime not null # updated_at :datetime not null +# collect_at :datetime +# complete_at :datetime # # Indexes # diff --git a/app/models/subscription.rb b/app/models/subscription.rb index 1b66e578..6a183010 100644 --- a/app/models/subscription.rb +++ b/app/models/subscription.rb @@ -15,7 +15,7 @@ class Subscription < ApplicationRecord belongs_to :user belongs_to :subject - delegate :label, :level, :status, :count, :status_updated_at, to: :subject, allow_nil: true + delegate :label, :level, :status, :count, :status_updated_at, :collect_at, :complete_at, to: :subject, allow_nil: true attr_accessor :skip_notify_subscription diff --git a/app/services/analyze_group_server.rb b/app/services/analyze_group_server.rb index 9b291dc4..8c3154e5 100644 --- a/app/services/analyze_group_server.rb +++ b/app/services/analyze_group_server.rb @@ -176,7 +176,7 @@ def submit_task_status end count = repos_count - message = { label: @project_name, level: @level, status: Subject.task_status_converter(task_resp['status']), count: count, status_updated_at: DateTime.now.iso8601 } + message = { label: @project_name, level: @level, status: Subject.task_status_converter(task_resp['status']), count: count, status_updated_at: DateTime.now.utc.iso8601 } RabbitMQ.publish(SUBSCRIPTION_QUEUE, message) if count > 0 { status: task_resp['status'], message: I18n.t('analysis.task.pending') } diff --git a/app/services/analyze_server.rb b/app/services/analyze_server.rb index 14bf5611..5556e7e4 100644 --- a/app/services/analyze_server.rb +++ b/app/services/analyze_server.rb @@ -143,7 +143,7 @@ def submit_task_status ) end - message = { label: @repo_url, level: 'repo', status: Subject.task_status_converter(task_resp['status']), count: 1, status_updated_at: DateTime.now.iso8601 } + message = { label: @repo_url, level: 'repo', status: Subject.task_status_converter(task_resp['status']), count: 1, status_updated_at: DateTime.now.utc.iso8601 } RabbitMQ.publish(SUBSCRIPTION_QUEUE, message) { status: task_resp['status'], message: I18n.t('analysis.task.pending') } rescue => ex diff --git a/app/workers/subscriptions_update_worker.rb b/app/workers/subscriptions_update_worker.rb index 9ae7c384..21022238 100644 --- a/app/workers/subscriptions_update_worker.rb +++ b/app/workers/subscriptions_update_worker.rb @@ -25,7 +25,15 @@ def work(msg) count: count ) end - subject.status != status && subject.update!(status: status) + if subject.status != status + update_attributes = { status: status, status_updated_at: status_updated_at } + if status == Subject::PROGRESS + update_attributes.merge!({ collect_at: status_updated_at }) + elsif status == Subject::COMPLETE + update_attributes.merge!({ complete_at: status_updated_at }) + end + subject.update!(update_attributes) + end if subject.status == Subject::COMPLETE subject.subscriptions.includes(:user).each do |subscription| diff --git a/db/migrate/20230607025539_add_collect_at_and_complete_at_to_subjects.rb b/db/migrate/20230607025539_add_collect_at_and_complete_at_to_subjects.rb new file mode 100644 index 00000000..5c44797c --- /dev/null +++ b/db/migrate/20230607025539_add_collect_at_and_complete_at_to_subjects.rb @@ -0,0 +1,6 @@ +class AddCollectAtAndCompleteAtToSubjects < ActiveRecord::Migration[7.0] + def change + add_column :subjects, :collect_at, :datetime + add_column :subjects, :complete_at, :datetime + end +end diff --git a/spec/models/subject_spec.rb b/spec/models/subject_spec.rb index 5a40d4b4..af02469f 100644 --- a/spec/models/subject_spec.rb +++ b/spec/models/subject_spec.rb @@ -10,6 +10,8 @@ # status_updated_at :datetime # created_at :datetime not null # updated_at :datetime not null +# collect_at :datetime +# complete_at :datetime # # Indexes #