Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changed Mail collector rules #1566

Merged
merged 3 commits into from
Nov 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions bin/run_mail_collector
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env ruby

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
CollectDataFromMailJob.perform_now

22 changes: 13 additions & 9 deletions lib/datacollector/collector_helper.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
# frozen_string_literal: true

class CollectorHelper
attr_reader :sender, :sender_container, :recipient

def initialize(from, cc = nil)
if from.is_a?(Device) && cc.is_a?(User)
if (from.is_a?(Device) && cc.is_a?(User)) || (from.is_a?(User) && from == cc)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Metrics/CyclomaticComplexity: Cyclomatic complexity for initialize is too high. [12/7]

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Metrics/PerceivedComplexity: Perceived complexity for initialize is too high. [13/8]

@sender = from
@recipient = cc
prepare_containers
elsif cc
@sender = Device.find_by email: from
@sender = Device.find_by email: from.downcase unless @sender
@sender ||= Device.find_by email: from.downcase
@recipient = User.find_by email: cc
@recipient = User.find_by email: cc.downcase unless @recipient
@recipient ||= User.find_by email: cc.downcase
prepare_containers if @sender && @recipient
else
@sender = User.find_by email: from
@sender = User.find_by email: from.downcase unless @sender
@sender ||= User.find_by email: from.downcase
@recipient = @sender
prepare_containers if @sender
end
Expand All @@ -26,19 +28,21 @@ def sender_recipient_known?

def prepare_new_dataset(subject)
return nil unless sender_recipient_known?

Container.create(
name: subject,
container_type: 'dataset',
parent: @sender_container
parent: @sender_container,
)
end

def prepare_dataset(subject)
return nil unless sender_recipient_known?

Container.where(
name: subject,
container_type: 'dataset',
parent: @sender_container
parent: @sender_container,
).first_or_create
end

Expand All @@ -65,14 +69,14 @@ def prepare_containers
unless @recipient.container
@recipient.container = Container.create(
name: 'inbox',
container_type: 'root'
container_type: 'root',
)
end
sender_box_id = 'sender_box_' + @sender.id.to_s
sender_box_id = "sender_box_#{@sender.id}"
@sender_container = Container.where(
name: @sender.first_name,
container_type: sender_box_id,
parent_id: @recipient.container.id
parent_id: @recipient.container.id,
).first_or_create
end
end
17 changes: 17 additions & 0 deletions lib/datacollector/collector_helper_set.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# frozen_string_literal: true

class CollectorHelperSet
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style/FrozenStringLiteralComment: Missing frozen string literal comment.

attr_reader :helper_set

def initialize(from, cc_list)
@helper_set = []
cc_list.each do |cc|
h = CollectorHelper.new(from, cc)
@helper_set.push(h) if h.sender_recipient_known?
end
end

def sender_recipient_known?
@helper_set.length.positive?
end
end
4 changes: 2 additions & 2 deletions lib/datacollector/datacollector_file.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def delete
def attach(device)
att = Attachment.new(
filename: @name,
file_data: IO.binread(@path),
file_data: File.binread(@path),
content_type: MimeMagic.by_path(@name)&.type,
created_by: device.id,
created_for: recipient.id,
Expand Down Expand Up @@ -52,7 +52,7 @@ def attach_remote(device)

def add_attach_to_container(device, attach, _ = false)
helper = CollectorHelper.new(device, recipient)
dataset = helper.prepare_dataset(Time.now.strftime('%Y-%m-%d'))
dataset = helper.prepare_dataset(Time.zone.now.strftime('%Y-%m-%d'))
attach.update!(attachable: dataset)

# add notifications
Expand Down
2 changes: 1 addition & 1 deletion lib/datacollector/datacollector_folder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def zip_files(tmpzip)

def register_new_data(device, tmpzip)
att = Attachment.new(
filename: @name + '.zip',
filename: "#{@name}.zip",
created_by: device.id,
created_for: recipient.id,
content_type: 'application/zip',
Expand Down
2 changes: 2 additions & 0 deletions lib/datacollector/dc_logger.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

class DCLogger
def self.log
@@fw_logger ||= Logger.new("#{Rails.root}/log/datacollector.log")
Expand Down
4 changes: 2 additions & 2 deletions lib/datacollector/fcollector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def execute(use_sftp)
inspect_folder(device)
@sftp = nil
end
rescue => e
rescue StandardError => e
log_error("#{e.message} >>> #{device.info}\n#{e.backtrace.join('\n')}")
end
end
Expand All @@ -77,7 +77,7 @@ def execute(use_sftp)
private

def devices(use_sftp)
sql = <<~SQL
sql = <<~SQL.squish
profiles."data"->>'method' = '#{self.class::FCOLL}watcher#{use_sftp ? 'sftp' : 'local'}'
SQL
Device.joins(:profile).where(sql).includes(:profile)
Expand Down
13 changes: 5 additions & 8 deletions lib/datacollector/filecollector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@ class Filecollector < Fcollector
private

# rubocop:disable Metrics/AbcSize
# rubocop:disable Metrics/MethodLength

def inspect_folder(device)
directory = device.profile.data['method_params']['dir']
new_files(directory).each do |new_file_p| # rubocop:disable Metrics/BlockLength
@current_collector = DatacollectorFile.new(new_file_p, @sftp)
error = CollectorError.find_by error_code: CollectorHelper.hash(
@current_collector.path,
@sftp
@sftp,
)
begin
stored = false
Expand All @@ -31,10 +30,10 @@ def inspect_folder(device)
@current_collector.delete
log_info("Recipient unknown. File deleted! >>> #{device.info}")
end
rescue => e
rescue StandardError => e
if stored
CollectorHelper.write_error(
CollectorHelper.hash(@current_collector.path, @sftp)
CollectorHelper.hash(@current_collector.path, @sftp),
)
end
log_error("#{e.message} >>> #{device.info}\n#{e.backtrace.join('\n')}")
Expand All @@ -53,15 +52,13 @@ def new_files(monitored_folder_p)
File.join(monitored_folder_p, f.name)
end
else
new_files_p = Dir.glob(File.join(monitored_folder_p, '*')).reject { |e|
new_files_p = Dir.glob(File.join(monitored_folder_p, '*')).reject do |e|
File.directory?(e)
}
end
end
new_files_p.delete_if do |f|
f.end_with?('.filepart', '.part')
end
new_files_p
end

# rubocop:enable Metrics/MethodLength
end
36 changes: 17 additions & 19 deletions lib/datacollector/foldercollector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,20 @@ class Foldercollector < Fcollector
private

def sleep_seconds(device)
30 || Rails.configuration.datacollectors.services &&
(Rails.configuration.datacollectors.services.find { |e|
30 || (Rails.configuration.datacollectors.services &&
(Rails.configuration.datacollectors.services.find do |e|
e[:name] == device.profile.data['method']
} || {})[:watcher_sleep]
end || {})[:watcher_sleep])
end

def modification_time_diff(device, folder_p)
time_now = Time.now
time_diff =
case device.profile.data['method']
when 'folderwatcherlocal' then time_now - File.mtime(folder_p)
when 'folderwatchersftp' then
time_now - (Time.at @sftp.file.open(folder_p).stat.attributes[:mtime])
else 30
end
time_diff
time_now = Time.zone.now
case device.profile.data['method']
when 'folderwatcherlocal' then time_now - File.mtime(folder_p)
when 'folderwatchersftp'
time_now - (Time.zone.at @sftp.file.open(folder_p).stat.attributes[:mtime])
else 30
end
end

# rubocop:disable Metrics/CyclomaticComplexity
Expand All @@ -45,7 +43,7 @@ def inspect_folder(device)
@current_collector.files = list_files
error = CollectorError.find_by error_code: CollectorHelper.hash(
@current_collector.path,
@sftp
@sftp,
)
begin
stored = false
Expand All @@ -66,10 +64,10 @@ def inspect_folder(device)
@current_collector.delete
log_info("Recipient unknown. Folder deleted! >>> #{device.info}")
end
rescue => e
rescue StandardError => e
if stored
CollectorHelper.write_error(
CollectorHelper.hash(@current_collector.path, @sftp)
CollectorHelper.hash(@current_collector.path, @sftp),
)
end
log_error("#{e.message} >>> #{device.info}\n#{e.backtrace.join('\n')}")
Expand All @@ -89,9 +87,9 @@ def list_files
)
all_files.map!(&:name)
else
all_files = Dir.entries(@current_collector.path).reject { |e|
all_files = Dir.entries(@current_collector.path).reject do |e|
File.directory?(File.join(@current_collector.path, e))
}
end
end
all_files.delete_if do |f|
f.end_with?('..', '.', '.filepart', '.part')
Expand All @@ -106,9 +104,9 @@ def new_folders(monitored_folder_p)
)
new_folders_p.map! { |dir| File.join(monitored_folder_p, dir.name) }
else
new_folders_p = Dir.glob(File.join(monitored_folder_p, '*')).select { |e|
new_folders_p = Dir.glob(File.join(monitored_folder_p, '*')).select do |e|
File.directory?(e)
}
end
end
new_folders_p
end
Expand Down
Loading