Mercurial > gemma
changeset 5187:5f4d054fea31 new-fwa
Merged default into new-fwa branch.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 01 Apr 2020 15:38:20 +0200 |
parents | 1c5c9fdaf730 (current diff) adf7b9f1273b (diff) |
children | f742b5cf9a64 |
files | |
diffstat | 7 files changed, 84 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/client/src/components/TimeSlider.vue Tue Mar 31 20:03:05 2020 +0200 +++ b/client/src/components/TimeSlider.vue Wed Apr 01 15:38:20 2020 +0200 @@ -146,6 +146,7 @@ const [hours, minutes] = this.timeSelection.split(":"); date = setHours(date, hours); date = setMinutes(date, minutes); + if (date > new Date()) return; this.$store.commit("application/setSelectedTime", date); this.rescaleSlider(50); } @@ -160,6 +161,7 @@ let date = this.selectedTime; date = setHours(date, value.split(":")[0]); date = setMinutes(date, value.split(":")[1]); + if (date > new Date()) return; this.$store.commit("application/setSelectedTime", date); this.rescaleSlider(800); } @@ -283,8 +285,24 @@ .on("drag", this.onDrag) .on("end", () => { d3.select(".line").classed("active", false); + const now = new Date(); + if (this.selectedTime > now) this.selectedTime = now; + d3.select(".line").attr( + "x", + xAxis.scale()(d3.isoParse(this.selectedTime)) + ); }); + svg + .append("rect") + .attr("class", "future") + .attr("x", xAxis.scale()(d3.isoParse(toIsoDate(new Date())))) + .attr("y", 0) + .attr("width", svgWidth) + .attr("height", svgHeight) + .attr("fill", "#333333") + .attr("opacity", 0.3); + // Create cursor to indicate to the selected time svg .append("rect") @@ -340,6 +358,7 @@ xAxis.scale(newX); d3.select(".axis--x").call(xAxis); d3.select(".line").attr("x", newX(d3.isoParse(this.selectedTime))); + d3.select(".future").attr("x", newX(d3.isoParse(new Date()))); }, onClick() { // Extract the click location
--- a/client/src/components/layers/Layers.vue Tue Mar 31 20:03:05 2020 +0200 +++ b/client/src/components/layers/Layers.vue Wed Apr 01 15:38:20 2020 +0200 @@ -33,7 +33,7 @@ <Layerselect layerId="WATERWAYPROFILES" /> <Layerselect layerId="BOTTLENECKSTATUS" /> <Layerselect layerId="BOTTLENECKFAIRWAYAVAILABILITY" /> - <Layerselect layerId="DATAAVAILABILITY" /> + <Layerselect v-if="!showTimeSlider" layerId="DATAAVAILABILITY" /> <Layerselect layerId="DISTANCEMARKS" /> <Layerselect layerId="DISTANCEMARKSAXIS" /> <Layerselect layerId="GAUGES" /> @@ -67,7 +67,7 @@ Layerselect: () => import("./Layerselect") }, computed: { - ...mapState("application", ["showLayers"]), + ...mapState("application", ["showLayers", "showTimeSlider"]), ...mapState("map", ["openLayersMaps", "reviewActive"]), ...mapGetters("map", ["openLayersMap"]), label() { @@ -85,6 +85,13 @@ } }, watch: { + showTimeSlider() { + if (!this.showTimeSlider) return; + const availabilityLayer = this.openLayersMap().getLayer( + "DATAAVAILABILITY" + ); + availabilityLayer.setVisible(false); + }, reviewActive() { if (!this.reviewActive) { const fairwaydimensionLayer = this.openLayersMap().getLayer(
--- a/client/src/components/layers/layers.js Tue Mar 31 20:03:05 2020 +0200 +++ b/client/src/components/layers/layers.js Wed Apr 01 15:38:20 2020 +0200 @@ -8,8 +8,8 @@ import { and as andFilter, equalTo, - lessThanOrEqualTo, - greaterThanOrEqualTo + greaterThanOrEqualTo, + lessThanOrEqualTo } from "ol/format/filter"; import { HTTP } from "@/lib/http"; @@ -78,6 +78,8 @@ vectorSource.addFeatures(features); } catch (error) { console.log(error); + console.log("Loading failed for:", vectorSource); + vectorSource.addFeatures([]); } }) .catch(error => { @@ -443,7 +445,15 @@ featureTypes: ["fairway_dimensions"], filter: andFilter( equalTo("level_of_service", 1), - equalTo("staging_done", true) + equalTo("staging_done", true), + lessThanOrEqualTo( + "valid_from", + store.state.application.refreshLayersTime.toISOString() + ), + greaterThanOrEqualTo( + "valid_to", + store.state.application.refreshLayersTime.toISOString() + ) ) }, source, @@ -469,7 +479,15 @@ featureTypes: ["fairway_dimensions"], filter: andFilter( equalTo("level_of_service", 2), - equalTo("staging_done", true) + equalTo("staging_done", true), + lessThanOrEqualTo( + "valid_from", + store.state.application.refreshLayersTime.toISOString() + ), + greaterThanOrEqualTo( + "valid_to", + store.state.application.refreshLayersTime.toISOString() + ) ) }, source, @@ -495,7 +513,15 @@ featureTypes: ["fairway_dimensions"], filter: andFilter( equalTo("level_of_service", 3), - equalTo("staging_done", true) + equalTo("staging_done", true), + lessThanOrEqualTo( + "valid_from", + store.state.application.refreshLayersTime.toISOString() + ), + greaterThanOrEqualTo( + "valid_to", + store.state.application.refreshLayersTime.toISOString() + ) ) }, source,
--- a/client/src/store/map.js Tue Mar 31 20:03:05 2020 +0200 +++ b/client/src/store/map.js Wed Apr 01 15:38:20 2020 +0200 @@ -617,15 +617,15 @@ let layer = layers[i]; if (layer instanceof VectorLayer) { layer.getSource().clear(true); + } else { + layer.getSource().refresh(); } - layer.getSource().refresh(); } }); }, refreshTimebasedLayers({ state, rootState }) { const layers = [ "BOTTLENECKS", - "GAUGES", "FAIRWAYDIMENSIONSLOS1", "FAIRWAYDIMENSIONSLOS2", "FAIRWAYDIMENSIONSLOS3", @@ -642,8 +642,8 @@ layer.getSource().updateParams({ TIME: rootState.application.refreshLayersTime.toISOString() }); + layer.getSource().refresh(); } - layer.getSource().refresh(); } }); },
--- a/pkg/controllers/importqueue.go Tue Mar 31 20:03:05 2020 +0200 +++ b/pkg/controllers/importqueue.go Wed Apr 01 15:38:20 2020 +0200 @@ -674,7 +674,10 @@ ctx := req.Context() accepted := state == "accepted" - if err = imports.DecideImport(ctx, id, accepted, reviewer); err != nil { + switch err = imports.DecideImport(ctx, id, accepted, reviewer); { + case err == imports.ErrRetrying: + return "", fmt.Errorf("Finalizing import #%d is re-scheduled.", id) + case err != nil: return "", err }
--- a/pkg/imports/queue.go Tue Mar 31 20:03:05 2020 +0200 +++ b/pkg/imports/queue.go Wed Apr 01 15:38:20 2020 +0200 @@ -17,6 +17,7 @@ "context" "database/sql" "encoding/json" + "errors" "fmt" "log" "runtime/debug" @@ -124,6 +125,8 @@ reviewJobWait = time.Minute ) +var ErrRetrying = errors.New("retrying") + type importQueue struct { cmdCh chan func(*importQueue) @@ -694,7 +697,10 @@ return err } - <-done + _, retry := <-done + if retry { + return ErrRetrying + } return nil } @@ -931,6 +937,8 @@ go func(jc JobCreator, idj *idJob) { + var retry bool + defer func() { // Unlock the dependencies. q.unlockDependencies(jc) @@ -938,7 +946,11 @@ q.cmdCh <- func(q *importQueue) { if w := q.waiting[idj.id]; w != nil { log.Printf("info: unlock waiting %d\n", idj.id) - close(w) + if retry { + w <- struct{}{} + } else { + close(w) + } delete(q.waiting, idj.id) } } @@ -970,7 +982,7 @@ }) })() - var unchanged, retry bool + var unchanged bool if v, ok := errDo.(UnchangedError); ok { feedback.Info("unchanged: %s", v.Error()) unchanged = true
--- a/schema/updates/1437/01.historicise_fairway_dimensions.sql Tue Mar 31 20:03:05 2020 +0200 +++ b/schema/updates/1437/01.historicise_fairway_dimensions.sql Wed Apr 01 15:38:20 2020 +0200 @@ -1,3 +1,6 @@ +-- Drop trigger first to avoid execution during following operations +DROP TRIGGER fairway_dimensions_area_unique ON waterway.fairway_dimensions; + ALTER TABLE waterway.fairway_dimensions ADD validity tstzrange NOT NULL DEFAULT tstzrange(current_timestamp, NULL) CHECK (NOT isempty(validity)); @@ -19,7 +22,6 @@ current_timestamp), NULL); -DROP TRIGGER fairway_dimensions_area_unique ON waterway.fairway_dimensions; CREATE CONSTRAINT TRIGGER fairway_dimensions_area_unique AFTER INSERT OR UPDATE OF area, validity, staging_done ON waterway.fairway_dimensions