aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/stif/codif_line_synchronization.rb40
-rw-r--r--lib/stif/reflex_synchronization.rb82
2 files changed, 82 insertions, 40 deletions
diff --git a/lib/stif/codif_line_synchronization.rb b/lib/stif/codif_line_synchronization.rb
index deadad5ba..600415424 100644
--- a/lib/stif/codif_line_synchronization.rb
+++ b/lib/stif/codif_line_synchronization.rb
@@ -1,7 +1,28 @@
module Stif
module CodifLineSynchronization
class << self
+ attr_accessor :imported_count, :updated_count, :deleted_count
+
+ def reset_counts
+ self.imported_count = 0
+ self.updated_count = 0
+ self.deleted_count = 0
+ end
+
+ def processed_counts
+ {
+ imported: self.imported_count,
+ updated: self.updated_count,
+ deleted: self.deleted_count
+ }
+ end
+
+ def increment_counts prop_name, value
+ self.send("#{prop_name}=", self.send(prop_name) + value)
+ end
+
def synchronize
+ self.reset_counts
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :second)
# Fetch Codifline data
client = Codifligne::API.new
@@ -47,10 +68,8 @@ module Stif
# Delete deprecated Operators
deleted_op = delete_deprecated(operators, Chouette::Company)
log_deleted "Operators", deleted_op unless deleted_op == 0
- {
- imported: operators.count + lines.count + networks.count,
- deleted: deleted_op + deleted_li + deleted_ne
- }
+
+ self.processed_counts
end
def create_or_update_company(api_operator)
@@ -118,13 +137,14 @@ module Stif
def delete_deprecated(objects, klass)
ids = objects.map{ |o| o.stif_id }.to_a
deprecated = klass.where.not(objectid: ids)
- deprecated.destroy_all.length
+ increment_counts :deleted_count, deprecated.destroy_all.length
end
def delete_deprecated_lines(lines)
ids = lines.map{ |l| l.stif_id }.to_a
deprecated = Chouette::Line.where.not(objectid: ids).where(deactivated: false)
deprecated.update_all deactivated: true
+ increment_counts :deleted_count, deprecated.update_all(deactivated: true)
end
def save_or_update(params, klass)
@@ -132,10 +152,16 @@ module Stif
object = klass.where(objectid: params[:objectid]).first
if object
object.assign_attributes(params)
- object.save if object.changed?
+ if object.changed?
+ object.save
+ increment_counts :updated_count, 1
+ end
else
object = klass.new(params)
- object.save if object.valid?
+ if object.valid?
+ object.save
+ increment_counts :imported_count, 1
+ end
end
object
end
diff --git a/lib/stif/reflex_synchronization.rb b/lib/stif/reflex_synchronization.rb
index 822a295c0..bc3b9dd2d 100644
--- a/lib/stif/reflex_synchronization.rb
+++ b/lib/stif/reflex_synchronization.rb
@@ -1,6 +1,31 @@
module Stif
module ReflexSynchronization
class << self
+ attr_accessor :imported_count, :updated_count, :deleted_count, :processed
+
+ def reset_counts
+ self.imported_count = 0
+ self.updated_count = 0
+ self.deleted_count = 0
+ self.processed = []
+ end
+
+ def processed_counts
+ {
+ imported: self.imported_count,
+ updated: self.updated_count,
+ deleted: self.deleted_count
+ }
+ end
+
+ def log_processing_time message, time
+ Rails.logger.info "Reflex:sync - #{message} done in #{time} seconds"
+ end
+
+ def increment_counts prop_name, value
+ self.send("#{prop_name}=", self.send(prop_name) + value)
+ end
+
def defaut_referential
StopAreaReferential.find_by(name: "Reflex")
end
@@ -10,41 +35,32 @@ module Stif
end
def synchronize
- tstart = Time.now
- client = Reflex::API.new
- processed = []
- initial_count = Chouette::StopArea.where(deleted_at: nil).count
-
+ self.reset_counts
['getOR', 'getOP'].each do |method|
start = Time.now
- results = client.process method
- Rails.logger.info "Reflex:sync - Process #{method} done in #{Time.now - start} seconds"
- results.each do |type, entries|
- Rails.logger.info "Reflex:sync - #{entries.count} #{type} retrieved"
- end
-
- # Create or update stop_area for every quay, stop_place
+ results = Reflex::API.new().process(method)
+ log_processing_time("Process #{method}", Time.now - start)
stop_areas = results[:Quay] | results[:StopPlace]
- start = Time.now
- stop_areas.each do |entry|
- next unless is_valid_type_of_place_ref?(method, entry)
- processed << entry['id']
- self.create_or_update_stop_area entry
+ time = Benchmark.measure do
+ stop_areas.each do |entry|
+ next unless is_valid_type_of_place_ref?(method, entry)
+ self.processed << entry['id']
+ self.create_or_update_stop_area entry
+ end
end
- Rails.logger.info "Reflex:sync - Create or update StopArea done in #{Time.now - start} seconds"
+ log_processing_time("Create or update StopArea", time.real)
- # Walk through every entry and set parent stop_area
- start = Time.now
- stop_areas.each do |entry|
- self.stop_area_set_parent entry
+ time = Benchmark.measure do
+ stop_areas.map{|entry| self.stop_area_set_parent(entry)}
end
- Rails.logger.info "Reflex:sync - StopArea set parent done in #{Time.now - start} seconds"
+ log_processing_time("StopArea set parent", time.real)
end
- {
- imported: Chouette::StopArea.where(deleted_at: nil).count - initial_count,
- deleted: self.set_deleted_stop_area(processed.uniq).size
- }
+
+ # Set deleted_at for item not returned by api since last sync
+ time = Benchmark.measure { self.set_deleted_stop_area }
+ log_processing_time("StopArea #{self.deleted_count} deleted", time.real)
+ self.processed_counts
end
def is_valid_type_of_place_ref? method, entry
@@ -53,14 +69,12 @@ module Stif
return true if method == 'getOP' && ['ZDE'].include?(entry["TypeOfPlaceRef"])
end
- def set_deleted_stop_area processed
- start = Time.now
- deleted = Chouette::StopArea.where(deleted_at: nil).pluck(:objectid).uniq - processed
+ def set_deleted_stop_area
+ deleted = Chouette::StopArea.where(deleted_at: nil).pluck(:objectid).uniq - self.processed.uniq
deleted.each_slice(50) do |object_ids|
Chouette::StopArea.where(objectid: object_ids).update_all(deleted_at: Time.now)
end
- Rails.logger.info "Reflex:sync - StopArea #{deleted.size} stop_area deleted since last sync in #{Time.now - start} seconds"
- deleted
+ increment_counts :deleted_count, deleted.size
end
def stop_area_set_parent entry
@@ -122,7 +136,9 @@ module Stif
if stop.changed?
stop.creation_time = entry[:created]
- stop.import_xml = entry[:xml]
+ stop.import_xml = entry[:xml]
+ prop = stop.new_record? ? :imported_count : :updated_count
+ increment_counts prop, 1
stop.save!
end
# Create AccessPoint from StopPlaceEntrance