From 886c5a4715994bdb6c0bdee05c2f7d05528a5883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20Mar=C3=ADa=20Mart=C3=ADnez=20G=C3=B3mez?= Date: Tue, 28 Nov 2017 17:23:25 +0100 Subject: [PATCH] [api] Move ProjectLogRotate to 1 event per job https://trello.com/c/vOh0oyHu/619-8-p8-move-projectlogrotate-to-1-event-per-job --- src/api/app/jobs/project_log_rotate_job.rb | 40 +++------------------- src/api/app/models/event.rb | 18 ++++++++++ src/api/app/models/event/base.rb | 5 +++ src/api/config/clock.rb | 4 --- 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/src/api/app/jobs/project_log_rotate_job.rb b/src/api/app/jobs/project_log_rotate_job.rb index 66657e19f5c..99ef8ced2a6 100644 --- a/src/api/app/jobs/project_log_rotate_job.rb +++ b/src/api/app/jobs/project_log_rotate_job.rb @@ -1,41 +1,9 @@ class ProjectLogRotateJob < ApplicationJob queue_as :project_log_rotate - def perform - # Package and Project events - event_types = ["Event::BranchCommand", - "Event::Build", - "Event::CommentForPackage", - "Event::Commit", - "Event::CreatePackage", - "Event::DeletePackage", - "Event::ServiceFail", - "Event::ServiceSuccess", - "Event::UndeletePackage", - "Event::UpdatePackage", - "Event::Upload", - "Event::VersionChange", - "Event::CommentForProject", - "Event::CreateProject", - "Event::DeleteProject", - "Event::UndeleteProject", - "Event::UpdateProjectConfig", - "Event::UpdateProject"] - oldest_date = 10.days.ago - - # First, skip old events and mark them all as "logged" (even those that - # don't belong to the event_classes) - Event::Base.where(project_logged: false).where(["created_at < ?", oldest_date]).update_all(project_logged: true) - - # Create log entries based on the events (but this time, only those in event_classes) - Event::Base.where(project_logged: false, eventtype: event_types).find_in_batches(batch_size: 10000) do |events_batch| - events_batch.each do |event| - entry = ProjectLogEntry.create_from(event) - event.update_attributes(project_logged: true) if entry.persisted? - end - end - - # Clean up old entries - ProjectLogEntry.clean_older_than oldest_date + def perform(event_id) + event = Event::Base.find(event_id) + entry = ProjectLogEntry.create_from(event) + event.update_attributes(project_logged: true) if entry.persisted? end end diff --git a/src/api/app/models/event.rb b/src/api/app/models/event.rb index 22864f7e59e..030839e3172 100644 --- a/src/api/app/models/event.rb +++ b/src/api/app/models/event.rb @@ -1,2 +1,20 @@ module Event + PROJECT_CLASSES = ["Event::CommentForProject", + "Event::CreateProject", + "Event::DeleteProject", + "Event::UndeleteProject", + "Event::UpdateProjectConfig", + "Event::UpdateProject"].freeze + PACKAGE_CLASSES = ["Event::BranchCommand", + "Event::Build", + "Event::CommentForPackage", + "Event::Commit", + "Event::CreatePackage", + "Event::DeletePackage", + "Event::ServiceFail", + "Event::ServiceSuccess", + "Event::UndeletePackage", + "Event::UpdatePackage", + "Event::Upload", + "Event::VersionChange"].freeze end \ No newline at end of file diff --git a/src/api/app/models/event/base.rb b/src/api/app/models/event/base.rb index 9283933af3d..a5847b8fc92 100644 --- a/src/api/app/models/event/base.rb +++ b/src/api/app/models/event/base.rb @@ -8,6 +8,7 @@ class Base < ApplicationRecord self.table_name = 'events' before_save :shorten_payload_if_necessary + after_create :create_project_log_rotate_job, if: -> { (PROJECT_CLASSES | PACKAGE_CLASSES).include?(self.class.name) } EXPLANATION_FOR_NOTIFICATIONS = { 'Event::BuildFail' => 'Receive notifications of build failures for packages for which you are...', @@ -158,6 +159,10 @@ def payload @payload ||= Yajl::Parser.parse(read_attribute(:payload)) end + def create_project_log_rotate_job + ProjectLogRotateJob.perform_later(id) + end + after_create :perform_create_jobs def perform_create_jobs diff --git a/src/api/config/clock.rb b/src/api/config/clock.rb index ec81058485e..025c8e5af69 100644 --- a/src/api/config/clock.rb +++ b/src/api/config/clock.rb @@ -20,10 +20,6 @@ module Clockwork SendEventEmailsJob.perform_later end - every(10.minutes, 'project log rotates') do - ProjectLogRotateJob.perform_later - end - every(49.minutes, 'rescale history') do StatusHistoryRescalerJob.perform_later end