aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuc Donnet2016-11-18 16:53:43 +0100
committerLuc Donnet2016-11-18 16:53:43 +0100
commit37a86f23f16f93897013e85e12efab85b1eebcd9 (patch)
treec0505e2313b6e77e99a09d05f0bfd7fae6ee1c06
parent6827025a73a35788bbfb40d0ef20903cb62d27e3 (diff)
parent9ed408bf89e9de1fdd17bfdcb40f0e2b5616de19 (diff)
downloadchouette-core-37a86f23f16f93897013e85e12efab85b1eebcd9.tar.bz2
Merge branch 'master' of github.com:AF83/stif-boiv
-rw-r--r--app/controllers/referentials_controller.rb9
-rw-r--r--app/controllers/workbenches_controller.rb2
-rw-r--r--app/helpers/breadcrumb_helper.rb4
-rw-r--r--app/views/referentials/_form.html.slim1
-rw-r--r--app/views/rule_parameter_sets/show.html.slim2
-rw-r--r--app/views/workbenches/show.html.slim13
-rw-r--r--config/locales/line_referential_syncs.en.yml4
-rw-r--r--config/locales/line_referential_syncs.fr.yml2
-rw-r--r--config/locales/stop_area_referential_syncs.en.yml2
-rw-r--r--config/locales/stop_area_referential_syncs.fr.yml2
-rw-r--r--lib/stif/codif_line_synchronization.rb40
-rw-r--r--lib/stif/reflex_synchronization.rb82
12 files changed, 113 insertions, 50 deletions
diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb
index 003c85d3a..ab494ac2e 100644
--- a/app/controllers/referentials_controller.rb
+++ b/app/controllers/referentials_controller.rb
@@ -8,11 +8,18 @@ class ReferentialsController < BreadcrumbController
def new
@referential = Referential.new_from(Referential.find(params[:from])) if params[:from]
+
new! do
@referential.data_format = current_organisation.data_format
+ @referential.workbench_id = params[:workbench_id] if params[:workbench_id]
end
end
+ def create
+
+ create!
+ end
+
def show
resource.switch
show! do |format|
@@ -24,7 +31,6 @@ class ReferentialsController < BreadcrumbController
:referential_id => resource.id}
}
format.html { build_breadcrumb :show}
-
end
end
@@ -76,6 +82,7 @@ class ReferentialsController < BreadcrumbController
:data_format,
:archived_at,
:created_from_id,
+ :workbench_id,
referential_metadata_attributes: [:referential_source_id, :line_ids => []]
)
end
diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb
index 1d67db3ab..b23e9202e 100644
--- a/app/controllers/workbenches_controller.rb
+++ b/app/controllers/workbenches_controller.rb
@@ -4,6 +4,8 @@ class WorkbenchesController < BreadcrumbController
respond_to :html, :only => [:show]
def show
+ @wbench_refs = Workbench.find(params[:id]).referentials.paginate(page: params[:page], per_page: 2)
+
show! do
build_breadcrumb :show
end
diff --git a/app/helpers/breadcrumb_helper.rb b/app/helpers/breadcrumb_helper.rb
index 683036032..9d503fe2e 100644
--- a/app/helpers/breadcrumb_helper.rb
+++ b/app/helpers/breadcrumb_helper.rb
@@ -237,6 +237,10 @@ module BreadcrumbHelper
def referential_breadcrumb (action = :edit)
organisation_breadcrumb
if @referential
+ if workbench = @referential.workbench
+ add_breadcrumb breadcrumb_label(workbench), workbench_path(workbench), :title => breadcrumb_tooltip(workbench)
+ end
+
add_breadcrumb breadcrumb_label(@referential), referential_path(@referential),:title => breadcrumb_tooltip(@referential) if action == :edit || action == :show || action == :update
end
end
diff --git a/app/views/referentials/_form.html.slim b/app/views/referentials/_form.html.slim
index 1a0d5f105..4ac5d1121 100644
--- a/app/views/referentials/_form.html.slim
+++ b/app/views/referentials/_form.html.slim
@@ -23,6 +23,7 @@
= form.input :upper_corner, input_html: { title: t("formtastic.titles.referential.upper_corner") }
= form.input :lower_corner, input_html: { title: t("formtastic.titles.referential.lower_corner") }
= form.input :data_format, label: true, include_blank: false
+ = form.input :workbench_id, as: :hidden
= form.actions do
= form.action :submit, as: :button
diff --git a/app/views/rule_parameter_sets/show.html.slim b/app/views/rule_parameter_sets/show.html.slim
index 72a8fa99c..af7ecb0a4 100644
--- a/app/views/rule_parameter_sets/show.html.slim
+++ b/app/views/rule_parameter_sets/show.html.slim
@@ -28,7 +28,7 @@
.two_columns
label = "#{t('.inter_connection_link_distance_max')} : "
- span.value = @rule_parameter_set.inter_connecion_link_distance_max
+ span.value = @rule_parameter_set.inter_connection_link_distance_max
.columns
.two_columns
diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim
index 801714bc7..cb83b028c 100644
--- a/app/views/workbenches/show.html.slim
+++ b/app/views/workbenches/show.html.slim
@@ -3,8 +3,6 @@
.referentials.paginated_content
h4 Liste des jeux de données
- / = paginated_content @workbench.referentials
-
table.table.table-bordered.table-hover
thead
tr
@@ -18,7 +16,7 @@
th = "Actions"
tbody
- - @workbench.referentials.each do |referential|
+ - @wbench_refs.each do |referential|
tr
td = referential.name
td = l referential.updated_at, format: :long
@@ -62,3 +60,12 @@
= link_to referential_path(referential), method: :delete, :data => {:confirm => t('referentials.actions.destroy_confirm')}, class: 'btn btn-danger' do
span.fa.fa-trash-o
+
+ .text-center
+ = will_paginate @wbench_refs, container: false, renderer: RemoteBootstrapPaginationLinkRenderer
+
+- content_for :sidebar do
+ ul.actions
+ li = link_to t('referentials.actions.new'), new_referential_path(workbench_id: @workbench), class: 'add'
+
+
diff --git a/config/locales/line_referential_syncs.en.yml b/config/locales/line_referential_syncs.en.yml
index 82ef48170..e78288299 100644
--- a/config/locales/line_referential_syncs.en.yml
+++ b/config/locales/line_referential_syncs.en.yml
@@ -10,8 +10,8 @@ en:
message:
new: "New synchronisation added"
pending: "Synchronisation en cours"
- successful: "Synchronisation réussie après %{processing_time} secondes avec %{imported} éléments importés. %{deleted} éléments ont été supprimés."
- failed: "Synchronisation interrompue après %{processing_time} secondes avec l'erreur : %{error}."
+ successful: "Synchronization successful after %{processing_time} with %{imported} objects created, %{updated} objects updated. %{deleted} objects were deleted.."
+ failed: "Synchronization failed after %{processing_time} with error: %{error}."
notice:
line_referential_sync:
diff --git a/config/locales/line_referential_syncs.fr.yml b/config/locales/line_referential_syncs.fr.yml
index 48b5df190..4a24fd937 100644
--- a/config/locales/line_referential_syncs.fr.yml
+++ b/config/locales/line_referential_syncs.fr.yml
@@ -10,7 +10,7 @@ fr:
message:
new: "Synchronisation en attente"
pending: "Synchronisation en cours"
- successful: "Synchronisation réussie après %{processing_time}, avec %{imported} éléments importés. %{deleted} éléments ont été supprimés."
+ successful: "Synchronisation réussie après %{processing_time}, avec %{imported} éléments importés, %{updated} éléments mise à jour. %{deleted} éléments ont été supprimés."
failed: "Synchronisation interrompue après %{processing_time}, avec l'erreur : %{error}."
notice:
line_referential_sync:
diff --git a/config/locales/stop_area_referential_syncs.en.yml b/config/locales/stop_area_referential_syncs.en.yml
index 9dc3173bc..76197d5a6 100644
--- a/config/locales/stop_area_referential_syncs.en.yml
+++ b/config/locales/stop_area_referential_syncs.en.yml
@@ -11,7 +11,7 @@ en:
message:
new: "New synchronisation added"
pending: "Synchronization pending"
- successful: "Synchronization successful after %{processing_time} with %{imported} objects. %{deleted} objects were deleted.."
+ successful: "Synchronization successful after %{processing_time} with %{imported} objects created, %{updated} objects updated. %{deleted} objects were deleted.."
failed: "Synchronization failed after %{processing_time} with error: %{error}."
notice:
stop_area_referential_sync:
diff --git a/config/locales/stop_area_referential_syncs.fr.yml b/config/locales/stop_area_referential_syncs.fr.yml
index d0b79a8db..bf8d32ac5 100644
--- a/config/locales/stop_area_referential_syncs.fr.yml
+++ b/config/locales/stop_area_referential_syncs.fr.yml
@@ -10,7 +10,7 @@ fr:
message:
new: "Synchronisation en attente"
pending: "Synchronisation en cours"
- successful: "Synchronisation réussie après %{processing_time}, avec %{imported} éléments importés. %{deleted} éléments ont été supprimés."
+ successful: "Synchronisation réussie après %{processing_time}, avec %{imported} éléments importés, %{updated} éléments mise à jour. %{deleted} éléments ont été supprimés."
failed: "Synchronisation interrompue après %{processing_time}, avec l'erreur : %{error}."
notice:
stop_area_referential_sync:
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