Mercurial > gemma
changeset 5576:2b862190aee4 surveysperbottleneckid
merge with default
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Tue, 08 Feb 2022 10:20:26 +0100 |
parents | 6709530f002e (current diff) ce9a9a1bf92f (diff) |
children | 973c71c07bb2 |
files | client/src/components/fairway/AvailableFairwayDepthDialogue.vue pkg/controllers/routes.go |
diffstat | 103 files changed, 12152 insertions(+), 3005 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Wed Jul 21 15:14:40 2021 +0200 +++ b/.hgtags Tue Feb 08 10:20:26 2022 +0100 @@ -36,3 +36,8 @@ d62587503a398ae842da78ecd2b40eaba16fec63 v5.2 724f595693679e41bd0b20fd7147acae5e339176 v5.2 1beb407cf7d0abd1d5eb5cfbcbd2f0fcfb2d1124 v5.3 +48e2b45f9be801a53c746589b907b9111e28b3a2 v5.4 +232377c112def41c254c50d567280eba096d527c v5.4.1 +79155213c4da9ad4d381e1b39d768d9137a5f827 v5.5 +79155213c4da9ad4d381e1b39d768d9137a5f827 v5.5 +d4fb695f8437f85d107dbcc10406bb9485529abb v5.5
--- a/Makefile Wed Jul 21 15:14:40 2021 +0200 +++ b/Makefile Tue Feb 08 10:20:26 2022 +0100 @@ -12,9 +12,9 @@ export BUILDBASE -.PHONY: all gemma client clean +.PHONY: all gemma gmaggregate client clean -all: gemma client +all: gemma gmaggregate client $(ENVWARPPER): @echo "Preparing go build environment:" @@ -30,21 +30,28 @@ gemma: $(ENVWARPPER) "$(ENVWARPPER)" go build -o ./cmd/gemma/gemma ./cmd/gemma +gmaggregate: $(ENVWARPPER) + cd ./contrib/gmaggregate; "$(ENVWARPPER)" go build + client: $(MAKE) -f Makefile.build -C client install: gemma cp cmd/gemma/gemma $(BINDIR) + cp contrib/gmaggregate/gmaggregate $(BINDIR) tar: all v="gemma-$$(hg id -i)" ;\ tar --transform "s@^@$${v}/@" \ -cJf "../$${v}.tar.xz" \ - cmd/gemma/gemma schema style-templates report-templates \ + cmd/gemma/gemma \ + contrib/gmaggregate/gmaggregate \ + schema style-templates report-templates \ web misc example_conf.toml clean: $(MAKE) -f Makefile.build -C client $@ - rm -f "$(gemma-bin)" + rm -f contrib/gmaggregate/gmaggregate + rm -f cmd/gemma/gemma chmod -R u+w "$(BUILDBASE)" # This is neccessary for deletion to work... rm -rf "$(BUILDBASE)"
--- a/client/package.json Wed Jul 21 15:14:40 2021 +0200 +++ b/client/package.json Tue Feb 08 10:20:26 2022 +0100 @@ -1,6 +1,6 @@ { "name": "gemmajs", - "version": "5.4.0-dev", + "version": "5.5.1-dev", "license": "AGPL-3.0-or-later", "repository": { "type": "hg",
--- a/client/src/components/fairway/AvailableFairwayDepth.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/fairway/AvailableFairwayDepth.vue Tue Feb 08 10:20:26 2022 +0100 @@ -197,12 +197,15 @@ "widthlimit2" ]), legend() { - const d = [this.depthlimit1D, this.depthlimit2D].sort(); - const w = [this.widthlimit1D, this.widthlimit2D].sort(); + const d = [this.depthlimit1D, this.depthlimit2D].sort((a, b) => a - b); + const w = [this.widthlimit1D, this.widthlimit2D].sort((a, b) => a - b); const lowerBound = [d[0] / 100, w[0]].filter(x => x).join(", "); const upperBound = [d[1] / 100, w[1]].filter(x => x).join(", "); let result; - if (this.depthlimit1D !== this.depthlimit2D) { + if ( + this.depthlimit1D !== this.depthlimit2D || + this.widthlimit1 !== this.widthlimit2 + ) { result = [ `> LDC`, `>= ${upperBound} [m]`, @@ -441,7 +444,10 @@ } }, legendStyle(index) { - if (this.depthlimit1 === this.depthlimit2) { + if ( + (this.depthlimit1 && this.depthlimit1 === this.depthlimit2) || + (this.widthlimit1 && this.widthlimit1 === this.widthlimit2) + ) { let result = [ `background-color: ${this.$options.COLORS.LDC};`, `background-color: ${this.$options.COLORS.HIGHEST};`
--- a/client/src/components/fairway/AvailableFairwayDepthDialogue.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/fairway/AvailableFairwayDepthDialogue.vue Tue Feb 08 10:20:26 2022 +0100 @@ -623,6 +623,12 @@ this.depthLimit2 = 2.5; } }, + widthLimitVisible() { + if (this.widthLimitVisible) { + this.widthLimit1 = 80; + this.widthLimit2 = 150; + } + }, selectedBottleneck() { this.type = this.$options.BOTTLENECK; this.setSelectedBottleneck(); @@ -757,8 +763,8 @@ type: this.type, depthLimit1: this.depthlimit1, depthLimit2: this.depthlimit2, - widthLimit1: this.widthLimit1, - widthLimit2: this.widthLimit2, + widthLimit1: Math.round(this.widthLimit1 * 100), + widthLimit2: Math.round(this.widthLimit2 * 100), limitingFactor: this.limitingFactor }) .then(() => { @@ -805,8 +811,8 @@ type: this.type, depthLimit1: this.depthlimit1, depthLimit2: this.depthlimit2, - widthLimit1: this.widthLimit1, - widthLimit2: this.widthLimit2, + widthLimit1: Math.round(this.widthLimit1 * 100), + widthLimit2: Math.round(this.widthLimit2 * 100), limitingFactor: this.limitingFactor }) .then(() => {
--- a/client/src/components/fairway/AvailableFairwayDepthLNWL.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/fairway/AvailableFairwayDepthLNWL.vue Tue Feb 08 10:20:26 2022 +0100 @@ -192,12 +192,15 @@ "widthlimit2" ]), legendLNWL() { - const d = [this.depthlimit1D, this.depthlimit2D].sort(); - const w = [this.widthlimit1D, this.widthlimit2D].sort(); + const d = [this.depthlimit1D, this.depthlimit2D].sort((a, b) => a - b); + const w = [this.widthlimit1D, this.widthlimit2D].sort((a, b) => a - b); const lowerBound = [d[0] / 100, w[0]].filter(x => x).join(", "); const upperBound = [d[1] / 100, w[1]].filter(x => x).join(", "); let result; - if (this.depthlimit1D !== this.depthlimit2D) { + if ( + this.depthlimit1D !== this.depthlimit2D || + this.widthlimit1 !== this.widthlimit2 + ) { result = [ `> LDC`, `< ${lowerBound} [m]`, @@ -325,7 +328,10 @@ }, legendStyle(index) { let style; - if (this.depthlimit1 !== this.depthlimit2) { + if ( + this.depthlimit1 !== this.depthlimit2 || + this.widthlimit1 !== this.widthlimit2 + ) { style = { 0: `background-color: ${this.$options.LWNLCOLORS.LDC};`, 1: `background-color: ${this.$options.AFDCOLORS[2]};`,
--- a/client/src/components/layers/Layerselect.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/layers/Layerselect.vue Tue Feb 08 10:20:26 2022 +0100 @@ -158,7 +158,7 @@ }, loadLegendImage(layer, storeTarget) { HTTP.get( - `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.3.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=${layer}&legend_options=columns:4;fontAntiAliasing:true&SCALE=4000`, + `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.3.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=${layer}&legend_options=columns:4%3BfontAntiAliasing:true&SCALE=4000`, { headers: { Accept: "image/png",
--- a/client/src/components/layers/LegendElement.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/layers/LegendElement.vue Tue Feb 08 10:20:26 2022 +0100 @@ -122,12 +122,12 @@ this.url = `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=` + this.layer.getSource().getParams().LAYERS + - `&legend_options=columns:4;fontAntiAliasing:true`; + `&legend_options=columns:4%3BfontAntiAliasing:true`; } else { this.url = `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&SCALE=80000&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=` + this.layer.getSource().getParams().LAYERS + - `&legend_options=columns:1;fontAntiAliasing:true;forceLabels:off`; + `&legend_options=columns:1%3BfontAntiAliasing:true%3BforceLabels:off`; } this.loadImageSrc();
--- a/client/src/components/ui/UIBoxHeader.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/ui/UIBoxHeader.vue Tue Feb 08 10:20:26 2022 +0100 @@ -10,6 +10,18 @@ {{ title }} </span> <div class="d-flex flex-row"> + <span class="box-control" v-if="checkBox" style="cursor: default;"> + <input + id="checkboxID" + type="checkbox" + class="checkbox-header" + :checked="checkBox.value" + @change="checkBox.callback" + /> + <label for="checkboxID" class="ml-1 small mb-0 checkbox-header"> + {{ checkBox.label }} + </label> + </span> <span class="box-control" v-for="(action, index) in actions" @@ -52,6 +64,8 @@ &.small padding: 0.1rem 0.1rem 0.1rem 0.25rem min-height: 27px +.checkbox-header + cursor: pointer </style> <script> @@ -75,7 +89,8 @@ title: String, closeCallback: Function, actions: Array, - small: Boolean + small: Boolean, + checkBox: Object } }; </script>
--- a/client/src/components/usermanagement/Userdetail.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/usermanagement/Userdetail.vue Tue Feb 08 10:20:26 2022 +0100 @@ -131,7 +131,9 @@ :disabled="submitted" class="shadow-sm btn btn-info submit-button" > - <translate>Save</translate> + <span>{{ + currentUser.active ? $gettext("Save") : $gettext("Reactivate") + }}</span> </button> </div> </form> @@ -245,6 +247,9 @@ }, mounted() { this.currentUser = { ...this.user }; + if (!this.currentUser.active) { + this.currentUser.email = ""; + } this.path = this.user.name; }, watch: { @@ -253,6 +258,9 @@ }, user() { this.currentUser = { ...this.user }; + if (!this.currentUser.active) { + this.currentUser.email = ""; + } this.path = this.user.name; this.clearPassword(); this.clearErrors(); @@ -279,7 +287,10 @@ isEmailValid(this.currentUser.email) && this.currentUser.country && this.password === this.passwordre && - (this.password === "" || !violatedPasswordRules(this.password)) + ((this.currentUser.active && + (this.password === "" || !violatedPasswordRules(this.password))) || + // Do not accept empty password by user-reactivation + (!this.currentUser.active && !violatedPasswordRules(this.password))) ); } }, @@ -318,12 +329,21 @@ this.password === this.passwordre ? "" : this.$gettext("Passwords do not match!"); - this.errors.password = - this.password === "" || !violatedPasswordRules(this.password) + if (this.currentUser.active) { + this.errors.password = + this.password === "" || !violatedPasswordRules(this.password) + ? "" + : this.$gettext( + "Password should at least be 8 char long including 1 digit and 1 special char like $" + ); + } else { + // Force entering password for user-reactivation + this.errors.password = !violatedPasswordRules(this.password) ? "" : this.$gettext( "Password should at least be 8 char long including 1 digit and 1 special char like $" ); + } }, validateEmailaddress() { this.errors.email = isEmailValid(this.currentUser.email)
--- a/client/src/components/usermanagement/Usermanagement.vue Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/components/usermanagement/Usermanagement.vue Tue Feb 08 10:20:26 2022 +0100 @@ -4,7 +4,11 @@ <div class="d-flex content py-2"> <div :class="userlistStyle"> <div class="card shadow-xs"> - <UIBoxHeader icon="users-cog" :title="usersLabel" /> + <UIBoxHeader + icon="users-cog" + :title="usersLabel" + :checkBox="checkboxObject" + /> <UITableHeader :columns="[ { id: 'role', title: `${roleForColumLabel}`, class: 'col-1' }, @@ -15,14 +19,17 @@ ]" /> <UITableBody - :data="users | sortTable(sortColumn, sortDirection, page, pageSize)" + :data=" + usersForTable + | sortTable(sortColumn, sortDirection, page, pageSize) + " :isActive="item => item === currentUser" maxHeight="47rem" > <template v-slot:row="{ item: user }"> <div class="table-cell center col-1" - @click="selectUser(user.user)" + :style="{ opacity: user.active ? '1' : '0.7' }" > <font-awesome-icon v-tooltip="roleLabel(user.role)" @@ -30,16 +37,22 @@ class="fa-lg" /> </div> - <div class="table-cell col-4" @click="selectUser(user.user)"> + <div + class="table-cell col-4" + :style="{ opacity: user.active ? '1' : '0.7' }" + > {{ user.user }} </div> <div + :style="{ opacity: user.active ? '1' : '0.7' }" class="table-cell center col-1" - @click="selectUser(user.user)" > {{ user.country }} </div> - <div class="table-cell col-3" @click="selectUser(user.user)"> + <div + class="table-cell col-3" + :style="{ opacity: user.active ? '1' : '0.7' }" + > {{ user.email }} </div> <div class="table-cell center col-1"> @@ -52,15 +65,30 @@ @change="toggleReport(user)" v-tooltip="receivesReportLabel" :width="40" + :disabled="!user.active" :height="20" /> </div> <div class="table-cell col text-right justify-content-end"> <button + @click="selectUser(user.user)" + class="btn btn-xs btn-dark mr-1" + v-tooltip="getEditLabel(user.active)" + > + <font-awesome-icon + v-if="user.active" + icon="pencil-alt" + fixed-width + /> + <font-awesome-icon v-else icon="undo" fixed-width /> + </button> + <button @click="sendTestMail(user.user)" class="btn btn-xs btn-dark mr-1" v-tooltip="sendMailLabel" v-if="user.email" + :disabled="!user.active" + :style="{ cursor: user.active ? 'pointer' : 'default' }" > <font-awesome-icon icon="paper-plane" fixed-width /> </button> @@ -68,6 +96,8 @@ @click="deleteUser(user.user)" class="btn btn-xs btn-dark" v-tooltip="deleteUserLabel" + :style="{ cursor: user.active ? 'pointer' : 'default' }" + :disabled="!user.active" > <font-awesome-icon icon="trash" fixed-width /> </button> @@ -154,7 +184,9 @@ data() { return { sortColumn: "user", // overriding the sortTable mixin's empty default value - reportToggled: false + reportToggled: false, + usersForTable: [], + areSomeUsersHidden: false }; }, components: { @@ -193,7 +225,7 @@ return this.$gettext("Email"); }, pages() { - return Math.ceil(this.users.length / this.pageSize); + return Math.ceil(this.usersForTable.length / this.pageSize); }, tableStyle() { return { @@ -212,9 +244,46 @@ userlistextended: !this.isUserDetailsVisible } ]; + }, + checkboxObject() { + // Hide checkbox in case there are no deactivated users + if (this.users.some(u => !u.active)) { + return { + value: this.areSomeUsersHidden, + label: "Hide inactive users", + callback: () => { + this.changeDisplayingState(); + } + }; + } else { + return undefined; + } } }, + watch: { + users() { + this.filterUsers(); + } + }, + mounted() { + this.usersForTable = this.users; + }, methods: { + getEditLabel(active) { + if (active) return this.$gettext("Edit user"); + return this.$gettext("Reactivate user"); + }, + changeDisplayingState() { + this.areSomeUsersHidden = !this.areSomeUsersHidden; + this.filterUsers(); + }, + filterUsers() { + if (this.areSomeUsersHidden) { + this.usersForTable = this.users.filter(u => u.active); + } else { + this.usersForTable = this.users; + } + }, toggleReport(user) { HTTP.patch( `/users/${user.user}`, @@ -297,7 +366,18 @@ callback: () => { this.$store .dispatch("usermanagement/deleteUser", { name }) - .then(() => { + .then(response => { + displayInfo({ + message: + name + + // Exclude whitespaces from the string passed to "gettext" function + " " + + this.$gettext("user account") + + " " + + response.data.action + + " " + + this.$gettext("successfully") + }); this.$store .dispatch("usermanagement/loadUsers") .catch(error => {
--- a/client/src/locale/bg_BG/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/bg_BG/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -23,7 +23,7 @@ msgid " does not match any template's element" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." msgstr "" @@ -35,19 +35,19 @@ msgid "%{layerName} Fill Color" msgstr "" -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" msgstr "" -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" msgstr "" @@ -55,7 +55,7 @@ msgid "120 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1115 +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "" @@ -63,7 +63,7 @@ msgid "200 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" msgstr "" @@ -71,11 +71,11 @@ msgid "30 Days" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:678 +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " msgstr "" @@ -107,8 +107,8 @@ msgid "According gauge data:" msgstr "" -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "" @@ -120,7 +120,7 @@ msgid "AM" msgstr "" -#: src/components/importoverview/ImportOverview.vue:466 +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" msgstr "" @@ -132,8 +132,8 @@ msgid "Apr" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "" @@ -142,29 +142,33 @@ msgid "Area" msgstr "Район" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 msgid "Aug" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 msgid "Avail: Latest measurement from " msgstr "" -#: src/components/identify/Identify.vue:436 +#: src/components/identify/Identify.vue:505 msgid "Avail: Latest measurement older than" msgstr "" @@ -178,7 +182,7 @@ msgid "Available fairway depth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 msgid "Available Fairway Depth" msgstr "" @@ -186,13 +190,13 @@ msgid "Available fairway depth vs LNWL" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 msgid "Available Fairway Depth vs LNWL:" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 msgid "Available Fairway Depth:" msgstr "" @@ -209,56 +213,60 @@ msgid "back to login" msgstr "" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -269,25 +277,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -296,8 +305,8 @@ msgid "BeamType" msgstr "Тип" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 #, fuzzy msgid "Bottleneck" @@ -307,67 +316,71 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 #, fuzzy msgid "Bottleneck Surveys" msgstr "Критични участъци" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 #, fuzzy msgid "Bottleneck:" msgstr "Критични участъци" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 msgid "Cancel" msgstr "" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "" @@ -387,11 +400,11 @@ msgid "Choose color" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "" @@ -417,11 +430,11 @@ msgid "Compare with" msgstr "" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "" @@ -431,25 +444,25 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 #, fuzzy msgid "Country" msgstr "Държава" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "" @@ -457,7 +470,7 @@ msgid "Current Waterlevel" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "" @@ -465,15 +478,19 @@ msgid "Data Availability/Accuracy" msgstr "" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "" @@ -488,7 +505,7 @@ msgid "Date info" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "" @@ -496,13 +513,13 @@ msgid "Day" msgstr "" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -510,8 +527,8 @@ msgid "Dec" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "" @@ -536,14 +553,14 @@ msgid "Define Stretches" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 msgid "Delete" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 msgid "Delete cross profile" msgstr "" @@ -555,11 +572,11 @@ msgid "Delete Template" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 msgid "Delete user" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 msgid "Delete User" msgstr "" @@ -575,13 +592,13 @@ msgid "deleted successfully" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "" @@ -593,7 +610,7 @@ msgid "Depth Reference" msgstr "" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "" @@ -609,11 +626,11 @@ msgid "Depthreference" msgstr "" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 msgid "Distance Mark" msgstr "" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 msgid "Distance Mark ashore" msgstr "" @@ -625,7 +642,7 @@ msgid "Distance marks virtual" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "" @@ -633,7 +650,7 @@ msgid "Do you really want to delete the following template:" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "" @@ -659,12 +676,21 @@ msgid "Download Meta.json" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:273 +msgid "Edit user" +msgstr "" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 #, fuzzy msgid "Email" msgstr "E-mail" @@ -700,11 +726,11 @@ msgid "Enqueued" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "" @@ -724,11 +750,11 @@ msgid "Errorlog" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 msgid "Every" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "" @@ -781,15 +807,15 @@ msgid "Fairway (LOS 3)" msgstr "" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 msgid "Fairway Critical" msgstr "" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 msgid "Fairway Date" msgstr "" @@ -797,17 +823,17 @@ msgid "Fairway dimension" msgstr "" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 msgid "Fairway Dimensions" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 msgid "FairwayAvailability" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "" @@ -833,21 +859,21 @@ msgid "Feb" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 msgid "File Import" msgstr "" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "" @@ -864,7 +890,7 @@ msgid "Fri" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "" @@ -879,11 +905,11 @@ msgid "From" msgstr "" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "" @@ -899,11 +925,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 msgid "Gauge Waterlevel" msgstr "" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "" @@ -911,24 +937,24 @@ msgid "Gauges" msgstr "" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 msgid "Generated by" msgstr "" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 msgid "Generated PDFs use font:" msgstr "" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "" @@ -958,21 +984,21 @@ msgid "ID" msgstr "" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 msgid "Identified Features" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -982,7 +1008,7 @@ msgid "Import approved gaugemeasurements" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 msgid "Import import: #" msgstr "" @@ -995,7 +1021,7 @@ msgid "Import Schedule" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "" @@ -1007,7 +1033,7 @@ msgid "Import via" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 msgid "Import Waterway Profiles" msgstr "" @@ -1026,11 +1052,11 @@ msgid "Invalid element" msgstr "" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "" @@ -1038,8 +1064,8 @@ msgid "Jan" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "" @@ -1048,8 +1074,8 @@ msgid "Jul" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "" @@ -1058,8 +1084,8 @@ msgid "Jun" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "" @@ -1080,21 +1106,21 @@ msgid "Later" msgstr "" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 msgid "Latest measurement" msgstr "" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 msgid "Latest Measurement" msgstr "" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 msgid "Latest Waterlevel" msgstr "" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 msgid "Latest Waterlevel Date" msgstr "" @@ -1107,11 +1133,15 @@ msgid "Length" msgstr "" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +msgid "Loading Error" +msgstr "" + #: src/components/Login.vue:58 msgid "Login" msgstr "" @@ -1135,12 +1165,12 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "" @@ -1159,22 +1189,26 @@ msgid "Mar" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 msgid "May" msgstr "" @@ -1191,16 +1225,16 @@ msgid "Measurement" msgstr "" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 msgid "Measurement is within" msgstr "" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 msgid "measurements" msgstr "" @@ -1214,21 +1248,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "" @@ -1236,24 +1270,24 @@ msgid "Mon" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 msgid "monthly" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1262,17 +1296,17 @@ msgid "Name" msgstr "име" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "" @@ -1290,10 +1324,6 @@ msgid "Negate Z values in XYZ files" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1311,7 +1341,7 @@ msgid "New stretch" msgstr "" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "" @@ -1321,11 +1351,16 @@ msgid "No data available." msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +msgid "No data selectable" +msgstr "" + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "" -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 msgid "No measurement available" msgstr "" @@ -1333,7 +1368,7 @@ msgid "No results." msgstr "" -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "" @@ -1341,7 +1376,7 @@ msgid "No style-changes" msgstr "" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "" @@ -1357,8 +1392,8 @@ msgid "No valid waterlevel data available." msgstr "" -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1366,14 +1401,14 @@ msgid "Nov" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "" @@ -1382,7 +1417,7 @@ msgid "Numbers" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 msgid "o' clock" msgstr "" @@ -1394,13 +1429,13 @@ msgid "Oct" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "" @@ -1412,11 +1447,11 @@ msgid "Old" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 msgid "Onetime Imports" msgstr "" @@ -1429,17 +1464,17 @@ msgid "Owner" msgstr "" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "Парола" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "Парола" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "" @@ -1447,13 +1482,14 @@ msgid "Password reset requested!" msgstr "" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" msgstr "" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "" @@ -1465,16 +1501,16 @@ msgid "pending" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 #, fuzzy msgid "Please choose a country" msgstr "Моля, изберете държава" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "" @@ -1483,7 +1519,7 @@ msgid "Please enter a date" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "" @@ -1496,15 +1532,15 @@ msgid "Please enter a Featuretype" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "" @@ -1526,7 +1562,7 @@ msgid "Please enter a source organization" msgstr "Моля, изберете държава" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "" @@ -1574,28 +1610,27 @@ msgid "Please enter an originator" msgstr "Моля, изберете държава" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:29 +msgid "Please select a report to update" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +msgid "Please select stats to update" +msgstr "" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1604,7 +1639,7 @@ msgid "portrait" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "" @@ -1617,7 +1652,7 @@ msgid "Prediction" msgstr "" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "" @@ -1629,11 +1664,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "" @@ -1653,21 +1688,29 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +msgid "Reactivate user" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:6 #, fuzzy msgid "Recency of Bottleneck Surveys" msgstr "Критични участъци" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "" @@ -1679,14 +1722,18 @@ msgid "Refresh" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 msgid "Regular Imports" msgstr "" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "" +#: src/components/importconfiguration/ImportDetails.vue:142 +msgid "Reports" +msgstr "" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "" @@ -1703,15 +1750,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1729,11 +1776,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1745,25 +1792,24 @@ msgid "Sat" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 msgid "Saved import: #" msgstr "" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "" @@ -1772,15 +1818,15 @@ msgstr "" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 msgid "Scheduled" msgstr "" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 msgid "Section" msgstr "" @@ -1804,7 +1850,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 #, fuzzy msgid "Select bottleneck" msgstr "Критични участъци" @@ -1837,7 +1883,7 @@ msgid "Send all" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "" @@ -1845,13 +1891,13 @@ msgid "Sep" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "" @@ -1859,7 +1905,7 @@ msgid "Show Hydrological Conditions" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "" @@ -1871,11 +1917,11 @@ msgid "Signer" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1899,7 +1945,7 @@ msgid "Sounding Result Comparison" msgstr "" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 msgid "Sounding results" msgstr "" @@ -1916,16 +1962,16 @@ msgid "Source organization" msgstr "" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 msgid "Source Organization" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "" @@ -1934,7 +1980,7 @@ msgid "Staging Area" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "" @@ -1942,7 +1988,7 @@ msgid "Start rhm" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "" @@ -1966,11 +2012,15 @@ msgid "Starting Year" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 msgid "Status" msgstr "" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 msgid "Stretch" msgstr "" @@ -1979,13 +2029,17 @@ msgstr "" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +msgid "successfully" +msgstr "" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -1993,17 +2047,17 @@ msgid "Sun" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "" @@ -2011,11 +2065,11 @@ msgid "Survey from:" msgstr "" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 msgid "Survey type" msgstr "" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "" @@ -2023,7 +2077,7 @@ msgid "Sysadmin" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 msgid "System-Administrator" msgstr "" @@ -2035,10 +2089,16 @@ msgid "Systemconfiguration" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 msgid "Testmail sent" msgstr "" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2126,9 +2186,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2136,7 +2196,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2146,12 +2206,12 @@ msgid "Thu" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2173,21 +2233,21 @@ msgid "Tolerance for snapping to axis" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 msgid "Trigger import" msgstr "" @@ -2195,7 +2255,7 @@ msgid "Tue" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "" @@ -2211,11 +2271,15 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 msgid "update import: #" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "" @@ -2239,7 +2303,7 @@ msgid "uploaded successfully" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2254,25 +2318,34 @@ msgid "URL" msgstr "" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 msgid "User Manual" msgstr "" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2284,7 +2357,7 @@ msgid "Value" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2309,17 +2382,17 @@ msgstr "" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 msgid "Waterlevel [m]" msgstr "" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 msgid "Waterway Admin" msgstr "" @@ -2327,7 +2400,7 @@ msgid "Waterway area" msgstr "" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 msgid "Waterway Area" msgstr "" @@ -2335,7 +2408,7 @@ msgid "Waterway axis" msgstr "" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 msgid "Waterway Axis" msgstr "" @@ -2343,7 +2416,7 @@ msgid "Waterway gauges" msgstr "" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 msgid "Waterway Profile" msgstr "" @@ -2352,7 +2425,7 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 msgid "Waterway User" msgstr "" @@ -2360,16 +2433,16 @@ msgid "Wed" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "" @@ -2385,26 +2458,30 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "Година" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 #, fuzzy msgid "yearly" msgstr "Година" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 #, fuzzy msgid "yes" msgstr "Слоеве" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." msgstr "" +#: src/components/identify/formatter.js:127 +msgid "ZPG exception" +msgstr "" + #, fuzzy #~ msgid "Chose preset" #~ msgstr "Избиране на формат"
--- a/client/src/locale/de_AT/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/de_AT/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -23,7 +23,7 @@ msgid " does not match any template's element" msgstr " stimmt mit keinem Vorlagenelement überein" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." msgstr " wurde erfolgreich hochgeladen" @@ -35,19 +35,19 @@ msgid "%{layerName} Fill Color" msgstr "Füllfarbe" -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" msgstr "%a %d" -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" msgstr "%b %d" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" msgstr "0 bedeutet, keine Wiederholung" @@ -55,7 +55,7 @@ msgid "120 dpi" msgstr "120 dpi" -#: src/components/importconfiguration/ScheduledImports.vue:1115 +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "15 Minuten" @@ -63,7 +63,7 @@ msgid "200 dpi" msgstr "200 dpi" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" msgstr "2h45m bedeutet 2 Stunden und 45 Minuten" @@ -71,11 +71,11 @@ msgid "30 Days" msgstr "30 Tage" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" msgstr "30m entsprechen 30 Minuten" -#: src/components/importconfiguration/ScheduledImports.vue:678 +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " msgstr "60 enspricht 60 Sekunden " @@ -107,8 +107,8 @@ msgid "According gauge data:" msgstr "Laut Pegelstellendaten:" -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "Benutzer hinzufügen" @@ -120,7 +120,7 @@ msgid "AM" msgstr "AM" -#: src/components/importoverview/ImportOverview.vue:466 +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" msgstr "bestätigt" @@ -133,8 +133,8 @@ msgid "Apr" msgstr "April" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "April" @@ -143,30 +143,34 @@ msgid "Area" msgstr "Fläche" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "am" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 #, fuzzy msgid "Aug" msgstr "August" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "August" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "Verfügbarkeit: Unterhalb des Schwellenwertes" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 msgid "Avail: Latest measurement from " msgstr "Verfügbarkeit: Letzte Messung vom " -#: src/components/identify/Identify.vue:436 +#: src/components/identify/Identify.vue:505 msgid "Avail: Latest measurement older than" msgstr "Verfügbarkeit: Letzte Messung älter als" @@ -180,7 +184,7 @@ msgid "Available fairway depth" msgstr "Verfügbare Fahrrinnentiefe" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 #, fuzzy msgid "Available Fairway Depth" msgstr "Verfügbare Fahrrinnen Tiefen" @@ -189,13 +193,13 @@ msgid "Available fairway depth vs LNWL" msgstr "Verfügbare Fahrrinnen Tiefen vs RNW" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 msgid "Available Fairway Depth vs LNWL:" msgstr "Verfügbare Fahrrinnen Tiefen vs RNW:" -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 msgid "Available Fairway Depth:" msgstr "Verfügbare Fahrrinnen Tiefen:" @@ -213,56 +217,60 @@ msgid "back to login" msgstr "zurück zur Anmeldung" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -273,25 +281,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "Server-Fehler" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -299,8 +308,8 @@ msgid "BeamType" msgstr "Typ des Echosounders" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 msgid "Bottleneck" msgstr "Seichtstelle" @@ -309,65 +318,69 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "Seichtstellen Isobathenklassen" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 msgid "Bottleneck Surveys" msgstr "Seichtstellen Vermessung" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 msgid "Bottleneck:" msgstr "Seichtstelle:" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "Seichtstellen" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "Berechnung der Unterschiede" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 msgid "Cancel" msgstr "Abbrechen" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "Kilometrierung" @@ -389,11 +402,11 @@ msgid "Choose color" msgstr "Farbe auswählen" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "Wähle hochzuladende Datei" @@ -422,11 +435,11 @@ msgid "Compare with" msgstr "Vergleiche mit" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "Zuversicht per 24h" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "Zuversicht per 72h" @@ -436,24 +449,24 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "Bestätigen" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "Koordinaten auf die Zwischenablage kopiert!" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 msgid "Country" msgstr "Land" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "Crontab-Zeile" @@ -461,7 +474,7 @@ msgid "Current Waterlevel" msgstr "Aktueller Wasserstand" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "Einstellbare Tiefe" @@ -469,15 +482,19 @@ msgid "Data Availability/Accuracy" msgstr "Daten Verfügbarkeit/ Genauigkeit" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "Daten zu alt. Schwellenwert:" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "Daten sind innerhalb der Gültigkeitsschwelle" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "Daten sind innerhalb des Gültigkeitzeitraums" @@ -492,7 +509,7 @@ msgid "Date info" msgstr "Datum" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "Tag" @@ -500,13 +517,13 @@ msgid "Day" msgstr "Tag" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -514,8 +531,8 @@ msgid "Dec" msgstr "Dez" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "Dezember" @@ -540,14 +557,14 @@ msgid "Define Stretches" msgstr "Definiere Strecke" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 msgid "Delete" msgstr "Löschen" -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 msgid "Delete cross profile" msgstr "Lösche gespeicherte Querprofile" @@ -559,11 +576,11 @@ msgid "Delete Template" msgstr "Lösche Vorlage" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 msgid "Delete user" msgstr "Konto löschen" -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 msgid "Delete User" msgstr "Lösche Nutzer" @@ -579,13 +596,13 @@ msgid "deleted successfully" msgstr "erfolgreich gelöscht" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "Löchen " -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "Tiefe" @@ -599,7 +616,7 @@ msgid "Depth Reference" msgstr "Tiefenreferenz" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "Tiefe relativ zu" @@ -615,11 +632,11 @@ msgid "Depthreference" msgstr "Tiefenreferenz" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 msgid "Distance Mark" msgstr "Flusshektometer" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 msgid "Distance Mark ashore" msgstr "Flusshektometer Ufer" @@ -631,7 +648,7 @@ msgid "Distance marks virtual" msgstr "Flusshektometer Achse (virtuel)" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "Wollen sie das Querprofil löschen:" @@ -639,7 +656,7 @@ msgid "Do you really want to delete the following template:" msgstr "Wollen sie das ausgewählte Template löschen:" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "Wollen sie den Nutzeraccount löschen:" @@ -665,12 +682,22 @@ msgid "Download Meta.json" msgstr "Meta.json Herunterladen" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "Zuvor" +#: src/components/usermanagement/Usermanagement.vue:273 +#, fuzzy +msgid "Edit user" +msgstr "Benutzername eingeben" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 msgid "Email" msgstr "E-Mail" @@ -705,11 +732,11 @@ msgid "Enqueued" msgstr "Hinzugefügt" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "Manuelle Koordinateneingabe" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "Namen für Profilschnitt eingeben" @@ -729,11 +756,11 @@ msgid "Errorlog" msgstr "Fehlerprotokoll" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 msgid "Every" msgstr "Jeder" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "Beispiele:" @@ -786,15 +813,15 @@ msgid "Fairway (LOS 3)" msgstr "Fahrrinne (LOS 3)" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "Fahrrinnenverfügbarkeit" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 msgid "Fairway Critical" msgstr "Kritischer Fahrrinnenabschnitt" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 msgid "Fairway Date" msgstr "Fahrrinnen Datum" @@ -802,18 +829,18 @@ msgid "Fairway dimension" msgstr "Fahrrinnenabmessung" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 msgid "Fairway Dimensions" msgstr "Fahrinnenabmessungen" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 #, fuzzy msgid "FairwayAvailability" msgstr "Fahrrinnenverfügbarkeit" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "Fahrrinnenverfügbarkeit vs RNW" @@ -840,21 +867,21 @@ msgid "Feb" msgstr "Februar" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "Februar" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "Datei" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 msgid "File Import" msgstr "Daten Import" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "Beenden der Überprüfung" @@ -871,7 +898,7 @@ msgid "Fri" msgstr "Freitag" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "Freitag" @@ -886,11 +913,11 @@ msgid "From" msgstr "Von" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "G.M. Anzahl der Messungen in den letzten 14 Tagen" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "Pegel" @@ -906,11 +933,11 @@ msgid "Gauge measurement" msgstr "Pegelmessung" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 msgid "Gauge Waterlevel" msgstr "Wasserstand am Pegel" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "Datum der Messung" @@ -918,24 +945,24 @@ msgid "Gauges" msgstr "Pegel" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "PDF generieren" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 msgid "Generated by" msgstr "Erstellt von" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 msgid "Generated PDFs use font:" msgstr "Generierte PDFs nutzen die Schriftart:" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "Höchste Zuversicht" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "Stunde" @@ -966,23 +993,23 @@ msgid "ID" msgstr "ID" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 msgid "Identified Features" msgstr "Identifizierte Features" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "" "Wenn kein Error während des Imports auftritt, dann gibt es keine " "Wiederholung der Anfrage." -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -992,7 +1019,7 @@ msgid "Import approved gaugemeasurements" msgstr "Import von bestätigten Wasserstandsdaten" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 msgid "Import import: #" msgstr "Import import: #" @@ -1005,7 +1032,7 @@ msgid "Import Schedule" msgstr "Importplan" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "Seichtstellenmessungen importieren" @@ -1017,7 +1044,7 @@ msgid "Import via" msgstr "Import via" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 msgid "Import Waterway Profiles" msgstr "Import der Fahrrinnenprofile" @@ -1036,11 +1063,11 @@ msgid "Invalid element" msgstr "Ungültiges Element" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "Ungültige E-Mail" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "Ungültige Eingabe" @@ -1049,8 +1076,8 @@ msgid "Jan" msgstr "Januar" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "Januar" @@ -1060,8 +1087,8 @@ msgid "Jul" msgstr "Juli" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "Juli" @@ -1071,8 +1098,8 @@ msgid "Jun" msgstr "Juni" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "Juni" @@ -1093,21 +1120,21 @@ msgid "Later" msgstr "Später" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 msgid "Latest measurement" msgstr "Neueste Messung" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 msgid "Latest Measurement" msgstr "Neueste Messung" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 msgid "Latest Waterlevel" msgstr "Aktueller Wasserstand" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 msgid "Latest Waterlevel Date" msgstr "Datum der neuesten Wasserstandsmessung" @@ -1120,11 +1147,16 @@ msgid "Length" msgstr "Länge" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +#, fuzzy +msgid "Loading Error" +msgstr "Formatfehler" + #: src/components/Login.vue:58 msgid "Login" msgstr "Login" @@ -1148,12 +1180,12 @@ msgstr "Langzeit Amplitude" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "LOS" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "Manuell getätigter Import: #" @@ -1172,22 +1204,26 @@ msgid "Mar" msgstr "März" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "März" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "Maximale Wiederholungsanzahl" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "Max. Breite" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 msgid "May" msgstr "Mai" @@ -1205,16 +1241,16 @@ msgid "Measurement" msgstr "Messung" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "Anzahl der Messungen in den letzten 14 Tagen" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 msgid "Measurement is within" msgstr "Messung ist innerhalb" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 #, fuzzy msgid "measurements" msgstr "Messung" @@ -1229,21 +1265,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "Minimum G.M. Anzahl in den letzten 14 Tagen" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "Minuten nach" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "Min. Breite" @@ -1251,25 +1287,25 @@ msgid "Mon" msgstr "Mo" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "Montag" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "Monat" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 #, fuzzy msgid "monthly" msgstr "monatlich" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "monatlich" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1277,17 +1313,17 @@ msgid "Name" msgstr "Name" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "Nash-Sutcliffe nicht verfügbar" @@ -1305,10 +1341,6 @@ msgid "Negate Z values in XYZ files" msgstr "Negiere das Z-Vorzeichen in xyz Dateien" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "Negative Zahlen bedeuten eine \"unendliche\" Anzahl der Versuche" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1327,7 +1359,7 @@ msgid "New stretch" msgstr "Neue Strecke" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "nein" @@ -1337,11 +1369,17 @@ msgid "No data available." msgstr "Keine Daten verfügbar." +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +#, fuzzy +msgid "No data selectable" +msgstr "Keine Daten verfügbar." + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "Keine Objekte identifiziert." -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 msgid "No measurement available" msgstr "Keine Messwerte verfügbar" @@ -1349,7 +1387,7 @@ msgid "No results." msgstr "Keine Ergebnisse." -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "Keine \"Revisiting time\" definiert" @@ -1357,7 +1395,7 @@ msgid "No style-changes" msgstr "Keine Style-Änderungen" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "Keine Vermessungsdaten verfügbar" @@ -1375,8 +1413,8 @@ msgid "No valid waterlevel data available." msgstr "Keine Daten verfügbar." -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1385,14 +1423,14 @@ msgid "Nov" msgstr "Jetzt" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "November" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "Jetzt" @@ -1402,7 +1440,7 @@ msgid "Numbers" msgstr "November" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 #, fuzzy msgid "o' clock" msgstr "Uhr" @@ -1415,13 +1453,13 @@ msgid "Oct" msgstr "Oktober" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "Oktober" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "von" @@ -1433,11 +1471,11 @@ msgid "Old" msgstr "Alt" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "auf" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 msgid "Onetime Imports" msgstr "Einmalige Importe" @@ -1450,17 +1488,17 @@ msgid "Owner" msgstr "Eigentümer" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "Passwort" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "Passwort" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "Noch einmal das Passwort" @@ -1468,7 +1506,8 @@ msgid "Password reset requested!" msgstr "Passwort Zurücksetzung angefragt!" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" @@ -1476,7 +1515,7 @@ "Das Passwort sollte mindestens 8 Zeichen lang sein, eine Ziffer und ein " "Sonderzeichen wie etwa $ enthalten" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "Die Passwörter stimmen nicht überein!" @@ -1488,15 +1527,15 @@ msgid "pending" msgstr "ausstehend" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "Prozent" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 msgid "Please choose a country" msgstr "Bitte wählen Sie ein Land aus" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "Bitte wählen Sie eine Rolle aus" @@ -1505,7 +1544,7 @@ msgid "Please enter a date" msgstr "Bitte ein Datum eingeben" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "Bitte eine Tiefe eingeben" @@ -1518,15 +1557,15 @@ msgid "Please enter a Featuretype" msgstr "Bitte einen Featuretype eingeben" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "Bitte eine LOS eingeben" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "Bitte eine maximale Fahrrinnenbreite eingeben" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "Bitte eine minimale Fahrrinnenbreite eingeben" @@ -1547,7 +1586,7 @@ msgid "Please enter a source organization" msgstr "Bitte eine Quellorganisation eingeben" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "Bitte eine Quellorganisation eintragen" @@ -1599,29 +1638,30 @@ msgid "Please enter an originator" msgstr "Bitte eine Organisation eintragen" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" "Bitte geben Sie die Koordinaten in folgendem Format an: Lat,Lon,Lat,Lon" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "Bitte eine Seichtstelle wählen" +#: src/components/importconfiguration/types/DQLReport.vue:29 +#, fuzzy +msgid "Please select a report to update" +msgstr "Bitte auswählen" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "Bitte auswählen" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +#, fuzzy +msgid "Please select stats to update" +msgstr "Bitte auswählen" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1630,7 +1670,7 @@ msgid "portrait" msgstr "Hochformat" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "" @@ -1645,7 +1685,7 @@ msgid "Prediction" msgstr "Projektion" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "Keine Vorhersagen verfügbar" @@ -1657,11 +1697,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "Profil gelöscht!" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "Profil gespeichert!" @@ -1681,21 +1721,30 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +#, fuzzy +msgid "Reactivate user" +msgstr "Konto löschen" + #: src/components/systemconfiguration/DataAccuracy.vue:6 #, fuzzy msgid "Recency of Bottleneck Surveys" msgstr "Seichtstellen" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "" @@ -1708,15 +1757,20 @@ msgid "Refresh" msgstr "Aktualisieren" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 #, fuzzy msgid "Regular Imports" msgstr "Neuer Import" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "Passwort erneut eingeben" +#: src/components/importconfiguration/ImportDetails.vue:142 +#, fuzzy +msgid "Reports" +msgstr "Daten-Import" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "Passwort-Zurücksetzung anfragen!" @@ -1733,15 +1787,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1759,11 +1813,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "Rolle" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1775,26 +1829,25 @@ msgid "Sat" msgstr "Sa" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "Samstag" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "Speichern" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "Gespeicherte Profile" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 #, fuzzy msgid "Saved import: #" msgstr "Neuer Import" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "" @@ -1803,16 +1856,16 @@ msgstr "" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "Zeitplan" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 #, fuzzy msgid "Scheduled" msgstr "Zeitplan" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 #, fuzzy msgid "Section" msgstr "Projektion" @@ -1838,7 +1891,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 #, fuzzy msgid "Select bottleneck" msgstr "Wähle Seichtstelle" @@ -1873,7 +1926,7 @@ msgid "Send all" msgstr "Test-E-Mail versenden" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "Test-E-Mail versenden" @@ -1881,13 +1934,13 @@ msgid "Sep" msgstr "Sep" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "September" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "Differenzen anzeigen" @@ -1895,7 +1948,7 @@ msgid "Show Hydrological Conditions" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "" @@ -1908,11 +1961,11 @@ msgid "Signer" msgstr "Überprüft durch" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "Einfach" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1939,7 +1992,7 @@ msgid "Sounding Result Comparison" msgstr "Seichtstellenvermessung" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 #, fuzzy msgid "Sounding results" msgstr "Seichtstellenvermessung" @@ -1959,17 +2012,17 @@ msgid "Source organization" msgstr "Bitte ein Datum eingeben" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 #, fuzzy msgid "Source Organization" msgstr "Bitte ein Datum eingeben" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "Quelltext" @@ -1978,7 +2031,7 @@ msgid "Staging Area" msgstr "Import-Überprüfung" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "Start" @@ -1987,7 +2040,7 @@ msgid "Start rhm" msgstr "Start" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "Import gestartet " @@ -2015,12 +2068,16 @@ msgid "Starting Year" msgstr "Import-Überprüfung" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 #, fuzzy msgid "Status" msgstr "Zustand" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 #, fuzzy msgid "Stretch" msgstr "Konto löschen" @@ -2031,13 +2088,18 @@ msgstr "Konto löschen" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "Abschicken" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +#, fuzzy +msgid "successfully" +msgstr "erfolgreich gelöscht" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -2045,17 +2107,17 @@ msgid "Sun" msgstr "So" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "Sonntag" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "" @@ -2063,12 +2125,12 @@ msgid "Survey from:" msgstr "" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 #, fuzzy msgid "Survey type" msgstr "Featuretyp" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "" @@ -2076,7 +2138,7 @@ msgid "Sysadmin" msgstr "Sys-Admin" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 #, fuzzy msgid "System-Administrator" msgstr "System-Administration" @@ -2089,11 +2151,17 @@ msgid "Systemconfiguration" msgstr "System-Konfiguation" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 #, fuzzy msgid "Testmail sent" msgstr "E-Mail wurde gesendet" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2181,9 +2249,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2191,7 +2259,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2201,12 +2269,12 @@ msgid "Thu" msgstr "Do" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "Donnerstag" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2228,21 +2296,21 @@ msgid "Tolerance for snapping to axis" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "Versuche" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 #, fuzzy msgid "Trigger import" msgstr "Neuer Import" @@ -2251,7 +2319,7 @@ msgid "Tue" msgstr "Di" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "Dienstag" @@ -2266,12 +2334,16 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 #, fuzzy msgid "update import: #" msgstr "Neuer Import" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "Hochladen" @@ -2295,7 +2367,7 @@ msgid "uploaded successfully" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2310,26 +2382,35 @@ msgid "URL" msgstr "" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 #, fuzzy msgid "User Manual" msgstr "Benutzername" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "Benutzername" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "Benutzer" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2345,7 +2426,7 @@ msgid "Value" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2371,17 +2452,17 @@ msgstr "Wasserstand" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 msgid "Waterlevel [m]" msgstr "Wasserstand [m]" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "Wasserstände" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 #, fuzzy msgid "Waterway Admin" msgstr "Waterway-Admin" @@ -2391,7 +2472,7 @@ msgid "Waterway area" msgstr "Waterway-Benutzer" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 #, fuzzy msgid "Waterway Area" msgstr "Waterway-Benutzer" @@ -2400,7 +2481,7 @@ msgid "Waterway axis" msgstr "" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 #, fuzzy msgid "Waterway Axis" msgstr "Waterway-Admin" @@ -2409,7 +2490,7 @@ msgid "Waterway gauges" msgstr "" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 #, fuzzy msgid "Waterway Profile" msgstr "Einlesen der Wasserwegsprofile" @@ -2420,7 +2501,7 @@ msgstr "Einlesen der Wasserwegsprofile" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 #, fuzzy msgid "Waterway User" msgstr "Waterway-Benutzer" @@ -2429,16 +2510,16 @@ msgid "Wed" msgstr "Mi" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "Mittwoch" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "Woche" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "wöchentlich" @@ -2454,21 +2535,21 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "Jahr" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 #, fuzzy msgid "yearly" msgstr "Jahr" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 #, fuzzy msgid "yes" msgstr "Ebenen" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." @@ -2476,6 +2557,14 @@ "Sie können diese Koordinaten aus dem \"Gespeicherte Profile\"-Menü " "auswählen, um diesen Profilschnitt wieder herzustellen." +#: src/components/identify/formatter.js:127 +#, fuzzy +msgid "ZPG exception" +msgstr "Projektion" + +#~ msgid "Negative values mean endless retry" +#~ msgstr "Negative Zahlen bedeuten eine \"unendliche\" Anzahl der Versuche" + #~ msgid "Error while saving user" #~ msgstr "Während des Speicherns der Nutzerdaten trat ein Fehler auf" @@ -2530,10 +2619,6 @@ #~ msgid "Delete Section" #~ msgstr "Konto löschen" -#, fuzzy -#~ msgid "Please select template type" -#~ msgstr "Bitte auswählen" - #~ msgid "Author" #~ msgstr "Autor"
--- a/client/src/locale/en_GB/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/en_GB/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -21,7 +21,7 @@ msgid " does not match any template's element" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." msgstr "" @@ -33,19 +33,19 @@ msgid "%{layerName} Fill Color" msgstr "" -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" msgstr "" -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" msgstr "" @@ -53,7 +53,7 @@ msgid "120 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1115 +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "" @@ -61,7 +61,7 @@ msgid "200 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" msgstr "" @@ -69,11 +69,11 @@ msgid "30 Days" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:678 +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " msgstr "" @@ -105,8 +105,8 @@ msgid "According gauge data:" msgstr "" -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "" @@ -118,7 +118,7 @@ msgid "AM" msgstr "" -#: src/components/importoverview/ImportOverview.vue:466 +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" msgstr "" @@ -130,8 +130,8 @@ msgid "Apr" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "" @@ -140,29 +140,33 @@ msgid "Area" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 msgid "Aug" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 msgid "Avail: Latest measurement from " msgstr "" -#: src/components/identify/Identify.vue:436 +#: src/components/identify/Identify.vue:505 msgid "Avail: Latest measurement older than" msgstr "" @@ -176,7 +180,7 @@ msgid "Available fairway depth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 msgid "Available Fairway Depth" msgstr "" @@ -184,13 +188,13 @@ msgid "Available fairway depth vs LNWL" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 msgid "Available Fairway Depth vs LNWL:" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 msgid "Available Fairway Depth:" msgstr "" @@ -207,56 +211,60 @@ msgid "back to login" msgstr "" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -267,25 +275,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -293,8 +302,8 @@ msgid "BeamType" msgstr "" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 msgid "Bottleneck" msgstr "" @@ -303,65 +312,69 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 msgid "Bottleneck Surveys" msgstr "" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 msgid "Bottleneck:" msgstr "" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 msgid "Cancel" msgstr "" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "" @@ -381,11 +394,11 @@ msgid "Choose color" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "" @@ -411,11 +424,11 @@ msgid "Compare with" msgstr "" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "" @@ -425,24 +438,24 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 msgid "Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "" @@ -450,7 +463,7 @@ msgid "Current Waterlevel" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "" @@ -458,15 +471,19 @@ msgid "Data Availability/Accuracy" msgstr "" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "" @@ -481,7 +498,7 @@ msgid "Date info" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "" @@ -489,13 +506,13 @@ msgid "Day" msgstr "" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -503,8 +520,8 @@ msgid "Dec" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "" @@ -529,14 +546,14 @@ msgid "Define Stretches" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 msgid "Delete" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 msgid "Delete cross profile" msgstr "" @@ -548,11 +565,11 @@ msgid "Delete Template" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 msgid "Delete user" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 msgid "Delete User" msgstr "" @@ -568,13 +585,13 @@ msgid "deleted successfully" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "" @@ -586,7 +603,7 @@ msgid "Depth Reference" msgstr "" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "" @@ -602,11 +619,11 @@ msgid "Depthreference" msgstr "" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 msgid "Distance Mark" msgstr "" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 msgid "Distance Mark ashore" msgstr "" @@ -618,7 +635,7 @@ msgid "Distance marks virtual" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "" @@ -626,7 +643,7 @@ msgid "Do you really want to delete the following template:" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "" @@ -652,12 +669,21 @@ msgid "Download Meta.json" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:273 +msgid "Edit user" +msgstr "" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 msgid "Email" msgstr "" @@ -692,11 +718,11 @@ msgid "Enqueued" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "" @@ -716,11 +742,11 @@ msgid "Errorlog" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 msgid "Every" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "" @@ -773,15 +799,15 @@ msgid "Fairway (LOS 3)" msgstr "" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 msgid "Fairway Critical" msgstr "" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 msgid "Fairway Date" msgstr "" @@ -789,17 +815,17 @@ msgid "Fairway dimension" msgstr "" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 msgid "Fairway Dimensions" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 msgid "FairwayAvailability" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "" @@ -825,21 +851,21 @@ msgid "Feb" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 msgid "File Import" msgstr "" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "" @@ -856,7 +882,7 @@ msgid "Fri" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "" @@ -871,11 +897,11 @@ msgid "From" msgstr "" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "" @@ -891,11 +917,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 msgid "Gauge Waterlevel" msgstr "" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "" @@ -903,24 +929,24 @@ msgid "Gauges" msgstr "" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 msgid "Generated by" msgstr "" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 msgid "Generated PDFs use font:" msgstr "" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "" @@ -950,21 +976,21 @@ msgid "ID" msgstr "" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 msgid "Identified Features" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -974,7 +1000,7 @@ msgid "Import approved gaugemeasurements" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 msgid "Import import: #" msgstr "" @@ -987,7 +1013,7 @@ msgid "Import Schedule" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "" @@ -999,7 +1025,7 @@ msgid "Import via" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 msgid "Import Waterway Profiles" msgstr "" @@ -1018,11 +1044,11 @@ msgid "Invalid element" msgstr "" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "" @@ -1030,8 +1056,8 @@ msgid "Jan" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "" @@ -1040,8 +1066,8 @@ msgid "Jul" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "" @@ -1050,8 +1076,8 @@ msgid "Jun" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "" @@ -1072,21 +1098,21 @@ msgid "Later" msgstr "" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 msgid "Latest measurement" msgstr "" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 msgid "Latest Measurement" msgstr "" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 msgid "Latest Waterlevel" msgstr "" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 msgid "Latest Waterlevel Date" msgstr "" @@ -1098,11 +1124,15 @@ msgid "Length" msgstr "" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +msgid "Loading Error" +msgstr "" + #: src/components/Login.vue:58 msgid "Login" msgstr "" @@ -1126,12 +1156,12 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "" @@ -1149,22 +1179,26 @@ msgid "Mar" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 msgid "May" msgstr "" @@ -1181,16 +1215,16 @@ msgid "Measurement" msgstr "" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 msgid "Measurement is within" msgstr "" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 msgid "measurements" msgstr "" @@ -1204,21 +1238,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "" @@ -1226,24 +1260,24 @@ msgid "Mon" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 msgid "monthly" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1251,17 +1285,17 @@ msgid "Name" msgstr "" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "" @@ -1279,10 +1313,6 @@ msgid "Negate Z values in XYZ files" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1300,7 +1330,7 @@ msgid "New stretch" msgstr "" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "" @@ -1310,11 +1340,16 @@ msgid "No data available." msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +msgid "No data selectable" +msgstr "" + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "" -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 msgid "No measurement available" msgstr "" @@ -1322,7 +1357,7 @@ msgid "No results." msgstr "" -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "" @@ -1330,7 +1365,7 @@ msgid "No style-changes" msgstr "" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "" @@ -1346,8 +1381,8 @@ msgid "No valid waterlevel data available." msgstr "" -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1355,14 +1390,14 @@ msgid "Nov" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "" @@ -1371,7 +1406,7 @@ msgid "Numbers" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 msgid "o' clock" msgstr "" @@ -1383,13 +1418,13 @@ msgid "Oct" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "" @@ -1401,11 +1436,11 @@ msgid "Old" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 msgid "Onetime Imports" msgstr "" @@ -1418,17 +1453,17 @@ msgid "Owner" msgstr "" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "" @@ -1436,13 +1471,14 @@ msgid "Password reset requested!" msgstr "" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" msgstr "" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "" @@ -1454,15 +1490,15 @@ msgid "pending" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 msgid "Please choose a country" msgstr "" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "" @@ -1471,7 +1507,7 @@ msgid "Please enter a date" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "" @@ -1484,15 +1520,15 @@ msgid "Please enter a Featuretype" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "" @@ -1513,7 +1549,7 @@ msgid "Please enter a source organization" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "" @@ -1560,28 +1596,27 @@ msgid "Please enter an originator" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:29 +msgid "Please select a report to update" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +msgid "Please select stats to update" +msgstr "" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1590,7 +1625,7 @@ msgid "portrait" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "" @@ -1603,7 +1638,7 @@ msgid "Prediction" msgstr "" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "" @@ -1615,11 +1650,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "" @@ -1639,20 +1674,28 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +msgid "Reactivate user" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:6 msgid "Recency of Bottleneck Surveys" msgstr "" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "" @@ -1664,14 +1707,18 @@ msgid "Refresh" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 msgid "Regular Imports" msgstr "" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "" +#: src/components/importconfiguration/ImportDetails.vue:142 +msgid "Reports" +msgstr "" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "" @@ -1688,15 +1735,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1714,11 +1761,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1730,25 +1777,24 @@ msgid "Sat" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 msgid "Saved import: #" msgstr "" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "" @@ -1757,15 +1803,15 @@ msgstr "" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 msgid "Scheduled" msgstr "" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 msgid "Section" msgstr "" @@ -1789,7 +1835,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 msgid "Select bottleneck" msgstr "" @@ -1821,7 +1867,7 @@ msgid "Send all" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "" @@ -1829,13 +1875,13 @@ msgid "Sep" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "" @@ -1843,7 +1889,7 @@ msgid "Show Hydrological Conditions" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "" @@ -1855,11 +1901,11 @@ msgid "Signer" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1883,7 +1929,7 @@ msgid "Sounding Result Comparison" msgstr "" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 msgid "Sounding results" msgstr "" @@ -1900,16 +1946,16 @@ msgid "Source organization" msgstr "" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 msgid "Source Organization" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "" @@ -1918,7 +1964,7 @@ msgid "Staging Area" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "" @@ -1926,7 +1972,7 @@ msgid "Start rhm" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "" @@ -1950,11 +1996,15 @@ msgid "Starting Year" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 msgid "Status" msgstr "" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 msgid "Stretch" msgstr "" @@ -1963,13 +2013,17 @@ msgstr "" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +msgid "successfully" +msgstr "" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -1977,17 +2031,17 @@ msgid "Sun" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "" @@ -1995,11 +2049,11 @@ msgid "Survey from:" msgstr "" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 msgid "Survey type" msgstr "" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "" @@ -2007,7 +2061,7 @@ msgid "Sysadmin" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 msgid "System-Administrator" msgstr "" @@ -2019,10 +2073,16 @@ msgid "Systemconfiguration" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 msgid "Testmail sent" msgstr "" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2110,9 +2170,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2120,7 +2180,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2130,12 +2190,12 @@ msgid "Thu" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2157,21 +2217,21 @@ msgid "Tolerance for snapping to axis" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 msgid "Trigger import" msgstr "" @@ -2179,7 +2239,7 @@ msgid "Tue" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "" @@ -2194,11 +2254,15 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 msgid "update import: #" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "" @@ -2222,7 +2286,7 @@ msgid "uploaded successfully" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2237,25 +2301,34 @@ msgid "URL" msgstr "" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 msgid "User Manual" msgstr "" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2267,7 +2340,7 @@ msgid "Value" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2292,17 +2365,17 @@ msgstr "" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 msgid "Waterlevel [m]" msgstr "" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 msgid "Waterway Admin" msgstr "" @@ -2310,7 +2383,7 @@ msgid "Waterway area" msgstr "" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 msgid "Waterway Area" msgstr "" @@ -2318,7 +2391,7 @@ msgid "Waterway axis" msgstr "" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 msgid "Waterway Axis" msgstr "" @@ -2326,7 +2399,7 @@ msgid "Waterway gauges" msgstr "" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 msgid "Waterway Profile" msgstr "" @@ -2335,7 +2408,7 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 msgid "Waterway User" msgstr "" @@ -2343,16 +2416,16 @@ msgid "Wed" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "" @@ -2368,20 +2441,24 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 msgid "yearly" msgstr "" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "yes" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." msgstr "" + +#: src/components/identify/formatter.js:127 +msgid "ZPG exception" +msgstr ""
--- a/client/src/locale/hr_HR/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/hr_HR/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -8,7 +8,7 @@ "Project-Id-Version: gemmajs 1.99.0-dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-01-25 10:11+0100\n" -"PO-Revision-Date: 2019-01-23 15:28+0000\n" +"PO-Revision-Date: 2021-09-12 01:36+0000\n" "Last-Translator: Andrija Spaic <andrija.spaic@vodniputovi.hr>\n" "Language-Team: Croatian <https://hosted.weblate.org/projects/gemma/client/hr/" ">\n" @@ -18,83 +18,83 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.5-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: src/components/systemconfiguration/PDFTemplates.vue:223 msgid " does not match any template's element" -msgstr "" - -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +msgstr " ne podudara se s elementom predloška" + +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." -msgstr "" +msgstr " uspješno je učitan." #: src/components/systemconfiguration/ColorSettings.vue:21 msgid "%{layerName} Border Color" -msgstr "" +msgstr "% {layerName} Boja obruba" #: src/components/systemconfiguration/ColorSettings.vue:7 msgid "%{layerName} Fill Color" -msgstr "" - -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +msgstr "%{layerName} Boja ispune" + +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" -msgstr "" - -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +msgstr "%a %d" + +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" -msgstr "" - -#: src/components/importconfiguration/ScheduledImports.vue:690 +msgstr "%b %d" + +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" -msgstr "" +msgstr "0 znači da nema ponovnog pokušaja" #: src/components/Pdftool.vue:41 msgid "120 dpi" -msgstr "" - -#: src/components/importconfiguration/ScheduledImports.vue:1115 +msgstr "120 dpi" + +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "15 minuta" #: src/components/Pdftool.vue:42 msgid "200 dpi" -msgstr "" - -#: src/components/importconfiguration/ScheduledImports.vue:679 +msgstr "200 dpi" + +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" -msgstr "" +msgstr "2h45m za dva sata i 45 minuta" #: src/components/importoverview/ImportOverview.vue:55 msgid "30 Days" -msgstr "" - -#: src/components/importconfiguration/ScheduledImports.vue:679 +msgstr "30 dana" + +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" -msgstr "" - -#: src/components/importconfiguration/ScheduledImports.vue:678 +msgstr "30m za 30 minuta" + +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " -msgstr "" +msgstr "60 za 60 sekundi " #: src/components/importoverview/ImportOverview.vue:52 msgid "7 days" -msgstr "" +msgstr "7 dana" #: src/components/Pdftool.vue:40 msgid "80 dpi" -msgstr "" +msgstr "80 dpi" #: src/components/Pdftool.vue:51 msgid "A3" -msgstr "" +msgstr "A3" #: src/components/Pdftool.vue:50 msgid "A4" -msgstr "" +msgstr "A4" #: src/components/importoverview/Filters.vue:18 #, fuzzy @@ -107,24 +107,24 @@ #: src/components/identify/Identify.vue:74 msgid "According gauge data:" -msgstr "" - -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +msgstr "Prema podacima vodomjera:" + +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "Dodaj korisnika" #: src/components/importoverview/LogDetail.vue:14 msgid "Additional Info" -msgstr "" +msgstr "Dodatne informacije" #: src/lib/datelocalization.js:6 msgid "AM" -msgstr "" - -#: src/components/importoverview/ImportOverview.vue:466 +msgstr "Prijepodne" + +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" -msgstr "" +msgstr "odobren" #: src/components/importconfiguration/ImportDetails.vue:17 #, fuzzy @@ -136,8 +136,8 @@ msgid "Apr" msgstr "Travanj" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "Travanj" @@ -146,31 +146,35 @@ msgid "Area" msgstr "Područje" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "na" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 #, fuzzy msgid "Aug" msgstr "Kolovoz" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "Kolovoz" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 #, fuzzy msgid "Avail: Latest measurement from " -msgstr "Mjerenje" - -#: src/components/identify/Identify.vue:436 +msgstr "Mjerenje " + +#: src/components/identify/Identify.vue:505 #, fuzzy msgid "Avail: Latest measurement older than" msgstr "Mjerenje" @@ -187,24 +191,22 @@ msgid "Available fairway depth" msgstr "Dostupne dubine plovnog puta" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 #, fuzzy msgid "Available Fairway Depth" msgstr "Dostupne dubine plovnog puta" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:337 -#, fuzzy msgid "Available fairway depth vs LNWL" -msgstr "Dostupne dubine plovnog puta" - -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 -#, fuzzy +msgstr "Dostupne dubine plovnog puta u odnosu na NPV" + +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 msgid "Available Fairway Depth vs LNWL:" -msgstr "Dostupne dubine plovnog puta" - -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +msgstr "Dostupne dubine plovnog puta u odnosu na NPV" + +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 #, fuzzy msgid "Available Fairway Depth:" msgstr "Dostupne dubine plovnog puta" @@ -217,62 +219,66 @@ #: src/components/sections/SectionForm.vue:178 #: src/components/stretches/StretchForm.vue:18 msgid "Back" -msgstr "" +msgstr "Nazad" #: src/components/Login.vue:70 msgid "back to login" msgstr "natrag na prijavu" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -283,25 +289,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "Greška Servera" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -310,8 +317,8 @@ msgid "BeamType" msgstr "Tip" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 msgid "Bottleneck" msgstr "Kritični sektor" @@ -320,68 +327,72 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 #, fuzzy msgid "Bottleneck Surveys" msgstr "Kritični sektori" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 #, fuzzy msgid "Bottleneck:" msgstr "Kritični sektor" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "Kritični sektori" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 #, fuzzy msgid "Cancel" msgstr "Prekini slanje" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "Stacionaža" @@ -401,11 +412,11 @@ msgid "Choose color" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "odaberi datoteku za učitavanje" @@ -432,11 +443,11 @@ msgid "Compare with" msgstr "Usporedi sa" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "" @@ -446,24 +457,24 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "Potvrdi" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "Koordinate su kopirane u međuspremnik!" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 msgid "Country" msgstr "Država" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "Crontab - linija" @@ -471,7 +482,7 @@ msgid "Current Waterlevel" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "" @@ -479,15 +490,19 @@ msgid "Data Availability/Accuracy" msgstr "" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "" @@ -502,7 +517,7 @@ msgid "Date info" msgstr "Datum" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "Dan" @@ -511,13 +526,13 @@ msgid "Day" msgstr "Dan" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -525,8 +540,8 @@ msgid "Dec" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "Prosinac" @@ -554,15 +569,15 @@ msgid "Define Stretches" msgstr "Definiraj dionice" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 #, fuzzy msgid "Delete" msgstr "Brisanje " -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 #, fuzzy msgid "Delete cross profile" msgstr "Spremljeni poprečni profili" @@ -577,12 +592,12 @@ msgid "Delete Template" msgstr "Obrisan uvoz: #" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 #, fuzzy msgid "Delete user" msgstr "Brisanje " -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 #, fuzzy msgid "Delete User" msgstr "Brisanje " @@ -601,13 +616,13 @@ msgid "deleted successfully" msgstr "Uspješno" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "Brisanje " -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "Dubina" @@ -621,7 +636,7 @@ msgid "Depth Reference" msgstr "Referentna dubina" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "" @@ -637,12 +652,12 @@ msgid "Depthreference" msgstr "Referentna dubina" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 #, fuzzy msgid "Distance Mark" msgstr "Virtualne Oznake Udaljenosti" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 #, fuzzy msgid "Distance Mark ashore" msgstr "Virtualne Oznake Udaljenosti" @@ -657,7 +672,7 @@ msgid "Distance marks virtual" msgstr "Virtualne Oznake Udaljenosti" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "" @@ -665,7 +680,7 @@ msgid "Do you really want to delete the following template:" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "" @@ -693,12 +708,22 @@ msgid "Download Meta.json" msgstr "Preuzmi Meta.json" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:273 +#, fuzzy +msgid "Edit user" +msgstr "Unesi korisničko ime" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 msgid "Email" msgstr "E-mail" @@ -733,11 +758,11 @@ msgid "Enqueued" msgstr "Na čekanju" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "Unesi koordinate ručno" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "Unesi oznaku poprečnog profila" @@ -758,12 +783,12 @@ msgid "Errorlog" msgstr "Zapis pogreške" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 #, fuzzy msgid "Every" msgstr "Svaki" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "" @@ -817,16 +842,16 @@ msgid "Fairway (LOS 3)" msgstr "" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 #, fuzzy msgid "Fairway Critical" msgstr "Uvoz Profila Plovnog Puta" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 #, fuzzy msgid "Fairway Date" msgstr "Područje plovnog puta" @@ -836,18 +861,18 @@ msgid "Fairway dimension" msgstr "Dimenzije plovnog puta" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 #, fuzzy msgid "Fairway Dimensions" msgstr "Dimenzije plovnog puta" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 msgid "FairwayAvailability" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "" @@ -875,22 +900,22 @@ msgid "Feb" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "Veljača" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 #, fuzzy msgid "File Import" msgstr "Novi uvoz" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "" @@ -908,7 +933,7 @@ msgid "Fri" msgstr "Petak" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "Petak" @@ -923,11 +948,11 @@ msgid "From" msgstr "" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "" @@ -943,12 +968,12 @@ msgid "Gauge measurement" msgstr "Podatak o vodostaju" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 #, fuzzy msgid "Gauge Waterlevel" msgstr "Podatak o vodostaju" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "" @@ -956,26 +981,26 @@ msgid "Gauges" msgstr "" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "Kreiraj PDF" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 #, fuzzy msgid "Generated by" msgstr "– kreiran od:" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 #, fuzzy msgid "Generated PDFs use font:" msgstr "Kreiraj PDF" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "sat" @@ -1006,22 +1031,22 @@ msgid "ID" msgstr "ID" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 #, fuzzy msgid "Identified Features" msgstr "Identificirano" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -1031,7 +1056,7 @@ msgid "Import approved gaugemeasurements" msgstr "Uvoz odobrenih podataka o vodostaju" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 #, fuzzy msgid "Import import: #" msgstr "ažuriraj uvoz: #" @@ -1047,7 +1072,7 @@ msgid "Import Schedule" msgstr "Raspored" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "Uvoz rezultata hidrografskih snimanja" @@ -1061,7 +1086,7 @@ msgid "Import via" msgstr "Uvoz" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 #, fuzzy msgid "Import Waterway Profiles" msgstr "Uvoz Profila Plovnog Puta" @@ -1082,11 +1107,11 @@ msgid "Invalid element" msgstr "nevažeći unos" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "nevažeći email" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "nevažeći unos" @@ -1095,8 +1120,8 @@ msgid "Jan" msgstr "Siječanj" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "Siječanj" @@ -1106,8 +1131,8 @@ msgid "Jul" msgstr "Srpanj" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "Srpanj" @@ -1117,8 +1142,8 @@ msgid "Jun" msgstr "Lipanj" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "Lipanj" @@ -1140,24 +1165,24 @@ msgid "Later" msgstr "Najnovije" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 #, fuzzy msgid "Latest measurement" msgstr "Mjerenje" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 #, fuzzy msgid "Latest Measurement" msgstr "Mjerenje" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 #, fuzzy msgid "Latest Waterlevel" msgstr "Mjerenje" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 #, fuzzy msgid "Latest Waterlevel Date" msgstr "Mjerenje" @@ -1171,11 +1196,16 @@ msgid "Length" msgstr "Duljina" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +#, fuzzy +msgid "Loading Error" +msgstr "Greška Servera" + #: src/components/Login.vue:58 msgid "Login" msgstr "Prijava" @@ -1199,12 +1229,12 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "LOS" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "Uvoz pokrenut ručno: #" @@ -1224,22 +1254,26 @@ msgid "Mar" msgstr "Ožujak" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "Ožujak" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "Maksimalna Širina" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 msgid "May" msgstr "Svibanj" @@ -1257,17 +1291,17 @@ msgid "Measurement" msgstr "Mjerenje" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 #, fuzzy msgid "Measurement is within" msgstr "Mjerenje" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 #, fuzzy msgid "measurements" msgstr "Mjerenje" @@ -1282,21 +1316,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "prošlo minuta" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "Minimalna Širina" @@ -1305,25 +1339,25 @@ msgid "Mon" msgstr "na" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "Ponedjeljak" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "mjesec" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 #, fuzzy msgid "monthly" msgstr "Mjesečno" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "Mjesečno" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1331,17 +1365,17 @@ msgid "Name" msgstr "Naziv" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "" @@ -1359,10 +1393,6 @@ msgid "Negate Z values in XYZ files" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1382,7 +1412,7 @@ msgid "New stretch" msgstr "Nova dionica" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "" @@ -1392,11 +1422,16 @@ msgid "No data available." msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +msgid "No data selectable" +msgstr "" + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "Nema identificiranih objekata." -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 #, fuzzy msgid "No measurement available" msgstr "Mjerenje" @@ -1405,7 +1440,7 @@ msgid "No results." msgstr "Nema rezultata." -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "" @@ -1413,7 +1448,7 @@ msgid "No style-changes" msgstr "" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "" @@ -1431,8 +1466,8 @@ msgid "No valid waterlevel data available." msgstr "Mjerenje" -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1440,14 +1475,14 @@ msgid "Nov" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "Studeni" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "" @@ -1457,7 +1492,7 @@ msgid "Numbers" msgstr "Studeni" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 msgid "o' clock" msgstr "sati" @@ -1470,13 +1505,13 @@ msgid "Oct" msgstr "Listopad" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "Listopad" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "od" @@ -1488,11 +1523,11 @@ msgid "Old" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "na" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 #, fuzzy msgid "Onetime Imports" msgstr "Obrisan uvoz: #" @@ -1506,17 +1541,17 @@ msgid "Owner" msgstr "" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "Lozinka" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "Lozinka" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "lozinka ponovo" @@ -1524,7 +1559,8 @@ msgid "Password reset requested!" msgstr "Zatraženo je poništavanje lozinke!" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" @@ -1532,7 +1568,7 @@ "Lozinka bi trebala sadržavati barem 8 znakova uključujući 1 broj i 1 " "specijalni znak poput $" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "Lozinke se ne podudaraju!" @@ -1545,15 +1581,15 @@ msgid "pending" msgstr "Na čekanju" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 msgid "Please choose a country" msgstr "Odaberite zemlju" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "Odaberite ulogu" @@ -1562,7 +1598,7 @@ msgid "Please enter a date" msgstr "Unesite datum" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "Unesite dubinu" @@ -1575,15 +1611,15 @@ msgid "Please enter a Featuretype" msgstr "Unesite tip elementa" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "Unesite razinu usluge" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "Unesite maksimalnu širinu" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "Unesite minimalnu širinu" @@ -1605,7 +1641,7 @@ msgid "Please enter a source organization" msgstr "Unesite organizaciju izvora" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "Unesite organizaciju izvora" @@ -1654,28 +1690,29 @@ msgid "Please enter an originator" msgstr "Unesite završnu točku" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "Unesite točne koordinate u formatu: Lat,Lon,Lat,Lon" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "Unesite Razvrstaj po" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "Odaberite kritični sektor" +#: src/components/importconfiguration/types/DQLReport.vue:29 +#, fuzzy +msgid "Please select a report to update" +msgstr "Odaberite jedno" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "Odaberite jedno" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +#, fuzzy +msgid "Please select stats to update" +msgstr "Odaberite jedno" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1684,7 +1721,7 @@ msgid "portrait" msgstr "uspravno" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "" @@ -1699,7 +1736,7 @@ msgid "Prediction" msgstr "Projekcija" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "" @@ -1711,11 +1748,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "Profil obrisan!" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "Profil spremljen!" @@ -1735,21 +1772,30 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +#, fuzzy +msgid "Reactivate user" +msgstr "Brisanje " + #: src/components/systemconfiguration/DataAccuracy.vue:6 #, fuzzy msgid "Recency of Bottleneck Surveys" msgstr "Kritični sektori" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "" @@ -1762,15 +1808,20 @@ msgid "Refresh" msgstr "Osvježi" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 #, fuzzy msgid "Regular Imports" msgstr "Obrisan uvoz: #" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "Ponovi Lozinku" +#: src/components/importconfiguration/ImportDetails.vue:142 +#, fuzzy +msgid "Reports" +msgstr "Uvozi" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "Zatraži poništavanje lozinke!" @@ -1787,15 +1838,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1813,11 +1864,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "Uloga" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1830,25 +1881,24 @@ msgid "Sat" msgstr "na" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "Subota" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "Spremljeni poprečni profili" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 msgid "Saved import: #" msgstr "Spremljen uvoz: #" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "" @@ -1857,15 +1907,15 @@ msgstr "" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "Raspored" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 msgid "Scheduled" msgstr "Planiran" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 #, fuzzy msgid "Section" msgstr "Projekcija" @@ -1891,7 +1941,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 #, fuzzy msgid "Select bottleneck" msgstr "Odaberi Kritični sektor" @@ -1926,7 +1976,7 @@ msgid "Send all" msgstr "Pošalji testni e-mail" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "Pošalji testni e-mail" @@ -1934,13 +1984,13 @@ msgid "Sep" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "Rujan" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "" @@ -1948,7 +1998,7 @@ msgid "Show Hydrological Conditions" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "" @@ -1960,11 +2010,11 @@ msgid "Signer" msgstr "Potpisnik" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1993,7 +2043,7 @@ msgid "Sounding Result Comparison" msgstr "Rezultat Hidrografskog mjerenja" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 #, fuzzy msgid "Sounding results" msgstr "Rezultat Hidrografskog mjerenja" @@ -2012,17 +2062,17 @@ msgid "Source organization" msgstr "Organizacija izvora" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 #, fuzzy msgid "Source Organization" msgstr "Organizacija izvora" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "Organizacija izvora" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "izvorni kod" @@ -2031,7 +2081,7 @@ msgid "Staging Area" msgstr "Pristanište" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "Početak" @@ -2039,7 +2089,7 @@ msgid "Start rhm" msgstr "Početni rhm" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "započinje uvoz za " @@ -2067,12 +2117,16 @@ msgid "Starting Year" msgstr "Pristanište" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 #, fuzzy msgid "Status" msgstr "Stanje" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 #, fuzzy msgid "Stretch" msgstr "Definiraj dionice" @@ -2083,13 +2137,18 @@ msgstr "Definiraj dionice" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "Predaj" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +#, fuzzy +msgid "successfully" +msgstr "Uspješno" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -2098,17 +2157,17 @@ msgid "Sun" msgstr "Nedjelja" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "Nedjelja" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "" @@ -2116,12 +2175,12 @@ msgid "Survey from:" msgstr "" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 #, fuzzy msgid "Survey type" msgstr "Tip elementa/ Vrsta značajke" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "" @@ -2129,7 +2188,7 @@ msgid "Sysadmin" msgstr "Sistem admin" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 msgid "System-Administrator" msgstr "Sistem-Administrator" @@ -2141,11 +2200,17 @@ msgid "Systemconfiguration" msgstr "Konfiguracija sutava" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 #, fuzzy msgid "Testmail sent" msgstr "E-mail je poslan" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2233,9 +2298,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2243,7 +2308,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2255,12 +2320,12 @@ msgid "Thu" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "Četvrtak" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2282,21 +2347,21 @@ msgid "Tolerance for snapping to axis" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 msgid "Trigger import" msgstr "Pokretanje uvoza" @@ -2305,7 +2370,7 @@ msgid "Tue" msgstr "Utorak" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "Utorak" @@ -2320,11 +2385,15 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 msgid "update import: #" msgstr "ažuriraj uvoz: #" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "Učitaj" @@ -2348,7 +2417,7 @@ msgid "uploaded successfully" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2363,26 +2432,35 @@ msgid "URL" msgstr "URL" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 #, fuzzy msgid "User Manual" msgstr "Korisničko ime" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "Korisničko ime" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "Korisnici" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2398,7 +2476,7 @@ msgid "Value" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2424,17 +2502,17 @@ msgstr "" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 msgid "Waterlevel [m]" msgstr "" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 msgid "Waterway Admin" msgstr "Admin Plovnog puta" @@ -2443,7 +2521,7 @@ msgid "Waterway area" msgstr "Područje plovnog puta" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 #, fuzzy msgid "Waterway Area" msgstr "Područje plovnog puta" @@ -2452,7 +2530,7 @@ msgid "Waterway axis" msgstr "Os plovnog puta" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 #, fuzzy msgid "Waterway Axis" msgstr "Os plovnog puta" @@ -2461,7 +2539,7 @@ msgid "Waterway gauges" msgstr "Vodomjerna stanica" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 #, fuzzy msgid "Waterway Profile" msgstr "Uvoz Profila Plovnog Puta" @@ -2472,7 +2550,7 @@ msgstr "Uvoz Profila Plovnog Puta" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 msgid "Waterway User" msgstr "Korisnik plovnog puta" @@ -2480,16 +2558,16 @@ msgid "Wed" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "Srijeda" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "tjedan" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "Tjedno" @@ -2505,21 +2583,21 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "godina" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 #, fuzzy msgid "yearly" msgstr "godina" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 #, fuzzy msgid "yes" msgstr "Slojevi" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." @@ -2527,6 +2605,14 @@ "Sada možete odabrati ove koordinate iz izbornika \"Spremljeni poprečni " "profili\" da biste vratili ovaj poprečni profil." +#: src/components/identify/formatter.js:127 +#, fuzzy +msgid "ZPG exception" +msgstr "Projekcija" + +#~ msgid "Please enter SortBy" +#~ msgstr "Unesite Razvrstaj po" + #~ msgid "Error while saving user" #~ msgstr "Greška kod spremanja korisnika" @@ -2571,10 +2657,6 @@ #~ msgid "Delete Section" #~ msgstr "Definiraj dionice" -#, fuzzy -#~ msgid "Please select template type" -#~ msgstr "Odaberite jedno" - #~ msgid "Author" #~ msgstr "Autor"
--- a/client/src/locale/hu_HU/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/hu_HU/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -23,7 +23,7 @@ msgid " does not match any template's element" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." msgstr " sikeresen feltöltve" @@ -35,19 +35,19 @@ msgid "%{layerName} Fill Color" msgstr "" -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" msgstr "" -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" msgstr "" @@ -55,7 +55,7 @@ msgid "120 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1115 +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "15 perc" @@ -63,7 +63,7 @@ msgid "200 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" msgstr "" @@ -71,11 +71,11 @@ msgid "30 Days" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:678 +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " msgstr "" @@ -108,8 +108,8 @@ msgid "According gauge data:" msgstr "" -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "Felhasználó hozzáadása" @@ -121,7 +121,7 @@ msgid "AM" msgstr "" -#: src/components/importoverview/ImportOverview.vue:466 +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" msgstr "" @@ -134,8 +134,8 @@ msgid "Apr" msgstr "Április" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "Április" @@ -144,30 +144,34 @@ msgid "Area" msgstr "terület" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 #, fuzzy msgid "Aug" msgstr "Augusztus" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "Augusztus" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 msgid "Avail: Latest measurement from " msgstr "" -#: src/components/identify/Identify.vue:436 +#: src/components/identify/Identify.vue:505 msgid "Avail: Latest measurement older than" msgstr "" @@ -182,7 +186,7 @@ msgid "Available fairway depth" msgstr "hajóút mélysége" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 #, fuzzy msgid "Available Fairway Depth" msgstr "hajóút mélysége" @@ -192,14 +196,14 @@ msgid "Available fairway depth vs LNWL" msgstr "hajóút mélysége" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 #, fuzzy msgid "Available Fairway Depth vs LNWL:" msgstr "hajóút mélysége" -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 #, fuzzy msgid "Available Fairway Depth:" msgstr "hajóút mélysége" @@ -217,56 +221,60 @@ msgid "back to login" msgstr "vissza a bejelentkezéshez" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -277,25 +285,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "Backend Error" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -304,8 +313,8 @@ msgid "BeamType" msgstr "Típus" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 #, fuzzy msgid "Bottleneck" @@ -315,67 +324,71 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 #, fuzzy msgid "Bottleneck Surveys" msgstr "Gázlók" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 #, fuzzy msgid "Bottleneck:" msgstr "Gázlók, szűkületek" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "Gázlók" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 msgid "Cancel" msgstr "" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "" @@ -395,11 +408,11 @@ msgid "Choose color" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "" @@ -425,11 +438,11 @@ msgid "Compare with" msgstr "" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "" @@ -439,25 +452,25 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 #, fuzzy msgid "Country" msgstr "Ország" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "" @@ -465,7 +478,7 @@ msgid "Current Waterlevel" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "" @@ -473,15 +486,19 @@ msgid "Data Availability/Accuracy" msgstr "" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "" @@ -496,7 +513,7 @@ msgid "Date info" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "" @@ -504,13 +521,13 @@ msgid "Day" msgstr "" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -518,8 +535,8 @@ msgid "Dec" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "" @@ -544,14 +561,14 @@ msgid "Define Stretches" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 msgid "Delete" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 msgid "Delete cross profile" msgstr "" @@ -563,11 +580,11 @@ msgid "Delete Template" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 msgid "Delete user" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 msgid "Delete User" msgstr "" @@ -583,13 +600,13 @@ msgid "deleted successfully" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "" @@ -601,7 +618,7 @@ msgid "Depth Reference" msgstr "" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "" @@ -617,11 +634,11 @@ msgid "Depthreference" msgstr "" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 msgid "Distance Mark" msgstr "" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 msgid "Distance Mark ashore" msgstr "" @@ -633,7 +650,7 @@ msgid "Distance marks virtual" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "" @@ -641,7 +658,7 @@ msgid "Do you really want to delete the following template:" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "" @@ -667,12 +684,21 @@ msgid "Download Meta.json" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:273 +msgid "Edit user" +msgstr "" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 #, fuzzy msgid "Email" msgstr "E-mail" @@ -708,11 +734,11 @@ msgid "Enqueued" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "" @@ -732,11 +758,11 @@ msgid "Errorlog" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 msgid "Every" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "" @@ -789,15 +815,15 @@ msgid "Fairway (LOS 3)" msgstr "" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 msgid "Fairway Critical" msgstr "" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 msgid "Fairway Date" msgstr "" @@ -805,17 +831,17 @@ msgid "Fairway dimension" msgstr "" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 msgid "Fairway Dimensions" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 msgid "FairwayAvailability" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "" @@ -841,21 +867,21 @@ msgid "Feb" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 msgid "File Import" msgstr "" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "" @@ -872,7 +898,7 @@ msgid "Fri" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "" @@ -887,11 +913,11 @@ msgid "From" msgstr "" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "" @@ -907,11 +933,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 msgid "Gauge Waterlevel" msgstr "" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "" @@ -919,25 +945,25 @@ msgid "Gauges" msgstr "" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 #, fuzzy msgid "Generated by" msgstr "- létrehozta:" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 msgid "Generated PDFs use font:" msgstr "" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "" @@ -967,21 +993,21 @@ msgid "ID" msgstr "" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 msgid "Identified Features" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -991,7 +1017,7 @@ msgid "Import approved gaugemeasurements" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 msgid "Import import: #" msgstr "" @@ -1004,7 +1030,7 @@ msgid "Import Schedule" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "" @@ -1016,7 +1042,7 @@ msgid "Import via" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 msgid "Import Waterway Profiles" msgstr "" @@ -1035,11 +1061,11 @@ msgid "Invalid element" msgstr "" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "" @@ -1047,8 +1073,8 @@ msgid "Jan" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "" @@ -1057,8 +1083,8 @@ msgid "Jul" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "" @@ -1067,8 +1093,8 @@ msgid "Jun" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "" @@ -1089,21 +1115,21 @@ msgid "Later" msgstr "" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 msgid "Latest measurement" msgstr "" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 msgid "Latest Measurement" msgstr "" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 msgid "Latest Waterlevel" msgstr "" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 msgid "Latest Waterlevel Date" msgstr "" @@ -1116,11 +1142,16 @@ msgid "Length" msgstr "" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +#, fuzzy +msgid "Loading Error" +msgstr "Backend Error" + #: src/components/Login.vue:58 msgid "Login" msgstr "" @@ -1144,12 +1175,12 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "" @@ -1168,22 +1199,26 @@ msgid "Mar" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 msgid "May" msgstr "" @@ -1200,16 +1235,16 @@ msgid "Measurement" msgstr "" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 msgid "Measurement is within" msgstr "" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 msgid "measurements" msgstr "" @@ -1223,21 +1258,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "" @@ -1245,24 +1280,24 @@ msgid "Mon" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 msgid "monthly" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1271,17 +1306,17 @@ msgid "Name" msgstr "Név" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "" @@ -1299,10 +1334,6 @@ msgid "Negate Z values in XYZ files" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1320,7 +1351,7 @@ msgid "New stretch" msgstr "" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "" @@ -1330,11 +1361,16 @@ msgid "No data available." msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +msgid "No data selectable" +msgstr "" + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "" -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 msgid "No measurement available" msgstr "" @@ -1342,7 +1378,7 @@ msgid "No results." msgstr "" -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "" @@ -1350,7 +1386,7 @@ msgid "No style-changes" msgstr "" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "" @@ -1366,8 +1402,8 @@ msgid "No valid waterlevel data available." msgstr "" -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1375,14 +1411,14 @@ msgid "Nov" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "" @@ -1391,7 +1427,7 @@ msgid "Numbers" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 msgid "o' clock" msgstr "" @@ -1403,13 +1439,13 @@ msgid "Oct" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "" @@ -1421,11 +1457,11 @@ msgid "Old" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 msgid "Onetime Imports" msgstr "" @@ -1438,17 +1474,17 @@ msgid "Owner" msgstr "" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "Jelszó" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "Jelszó" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "" @@ -1456,13 +1492,14 @@ msgid "Password reset requested!" msgstr "" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" msgstr "" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "" @@ -1474,16 +1511,16 @@ msgid "pending" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 #, fuzzy msgid "Please choose a country" msgstr "Kérem, válasszon országot" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "" @@ -1492,7 +1529,7 @@ msgid "Please enter a date" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "" @@ -1505,15 +1542,15 @@ msgid "Please enter a Featuretype" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "" @@ -1535,7 +1572,7 @@ msgid "Please enter a source organization" msgstr "Kérem, válasszon országot" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "" @@ -1583,28 +1620,27 @@ msgid "Please enter an originator" msgstr "Kérem, válasszon országot" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:29 +msgid "Please select a report to update" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +msgid "Please select stats to update" +msgstr "" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1613,7 +1649,7 @@ msgid "portrait" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "" @@ -1626,7 +1662,7 @@ msgid "Prediction" msgstr "" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "" @@ -1638,11 +1674,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "" @@ -1662,21 +1698,29 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +msgid "Reactivate user" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:6 #, fuzzy msgid "Recency of Bottleneck Surveys" msgstr "Gázlók" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "" @@ -1688,14 +1732,18 @@ msgid "Refresh" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 msgid "Regular Imports" msgstr "" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "" +#: src/components/importconfiguration/ImportDetails.vue:142 +msgid "Reports" +msgstr "" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "" @@ -1712,15 +1760,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1738,11 +1786,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1754,25 +1802,24 @@ msgid "Sat" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 msgid "Saved import: #" msgstr "" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "" @@ -1781,15 +1828,15 @@ msgstr "" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 msgid "Scheduled" msgstr "" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 msgid "Section" msgstr "" @@ -1813,7 +1860,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 #, fuzzy msgid "Select bottleneck" msgstr "Gázlók, szűkületek" @@ -1848,7 +1895,7 @@ msgid "Send all" msgstr "Küldés" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "" @@ -1856,13 +1903,13 @@ msgid "Sep" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "" @@ -1870,7 +1917,7 @@ msgid "Show Hydrological Conditions" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "" @@ -1882,11 +1929,11 @@ msgid "Signer" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1910,7 +1957,7 @@ msgid "Sounding Result Comparison" msgstr "" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 msgid "Sounding results" msgstr "" @@ -1927,16 +1974,16 @@ msgid "Source organization" msgstr "" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 msgid "Source Organization" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "" @@ -1945,7 +1992,7 @@ msgid "Staging Area" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "" @@ -1953,7 +2000,7 @@ msgid "Start rhm" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "" @@ -1977,11 +2024,15 @@ msgid "Starting Year" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 msgid "Status" msgstr "" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 msgid "Stretch" msgstr "" @@ -1990,13 +2041,18 @@ msgstr "" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +#, fuzzy +msgid "successfully" +msgstr " sikeresen feltöltve" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -2004,17 +2060,17 @@ msgid "Sun" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "" @@ -2022,11 +2078,11 @@ msgid "Survey from:" msgstr "" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 msgid "Survey type" msgstr "" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "" @@ -2034,7 +2090,7 @@ msgid "Sysadmin" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 msgid "System-Administrator" msgstr "" @@ -2046,10 +2102,16 @@ msgid "Systemconfiguration" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 msgid "Testmail sent" msgstr "" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2137,9 +2199,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2147,7 +2209,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2157,12 +2219,12 @@ msgid "Thu" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2184,21 +2246,21 @@ msgid "Tolerance for snapping to axis" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 msgid "Trigger import" msgstr "" @@ -2206,7 +2268,7 @@ msgid "Tue" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "" @@ -2222,11 +2284,15 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 msgid "update import: #" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "" @@ -2250,7 +2316,7 @@ msgid "uploaded successfully" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2265,25 +2331,34 @@ msgid "URL" msgstr "" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 msgid "User Manual" msgstr "" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2295,7 +2370,7 @@ msgid "Value" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2320,17 +2395,17 @@ msgstr "" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 msgid "Waterlevel [m]" msgstr "" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 msgid "Waterway Admin" msgstr "" @@ -2338,7 +2413,7 @@ msgid "Waterway area" msgstr "" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 msgid "Waterway Area" msgstr "" @@ -2346,7 +2421,7 @@ msgid "Waterway axis" msgstr "" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 msgid "Waterway Axis" msgstr "" @@ -2354,7 +2429,7 @@ msgid "Waterway gauges" msgstr "" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 msgid "Waterway Profile" msgstr "" @@ -2363,7 +2438,7 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 msgid "Waterway User" msgstr "" @@ -2371,16 +2446,16 @@ msgid "Wed" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "" @@ -2396,26 +2471,30 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "Év" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 #, fuzzy msgid "yearly" msgstr "Év" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 #, fuzzy msgid "yes" msgstr "Rétegek" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." msgstr "" +#: src/components/identify/formatter.js:127 +msgid "ZPG exception" +msgstr "" + #~ msgid "Bottleneck Areas fill-color" #~ msgstr "Gázló színe"
--- a/client/src/locale/ro_RO/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/ro_RO/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -24,7 +24,7 @@ msgid " does not match any template's element" msgstr " 'niciun element din template nu se potriveste" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." msgstr " a fost încărcat cu succes." @@ -36,19 +36,19 @@ msgid "%{layerName} Fill Color" msgstr "%{layerName} Culoarea de umplere" -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" msgstr "" -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" msgstr "0 inseamna nicio intrare" @@ -56,7 +56,7 @@ msgid "120 dpi" msgstr "120 dpi" -#: src/components/importconfiguration/ScheduledImports.vue:1115 +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "15 minute" @@ -64,7 +64,7 @@ msgid "200 dpi" msgstr "200 dpi" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" msgstr "2h45m pentru doua ore si 45 de minute" @@ -72,11 +72,11 @@ msgid "30 Days" msgstr "30 zile" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" msgstr "30m pentru 30 minute" -#: src/components/importconfiguration/ScheduledImports.vue:678 +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " msgstr "60 pentru 60 secunde " @@ -108,8 +108,8 @@ msgid "According gauge data:" msgstr "Conform date statie de masura nivel:" -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "Adauga utilizator" @@ -121,7 +121,7 @@ msgid "AM" msgstr "" -#: src/components/importoverview/ImportOverview.vue:466 +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" msgstr "aprobat" @@ -134,8 +134,8 @@ msgid "Apr" msgstr "Aprilie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "Aprilie" @@ -144,30 +144,34 @@ msgid "Area" msgstr "Zona" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "la" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 #, fuzzy msgid "Aug" msgstr "August" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "August" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "Disponibil: Sub prag" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 msgid "Avail: Latest measurement from " msgstr "DUltima Masuratoare " -#: src/components/identify/Identify.vue:436 +#: src/components/identify/Identify.vue:505 msgid "Avail: Latest measurement older than" msgstr "Disponibil :Ultima masuratoare mai veche decat" @@ -182,7 +186,7 @@ msgid "Available fairway depth" msgstr "Adâncimi disponibile în şenal" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 #, fuzzy msgid "Available Fairway Depth" msgstr "Adâncimi disponibile în şenal" @@ -191,14 +195,14 @@ msgid "Available fairway depth vs LNWL" msgstr "Adâncimi disponibile în şenal vs LNWL" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 #, fuzzy msgid "Available Fairway Depth vs LNWL:" msgstr "Adâncimi disponibile în şenal vs LNWL" -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 msgid "Available Fairway Depth:" msgstr "Adâncimi disponibile în şenal:" @@ -215,56 +219,60 @@ msgid "back to login" msgstr "inapoi la login" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -275,25 +283,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "Eroare Server" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -301,8 +310,8 @@ msgid "BeamType" msgstr "Tip fascicul" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 msgid "Bottleneck" msgstr "Punct critic" @@ -311,65 +320,69 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "Izobate" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 msgid "Bottleneck Surveys" msgstr "Masuratori Puncte critice" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 msgid "Bottleneck:" msgstr "Punct critic:" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "Puncte critice" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "Calcul diferente" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 msgid "Cancel" msgstr "Anulaţi" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "Secţiunea" @@ -389,11 +402,11 @@ msgid "Choose color" msgstr "Alege o culoare" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "alege fisier sa incarci" @@ -423,11 +436,11 @@ msgid "Compare with" msgstr "Compara cu" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "Sigure pentru 24 ore" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "Sigure pentru 72 de ore" @@ -437,24 +450,24 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "Confirmă" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "Coordonate copiate in memorie !" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 msgid "Country" msgstr "Ţara" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "Sir cronologic" @@ -462,7 +475,7 @@ msgid "Current Waterlevel" msgstr "Nivelul apei actual" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "" @@ -470,15 +483,19 @@ msgid "Data Availability/Accuracy" msgstr "Disponibilitate Date/ Acuratete" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "Date prea vechi. Limita:" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "Date in limita revizuita" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "Date cu timp de revizuire" @@ -493,7 +510,7 @@ msgid "Date info" msgstr "Dată informaţii" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "zi" @@ -501,13 +518,13 @@ msgid "Day" msgstr "Ziua" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -515,8 +532,8 @@ msgid "Dec" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "Decembrie" @@ -541,14 +558,14 @@ msgid "Define Stretches" msgstr "Defineşte sectoarele" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 msgid "Delete" msgstr "Șterge" -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 msgid "Delete cross profile" msgstr "Sterge profile transversale" @@ -560,11 +577,11 @@ msgid "Delete Template" msgstr "Sterge templat-ul" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 msgid "Delete user" msgstr "Șterge utilizator" -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 msgid "Delete User" msgstr "Șterge utilizator" @@ -580,13 +597,13 @@ msgid "deleted successfully" msgstr "sterse cu succes" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "Șterge " -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "Adâncime" @@ -598,7 +615,7 @@ msgid "Depth Reference" msgstr "Adâncimea de referinţă" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "Adâncime relativă la" @@ -614,11 +631,11 @@ msgid "Depthreference" msgstr "Adâncimea de eeferinţă" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 msgid "Distance Mark" msgstr "Marcaj distanță" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 msgid "Distance Mark ashore" msgstr "Marcajul distanței pe uscat" @@ -630,7 +647,7 @@ msgid "Distance marks virtual" msgstr "Marcaj distanță virtual" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "Chiar vrei să ştergi profilul transversal:" @@ -638,7 +655,7 @@ msgid "Do you really want to delete the following template:" msgstr "Chiar vrei să ştergi următorul cont de utilizator:" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "Chiar vrei să ştergi următorul cont de utilizator:" @@ -664,12 +681,22 @@ msgid "Download Meta.json" msgstr "Descarcă Meta.json" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "Mai devreme" +#: src/components/usermanagement/Usermanagement.vue:273 +#, fuzzy +msgid "Edit user" +msgstr "Introdu nume utilizator" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 msgid "Email" msgstr "E-mail" @@ -704,11 +731,11 @@ msgid "Enqueued" msgstr "In asteptare" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "Introdu coordonatele manual" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "Introdu eticheta pentru profil transversal" @@ -728,11 +755,11 @@ msgid "Errorlog" msgstr "Jurnal de erori" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 msgid "Every" msgstr "Orice" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "Exemple:" @@ -785,15 +812,15 @@ msgid "Fairway (LOS 3)" msgstr "" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "Disponibilitate Senal navigabil" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 msgid "Fairway Critical" msgstr "Senal navigabil critic" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 #, fuzzy msgid "Fairway Date" msgstr "Aria caii navigabile" @@ -802,17 +829,17 @@ msgid "Fairway dimension" msgstr "Dimensiune șenal navigabil" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 msgid "Fairway Dimensions" msgstr "Dimensiunile șenalului navigabil" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 msgid "FairwayAvailability" msgstr "Disponibilitatea Senalului navigabil" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "Disponibilitate senal navigabil vs LNWL" @@ -839,21 +866,21 @@ msgid "Feb" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "Februarie" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "Fisier" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 msgid "File Import" msgstr "Importa fisier" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "Finalizare reviziune" @@ -870,7 +897,7 @@ msgid "Fri" msgstr "Vineri" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "Vineri" @@ -885,11 +912,11 @@ msgid "From" msgstr "De la" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "Mira" @@ -905,11 +932,11 @@ msgid "Gauge measurement" msgstr "Masurare nivel" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 msgid "Gauge Waterlevel" msgstr "Nivelul apei" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "Data Nivel apa" @@ -917,24 +944,24 @@ msgid "Gauges" msgstr "Mire" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "Genereaza PDF" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 msgid "Generated by" msgstr "Generat de" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 msgid "Generated PDFs use font:" msgstr "Genereaza PDF-uri:" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "Siguranta maxima" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "ora" @@ -964,21 +991,21 @@ msgid "ID" msgstr "Eticheta" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 msgid "Identified Features" msgstr "Functionalitati identificate" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "Daca nu sunt erori in timpul importului, nu vor mai fi reluari" -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -988,7 +1015,7 @@ msgid "Import approved gaugemeasurements" msgstr "Importa niveluri oficiale" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 msgid "Import import: #" msgstr "importă importul: #" @@ -1001,7 +1028,7 @@ msgid "Import Schedule" msgstr "Import plan" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "Import rezultate masuratori" @@ -1013,7 +1040,7 @@ msgid "Import via" msgstr "Calea de import" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 msgid "Import Waterway Profiles" msgstr "Importa profilele caii navigabile" @@ -1032,11 +1059,11 @@ msgid "Invalid element" msgstr "Element invalid" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "adresa de email nevalabila" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "Inregistrare nevalida" @@ -1044,8 +1071,8 @@ msgid "Jan" msgstr "Ianuarie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "Ianuarie" @@ -1054,8 +1081,8 @@ msgid "Jul" msgstr "Iulie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "Iulie" @@ -1064,8 +1091,8 @@ msgid "Jun" msgstr "Iunie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "Iunie" @@ -1086,21 +1113,21 @@ msgid "Later" msgstr "Mai tarziu" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 msgid "Latest measurement" msgstr "Ultima Masuratoare" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 msgid "Latest Measurement" msgstr "Ultima Masuratoare" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 msgid "Latest Waterlevel" msgstr "Ultimul nivel al apei" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 msgid "Latest Waterlevel Date" msgstr "Data ultimului nivel al apei" @@ -1112,11 +1139,16 @@ msgid "Length" msgstr "Lungime" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +#, fuzzy +msgid "Loading Error" +msgstr "Eroare formatare" + #: src/components/Login.vue:58 msgid "Login" msgstr "Logare" @@ -1140,12 +1172,12 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "LOS" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "Declansare import manual: #" @@ -1163,22 +1195,26 @@ msgid "Mar" msgstr "Martie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "Martie" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "Maxim incercari" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "Latime maxima" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 msgid "May" msgstr "Mai" @@ -1195,16 +1231,16 @@ msgid "Measurement" msgstr "Masuratoare" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "Masuratori in ultimele 14 zile" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 msgid "Measurement is within" msgstr "Masuratoare este in" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 msgid "measurements" msgstr "Masuratori" @@ -1218,21 +1254,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "Min. nivel masurat in ultimele 14 zile" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "minute trecute" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "Latime minima" @@ -1240,24 +1276,24 @@ msgid "Mon" msgstr "Luni" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "Luni" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "luna" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 msgid "monthly" msgstr "Lunar" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "Lunar" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1265,17 +1301,17 @@ msgid "Name" msgstr "Nume" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "Nash-Sutcliffe" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "Nash-Sutcliffe nu este disponbil" @@ -1293,10 +1329,6 @@ msgid "Negate Z values in XYZ files" msgstr "Anuleaza valorile Z in fisierul XYZ" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1314,7 +1346,7 @@ msgid "New stretch" msgstr "Sector nou" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "nu" @@ -1324,11 +1356,17 @@ msgid "No data available." msgstr "Nu sunt disponibile date." +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +#, fuzzy +msgid "No data selectable" +msgstr "Nu sunt disponibile date." + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "Nicio caracteristica identificata." -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 msgid "No measurement available" msgstr "Nu sunt disponibile date." @@ -1336,7 +1374,7 @@ msgid "No results." msgstr "Niciun rezultat." -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "Nu e definit timpul de revizuire" @@ -1344,7 +1382,7 @@ msgid "No style-changes" msgstr "Nicio schimbare a stilului" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "Nu sunt disponibile date despre sondaj" @@ -1362,8 +1400,8 @@ msgid "No valid waterlevel data available." msgstr "Nu sunt disponibile date." -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1371,14 +1409,14 @@ msgid "Nov" msgstr "Noiembrie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "Noiembrie" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "Acum" @@ -1387,7 +1425,7 @@ msgid "Numbers" msgstr "Numere" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 msgid "o' clock" msgstr "ora" @@ -1399,13 +1437,13 @@ msgid "Oct" msgstr "Octombrie" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "Octombrie" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "al" @@ -1417,11 +1455,11 @@ msgid "Old" msgstr "Vechi" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "inchis, in" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 msgid "Onetime Imports" msgstr "Importa o singura data" @@ -1434,17 +1472,17 @@ msgid "Owner" msgstr "Proprietar" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "parola" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "Parola" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "parola din nou" @@ -1452,7 +1490,8 @@ msgid "Password reset requested!" msgstr "Solicitat resetare parola!" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" @@ -1460,7 +1499,7 @@ "Parola trebuie sa fie de 8 caractere lungime sa includa 1 digit si 1 " "caracter special , de ex. $" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "Parola nu corespunde!" @@ -1472,15 +1511,15 @@ msgid "pending" msgstr "in asteptare" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "Procent" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 msgid "Please choose a country" msgstr "Selectați o țară" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "Selectati un rol" @@ -1489,7 +1528,7 @@ msgid "Please enter a date" msgstr "Introduceti o data" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "Introduceti o adancime" @@ -1502,15 +1541,15 @@ msgid "Please enter a Featuretype" msgstr "Introduceti un tip de caracteristica" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "Introduceti un nivel de servicii" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "Introduceti o latime maxima" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "Introduceti o latime minima" @@ -1531,7 +1570,7 @@ msgid "Please enter a source organization" msgstr "Introduceti o sursa (organizatie)" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "Introduceti o sursa (organizatie)" @@ -1578,28 +1617,29 @@ msgid "Please enter an originator" msgstr "Introduceti un initiator" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "Introduceti coordonatele corecte, in format: Lat,Lon,Lat,Lon" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "Introduceti Sortat dupa" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "Selectati un punct critic" +#: src/components/importconfiguration/types/DQLReport.vue:29 +#, fuzzy +msgid "Please select a report to update" +msgstr "Selectati unul" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "Selectati unul" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +#, fuzzy +msgid "Please select stats to update" +msgstr "Selectati unul" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1608,7 +1648,7 @@ msgid "portrait" msgstr "vertical" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "Valorile pozitive sunt mai sus decat limita pentru reluari" @@ -1621,7 +1661,7 @@ msgid "Prediction" msgstr "Predictie" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "Nu sunt disponibile predictii" @@ -1633,11 +1673,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "Profil sters!" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "Profil salvat!" @@ -1657,20 +1697,29 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +#, fuzzy +msgid "Reactivate user" +msgstr "Șterge utilizator" + #: src/components/systemconfiguration/DataAccuracy.vue:6 msgid "Recency of Bottleneck Surveys" msgstr "Ultimile sondaje ale punctelor critice" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "Mira de referinta" @@ -1682,14 +1731,19 @@ msgid "Refresh" msgstr "Actualizare" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 msgid "Regular Imports" msgstr "Importuri regulate" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "Repeta parola" +#: src/components/importconfiguration/ImportDetails.vue:142 +#, fuzzy +msgid "Reports" +msgstr "Importuri" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "Solicitare resetare parola!" @@ -1706,15 +1760,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1732,11 +1786,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "Rol" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1748,25 +1802,24 @@ msgid "Sat" msgstr "Sambata" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "Sambata" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "Salvare" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "Profile transversale salvate" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 msgid "Saved import: #" msgstr "Import salvat: #" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "Scara" @@ -1775,15 +1828,15 @@ msgstr "Scara de 1:" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "Plan, orar" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 msgid "Scheduled" msgstr "Programat" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 msgid "Section" msgstr "Sectiune" @@ -1807,7 +1860,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 msgid "Select bottleneck" msgstr "Selecteaza punctul critic" @@ -1839,7 +1892,7 @@ msgid "Send all" msgstr "Trimite tot" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "Trimite email de test" @@ -1847,13 +1900,13 @@ msgid "Sep" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "Septembrie" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "Arata diferentele" @@ -1861,7 +1914,7 @@ msgid "Show Hydrological Conditions" msgstr "Arată Condițiile Hidrologice" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "Arata masuratoare" @@ -1873,11 +1926,11 @@ msgid "Signer" msgstr "Semnatar" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1904,7 +1957,7 @@ msgid "Sounding Result Comparison" msgstr "Compara rezultatele sondajelor" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 msgid "Sounding results" msgstr "Rezultatele sondajului" @@ -1921,16 +1974,16 @@ msgid "Source organization" msgstr "Organizatia sursa" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 msgid "Source Organization" msgstr "Organizatia sursa" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "Organizatia sursa" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "cod sursa" @@ -1939,7 +1992,7 @@ msgid "Staging Area" msgstr "Debarcader" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "Porneste" @@ -1947,7 +2000,7 @@ msgid "Start rhm" msgstr "Rhm de pornire" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "Incepe importul pentru: " @@ -1971,11 +2024,15 @@ msgid "Starting Year" msgstr "Anul de inceput" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 msgid "Status" msgstr "Stare" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 msgid "Stretch" msgstr "Sector" @@ -1984,13 +2041,18 @@ msgstr "Sctoare" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "Trimis" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +#, fuzzy +msgid "successfully" +msgstr "sterse cu succes" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -1998,17 +2060,17 @@ msgid "Sun" msgstr "Duminica" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "Duminica" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "Masuratoare" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "Data masuratorii" @@ -2016,11 +2078,11 @@ msgid "Survey from:" msgstr "Sondaj de la:" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 msgid "Survey type" msgstr "Tipul sondajului" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "Sondaje" @@ -2028,7 +2090,7 @@ msgid "Sysadmin" msgstr "Administrator de sistem" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 msgid "System-Administrator" msgstr "Administrator de sistem" @@ -2040,10 +2102,16 @@ msgid "Systemconfiguration" msgstr "Configurare de sistem" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 msgid "Testmail sent" msgstr "E-mail-ul de test a fost trimis" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2131,9 +2199,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2141,7 +2209,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2154,12 +2222,12 @@ msgid "Thu" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "Joi" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2181,21 +2249,21 @@ msgid "Tolerance for snapping to axis" msgstr "Toleranta pentru captura axei" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 msgid "Trigger import" msgstr "Declanseaza Importul" @@ -2203,7 +2271,7 @@ msgid "Tue" msgstr "Marti" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "Marti" @@ -2218,11 +2286,15 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 msgid "update import: #" msgstr "actualizare import: #" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "Incarca" @@ -2246,7 +2318,7 @@ msgid "uploaded successfully" msgstr "incarcate cu succes" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2261,25 +2333,34 @@ msgid "URL" msgstr "URL" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 msgid "User Manual" msgstr "Manualul utilizatrorului" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "Nume utilizator" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "Utilizatori" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2295,7 +2376,7 @@ msgid "Value" msgstr "Valoare" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2320,18 +2401,18 @@ msgstr "Nivelul apei" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 #, fuzzy msgid "Waterlevel [m]" msgstr "Nivelul apei [cm]" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "Nivelul apei" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 msgid "Waterway Admin" msgstr "Administrator de cale navigabila" @@ -2339,7 +2420,7 @@ msgid "Waterway area" msgstr "Aria caii navigabile" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 msgid "Waterway Area" msgstr "Aria caii navigabile" @@ -2347,7 +2428,7 @@ msgid "Waterway axis" msgstr "Axa caii navigabile" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 msgid "Waterway Axis" msgstr "Axa caii navigabile" @@ -2355,7 +2436,7 @@ msgid "Waterway gauges" msgstr "Mire ale caii navigabile" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 msgid "Waterway Profile" msgstr "Profil al caii navigabile" @@ -2364,7 +2445,7 @@ msgstr "Profile ale caii navigabile" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 msgid "Waterway User" msgstr "Utilizator cale navigabila" @@ -2372,16 +2453,16 @@ msgid "Wed" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "Miercuri" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "saptamana" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "Saptamanal" @@ -2397,19 +2478,19 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "an" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 msgid "yearly" msgstr "anual" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "yes" msgstr "da" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." @@ -2417,6 +2498,14 @@ "Acum poti selecta aceste coordonate din meniul \"Profile transversale salvate" "\" pentru a restaura profilul transversal." +#: src/components/identify/formatter.js:127 +#, fuzzy +msgid "ZPG exception" +msgstr "Predictie" + +#~ msgid "Please enter SortBy" +#~ msgstr "Introduceti Sortat dupa" + #~ msgid "Error while saving user" #~ msgstr "Eroare la salvare utilizator" @@ -2483,10 +2572,6 @@ #~ msgid "Do you really want to delete this section:" #~ msgstr "Chiar vrei să ştergi acest sector:" -#, fuzzy -#~ msgid "Please select template type" -#~ msgstr "Selectati unul" - #~ msgid "( New )" #~ msgstr "(Nou)"
--- a/client/src/locale/sk_SK/LC_MESSAGES/app.po Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/locale/sk_SK/LC_MESSAGES/app.po Tue Feb 08 10:20:26 2022 +0100 @@ -23,7 +23,7 @@ msgid " does not match any template's element" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:181 msgid " was successfully uploaded." msgstr "" @@ -35,19 +35,19 @@ msgid "%{layerName} Fill Color" msgstr "" -#: src/components/TimeSlider.vue:349 -#: src/components/gauge/HydrologicalConditions.vue:688 +#: src/components/TimeSlider.vue:352 +#: src/components/gauge/HydrologicalConditions.vue:684 #: src/components/gauge/Waterlevel.vue:419 msgid "%a %d" msgstr "" -#: src/components/TimeSlider.vue:350 -#: src/components/gauge/HydrologicalConditions.vue:689 +#: src/components/TimeSlider.vue:353 +#: src/components/gauge/HydrologicalConditions.vue:685 #: src/components/gauge/Waterlevel.vue:420 msgid "%b %d" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "0 means no retry" msgstr "" @@ -55,7 +55,7 @@ msgid "120 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1115 +#: src/components/importconfiguration/ScheduledImports.vue:1142 msgid "15 minutes" msgstr "" @@ -63,7 +63,7 @@ msgid "200 dpi" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "2h45m for for two hours and 45 Minutes" msgstr "" @@ -71,11 +71,11 @@ msgid "30 Days" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:679 +#: src/components/importconfiguration/ScheduledImports.vue:684 msgid "30m for 30 Minutes" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:678 +#: src/components/importconfiguration/ScheduledImports.vue:683 msgid "60 for 60 Seconds " msgstr "" @@ -107,8 +107,8 @@ msgid "According gauge data:" msgstr "" -#: src/components/usermanagement/Userdetail.vue:242 -#: src/components/usermanagement/Usermanagement.vue:82 +#: src/components/usermanagement/Userdetail.vue:274 +#: src/components/usermanagement/Usermanagement.vue:126 msgid "Add User" msgstr "" @@ -120,7 +120,7 @@ msgid "AM" msgstr "" -#: src/components/importoverview/ImportOverview.vue:466 +#: src/components/importoverview/ImportOverview.vue:465 msgid "approved" msgstr "" @@ -132,8 +132,8 @@ msgid "Apr" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:912 -#: src/components/importconfiguration/ScheduledImports.vue:1135 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 +#: src/components/importconfiguration/ScheduledImports.vue:1162 #: src/lib/datelocalization.js:29 msgid "April" msgstr "" @@ -142,29 +142,33 @@ msgid "Area" msgstr "Oblasť" -#: src/components/importconfiguration/ScheduledImports.vue:1112 +#: src/components/importconfiguration/ScheduledImports.vue:1139 msgid "at" msgstr "" +#: src/components/importconfiguration/ScheduledImports.vue:686 +msgid "At least 5 Seconds " +msgstr "" + #: src/lib/datelocalization.js:47 msgid "Aug" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 -#: src/components/importconfiguration/ScheduledImports.vue:1139 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:922 +#: src/components/importconfiguration/ScheduledImports.vue:1166 #: src/lib/datelocalization.js:33 msgid "August" msgstr "" -#: src/components/identify/Identify.vue:430 +#: src/components/identify/Identify.vue:499 msgid "Avail: Below treshold" msgstr "" -#: src/components/identify/Identify.vue:422 +#: src/components/identify/Identify.vue:491 msgid "Avail: Latest measurement from " msgstr "" -#: src/components/identify/Identify.vue:436 +#: src/components/identify/Identify.vue:505 msgid "Avail: Latest measurement older than" msgstr "" @@ -178,7 +182,7 @@ msgid "Available fairway depth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:864 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:870 msgid "Available Fairway Depth" msgstr "" @@ -186,13 +190,13 @@ msgid "Available fairway depth vs LNWL" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:227 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:372 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:230 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:378 msgid "Available Fairway Depth vs LNWL:" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:250 -#: src/components/fairway/AvailableFairwayDepth.vue:380 +#: src/components/fairway/AvailableFairwayDepth.vue:253 +#: src/components/fairway/AvailableFairwayDepth.vue:383 msgid "Available Fairway Depth:" msgstr "" @@ -209,56 +213,60 @@ msgid "back to login" msgstr "" -#: src/components/App.vue:128 src/components/Bottlenecks.vue:195 +#: src/components/App.vue:128 src/components/Bottlenecks.vue:197 #: src/components/Login.vue:238 src/components/Logs.vue:167 -#: src/components/Pdftool.vue:241 src/components/Pdftool.vue:312 -#: src/components/Pdftool.vue:929 src/components/Search.vue:269 -#: src/components/Search.vue:317 src/components/Sidebar.vue:167 +#: src/components/Pdftool.vue:259 src/components/Pdftool.vue:343 +#: src/components/Pdftool.vue:1021 src/components/Search.vue:310 +#: src/components/Search.vue:358 src/components/Sidebar.vue:158 +#: src/components/Sidebar.vue:178 #: src/components/fairway/AvailableFairwayDepth.vue:181 -#: src/components/fairway/AvailableFairwayDepth.vue:373 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:777 -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:822 +#: src/components/fairway/AvailableFairwayDepth.vue:376 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:783 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:828 #: src/components/fairway/AvailableFairwayDepthLNWL.vue:176 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:365 -#: src/components/fairway/BottleneckDialogue.vue:617 -#: src/components/fairway/BottleneckDialogue.vue:765 -#: src/components/fairway/BottleneckDialogue.vue:824 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:371 +#: src/components/fairway/BottleneckDialogue.vue:629 +#: src/components/fairway/BottleneckDialogue.vue:777 +#: src/components/fairway/BottleneckDialogue.vue:836 #: src/components/fairway/Fairwayprofile.vue:441 -#: src/components/fairway/Fairwayprofile.vue:916 +#: src/components/fairway/Fairwayprofile.vue:919 #: src/components/gauge/Gauges.vue:213 src/components/gauge/Gauges.vue:244 #: src/components/gauge/HydrologicalConditions.vue:329 -#: src/components/gauge/HydrologicalConditions.vue:1151 +#: src/components/gauge/HydrologicalConditions.vue:1156 #: src/components/gauge/Waterlevel.vue:320 -#: src/components/gauge/Waterlevel.vue:1304 +#: src/components/gauge/Waterlevel.vue:1312 +#: src/components/identify/Identify.vue:465 #: src/components/importconfiguration/Import.vue:138 #: src/components/importconfiguration/Import.vue:159 #: src/components/importconfiguration/Import.vue:182 #: src/components/importconfiguration/Import.vue:216 #: src/components/importconfiguration/Import.vue:301 -#: src/components/importconfiguration/ScheduledImports.vue:862 -#: src/components/importconfiguration/ScheduledImports.vue:874 -#: src/components/importconfiguration/ScheduledImports.vue:954 -#: src/components/importconfiguration/ScheduledImports.vue:1042 -#: src/components/importconfiguration/ScheduledImports.vue:1054 -#: src/components/importconfiguration/ScheduledImports.vue:1080 -#: src/components/importconfiguration/ScheduledImports.vue:1092 +#: src/components/importconfiguration/ScheduledImports.vue:875 +#: src/components/importconfiguration/ScheduledImports.vue:887 +#: src/components/importconfiguration/ScheduledImports.vue:974 +#: src/components/importconfiguration/ScheduledImports.vue:1069 +#: src/components/importconfiguration/ScheduledImports.vue:1081 +#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1119 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:151 -#: src/components/importconfiguration/types/Soundingresults.vue:281 -#: src/components/importconfiguration/types/Soundingresults.vue:325 -#: src/components/importconfiguration/types/Soundingresults.vue:368 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:197 +#: src/components/importconfiguration/types/DQLReport.vue:65 +#: src/components/importconfiguration/types/Soundingresults.vue:282 +#: src/components/importconfiguration/types/Soundingresults.vue:337 +#: src/components/importconfiguration/types/Soundingresults.vue:376 +#: src/components/importconfiguration/types/Statsupdate.vue:79 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:189 #: src/components/importoverview/BottleneckDetail.vue:154 -#: src/components/importoverview/ImportOverview.vue:287 -#: src/components/importoverview/ImportOverview.vue:316 -#: src/components/importoverview/ImportOverview.vue:434 -#: src/components/importoverview/ImportOverview.vue:450 -#: src/components/importoverview/ImportOverview.vue:523 -#: src/components/importoverview/ImportOverview.vue:548 +#: src/components/importoverview/ImportOverview.vue:286 +#: src/components/importoverview/ImportOverview.vue:315 +#: src/components/importoverview/ImportOverview.vue:433 +#: src/components/importoverview/ImportOverview.vue:449 +#: src/components/importoverview/ImportOverview.vue:522 +#: src/components/importoverview/ImportOverview.vue:547 #: src/components/importoverview/LogEntry.vue:171 #: src/components/importoverview/SectionDetails.vue:112 #: src/components/importoverview/StretchDetails.vue:143 -#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:275 -#: src/components/map/Map.vue:468 src/components/sections/SectionForm.vue:343 +#: src/components/layers/Layerselect.vue:184 src/components/map/Map.vue:281 +#: src/components/map/Map.vue:492 src/components/sections/SectionForm.vue:343 #: src/components/sections/Sections.vue:183 #: src/components/sections/Sections.vue:197 #: src/components/sections/Sections.vue:243 @@ -269,25 +277,26 @@ #: src/components/systemconfiguration/PDFTemplates.vue:172 #: src/components/systemconfiguration/PDFTemplates.vue:261 #: src/components/systemconfiguration/PDFTemplates.vue:301 -#: src/components/usermanagement/Userdetail.vue:334 -#: src/components/usermanagement/Userdetail.vue:347 -#: src/components/usermanagement/Usermanagement.vue:220 -#: src/components/usermanagement/Usermanagement.vue:261 -#: src/components/usermanagement/Usermanagement.vue:273 -#: src/components/usermanagement/Usermanagement.vue:318 src/lib/session.js:32 +#: src/components/usermanagement/Userdetail.vue:378 +#: src/components/usermanagement/Userdetail.vue:391 +#: src/components/usermanagement/Usermanagement.vue:312 +#: src/components/usermanagement/Usermanagement.vue:338 +#: src/components/usermanagement/Usermanagement.vue:390 +#: src/components/usermanagement/Usermanagement.vue:402 +#: src/components/usermanagement/Usermanagement.vue:447 src/lib/session.js:32 msgid "Backend Error" msgstr "" -#: src/components/identify/Identify.vue:556 +#: src/components/identify/Identify.vue:625 msgid "Beacon, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:560 -#: src/components/importconfiguration/types/Fairwaymarks.vue:132 +#: src/components/identify/Identify.vue:629 +#: src/components/importconfiguration/types/Fairwaymarks.vue:125 msgid "Beacon, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:559 +#: src/components/identify/Identify.vue:628 msgid "Beacon, lateral (MARITIME/Hydro feature)" msgstr "" @@ -296,8 +305,8 @@ msgid "BeamType" msgstr "Typ" -#: src/components/Pdftool.vue:806 src/components/identify/formatter.js:27 -#: src/components/identify/formatter.js:123 +#: src/components/Pdftool.vue:828 src/components/identify/formatter.js:30 +#: src/components/identify/formatter.js:126 #: src/components/importconfiguration/types/Soundingresults.vue:13 msgid "Bottleneck" msgstr "Brody a úžiny" @@ -306,67 +315,71 @@ msgid "Bottleneck Morphology Classbreaks" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:390 +#: src/components/fairway/BottleneckDialogue.vue:402 #: src/components/toolbar/Profiles.vue:50 #, fuzzy msgid "Bottleneck Surveys" msgstr "Brody a úžiny" +#: src/components/Pdftool.vue:864 +msgid "Bottleneck with ZPG Exception" +msgstr "" + #: src/components/importoverview/SoundingResultDetail.vue:7 #, fuzzy msgid "Bottleneck:" msgstr "Brody a úžiny" -#: src/components/Bottlenecks.vue:107 src/components/Sidebar.vue:19 +#: src/components/Bottlenecks.vue:109 src/components/Sidebar.vue:19 #: src/components/fairway/AvailableFairwayDepthDialogue.vue:24 #: src/components/importconfiguration/ImportDetails.vue:43 msgid "Bottlenecks" msgstr "" -#: src/components/identify/Identify.vue:561 -#: src/components/importconfiguration/types/Fairwaymarks.vue:133 +#: src/components/identify/Identify.vue:630 +#: src/components/importconfiguration/types/Fairwaymarks.vue:126 msgid "Buoy, cardinal (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:562 +#: src/components/identify/Identify.vue:631 msgid "Buoy, isolated danger (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:564 -#: src/components/importconfiguration/types/Fairwaymarks.vue:136 +#: src/components/identify/Identify.vue:633 +#: src/components/importconfiguration/types/Fairwaymarks.vue:129 msgid "Buoy, lateral (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:563 -#: src/components/importconfiguration/types/Fairwaymarks.vue:135 +#: src/components/identify/Identify.vue:632 +#: src/components/importconfiguration/types/Fairwaymarks.vue:128 msgid "Buoy, lateral (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:565 -#: src/components/importconfiguration/types/Fairwaymarks.vue:137 +#: src/components/identify/Identify.vue:634 +#: src/components/importconfiguration/types/Fairwaymarks.vue:130 msgid "Buoy, safe water (MARITIME/Hydro feature)" msgstr "" -#: src/components/identify/Identify.vue:566 -#: src/components/importconfiguration/types/Fairwaymarks.vue:138 +#: src/components/identify/Identify.vue:635 +#: src/components/importconfiguration/types/Fairwaymarks.vue:131 msgid "Buoy, special purpose/general (MARITIME/Hydro feature)" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:123 +#: src/components/fairway/BottleneckDialogue.vue:124 msgid "Calculating differences" msgstr "" -#: src/components/Pdftool.vue:83 src/components/Popup.vue:45 -#: src/components/fairway/BottleneckDialogue.vue:795 +#: src/components/Pdftool.vue:84 src/components/Popup.vue:45 +#: src/components/fairway/BottleneckDialogue.vue:807 #: src/components/importconfiguration/Import.vue:223 -#: src/components/importoverview/ImportOverview.vue:294 -#: src/components/importoverview/ImportOverview.vue:533 +#: src/components/importoverview/ImportOverview.vue:293 +#: src/components/importoverview/ImportOverview.vue:532 #: src/components/systemconfiguration/PDFTemplates.vue:345 -#: src/components/usermanagement/Usermanagement.vue:280 +#: src/components/usermanagement/Usermanagement.vue:409 msgid "Cancel" msgstr "" -#: src/components/Bottlenecks.vue:119 +#: src/components/Bottlenecks.vue:121 msgid "Chainage" msgstr "" @@ -386,11 +399,11 @@ msgid "Choose color" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:512 +#: src/components/importconfiguration/ScheduledImports.vue:529 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:97 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:110 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:159 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:138 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 msgid "choose file to upload" msgstr "" @@ -416,11 +429,11 @@ msgid "Compare with" msgstr "" -#: src/components/identify/Identify.vue:461 +#: src/components/identify/Identify.vue:530 msgid "Confidence per 24h" msgstr "" -#: src/components/identify/Identify.vue:458 +#: src/components/identify/Identify.vue:527 msgid "Confidence per 72h" msgstr "" @@ -430,24 +443,24 @@ #: src/components/Popup.vue:59 #: src/components/importconfiguration/types/Soundingresults.vue:188 -#: src/components/importconfiguration/types/Soundingresults.vue:444 +#: src/components/importconfiguration/types/Soundingresults.vue:452 msgid "Confirm" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:663 +#: src/components/fairway/BottleneckDialogue.vue:675 msgid "Coordinates copied to clipboard!" msgstr "" -#: src/components/Bottlenecks.vue:110 +#: src/components/Bottlenecks.vue:112 #: src/components/importconfiguration/Import.vue:239 #: src/components/importoverview/ImportOverview.vue:185 #: src/components/systemconfiguration/PDFTemplates.vue:123 #: src/components/usermanagement/Userdetail.vue:28 -#: src/components/usermanagement/Usermanagement.vue:172 +#: src/components/usermanagement/Usermanagement.vue:222 msgid "Country" msgstr "Štát" -#: src/components/importconfiguration/ScheduledImports.vue:375 +#: src/components/importconfiguration/ScheduledImports.vue:386 msgid "Cronstring" msgstr "" @@ -455,7 +468,7 @@ msgid "Current Waterlevel" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:158 +#: src/components/fairway/BottleneckDialogue.vue:159 msgid "Custom Depth" msgstr "" @@ -463,15 +476,19 @@ msgid "Data Availability/Accuracy" msgstr "" -#: src/components/identify/Identify.vue:497 +#: src/components/importconfiguration/ImportDetails.vue:57 +msgid "Data Quality Report" +msgstr "" + +#: src/components/identify/Identify.vue:566 msgid "Data too old. Treshold:" msgstr "" -#: src/components/identify/Identify.vue:492 +#: src/components/identify/Identify.vue:561 msgid "Data within revisiting treshold" msgstr "" -#: src/components/identify/Identify.vue:487 +#: src/components/identify/Identify.vue:556 msgid "Data within the revisiting time" msgstr "" @@ -486,7 +503,7 @@ msgid "Date info" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1117 +#: src/components/importconfiguration/ScheduledImports.vue:1144 msgid "day" msgstr "" @@ -495,13 +512,13 @@ msgid "Day" msgstr "Mapa" -#: src/components/identify/Identify.vue:570 -#: src/components/importconfiguration/types/Fairwaymarks.vue:142 +#: src/components/identify/Identify.vue:639 +#: src/components/importconfiguration/types/Fairwaymarks.vue:135 msgid "Daymark (IENC feature)" msgstr "" -#: src/components/identify/Identify.vue:569 -#: src/components/importconfiguration/types/Fairwaymarks.vue:141 +#: src/components/identify/Identify.vue:638 +#: src/components/importconfiguration/types/Fairwaymarks.vue:134 msgid "Daymark (MARITIME/Hydro feature)" msgstr "" @@ -509,8 +526,8 @@ msgid "Dec" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 -#: src/components/importconfiguration/ScheduledImports.vue:1143 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:926 +#: src/components/importconfiguration/ScheduledImports.vue:1170 #: src/lib/datelocalization.js:37 msgid "December" msgstr "" @@ -535,14 +552,14 @@ msgid "Define Stretches" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:780 +#: src/components/fairway/BottleneckDialogue.vue:792 #: src/components/importconfiguration/Import.vue:197 #: src/components/systemconfiguration/PDFTemplates.vue:317 -#: src/components/usermanagement/Usermanagement.vue:246 +#: src/components/usermanagement/Usermanagement.vue:364 msgid "Delete" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:773 +#: src/components/fairway/BottleneckDialogue.vue:785 msgid "Delete cross profile" msgstr "" @@ -554,11 +571,11 @@ msgid "Delete Template" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:163 +#: src/components/usermanagement/Usermanagement.vue:213 msgid "Delete user" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:238 +#: src/components/usermanagement/Usermanagement.vue:356 msgid "Delete User" msgstr "" @@ -574,13 +591,13 @@ msgid "deleted successfully" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:754 +#: src/components/fairway/BottleneckDialogue.vue:766 #: src/components/sections/Sections.vue:214 #: src/components/stretches/Stretches.vue:229 msgid "Deleting " msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:86 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:79 msgid "Depth" msgstr "" @@ -592,7 +609,7 @@ msgid "Depth Reference" msgstr "" -#: src/components/Pdftool.vue:812 +#: src/components/Pdftool.vue:835 msgid "Depth relativ to" msgstr "" @@ -608,11 +625,11 @@ msgid "Depthreference" msgstr "" -#: src/components/identify/formatter.js:68 +#: src/components/identify/formatter.js:71 msgid "Distance Mark" msgstr "" -#: src/components/identify/formatter.js:71 +#: src/components/identify/formatter.js:74 msgid "Distance Mark ashore" msgstr "" @@ -624,7 +641,7 @@ msgid "Distance marks virtual" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:776 +#: src/components/fairway/BottleneckDialogue.vue:788 msgid "Do you really want to delete the cross profile:" msgstr "" @@ -632,7 +649,7 @@ msgid "Do you really want to delete the following template:" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:240 +#: src/components/usermanagement/Usermanagement.vue:358 msgid "Do you really want to delete the following user account:" msgstr "" @@ -658,12 +675,21 @@ msgid "Download Meta.json" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:6 +#: src/components/usermanagement/Usermanagement.vue:204 +msgid "DQL Report" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:32 msgid "Earlier" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:273 +msgid "Edit user" +msgstr "" + #: src/components/importconfiguration/Import.vue:283 -#: src/components/usermanagement/Usermanagement.vue:175 +#: src/components/usermanagement/Usermanagement.vue:225 msgid "Email" msgstr "E-mail" @@ -698,11 +724,11 @@ msgid "Enqueued" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:211 +#: src/components/fairway/BottleneckDialogue.vue:212 msgid "Enter coordinates manually" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:275 +#: src/components/fairway/BottleneckDialogue.vue:276 msgid "Enter label for cross profile" msgstr "" @@ -722,11 +748,11 @@ msgid "Errorlog" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1108 +#: src/components/importconfiguration/ScheduledImports.vue:1135 msgid "Every" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:676 +#: src/components/importconfiguration/ScheduledImports.vue:681 msgid "Examples:" msgstr "" @@ -779,15 +805,15 @@ msgid "Fairway (LOS 3)" msgstr "" -#: src/components/map/MapPopup.vue:168 +#: src/components/map/MapPopup.vue:169 msgid "Fairway Availability" msgstr "" -#: src/components/identify/formatter.js:33 +#: src/components/identify/formatter.js:36 msgid "Fairway Critical" msgstr "" -#: src/components/identify/formatter.js:32 +#: src/components/identify/formatter.js:35 msgid "Fairway Date" msgstr "" @@ -795,17 +821,17 @@ msgid "Fairway dimension" msgstr "" -#: src/components/identify/formatter.js:56 +#: src/components/identify/formatter.js:59 msgid "Fairway Dimensions" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:223 -#: src/components/fairway/AvailableFairwayDepth.vue:231 +#: src/components/fairway/AvailableFairwayDepth.vue:226 +#: src/components/fairway/AvailableFairwayDepth.vue:234 msgid "FairwayAvailability" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:218 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:381 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:221 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:387 msgid "FairwayAvailabilityVsLNWL" msgstr "" @@ -831,21 +857,21 @@ msgid "Feb" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:910 -#: src/components/importconfiguration/ScheduledImports.vue:1133 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:916 +#: src/components/importconfiguration/ScheduledImports.vue:1160 #: src/lib/datelocalization.js:27 msgid "February" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1106 +#: src/components/importconfiguration/ScheduledImports.vue:1133 msgid "File" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:851 +#: src/components/importconfiguration/ScheduledImports.vue:864 msgid "File Import" msgstr "" -#: src/components/importoverview/ImportOverview.vue:474 +#: src/components/importoverview/ImportOverview.vue:473 msgid "Finish Review" msgstr "" @@ -862,7 +888,7 @@ msgid "Fri" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1127 +#: src/components/importconfiguration/ScheduledImports.vue:1154 #: src/lib/datelocalization.js:13 msgid "Friday" msgstr "" @@ -877,11 +903,11 @@ msgid "From" msgstr "" -#: src/components/identify/formatter.js:40 +#: src/components/identify/formatter.js:43 msgid "G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:102 +#: src/components/identify/formatter.js:105 msgid "Gauge" msgstr "" @@ -897,11 +923,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/identify/formatter.js:38 +#: src/components/identify/formatter.js:41 msgid "Gauge Waterlevel" msgstr "" -#: src/components/identify/formatter.js:37 +#: src/components/identify/formatter.js:40 msgid "Gauge Waterlevel Date" msgstr "" @@ -909,24 +935,24 @@ msgid "Gauges" msgstr "" -#: src/components/Pdftool.vue:73 src/components/Pdftool.vue:210 +#: src/components/Pdftool.vue:74 src/components/Pdftool.vue:211 #: src/components/toolbar/Pdftool.vue:32 msgid "Generate PDF" msgstr "" -#: src/components/Pdftool.vue:166 +#: src/components/Pdftool.vue:167 msgid "Generated by" msgstr "" -#: src/components/identify/Identify.vue:217 +#: src/components/identify/Identify.vue:241 msgid "Generated PDFs use font:" msgstr "" -#: src/components/identify/Identify.vue:453 +#: src/components/identify/Identify.vue:522 msgid "Highest confidence" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1116 +#: src/components/importconfiguration/ScheduledImports.vue:1143 msgid "hour" msgstr "" @@ -956,21 +982,21 @@ msgid "ID" msgstr "" -#: src/components/identify/Identify.vue:300 src/components/map/MapPopup.vue:148 +#: src/components/identify/Identify.vue:334 src/components/map/MapPopup.vue:149 #: src/components/toolbar/Identify.vue:49 msgid "Identified Features" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "If there is no error during import, there will be no retry" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:943 -#: src/components/importconfiguration/ScheduledImports.vue:1029 -#: src/components/importconfiguration/ScheduledImports.vue:1067 +#: src/components/importconfiguration/ScheduledImports.vue:963 +#: src/components/importconfiguration/ScheduledImports.vue:1056 +#: src/components/importconfiguration/ScheduledImports.vue:1094 #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:137 -#: src/components/importconfiguration/types/Soundingresults.vue:354 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:187 +#: src/components/importconfiguration/types/Soundingresults.vue:362 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:179 #: src/components/sections/SectionForm.vue:328 #: src/components/stretches/StretchForm.vue:83 msgid "Import" @@ -980,7 +1006,7 @@ msgid "Import approved gaugemeasurements" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:852 +#: src/components/importconfiguration/ScheduledImports.vue:865 msgid "Import import: #" msgstr "" @@ -993,7 +1019,7 @@ msgid "Import Schedule" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:389 +#: src/components/importconfiguration/types/Soundingresults.vue:397 msgid "Import Soundingresults" msgstr "" @@ -1005,7 +1031,7 @@ msgid "Import via" msgstr "" -#: src/components/importconfiguration/types/WaterwayProfiles.vue:152 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:145 msgid "Import Waterway Profiles" msgstr "" @@ -1024,11 +1050,11 @@ msgid "Invalid element" msgstr "" -#: src/components/usermanagement/Userdetail.vue:307 +#: src/components/usermanagement/Userdetail.vue:351 msgid "invalid email" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:705 +#: src/components/fairway/BottleneckDialogue.vue:717 msgid "Invalid input" msgstr "" @@ -1036,8 +1062,8 @@ msgid "Jan" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:909 -#: src/components/importconfiguration/ScheduledImports.vue:1132 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 +#: src/components/importconfiguration/ScheduledImports.vue:1159 #: src/lib/datelocalization.js:26 msgid "January" msgstr "" @@ -1046,8 +1072,8 @@ msgid "Jul" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:915 -#: src/components/importconfiguration/ScheduledImports.vue:1138 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:921 +#: src/components/importconfiguration/ScheduledImports.vue:1165 #: src/lib/datelocalization.js:32 msgid "July" msgstr "" @@ -1056,8 +1082,8 @@ msgid "Jun" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:914 -#: src/components/importconfiguration/ScheduledImports.vue:1137 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:920 +#: src/components/importconfiguration/ScheduledImports.vue:1164 #: src/lib/datelocalization.js:31 msgid "June" msgstr "" @@ -1078,21 +1104,21 @@ msgid "Later" msgstr "" -#: src/components/identify/Identify.vue:489 -#: src/components/identify/Identify.vue:494 -#: src/components/identify/Identify.vue:499 +#: src/components/identify/Identify.vue:558 +#: src/components/identify/Identify.vue:563 +#: src/components/identify/Identify.vue:568 msgid "Latest measurement" msgstr "" -#: src/components/Bottlenecks.vue:116 +#: src/components/Bottlenecks.vue:118 msgid "Latest Measurement" msgstr "" -#: src/components/identify/formatter.js:106 +#: src/components/identify/formatter.js:109 msgid "Latest Waterlevel" msgstr "" -#: src/components/identify/formatter.js:105 +#: src/components/identify/formatter.js:108 msgid "Latest Waterlevel Date" msgstr "" @@ -1105,11 +1131,15 @@ msgid "Length" msgstr "" -#: src/components/identify/Identify.vue:571 -#: src/components/importconfiguration/types/Fairwaymarks.vue:143 +#: src/components/identify/Identify.vue:640 +#: src/components/importconfiguration/types/Fairwaymarks.vue:136 msgid "Light (MARITIME/Hydro feature)" msgstr "" +#: src/components/map/Map.vue:299 +msgid "Loading Error" +msgstr "" + #: src/components/Login.vue:58 msgid "Login" msgstr "" @@ -1133,12 +1163,12 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:130 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:67 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:60 msgid "LOS" msgstr "" #: src/components/importconfiguration/Import.vue:172 -#: src/components/importconfiguration/ScheduledImports.vue:944 +#: src/components/importconfiguration/ScheduledImports.vue:964 msgid "Manually triggered import: #" msgstr "" @@ -1158,22 +1188,26 @@ msgid "Mar" msgstr "Mapa" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:911 -#: src/components/importconfiguration/ScheduledImports.vue:1134 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 +#: src/components/importconfiguration/ScheduledImports.vue:1161 #: src/lib/datelocalization.js:28 msgid "March" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:684 +#: src/components/importconfiguration/ScheduledImports.vue:697 +msgid "Maximum of 200" +msgstr "" + +#: src/components/importconfiguration/ScheduledImports.vue:690 msgid "Maximum retry count" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:131 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:124 msgid "MaxWidth" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:913 -#: src/components/importconfiguration/ScheduledImports.vue:1136 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 +#: src/components/importconfiguration/ScheduledImports.vue:1163 #: src/lib/datelocalization.js:30 src/lib/datelocalization.js:44 #, fuzzy msgid "May" @@ -1191,16 +1225,16 @@ msgid "Measurement" msgstr "" -#: src/components/identify/formatter.js:108 +#: src/components/identify/formatter.js:111 msgid "Measurement Count in Last 14 Days" msgstr "" -#: src/components/identify/Identify.vue:424 +#: src/components/identify/Identify.vue:493 msgid "Measurement is within" msgstr "" -#: src/components/identify/Identify.vue:425 -#: src/components/identify/Identify.vue:431 +#: src/components/identify/Identify.vue:494 +#: src/components/identify/Identify.vue:500 msgid "measurements" msgstr "" @@ -1214,21 +1248,21 @@ msgid "Median" msgstr "" -#: src/components/identify/formatter.js:85 -#: src/components/identify/formatter.js:96 +#: src/components/identify/formatter.js:88 +#: src/components/identify/formatter.js:99 msgid "Min. G.W. Count in Last 14 Days" msgstr "" -#: src/components/identify/formatter.js:83 -#: src/components/identify/formatter.js:94 +#: src/components/identify/formatter.js:86 +#: src/components/identify/formatter.js:97 msgid "Min. Gauge Waterlevel Date" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1109 +#: src/components/importconfiguration/ScheduledImports.vue:1136 msgid "minutes past" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:110 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:103 msgid "MinWidth" msgstr "" @@ -1236,24 +1270,24 @@ msgid "Mon" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1123 +#: src/components/importconfiguration/ScheduledImports.vue:1150 #: src/lib/datelocalization.js:9 msgid "Monday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1119 +#: src/components/importconfiguration/ScheduledImports.vue:1146 msgid "month" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:866 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:872 msgid "monthly" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:239 +#: src/components/importconfiguration/ScheduledImports.vue:250 msgid "Monthly" msgstr "" -#: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:7 +#: src/components/Bottlenecks.vue:115 src/components/identify/formatter.js:7 #: src/components/identify/formatter.js:8 #: src/components/sections/Sections.vue:130 #: src/components/stretches/Stretches.vue:131 @@ -1261,17 +1295,17 @@ msgid "Name" msgstr "Názov" -#: src/components/identify/Identify.vue:323 -#: src/components/identify/Identify.vue:327 -#: src/components/identify/Identify.vue:330 -#: src/components/identify/Identify.vue:354 -#: src/components/identify/Identify.vue:358 -#: src/components/identify/Identify.vue:361 +#: src/components/identify/Identify.vue:360 +#: src/components/identify/Identify.vue:364 +#: src/components/identify/Identify.vue:367 +#: src/components/identify/Identify.vue:391 +#: src/components/identify/Identify.vue:395 +#: src/components/identify/Identify.vue:398 msgid "Nash-Sutcliffe" msgstr "" -#: src/components/identify/Identify.vue:332 -#: src/components/identify/Identify.vue:363 +#: src/components/identify/Identify.vue:369 +#: src/components/identify/Identify.vue:400 msgid "Nash-Sutcliffe not available" msgstr "" @@ -1289,10 +1323,6 @@ msgid "Negate Z values in XYZ files" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:687 -msgid "Negative values mean endless retry" -msgstr "" - #: src/components/importoverview/AGMLogItem.vue:14 #: src/components/importoverview/AGMLogItem.vue:29 msgid "New" @@ -1310,7 +1340,7 @@ msgid "New stretch" msgstr "" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 msgid "no" msgstr "" @@ -1320,11 +1350,16 @@ msgid "No data available." msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:15 +#: src/components/importconfiguration/types/Statsupdate.vue:15 +msgid "No data selectable" +msgstr "" + #: src/components/identify/Identify.vue:179 msgid "No features identified." msgstr "" -#: src/components/identify/Identify.vue:418 +#: src/components/identify/Identify.vue:487 msgid "No measurement available" msgstr "" @@ -1332,7 +1367,7 @@ msgid "No results." msgstr "" -#: src/components/identify/Identify.vue:475 +#: src/components/identify/Identify.vue:544 msgid "No revisiting time defined" msgstr "" @@ -1340,7 +1375,7 @@ msgid "No style-changes" msgstr "" -#: src/components/identify/Identify.vue:477 +#: src/components/identify/Identify.vue:546 msgid "No survey-data available" msgstr "" @@ -1356,8 +1391,8 @@ msgid "No valid waterlevel data available." msgstr "" -#: src/components/identify/Identify.vue:576 -#: src/components/importconfiguration/types/Fairwaymarks.vue:146 +#: src/components/identify/Identify.vue:645 +#: src/components/importconfiguration/types/Fairwaymarks.vue:139 msgid "Notice mark (IENC feature)" msgstr "" @@ -1365,14 +1400,14 @@ msgid "Nov" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:919 -#: src/components/importconfiguration/ScheduledImports.vue:1142 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:925 +#: src/components/importconfiguration/ScheduledImports.vue:1169 #: src/lib/datelocalization.js:36 msgid "November" msgstr "" -#: src/components/gauge/HydrologicalConditions.vue:736 -#: src/components/gauge/Waterlevel.vue:846 +#: src/components/gauge/HydrologicalConditions.vue:732 +#: src/components/gauge/Waterlevel.vue:842 msgid "Now" msgstr "" @@ -1381,7 +1416,7 @@ msgid "Numbers" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1113 +#: src/components/importconfiguration/ScheduledImports.vue:1140 msgid "o' clock" msgstr "" @@ -1393,13 +1428,13 @@ msgid "Oct" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:918 -#: src/components/importconfiguration/ScheduledImports.vue:1141 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:924 +#: src/components/importconfiguration/ScheduledImports.vue:1168 #: src/lib/datelocalization.js:35 msgid "October" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1111 +#: src/components/importconfiguration/ScheduledImports.vue:1138 msgid "of" msgstr "" @@ -1411,11 +1446,11 @@ msgid "Old" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1110 +#: src/components/importconfiguration/ScheduledImports.vue:1137 msgid "on" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:133 +#: src/components/importconfiguration/ImportDetails.vue:145 msgid "Onetime Imports" msgstr "" @@ -1428,17 +1463,17 @@ msgid "Owner" msgstr "" -#: src/components/usermanagement/Userdetail.vue:212 +#: src/components/usermanagement/Userdetail.vue:232 msgid "password" msgstr "" #: src/components/importconfiguration/types/Distancemarksvirtual.vue:45 #: src/components/importconfiguration/types/Waterwaygauges.vue:45 -#: src/components/usermanagement/Userdetail.vue:210 +#: src/components/usermanagement/Userdetail.vue:230 msgid "Password" msgstr "Heslo" -#: src/components/usermanagement/Userdetail.vue:213 +#: src/components/usermanagement/Userdetail.vue:233 msgid "password again" msgstr "" @@ -1446,13 +1481,14 @@ msgid "Password reset requested!" msgstr "" -#: src/components/usermanagement/Userdetail.vue:300 +#: src/components/usermanagement/Userdetail.vue:336 +#: src/components/usermanagement/Userdetail.vue:343 msgid "" "Password should at least be 8 char long including 1 digit and 1 special char " "like $" msgstr "" -#: src/components/usermanagement/Userdetail.vue:296 +#: src/components/usermanagement/Userdetail.vue:331 msgid "Passwords do not match!" msgstr "" @@ -1464,15 +1500,15 @@ msgid "pending" msgstr "" -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:768 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:774 msgid "Percent" msgstr "" -#: src/components/usermanagement/Userdetail.vue:285 +#: src/components/usermanagement/Userdetail.vue:320 msgid "Please choose a country" msgstr "Vyberte krajinu" -#: src/components/usermanagement/Userdetail.vue:290 +#: src/components/usermanagement/Userdetail.vue:325 msgid "Please choose a role" msgstr "" @@ -1481,7 +1517,7 @@ msgid "Please enter a date" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:100 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:93 msgid "Please enter a depth" msgstr "" @@ -1494,15 +1530,15 @@ msgid "Please enter a Featuretype" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:78 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:71 msgid "Please enter a level of service" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:144 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:137 msgid "Please enter a maximum width" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:123 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:116 msgid "Please enter a minimum width" msgstr "" @@ -1524,7 +1560,7 @@ msgid "Please enter a source organization" msgstr "Vyberte krajinu" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:168 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:161 msgid "Please enter a source orgranization" msgstr "" @@ -1572,28 +1608,27 @@ msgid "Please enter an originator" msgstr "Vyberte krajinu" -#: src/components/fairway/BottleneckDialogue.vue:706 +#: src/components/fairway/BottleneckDialogue.vue:718 msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importconfiguration/types/Distancemarksashore.vue:57 -#: src/components/importconfiguration/types/Fairwaydimensions.vue:57 -#: src/components/importconfiguration/types/Fairwaymarks.vue:76 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:79 -#: src/components/importconfiguration/types/Waterwayarea.vue:57 -#: src/components/importconfiguration/types/Waterwayaxis.vue:57 -msgid "Please enter SortBy" -msgstr "" - #: src/components/importconfiguration/types/Soundingresults.vue:33 msgid "Please select a bottleneck" msgstr "" +#: src/components/importconfiguration/types/DQLReport.vue:29 +msgid "Please select a report to update" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:35 #: src/components/usermanagement/Userdetail.vue:76 msgid "Please select one" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:29 +msgid "Please select stats to update" +msgstr "" + #: src/lib/datelocalization.js:6 msgid "PM" msgstr "" @@ -1602,7 +1637,7 @@ msgid "portrait" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:690 +#: src/components/importconfiguration/ScheduledImports.vue:694 msgid "Positive values are the upper limit for retries" msgstr "" @@ -1615,7 +1650,7 @@ msgid "Prediction" msgstr "" -#: src/components/identify/Identify.vue:463 +#: src/components/identify/Identify.vue:532 msgid "Predictions not available" msgstr "" @@ -1627,11 +1662,11 @@ msgid "Press ESC to stop drawing." msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:791 +#: src/components/fairway/BottleneckDialogue.vue:803 msgid "Profile deleted!" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:733 +#: src/components/fairway/BottleneckDialogue.vue:745 msgid "Profile saved!" msgstr "" @@ -1651,21 +1686,29 @@ msgid "Q75%" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:867 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:873 msgid "quarterly" msgstr "" -#: src/components/identify/Identify.vue:572 -#: src/components/importconfiguration/types/Fairwaymarks.vue:144 +#: src/components/identify/Identify.vue:641 +#: src/components/importconfiguration/types/Fairwaymarks.vue:137 msgid "Radar transponder beacon (MARITIME/Hydro feature)" msgstr "" +#: src/components/usermanagement/Usermanagement.vue:274 +msgid "Reactivate user" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:6 #, fuzzy msgid "Recency of Bottleneck Surveys" msgstr "Brody a úžiny" -#: src/components/Pdftool.vue:810 +#: src/components/usermanagement/Userdetail.vue:113 +msgid "Recipient for DQL Report" +msgstr "" + +#: src/components/Pdftool.vue:833 msgid "Ref gauge" msgstr "" @@ -1677,14 +1720,18 @@ msgid "Refresh" msgstr "" -#: src/components/importconfiguration/ImportDetails.vue:136 +#: src/components/importconfiguration/ImportDetails.vue:148 msgid "Regular Imports" msgstr "" -#: src/components/usermanagement/Userdetail.vue:211 +#: src/components/usermanagement/Userdetail.vue:231 msgid "Repeat Password" msgstr "" +#: src/components/importconfiguration/ImportDetails.vue:142 +msgid "Reports" +msgstr "" + #: src/components/Login.vue:66 msgid "Request password reset!" msgstr "" @@ -1701,15 +1748,15 @@ msgid "Reset to defaults" msgstr "" -#: src/components/identify/formatter.js:31 +#: src/components/identify/formatter.js:34 msgid "Responsible Country" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:201 +#: src/components/importconfiguration/ScheduledImports.vue:212 msgid "Retry on failure" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:696 +#: src/components/importconfiguration/ScheduledImports.vue:701 msgid "retryDescription" msgstr "" @@ -1727,11 +1774,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:69 -#: src/components/usermanagement/Usermanagement.vue:166 +#: src/components/usermanagement/Usermanagement.vue:216 msgid "Role" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:492 +#: src/components/fairway/BottleneckDialogue.vue:504 msgid "Rotate Maps" msgstr "" @@ -1743,25 +1790,24 @@ msgid "Sat" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1128 +#: src/components/importconfiguration/ScheduledImports.vue:1155 #: src/lib/datelocalization.js:14 msgid "Saturday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:461 -#: src/components/usermanagement/Userdetail.vue:118 +#: src/components/importconfiguration/ScheduledImports.vue:476 msgid "Save" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:184 +#: src/components/fairway/BottleneckDialogue.vue:185 msgid "Saved cross profiles" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1030 +#: src/components/importconfiguration/ScheduledImports.vue:1057 msgid "Saved import: #" msgstr "" -#: src/components/Pdftool.vue:560 +#: src/components/Pdftool.vue:574 msgid "Scale" msgstr "" @@ -1770,15 +1816,15 @@ msgstr "" #: src/components/importconfiguration/Import.vue:280 -#: src/components/importconfiguration/ScheduledImports.vue:229 +#: src/components/importconfiguration/ScheduledImports.vue:240 msgid "Schedule" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:153 +#: src/components/importconfiguration/ScheduledImports.vue:164 msgid "Scheduled" msgstr "" -#: src/components/identify/formatter.js:91 +#: src/components/identify/formatter.js:94 msgid "Section" msgstr "" @@ -1802,7 +1848,7 @@ msgstr "" #: src/components/fairway/AvailableFairwayDepthDialogue.vue:562 -#: src/components/importconfiguration/types/Soundingresults.vue:411 +#: src/components/importconfiguration/types/Soundingresults.vue:419 #, fuzzy msgid "Select bottleneck" msgstr "Brody a úžiny" @@ -1836,7 +1882,7 @@ msgid "Send all" msgstr "Poslať" -#: src/components/usermanagement/Usermanagement.vue:160 +#: src/components/usermanagement/Usermanagement.vue:210 msgid "Send testmail" msgstr "" @@ -1844,13 +1890,13 @@ msgid "Sep" msgstr "" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:917 -#: src/components/importconfiguration/ScheduledImports.vue:1140 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:923 +#: src/components/importconfiguration/ScheduledImports.vue:1167 #: src/lib/datelocalization.js:34 msgid "September" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:133 +#: src/components/fairway/BottleneckDialogue.vue:134 msgid "Show differences" msgstr "" @@ -1858,7 +1904,7 @@ msgid "Show Hydrological Conditions" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:130 +#: src/components/fairway/BottleneckDialogue.vue:131 msgid "Show survey" msgstr "" @@ -1870,11 +1916,11 @@ msgid "Signer" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:175 +#: src/components/importconfiguration/ScheduledImports.vue:186 msgid "Simple" msgstr "" -#: src/components/identify/Identify.vue:204 +#: src/components/identify/Identify.vue:228 msgid "" "Some data ©\n" " <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n" @@ -1898,7 +1944,7 @@ msgid "Sounding Result Comparison" msgstr "" -#: src/components/identify/formatter.js:118 +#: src/components/identify/formatter.js:121 msgid "Sounding results" msgstr "" @@ -1915,16 +1961,16 @@ msgid "Source organization" msgstr "" -#: src/components/identify/formatter.js:35 +#: src/components/identify/formatter.js:38 #: src/components/sections/SectionForm.vue:161 msgid "Source Organization" msgstr "" -#: src/components/importconfiguration/types/Fairwaydimensions.vue:155 +#: src/components/importconfiguration/types/Fairwaydimensions.vue:148 msgid "Source orgranization" msgstr "" -#: src/components/identify/Identify.vue:201 +#: src/components/identify/Identify.vue:225 msgid "source-code" msgstr "" @@ -1933,7 +1979,7 @@ msgid "Staging Area" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:230 +#: src/components/fairway/BottleneckDialogue.vue:231 msgid "Start" msgstr "" @@ -1941,7 +1987,7 @@ msgid "Start rhm" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:356 +#: src/components/importconfiguration/types/Soundingresults.vue:364 msgid "Starting import for " msgstr "" @@ -1965,11 +2011,15 @@ msgid "Starting Year" msgstr "" +#: src/components/importconfiguration/types/Statsupdate.vue:6 +msgid "Stats Update" +msgstr "" + #: src/components/importoverview/ImportOverview.vue:209 msgid "Status" msgstr "" -#: src/components/identify/formatter.js:80 +#: src/components/identify/formatter.js:83 msgid "Stretch" msgstr "" @@ -1978,13 +2028,17 @@ msgstr "" #: src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue:66 -#: src/components/importconfiguration/types/WaterwayProfiles.vue:113 +#: src/components/importconfiguration/types/WaterwayProfiles.vue:106 #: src/components/sections/SectionForm.vue:185 #: src/components/stretches/StretchForm.vue:26 msgid "Submit" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:838 +#: src/components/usermanagement/Usermanagement.vue:379 +msgid "successfully" +msgstr "" + +#: src/components/fairway/AvailableFairwayDepth.vue:844 msgid "Sum of days" msgstr "" @@ -1992,17 +2046,17 @@ msgid "Sun" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1129 +#: src/components/importconfiguration/ScheduledImports.vue:1156 #: src/lib/datelocalization.js:8 msgid "Sunday" msgstr "" #: src/components/fairway/BottleneckDialogue.vue:76 -#: src/components/fairway/BottleneckDialogue.vue:752 +#: src/components/fairway/BottleneckDialogue.vue:764 msgid "Survey" msgstr "" -#: src/components/Pdftool.vue:808 +#: src/components/Pdftool.vue:830 msgid "Survey date" msgstr "" @@ -2010,11 +2064,11 @@ msgid "Survey from:" msgstr "" -#: src/components/identify/formatter.js:122 +#: src/components/identify/formatter.js:125 msgid "Survey type" msgstr "" -#: src/components/map/MapPopup.vue:165 +#: src/components/map/MapPopup.vue:166 msgid "Surveys" msgstr "" @@ -2022,7 +2076,7 @@ msgid "Sysadmin" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:300 +#: src/components/usermanagement/Usermanagement.vue:429 msgid "System-Administrator" msgstr "" @@ -2034,10 +2088,16 @@ msgid "Systemconfiguration" msgstr "" -#: src/components/usermanagement/Usermanagement.vue:209 +#: src/components/usermanagement/Usermanagement.vue:327 msgid "Testmail sent" msgstr "" +#: src/components/map/Map.vue:300 +msgid "" +"The ECDIS chart could not be loaded completely, the map might be corrupted. " +"Please retry later" +msgstr "" + #: src/components/systemconfiguration/DataAccuracy.vue:204 msgid "" "The highest confidence value is less than\n" @@ -2125,9 +2185,9 @@ msgid "There are less than" msgstr "" -#: src/components/fairway/AvailableFairwayDepth.vue:254 -#: src/components/fairway/AvailableFairwayDepthLNWL.vue:231 -#: src/components/fairway/BottleneckDialogue.vue:495 +#: src/components/fairway/AvailableFairwayDepth.vue:257 +#: src/components/fairway/AvailableFairwayDepthLNWL.vue:234 +#: src/components/fairway/BottleneckDialogue.vue:507 #: src/components/importconfiguration/types/Soundingresults.vue:232 #: src/components/importconfiguration/types/Soundingresults.vue:251 #: src/components/layers/Layerselect.vue:86 @@ -2135,7 +2195,7 @@ msgid "this" msgstr "" -#: src/components/identify/Identify.vue:195 +#: src/components/identify/Identify.vue:219 msgid "" "This app uses <i>gemma</i>, which is Free Software under <br/>\n" " %{ license } without warranty, see docs for details." @@ -2145,12 +2205,12 @@ msgid "Thu" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1126 +#: src/components/importconfiguration/ScheduledImports.vue:1153 #: src/lib/datelocalization.js:12 msgid "Thursday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:674 +#: src/components/importconfiguration/ScheduledImports.vue:679 msgid "Time between retries. Valid units are 's' , 'm' and 'h' " msgstr "" @@ -2172,21 +2232,21 @@ msgid "Tolerance for snapping to axis" msgstr "" -#: src/components/fairway/BottleneckDialogue.vue:611 +#: src/components/fairway/BottleneckDialogue.vue:623 msgid "" "Too many difference calculations already in progress. Please try again later." msgstr "" -#: src/components/identify/Identify.vue:575 -#: src/components/importconfiguration/types/Fairwaymarks.vue:145 +#: src/components/identify/Identify.vue:644 +#: src/components/importconfiguration/types/Fairwaymarks.vue:138 msgid "Topmark (MARITIME/Hydro feature)" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:391 +#: src/components/importconfiguration/ScheduledImports.vue:402 msgid "Tries" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:453 +#: src/components/importconfiguration/ScheduledImports.vue:468 msgid "Trigger import" msgstr "" @@ -2194,7 +2254,7 @@ msgid "Tue" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1124 +#: src/components/importconfiguration/ScheduledImports.vue:1151 #: src/lib/datelocalization.js:10 msgid "Tuesday" msgstr "" @@ -2209,11 +2269,15 @@ msgid "Type of mark" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1068 +#: src/components/importconfiguration/ScheduledImports.vue:1095 msgid "update import: #" msgstr "" -#: src/components/importconfiguration/types/Soundingresults.vue:441 +#: src/components/importconfiguration/ImportDetails.vue:60 +msgid "Update Stats" +msgstr "" + +#: src/components/importconfiguration/types/Soundingresults.vue:449 msgid "Upload" msgstr "" @@ -2237,7 +2301,7 @@ msgid "uploaded successfully" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1107 +#: src/components/importconfiguration/ScheduledImports.vue:1134 #: src/components/importconfiguration/types/Availablefairwaydepth.vue:5 #: src/components/importconfiguration/types/Bottleneck.vue:7 #: src/components/importconfiguration/types/Distancemarksashore.vue:5 @@ -2252,25 +2316,34 @@ msgid "URL" msgstr "" -#: src/components/identify/Identify.vue:191 -#: src/components/identify/Identify.vue:303 +#: src/components/usermanagement/Usermanagement.vue:375 +msgid "user account" +msgstr "" + +#: src/components/identify/Identify.vue:214 +#: src/components/identify/Identify.vue:340 msgid "User Manual" msgstr "" +#: src/components/usermanagement/Userdetail.vue:271 +#: src/components/usermanagement/Usermanagement.vue:207 +msgid "User receives Data Quality Report" +msgstr "" + #: src/components/importconfiguration/types/Distancemarksvirtual.vue:25 #: src/components/importconfiguration/types/Waterwaygauges.vue:25 #: src/components/usermanagement/Userdetail.vue:11 -#: src/components/usermanagement/Userdetail.vue:246 -#: src/components/usermanagement/Usermanagement.vue:169 +#: src/components/usermanagement/Userdetail.vue:278 +#: src/components/usermanagement/Usermanagement.vue:219 msgid "Username" msgstr "" #: src/components/Sidebar.vue:59 -#: src/components/usermanagement/Usermanagement.vue:157 +#: src/components/usermanagement/Usermanagement.vue:201 msgid "Users" msgstr "" -#: src/components/identify/Identify.vue:210 +#: src/components/identify/Identify.vue:234 msgid "" "Uses\n" " <a href=\"https://download.geonames.org/export/dump/readme.txt" @@ -2282,7 +2355,7 @@ msgid "Value" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:408 +#: src/components/importconfiguration/ScheduledImports.vue:421 msgid "Wait to retry" msgstr "" @@ -2307,17 +2380,17 @@ msgstr "" #: src/components/fairway/Fairwayprofile.vue:668 -#: src/components/gauge/HydrologicalConditions.vue:769 -#: src/components/gauge/Waterlevel.vue:724 +#: src/components/gauge/HydrologicalConditions.vue:765 +#: src/components/gauge/Waterlevel.vue:720 msgid "Waterlevel [m]" msgstr "" -#: src/components/map/MapPopup.vue:171 +#: src/components/map/MapPopup.vue:172 msgid "Waterlevels" msgstr "" #: src/components/usermanagement/Userdetail.vue:82 -#: src/components/usermanagement/Usermanagement.vue:301 +#: src/components/usermanagement/Usermanagement.vue:430 msgid "Waterway Admin" msgstr "" @@ -2325,7 +2398,7 @@ msgid "Waterway area" msgstr "" -#: src/components/identify/formatter.js:65 +#: src/components/identify/formatter.js:68 msgid "Waterway Area" msgstr "" @@ -2333,7 +2406,7 @@ msgid "Waterway axis" msgstr "" -#: src/components/identify/formatter.js:74 +#: src/components/identify/formatter.js:77 msgid "Waterway Axis" msgstr "" @@ -2341,7 +2414,7 @@ msgid "Waterway gauges" msgstr "" -#: src/components/identify/formatter.js:77 +#: src/components/identify/formatter.js:80 msgid "Waterway Profile" msgstr "" @@ -2350,7 +2423,7 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:85 -#: src/components/usermanagement/Usermanagement.vue:302 +#: src/components/usermanagement/Usermanagement.vue:431 msgid "Waterway User" msgstr "" @@ -2358,16 +2431,16 @@ msgid "Wed" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1125 +#: src/components/importconfiguration/ScheduledImports.vue:1152 #: src/lib/datelocalization.js:11 msgid "Wednesday" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1118 +#: src/components/importconfiguration/ScheduledImports.vue:1145 msgid "week" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:238 +#: src/components/importconfiguration/ScheduledImports.vue:249 msgid "Weekly" msgstr "" @@ -2383,26 +2456,30 @@ msgid "Widthlimit 2 [m]" msgstr "" -#: src/components/importconfiguration/ScheduledImports.vue:1120 +#: src/components/importconfiguration/ScheduledImports.vue:1147 msgid "year" msgstr "Rok" -#: src/components/fairway/AvailableFairwayDepthDialogue.vue:868 +#: src/components/fairway/AvailableFairwayDepthDialogue.vue:874 #, fuzzy msgid "yearly" msgstr "Rok" -#: src/components/identify/formatter.js:10 +#: src/components/identify/formatter.js:14 #, fuzzy msgid "yes" msgstr "Vrstvy" -#: src/components/fairway/BottleneckDialogue.vue:734 +#: src/components/fairway/BottleneckDialogue.vue:746 msgid "" "You can now select these coordinates from the \"Saved cross profiles\" menu " "to restore this cross profile." msgstr "" +#: src/components/identify/formatter.js:127 +msgid "ZPG exception" +msgstr "" + #, fuzzy #~ msgid "Chose preset" #~ msgstr "Vyberte formát"
--- a/client/src/main.js Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/main.js Tue Feb 08 10:20:26 2022 +0100 @@ -106,6 +106,7 @@ faWater, faWrench, faRedo, + faUndo, faSync, faCrosshairs } from "@fortawesome/free-solid-svg-icons"; @@ -178,6 +179,7 @@ faWater, faWrench, faRedo, + faUndo, faSync, faWindowMinimize, faWindowMaximize,
--- a/client/src/store/fairwayavailability.js Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/store/fairwayavailability.js Tue Feb 08 10:20:26 2022 +0100 @@ -70,8 +70,8 @@ limitingFactor: null, depthlimit1: 230, depthlimit2: 250, - widthlimit1: null, - widthlimit2: null, + widthlimit1: 80, + widthlimit2: 150, csv: null, fwData: null, fwLNWLData: null,
--- a/client/src/store/usermanagement.js Wed Jul 21 15:14:40 2021 +0200 +++ b/client/src/store/usermanagement.js Tue Feb 08 10:20:26 2022 +0100 @@ -32,7 +32,8 @@ role: null, isNew: true, password: "", - roleLabel: "" + roleLabel: "", + active: true }; }; @@ -130,17 +131,38 @@ }); } else { return new Promise((resolve, reject) => { - HTTP.put("/users/" + path, user, { - headers: { "X-Gemma-Auth": localStorage.getItem("token") } - }) - .then(response => { - commit("setUserDetailsInvisible"); - commit("clearCurrentUser"); - resolve(response); + // Reactivate User + if (!user.active) { + HTTP.patch( + "/users/" + path, + { active: true, email: user.email }, + { + headers: { + "X-Gemma-Auth": localStorage.getItem("token") + } + } + ) + .then(response => { + commit("setUserDetailsInvisible"); + commit("clearCurrentUser"); + resolve(response); + }) + .catch(error => { + reject(error); + }); + } else { + HTTP.put("/users/" + path, user, { + headers: { "X-Gemma-Auth": localStorage.getItem("token") } }) - .catch(error => { - reject(error); - }); + .then(response => { + commit("setUserDetailsInvisible"); + commit("clearCurrentUser"); + resolve(response); + }) + .catch(error => { + reject(error); + }); + } }); } },
--- a/cmd/gemma/main.go Wed Jul 21 15:14:40 2021 +0200 +++ b/cmd/gemma/main.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,7 +18,7 @@ import ( "context" "fmt" - "log" + lg "log" "net/http" "os" "os/signal" @@ -34,6 +34,7 @@ "gemma.intevation.de/gemma/pkg/controllers" "gemma.intevation.de/gemma/pkg/geoserver" "gemma.intevation.de/gemma/pkg/imports" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/middleware" "gemma.intevation.de/gemma/pkg/scheduler" ) @@ -49,11 +50,18 @@ func start(cmd *cobra.Command, args []string) { + if lf := config.LogFile(); lf != "" { + log.SetupLog(lf, 0666) + defer log.ShutdownLog() + } + + log.SetLogLevel(config.LogLevel()) + config.Ready() web, err := filepath.Abs(config.Web()) if err != nil { - log.Fatalf("error: %v\n", err) + log.Fatalf("%v\n", err) } prepareSessionStore() @@ -73,7 +81,7 @@ m.PathPrefix("/").Handler(dir) addr := fmt.Sprintf("%s:%d", config.WebHost(), config.WebPort()) - log.Printf("info: listen on %s\n", addr) + log.Infof("listen on %s\n", addr) var h http.Handler @@ -102,7 +110,7 @@ select { case err := <-done: if err != nil && err != http.ErrServerClosed { - log.Fatalf("error: %v\n", err) + log.Fatalf("%v\n", err) } case <-sigChan: } @@ -112,14 +120,13 @@ <-done if err := auth.Sessions.Shutdown(); err != nil { - log.Fatalf("error: %v\n", err) + log.Fatalf("%v\n", err) } } func main() { config.RootCmd.Run = start - log.SetFlags(log.LstdFlags | log.Lshortfile) if err := config.RootCmd.Execute(); err != nil { - log.Fatalln(err) + lg.Fatalln(err) } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/gmaggregate/README.md Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,89 @@ +# gmaggregate + +*Attention:* This is a copy of [gmaggregate](https://heptapod.host/intevation/gemma/gmaggregate). + +A log message transformation tool for gauge measurement (gm) imports +in the gemma server. + +We recognized that the logging of the gm imports is producing a lot +of data itself by been very verbose and redundant. The has led +to the fact that over 99% of the log messages of all imports +in the gemma server are stemming from the gm imports ... +hundreds of millions of log lines. + +The logging itself is now done in a more compact and aggregated +way increasing the readability of the logs, too. +To get rid of the repetitive old logs entries without losing +information these logs has to be aggregated in the same way, +too. + +Normally, we use SQL or PL/pgSQL scripts for this kind of migrations. +We had a version of this for this task but first experiments +had shown that its run time would only be acceptable +for small data sets, but not for the multi million data sets +of the production system. It also had no to very little potential +to be significantly improved. Therefore we re-crafted this tool in Go. + +## Build + +You need a working Go build environment (tested successfully with 1.17). + +```(shell) +hg clone https://heptapod.host/intevation/gemma/gmaggregate +cd gmaggregate +go build +``` + +Place the resulting `gmaggregate` binary into the `PATH` of your +database server. It needs execution rights for the `postgres` user. + +If you've modified the expressions in [matcher.rl](matcher.rl) you need +an installation of the [Ragel](http://www.colm.net/open-source/ragel/) FSM compiler. +Compile the modified sources with: + +```(shell) +go generate +go build +``` + +## Usage + +`gmaggregate` works in two phases: **filter** and **transfer**. +The **filter** phase creates a new table in the database in which +the aggregated logs of the gm import logs are stored. In this +phase the original logs are __not__ modified. The modifications +are done in the **transfer** phase. In this phase the original +log lines are removed from the database which are associated +with the gm imports leading to the entries in the table +created in the first phase. All other log lines are not +touched. After the deletion off the old lines the content +of the new table is copied back into the log table and +the new table is dropped. All operations in the transfer +phase are are encapsulated within a transaction so that +no harm is done if the execution is failing. + +`gmaggregate` runs the two phases **filter** and **transfer** +one right after each other. If you want to run them +separated by hand you can can do this this the `-phases` +flag. + +> **CSV export**: For debugging purposes `gmaggregate` supports +> exporting the aggregated log lines as a CSV file. Use the +> `-c` flag to specify the file to write it to. When running +> the CVS export the new table in the database is not created. +> So the transfer phase will fail. Therefore you should use +> the CSV export togetjer with the `-phase=filter` flag. + +For more options see `gmaggregate --help`. + +> Tip: After running the `gmaggregate` migration you should consider running +> `VACCUM FULL; CLUSTER import.import_logs USING import_logs_import_id;` +> from a `psql` shell on the database to recover the space +> used by the original log lines and physically order the data +> in a way corresponing to the process of logging. + +## License + +This is Free Software covered by the terms of the +GNU Affero General Public License version 3.0 or later. +See [AGPL-3.0.txt](../../LICENSES/AGPL-3.0.txt) for details.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/gmaggregate/go.mod Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,17 @@ +module heptapod.host/intevation/gemma/gmaggregate + +go 1.17 + +require github.com/jackc/pgx/v4 v4.13.0 + +require ( + github.com/jackc/chunkreader/v2 v2.0.1 // indirect + github.com/jackc/pgconn v1.10.0 // indirect + github.com/jackc/pgio v1.0.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgproto3/v2 v2.1.1 // indirect + github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect + github.com/jackc/pgtype v1.8.1 // indirect + golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect + golang.org/x/text v0.3.6 // indirect +)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/gmaggregate/go.sum Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,176 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.10.0 h1:4EYhlDVEMsJ30nNj0mmgwIUXoq7e9sMJrVC2ED6QlCU= +github.com/jackc/pgconn v1.10.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.1.1 h1:7PQ/4gLoqnl87ZxL7xjO0DR5gYuviDCZxQJsUlFW1eI= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= +github.com/jackc/pgtype v1.8.1 h1:9k0IXtdJXHJbyAWQgbWr1lU+MEhPXZz6RIXxfR5oxXs= +github.com/jackc/pgtype v1.8.1/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= +github.com/jackc/pgx/v4 v4.13.0 h1:JCjhT5vmhMAf/YwBHLvrBn4OGdIQBiFG6ym8Zmdx570= +github.com/jackc/pgx/v4 v4.13.0/go.mod h1:9P4X524sErlaxj0XSGZk7s+LD0eOyu1ZDUrrpznYDF0= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/gmaggregate/main.go Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,765 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSE +// +// Copyright (C) 2021 by via donau +// - Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +//go:generate ragel -Z -G2 -o matcher.go matcher.rl +//go:generate go fmt matcher.go + +package main + +import ( + "container/heap" + "context" + "database/sql" + "encoding/csv" + "flag" + "fmt" + "log" + "os" + "runtime" + "sort" + "strconv" + "strings" + "sync" + "time" + + _ "github.com/jackc/pgx/v4/stdlib" +) + +const ( + selectOldGMLogsSQL = ` + SELECT + lo.import_id, + lo.time, + lo.kind, + lo.msg + FROM import.imports im + JOIN import.import_logs lo + ON lo.import_id = im.id + WHERE im.kind = 'gm' + ORDER BY lo.import_id` + + createFilteredLogsSQL = ` + CREATE TABLE filtered_logs ( + import_id integer NOT NULL, + time timestamp with time zone NOT NULL, + kind log_type NOT NULL, + msg text NOT NULL + )` + + insertFilteredLogsSQL = ` + INSERT INTO filtered_logs (import_id, time, kind, msg) + VALUES ($1, $2, $3::log_type, $4)` + + deleteOldGMLogsSQL = ` + DELETE FROM import.import_logs WHERE import_id IN ( + SELECT import_id FROM filtered_logs)` + + copyDataSQL = ` + INSERT INTO import.import_logs (import_id, time, kind, msg) + SELECT import_id, time, kind, msg + FROM filtered_logs` + + dropFilteredLogsSQL = `DROP TABLE filtered_logs` +) + +type phases int + +const ( + nonePhase phases = 0 + filterPhase phases = 1 << iota + transferPhase +) + +type gauge struct { + gid string + unknown bool + assumeZPG bool + ignMeasCodes []string + rescaleErrors []string + missingValues []string + assumeCM int + badValues int + measurements int + predictions int +} + +type aggregator struct { + current string + hold *line + + lastGauge *gauge + gauges []*gauge + + stack [4]string +} + +type line struct { + time time.Time + kind string + msg string +} + +type importLines struct { + seq int + id int64 + lines []line +} + +type processor struct { + cond *sync.Cond + aggregated []*importLines + nextOutSeq int + done bool +} + +type writer interface { + prepare(context.Context, *sql.Conn) error + write(*importLines) + finish() + error() error +} + +type csvWriter struct { + err error + file *os.File + out *csv.Writer + row [1 + 1 + 1 + 1]string +} + +type sqlWriter struct { + err error + ctx context.Context + tx *sql.Tx + stmt *sql.Stmt +} + +func (ps phases) has(p phases) bool { + return ps&p == p +} + +func parsePhases(s string) (phases, error) { + ps := nonePhase + for _, x := range strings.Split(s, ",") { + switch strings.ToLower(strings.TrimSpace(x)) { + case "transfer": + ps |= transferPhase + case "filter": + ps |= filterPhase + default: + return nonePhase, fmt.Errorf("invalid phase '%s'", x) + } + } + return ps, nil +} + +func (g *gauge) getAssumeZPG() bool { return g.assumeZPG } +func (g *gauge) getUnknown() bool { return g.unknown } +func (g *gauge) getIgnoredMeasureCodes() []string { return g.ignMeasCodes } +func (g *gauge) getRescaleErrors() []string { return g.rescaleErrors } +func (g *gauge) getMissingValues() []string { return g.missingValues } +func (g *gauge) getAssumeCM() int { return g.assumeCM } +func (g *gauge) getBadValues() int { return g.badValues } +func (g *gauge) getPredictions() int { return g.predictions } +func (g *gauge) getMeasurements() int { return g.measurements } +func (g *gauge) nothingChanged() bool { return g.measurements == 0 && g.predictions == 0 } + +func (agg *aggregator) reset() { + agg.current = "" + agg.hold = nil + agg.lastGauge = nil + agg.gauges = nil +} + +func (agg *aggregator) find(name string) *gauge { + if agg.lastGauge != nil && name == agg.lastGauge.gid { + return agg.lastGauge + } + for _, g := range agg.gauges { + if g.gid == name { + agg.lastGauge = g + return g + } + } + g := &gauge{gid: name} + agg.gauges = append(agg.gauges, g) + agg.lastGauge = g + return g +} + +func extend(haystack []string, needle string) []string { + for _, straw := range haystack { + if straw == needle { + return haystack + } + } + return append(haystack, needle) +} + +func (agg *aggregator) logBool( + access func(*gauge) bool, + header string, + log func(string), +) { + var sb strings.Builder + for _, g := range agg.gauges { + if access(g) { + if sb.Len() == 0 { + sb.WriteString(header) + } else { + sb.WriteString(", ") + } + sb.WriteString(g.gid) + } + } + if sb.Len() > 0 { + log(sb.String()) + } +} + +func (agg *aggregator) logInt( + access func(*gauge) int, + header string, + log func(string), +) { + gs := make([]*gauge, 0, len(agg.gauges)) + for _, g := range agg.gauges { + if access(g) > 0 { + gs = append(gs, g) + } + } + + if len(gs) == 0 { + return + } + + sort.SliceStable(gs, func(i, j int) bool { + return access(gs[i]) < access(gs[j]) + }) + + var sb strings.Builder + var last int + + for _, g := range gs { + if c := access(g); c != last { + if sb.Len() == 0 { + sb.WriteString(header) + } else { + sb.WriteString("); ") + } + sb.WriteString(strconv.Itoa(c)) + sb.WriteString(" (") + last = c + } else { + sb.WriteString(", ") + } + sb.WriteString(g.gid) + } + + sb.WriteByte(')') + log(sb.String()) +} + +func (agg *aggregator) logString( + access func(*gauge) []string, + header string, + log func(string), +) { + var sb strings.Builder + for _, g := range agg.gauges { + if s := access(g); len(s) > 0 { + if sb.Len() == 0 { + sb.WriteString(header) + } else { + sb.WriteString(", ") + } + sb.WriteString(g.gid) + sb.WriteString(" (") + for i, v := range s { + if i > 0 { + sb.WriteString("; ") + } + sb.WriteString(v) + } + sb.WriteByte(')') + } + } + if sb.Len() > 0 { + log(sb.String()) + } +} + +func (agg *aggregator) aggregate(out []line, last time.Time) []line { + + // Guarantee that new lines has a time after already put out lines. + if n := len(out); n > 0 && !out[n-1].time.Before(last) { + last = out[n-1].time.Add(time.Millisecond) + } + + log := func(kind, msg string) { + out = append(out, line{last, kind, msg}) + last = last.Add(time.Millisecond) + } + + infoLog := func(msg string) { log("info", msg) } + warnLog := func(msg string) { log("warn", msg) } + errLog := func(msg string) { log("error", msg) } + + agg.logBool( + (*gauge).getUnknown, + "Cannot find following gauges: ", + warnLog) + + agg.logBool( + (*gauge).getAssumeZPG, + "'Reference_code' not specified. Assuming 'ZPG': ", + warnLog) + + agg.logInt( + (*gauge).getAssumeCM, + "'Unit' not specified. Assuming 'cm': ", + warnLog) + + agg.logInt( + (*gauge).getBadValues, + "Ignored measurements with value -99999: ", + warnLog) + + agg.logString( + (*gauge).getMissingValues, + "Missing mandatory values: ", + warnLog) + + agg.logString( + (*gauge).getRescaleErrors, + "Cannot convert units: ", + errLog) + + agg.logString( + (*gauge).getRescaleErrors, + "Ignored measure codes: ", + warnLog) + + agg.logInt( + (*gauge).getPredictions, + "New predictions: ", + infoLog) + + agg.logInt( + (*gauge).getMeasurements, + "New measurements: ", + infoLog) + + agg.logBool( + (*gauge).nothingChanged, + "No changes for: ", + infoLog) + + if agg.hold != nil { + agg.hold.time = last + out = append(out, *agg.hold) + } + return out +} + +func (agg *aggregator) run( + wg *sync.WaitGroup, + logs <-chan *importLines, + pr *processor, +) { + defer wg.Done() + for l := range logs { + // Do sorting by time in user land to take advantage + // of concurrent workers. + lines := l.lines + sort.Slice(lines, func(i, j int) bool { + return lines[i].time.Before(lines[j].time) + }) + + out := lines[:0:len(lines)] + for i := range lines { + line := &lines[i] + if !agg.match(line.msg, line) { + out = append(out, *line) + } + } + l.lines = agg.aggregate(out, lines[len(lines)-1].time) + pr.consume(l) + agg.reset() + } +} + +const timeFormat = "2006-01-02 15:04:05.999999-07" + +func newCSVWriter(filename string) (*csvWriter, error) { + + f, err := os.Create(filename) + if err != nil { + return nil, err + } + + return &csvWriter{ + file: f, + out: csv.NewWriter(f), + }, nil +} + +func (cw *csvWriter) prepare(context.Context, *sql.Conn) error { + return nil +} + +func (cw *csvWriter) error() error { return cw.err } + +func (cw *csvWriter) write(entry *importLines) { + if cw.err != nil { + return + } + row := cw.row[:] + row[0] = strconv.FormatInt(entry.id, 10) + for _, l := range entry.lines { + row[1] = l.time.Format(timeFormat) + row[2] = l.kind + row[3] = l.msg + if cw.err = cw.out.Write(row); cw.err != nil { + log.Printf("error: Writing to CSV file failed: %v\n", cw.err) + return + } + } +} + +func (cw *csvWriter) finish() { + cw.out.Flush() + if err := cw.out.Error(); err != nil { + log.Printf("error: flushing CSV file failed: %v\n", err) + } + if err := cw.file.Close(); err != nil { + log.Printf("Closing CSV file failed: %v\n", err) + } +} + +func (sw *sqlWriter) prepare(ctx context.Context, conn *sql.Conn) error { + + tx, err := conn.BeginTx(ctx, nil) + if err != nil { + return err + } + + if _, err := tx.ExecContext(ctx, createFilteredLogsSQL); err != nil { + tx.Rollback() + return fmt.Errorf("cannot create new log table: %v\n", err) + } + + stmt, err := tx.PrepareContext(ctx, insertFilteredLogsSQL) + if err != nil { + tx.Rollback() + return err + } + + sw.ctx = ctx + sw.tx = tx + sw.stmt = stmt + return nil +} + +func (sw *sqlWriter) error() error { return sw.err } + +func (sw *sqlWriter) write(entry *importLines) { + if sw.err != nil { + return + } + for _, l := range entry.lines { + if _, sw.err = sw.stmt.ExecContext( + sw.ctx, + entry.id, + l.time, + l.kind, + l.msg, + ); sw.err != nil { + log.Printf("error: writing log line to db failed: %v\n", sw.err) + return + } + } +} + +func (sw *sqlWriter) finish() { + if err := sw.stmt.Close(); err != nil { + log.Printf("error: close stmt failed: %v\n", err) + } + if sw.err == nil { + if err := sw.tx.Commit(); err != nil { + log.Printf("error: Commiting transaction failed: %v\n", err) + } + } else if err := sw.tx.Rollback(); err != nil { + log.Printf("error: Rollback transaction failed: %v\n", err) + } +} + +func (pr *processor) Push(x interface{}) { + pr.aggregated = append(pr.aggregated, x.(*importLines)) +} + +func (pr *processor) Pop() interface{} { + n := len(pr.aggregated) + x := pr.aggregated[n-1] + pr.aggregated[n-1] = nil + pr.aggregated = pr.aggregated[:n-1] + return x +} + +func (pr *processor) Len() int { return len(pr.aggregated) } + +func (pr *processor) Less(i, j int) bool { + return pr.aggregated[i].seq < pr.aggregated[j].seq +} + +func (pr *processor) Swap(i, j int) { + pr.aggregated[i], pr.aggregated[j] = pr.aggregated[j], pr.aggregated[i] +} + +func (pr *processor) consume(l *importLines) { + pr.cond.L.Lock() + heap.Push(pr, l) + pr.cond.L.Unlock() + pr.cond.Signal() +} + +func (pr *processor) quit() { + pr.cond.L.Lock() + pr.done = true + pr.cond.L.Unlock() + pr.cond.Signal() +} + +func (pr *processor) drain(write func(*importLines)) { + + for { + pr.cond.L.Lock() + for !pr.done && + (len(pr.aggregated) == 0 || pr.aggregated[0].seq != pr.nextOutSeq) { + pr.cond.Wait() + } + if pr.done { + for len(pr.aggregated) > 0 { + write(heap.Pop(pr).(*importLines)) + } + pr.cond.L.Unlock() + return + } + l := heap.Pop(pr).(*importLines) + //log.Printf("%d %p\n", c.nextOutSeq, l) + pr.nextOutSeq++ + pr.cond.L.Unlock() + write(l) + } +} + +func (pr *processor) filterPhase(db *sql.DB, worker int, wr writer) error { + + log.Println("filter phase started") + + ctx := context.Background() + + con1, err := db.Conn(ctx) + if err != nil { + return err + } + defer con1.Close() + + con2, err := db.Conn(ctx) + if err != nil { + return err + } + defer con2.Close() + + tx, err := con1.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) + if err != nil { + return err + } + defer tx.Rollback() + + if err := wr.prepare(ctx, con2); err != nil { + return err + } + defer wr.finish() + + logs := make(chan *importLines) + var wg sync.WaitGroup + + for i := 0; i < worker; i++ { + wg.Add(1) + go new(aggregator).run(&wg, logs, pr) + } + + writeDone := make(chan struct{}) + + go func() { + defer close(writeDone) + pr.drain(wr.write) + }() + + log.Println("Querying for old logs started. (Can take a while.)") + rows, err := tx.QueryContext(ctx, selectOldGMLogsSQL) + if err != nil { + return err + } + defer rows.Close() + + log.Println("Querying done. (Maybe restart the gemma server, now?)") + + var ( + count int64 + current *importLines + seq int + l line + importID int64 + start = time.Now() + last = start + ) + + log.Println("Filtering started.") + for rows.Next() { + if err := rows.Scan(&importID, &l.time, &l.kind, &l.msg); err != nil { + return err + } + + if current == nil || importID != current.id { + if current != nil { + logs <- current + } + current = &importLines{ + seq: seq, + id: importID, + } + seq++ + } + current.lines = append(current.lines, l) + + if count++; count%1_000_000 == 0 { + now := time.Now() + diff := now.Sub(last) + log.Printf("lines: %d rate: %.2f lines/s\n", + count, + 1_000_000/diff.Seconds()) + last = now + } + } + if current != nil && len(current.lines) > 0 { + logs <- current + } + close(logs) + wg.Wait() + + pr.quit() + + <-writeDone + + rate := float64(count) / time.Since(start).Seconds() + log.Printf("lines: %d rate: %.2f lines/s imports: %d\n", + count, rate, seq) + return nil +} + +func (pr *processor) transferPhase(db *sql.DB) error { + log.Println("Transfer phase started.") + ctx := context.Background() + conn, err := db.Conn(ctx) + if err != nil { + return err + } + defer conn.Close() + tx, err := conn.BeginTx(ctx, nil) + if err != nil { + return err + } + defer tx.Rollback() + + for _, sql := range []string{ + deleteOldGMLogsSQL, + copyDataSQL, + dropFilteredLogsSQL, + } { + if _, err := tx.ExecContext(ctx, sql); err != nil { + return err + } + } + return tx.Commit() +} + +func newProcessor() *processor { + return &processor{ + cond: sync.NewCond(new(sync.Mutex)), + } +} + +func process( + host, dbname string, port int, + worker int, + csvFile string, + ps phases, +) error { + + p := newProcessor() + var wr writer + + if csvFile != "" { + var err error + if wr, err = newCSVWriter(csvFile); err != nil { + return fmt.Errorf("error: Cannot create CSV file: %v", err) + } + } else { + wr = new(sqlWriter) + } + + dsn := fmt.Sprintf("host=%s dbname=%s port=%d", host, dbname, port) + db, err := sql.Open("pgx", dsn) + if err != nil { + return err + } + defer db.Close() + + if ps.has(filterPhase) { + if err := p.filterPhase(db, worker, wr); err != nil { + return err + } + } + if ps.has(transferPhase) { + if err := p.transferPhase(db); err != nil { + return err + } + } + + return nil +} + +func main() { + var ( + host = flag.String("h", "/var/run/postgresql", "database host") + dbname = flag.String("d", "gemma", "database") + port = flag.Int("p", 5432, "database port") + worker = flag.Int("w", runtime.NumCPU(), "workers to aggregate") + csv = flag.String("c", "", "CSV file to be written") + phases = flag.String("phases", "filter,transfer", "Phases filter and/or transfer") + ) + + flag.Parse() + + ps, err := parsePhases(*phases) + if err != nil { + log.Fatalf("error: %v\n", err) + } + + start := time.Now() + if err := process(*host, *dbname, *port, *worker, *csv, ps); err != nil { + log.Fatalf("error: %v\n", err) + } + log.Printf("time took: %s\n", time.Since(start)) +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/gmaggregate/matcher.go Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,5744 @@ +//line matcher.rl:1 +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSE +// +// Copyright (C) 2021 by via donau +// - Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> +package main + +import "strconv" + +//line matcher.go:21 +const expression_start int = 1 +const expression_first_final int = 408 +const expression_error int = 0 + +const expression_en_expr int = 1 + +//line matcher.rl:20 + +func (agg *aggregator) match(data string, l *line) bool { + + // data := []rune(line) + + var cs int + + p, pe := 0, len(data) + + stack := agg.stack[:0] + var pos int + + var g *gauge + var v int + + current := func() string { return string(data[pos+1 : p+1]) } + + pop := func() string { + s := stack[len(stack)-1] + stack = stack[:len(stack)-1] + return s + } + +//line matcher.rl:138 + +//line matcher.go:59 + { + cs = expression_start + } + +//line matcher.rl:141 + +//line matcher.go:66 + { + if p == pe { + goto _test_eof + } + switch cs { + case 1: + goto st_case_1 + case 0: + goto st_case_0 + case 2: + goto st_case_2 + case 3: + goto st_case_3 + case 4: + goto st_case_4 + case 5: + goto st_case_5 + case 6: + goto st_case_6 + case 7: + goto st_case_7 + case 8: + goto st_case_8 + case 9: + goto st_case_9 + case 10: + goto st_case_10 + case 11: + goto st_case_11 + case 12: + goto st_case_12 + case 13: + goto st_case_13 + case 14: + goto st_case_14 + case 15: + goto st_case_15 + case 16: + goto st_case_16 + case 17: + goto st_case_17 + case 18: + goto st_case_18 + case 19: + goto st_case_19 + case 20: + goto st_case_20 + case 21: + goto st_case_21 + case 22: + goto st_case_22 + case 23: + goto st_case_23 + case 24: + goto st_case_24 + case 25: + goto st_case_25 + case 26: + goto st_case_26 + case 27: + goto st_case_27 + case 28: + goto st_case_28 + case 29: + goto st_case_29 + case 30: + goto st_case_30 + case 31: + goto st_case_31 + case 32: + goto st_case_32 + case 33: + goto st_case_33 + case 34: + goto st_case_34 + case 35: + goto st_case_35 + case 36: + goto st_case_36 + case 37: + goto st_case_37 + case 38: + goto st_case_38 + case 39: + goto st_case_39 + case 40: + goto st_case_40 + case 41: + goto st_case_41 + case 42: + goto st_case_42 + case 43: + goto st_case_43 + case 44: + goto st_case_44 + case 45: + goto st_case_45 + case 46: + goto st_case_46 + case 408: + goto st_case_408 + case 47: + goto st_case_47 + case 48: + goto st_case_48 + case 49: + goto st_case_49 + case 50: + goto st_case_50 + case 51: + goto st_case_51 + case 52: + goto st_case_52 + case 53: + goto st_case_53 + case 54: + goto st_case_54 + case 55: + goto st_case_55 + case 56: + goto st_case_56 + case 57: + goto st_case_57 + case 58: + goto st_case_58 + case 59: + goto st_case_59 + case 60: + goto st_case_60 + case 61: + goto st_case_61 + case 62: + goto st_case_62 + case 63: + goto st_case_63 + case 64: + goto st_case_64 + case 65: + goto st_case_65 + case 66: + goto st_case_66 + case 67: + goto st_case_67 + case 68: + goto st_case_68 + case 69: + goto st_case_69 + case 70: + goto st_case_70 + case 71: + goto st_case_71 + case 72: + goto st_case_72 + case 73: + goto st_case_73 + case 74: + goto st_case_74 + case 75: + goto st_case_75 + case 76: + goto st_case_76 + case 77: + goto st_case_77 + case 78: + goto st_case_78 + case 79: + goto st_case_79 + case 80: + goto st_case_80 + case 81: + goto st_case_81 + case 82: + goto st_case_82 + case 83: + goto st_case_83 + case 84: + goto st_case_84 + case 85: + goto st_case_85 + case 86: + goto st_case_86 + case 87: + goto st_case_87 + case 88: + goto st_case_88 + case 89: + goto st_case_89 + case 90: + goto st_case_90 + case 91: + goto st_case_91 + case 92: + goto st_case_92 + case 93: + goto st_case_93 + case 94: + goto st_case_94 + case 95: + goto st_case_95 + case 96: + goto st_case_96 + case 97: + goto st_case_97 + case 98: + goto st_case_98 + case 99: + goto st_case_99 + case 100: + goto st_case_100 + case 101: + goto st_case_101 + case 102: + goto st_case_102 + case 103: + goto st_case_103 + case 104: + goto st_case_104 + case 105: + goto st_case_105 + case 106: + goto st_case_106 + case 107: + goto st_case_107 + case 108: + goto st_case_108 + case 109: + goto st_case_109 + case 110: + goto st_case_110 + case 111: + goto st_case_111 + case 112: + goto st_case_112 + case 113: + goto st_case_113 + case 114: + goto st_case_114 + case 115: + goto st_case_115 + case 116: + goto st_case_116 + case 117: + goto st_case_117 + case 118: + goto st_case_118 + case 119: + goto st_case_119 + case 120: + goto st_case_120 + case 121: + goto st_case_121 + case 122: + goto st_case_122 + case 123: + goto st_case_123 + case 124: + goto st_case_124 + case 125: + goto st_case_125 + case 126: + goto st_case_126 + case 127: + goto st_case_127 + case 128: + goto st_case_128 + case 129: + goto st_case_129 + case 130: + goto st_case_130 + case 131: + goto st_case_131 + case 132: + goto st_case_132 + case 133: + goto st_case_133 + case 134: + goto st_case_134 + case 135: + goto st_case_135 + case 136: + goto st_case_136 + case 137: + goto st_case_137 + case 138: + goto st_case_138 + case 139: + goto st_case_139 + case 140: + goto st_case_140 + case 141: + goto st_case_141 + case 142: + goto st_case_142 + case 143: + goto st_case_143 + case 144: + goto st_case_144 + case 145: + goto st_case_145 + case 146: + goto st_case_146 + case 147: + goto st_case_147 + case 148: + goto st_case_148 + case 149: + goto st_case_149 + case 150: + goto st_case_150 + case 151: + goto st_case_151 + case 152: + goto st_case_152 + case 153: + goto st_case_153 + case 154: + goto st_case_154 + case 155: + goto st_case_155 + case 156: + goto st_case_156 + case 157: + goto st_case_157 + case 158: + goto st_case_158 + case 159: + goto st_case_159 + case 160: + goto st_case_160 + case 161: + goto st_case_161 + case 162: + goto st_case_162 + case 163: + goto st_case_163 + case 164: + goto st_case_164 + case 165: + goto st_case_165 + case 166: + goto st_case_166 + case 167: + goto st_case_167 + case 168: + goto st_case_168 + case 169: + goto st_case_169 + case 170: + goto st_case_170 + case 171: + goto st_case_171 + case 172: + goto st_case_172 + case 173: + goto st_case_173 + case 174: + goto st_case_174 + case 175: + goto st_case_175 + case 176: + goto st_case_176 + case 177: + goto st_case_177 + case 178: + goto st_case_178 + case 179: + goto st_case_179 + case 180: + goto st_case_180 + case 181: + goto st_case_181 + case 182: + goto st_case_182 + case 183: + goto st_case_183 + case 184: + goto st_case_184 + case 185: + goto st_case_185 + case 186: + goto st_case_186 + case 187: + goto st_case_187 + case 188: + goto st_case_188 + case 189: + goto st_case_189 + case 190: + goto st_case_190 + case 191: + goto st_case_191 + case 192: + goto st_case_192 + case 193: + goto st_case_193 + case 194: + goto st_case_194 + case 195: + goto st_case_195 + case 196: + goto st_case_196 + case 197: + goto st_case_197 + case 198: + goto st_case_198 + case 199: + goto st_case_199 + case 200: + goto st_case_200 + case 201: + goto st_case_201 + case 202: + goto st_case_202 + case 203: + goto st_case_203 + case 204: + goto st_case_204 + case 205: + goto st_case_205 + case 206: + goto st_case_206 + case 207: + goto st_case_207 + case 208: + goto st_case_208 + case 209: + goto st_case_209 + case 210: + goto st_case_210 + case 211: + goto st_case_211 + case 212: + goto st_case_212 + case 213: + goto st_case_213 + case 214: + goto st_case_214 + case 215: + goto st_case_215 + case 216: + goto st_case_216 + case 217: + goto st_case_217 + case 218: + goto st_case_218 + case 219: + goto st_case_219 + case 220: + goto st_case_220 + case 221: + goto st_case_221 + case 222: + goto st_case_222 + case 223: + goto st_case_223 + case 224: + goto st_case_224 + case 225: + goto st_case_225 + case 226: + goto st_case_226 + case 227: + goto st_case_227 + case 228: + goto st_case_228 + case 229: + goto st_case_229 + case 230: + goto st_case_230 + case 231: + goto st_case_231 + case 232: + goto st_case_232 + case 233: + goto st_case_233 + case 234: + goto st_case_234 + case 235: + goto st_case_235 + case 236: + goto st_case_236 + case 237: + goto st_case_237 + case 409: + goto st_case_409 + case 238: + goto st_case_238 + case 239: + goto st_case_239 + case 240: + goto st_case_240 + case 241: + goto st_case_241 + case 242: + goto st_case_242 + case 243: + goto st_case_243 + case 244: + goto st_case_244 + case 245: + goto st_case_245 + case 246: + goto st_case_246 + case 247: + goto st_case_247 + case 248: + goto st_case_248 + case 249: + goto st_case_249 + case 250: + goto st_case_250 + case 251: + goto st_case_251 + case 252: + goto st_case_252 + case 253: + goto st_case_253 + case 254: + goto st_case_254 + case 255: + goto st_case_255 + case 256: + goto st_case_256 + case 257: + goto st_case_257 + case 258: + goto st_case_258 + case 259: + goto st_case_259 + case 260: + goto st_case_260 + case 261: + goto st_case_261 + case 262: + goto st_case_262 + case 263: + goto st_case_263 + case 264: + goto st_case_264 + case 265: + goto st_case_265 + case 266: + goto st_case_266 + case 267: + goto st_case_267 + case 268: + goto st_case_268 + case 269: + goto st_case_269 + case 270: + goto st_case_270 + case 271: + goto st_case_271 + case 272: + goto st_case_272 + case 273: + goto st_case_273 + case 274: + goto st_case_274 + case 275: + goto st_case_275 + case 276: + goto st_case_276 + case 277: + goto st_case_277 + case 278: + goto st_case_278 + case 279: + goto st_case_279 + case 280: + goto st_case_280 + case 281: + goto st_case_281 + case 282: + goto st_case_282 + case 283: + goto st_case_283 + case 284: + goto st_case_284 + case 285: + goto st_case_285 + case 286: + goto st_case_286 + case 287: + goto st_case_287 + case 288: + goto st_case_288 + case 289: + goto st_case_289 + case 290: + goto st_case_290 + case 291: + goto st_case_291 + case 292: + goto st_case_292 + case 293: + goto st_case_293 + case 294: + goto st_case_294 + case 295: + goto st_case_295 + case 296: + goto st_case_296 + case 297: + goto st_case_297 + case 298: + goto st_case_298 + case 299: + goto st_case_299 + case 300: + goto st_case_300 + case 301: + goto st_case_301 + case 302: + goto st_case_302 + case 303: + goto st_case_303 + case 304: + goto st_case_304 + case 305: + goto st_case_305 + case 306: + goto st_case_306 + case 307: + goto st_case_307 + case 308: + goto st_case_308 + case 309: + goto st_case_309 + case 310: + goto st_case_310 + case 311: + goto st_case_311 + case 312: + goto st_case_312 + case 313: + goto st_case_313 + case 314: + goto st_case_314 + case 315: + goto st_case_315 + case 316: + goto st_case_316 + case 317: + goto st_case_317 + case 318: + goto st_case_318 + case 319: + goto st_case_319 + case 320: + goto st_case_320 + case 321: + goto st_case_321 + case 322: + goto st_case_322 + case 323: + goto st_case_323 + case 324: + goto st_case_324 + case 325: + goto st_case_325 + case 326: + goto st_case_326 + case 327: + goto st_case_327 + case 328: + goto st_case_328 + case 329: + goto st_case_329 + case 330: + goto st_case_330 + case 331: + goto st_case_331 + case 332: + goto st_case_332 + case 333: + goto st_case_333 + case 334: + goto st_case_334 + case 335: + goto st_case_335 + case 336: + goto st_case_336 + case 337: + goto st_case_337 + case 338: + goto st_case_338 + case 339: + goto st_case_339 + case 340: + goto st_case_340 + case 341: + goto st_case_341 + case 342: + goto st_case_342 + case 343: + goto st_case_343 + case 344: + goto st_case_344 + case 345: + goto st_case_345 + case 346: + goto st_case_346 + case 347: + goto st_case_347 + case 348: + goto st_case_348 + case 349: + goto st_case_349 + case 350: + goto st_case_350 + case 351: + goto st_case_351 + case 352: + goto st_case_352 + case 353: + goto st_case_353 + case 354: + goto st_case_354 + case 355: + goto st_case_355 + case 356: + goto st_case_356 + case 357: + goto st_case_357 + case 358: + goto st_case_358 + case 359: + goto st_case_359 + case 360: + goto st_case_360 + case 361: + goto st_case_361 + case 362: + goto st_case_362 + case 363: + goto st_case_363 + case 364: + goto st_case_364 + case 365: + goto st_case_365 + case 366: + goto st_case_366 + case 367: + goto st_case_367 + case 368: + goto st_case_368 + case 369: + goto st_case_369 + case 370: + goto st_case_370 + case 371: + goto st_case_371 + case 372: + goto st_case_372 + case 373: + goto st_case_373 + case 374: + goto st_case_374 + case 375: + goto st_case_375 + case 376: + goto st_case_376 + case 377: + goto st_case_377 + case 378: + goto st_case_378 + case 379: + goto st_case_379 + case 380: + goto st_case_380 + case 381: + goto st_case_381 + case 382: + goto st_case_382 + case 383: + goto st_case_383 + case 384: + goto st_case_384 + case 385: + goto st_case_385 + case 386: + goto st_case_386 + case 387: + goto st_case_387 + case 388: + goto st_case_388 + case 389: + goto st_case_389 + case 390: + goto st_case_390 + case 391: + goto st_case_391 + case 392: + goto st_case_392 + case 393: + goto st_case_393 + case 394: + goto st_case_394 + case 395: + goto st_case_395 + case 396: + goto st_case_396 + case 397: + goto st_case_397 + case 398: + goto st_case_398 + case 399: + goto st_case_399 + case 400: + goto st_case_400 + case 401: + goto st_case_401 + case 402: + goto st_case_402 + case 403: + goto st_case_403 + case 404: + goto st_case_404 + case 405: + goto st_case_405 + case 406: + goto st_case_406 + case 407: + goto st_case_407 + } + goto st_out + st_case_1: + switch data[p] { + case 39: + goto st2 + case 67: + goto st80 + case 70: + goto st119 + case 73: + goto st173 + case 77: + goto st351 + case 101: + goto st379 + case 117: + goto st394 + } + goto st0 + st_case_0: + st0: + cs = 0 + goto _out + st2: + if p++; p == pe { + goto _test_eof2 + } + st_case_2: + switch data[p] { + case 82: + goto st3 + case 85: + goto st47 + } + goto st0 + st3: + if p++; p == pe { + goto _test_eof3 + } + st_case_3: + if data[p] == 101 { + goto st4 + } + goto st0 + st4: + if p++; p == pe { + goto _test_eof4 + } + st_case_4: + if data[p] == 102 { + goto st5 + } + goto st0 + st5: + if p++; p == pe { + goto _test_eof5 + } + st_case_5: + if data[p] == 101 { + goto st6 + } + goto st0 + st6: + if p++; p == pe { + goto _test_eof6 + } + st_case_6: + if data[p] == 114 { + goto st7 + } + goto st0 + st7: + if p++; p == pe { + goto _test_eof7 + } + st_case_7: + if data[p] == 101 { + goto st8 + } + goto st0 + st8: + if p++; p == pe { + goto _test_eof8 + } + st_case_8: + if data[p] == 110 { + goto st9 + } + goto st0 + st9: + if p++; p == pe { + goto _test_eof9 + } + st_case_9: + if data[p] == 99 { + goto st10 + } + goto st0 + st10: + if p++; p == pe { + goto _test_eof10 + } + st_case_10: + if data[p] == 101 { + goto st11 + } + goto st0 + st11: + if p++; p == pe { + goto _test_eof11 + } + st_case_11: + if data[p] == 95 { + goto st12 + } + goto st0 + st12: + if p++; p == pe { + goto _test_eof12 + } + st_case_12: + if data[p] == 99 { + goto st13 + } + goto st0 + st13: + if p++; p == pe { + goto _test_eof13 + } + st_case_13: + if data[p] == 111 { + goto st14 + } + goto st0 + st14: + if p++; p == pe { + goto _test_eof14 + } + st_case_14: + if data[p] == 100 { + goto st15 + } + goto st0 + st15: + if p++; p == pe { + goto _test_eof15 + } + st_case_15: + if data[p] == 101 { + goto st16 + } + goto st0 + st16: + if p++; p == pe { + goto _test_eof16 + } + st_case_16: + if data[p] == 39 { + goto st17 + } + goto st0 + st17: + if p++; p == pe { + goto _test_eof17 + } + st_case_17: + if data[p] == 32 { + goto st18 + } + goto st0 + st18: + if p++; p == pe { + goto _test_eof18 + } + st_case_18: + if data[p] == 110 { + goto st19 + } + goto st0 + st19: + if p++; p == pe { + goto _test_eof19 + } + st_case_19: + if data[p] == 111 { + goto st20 + } + goto st0 + st20: + if p++; p == pe { + goto _test_eof20 + } + st_case_20: + if data[p] == 116 { + goto st21 + } + goto st0 + st21: + if p++; p == pe { + goto _test_eof21 + } + st_case_21: + if data[p] == 32 { + goto st22 + } + goto st0 + st22: + if p++; p == pe { + goto _test_eof22 + } + st_case_22: + if data[p] == 115 { + goto st23 + } + goto st0 + st23: + if p++; p == pe { + goto _test_eof23 + } + st_case_23: + if data[p] == 112 { + goto st24 + } + goto st0 + st24: + if p++; p == pe { + goto _test_eof24 + } + st_case_24: + if data[p] == 101 { + goto st25 + } + goto st0 + st25: + if p++; p == pe { + goto _test_eof25 + } + st_case_25: + if data[p] == 99 { + goto st26 + } + goto st0 + st26: + if p++; p == pe { + goto _test_eof26 + } + st_case_26: + if data[p] == 105 { + goto st27 + } + goto st0 + st27: + if p++; p == pe { + goto _test_eof27 + } + st_case_27: + if data[p] == 102 { + goto st28 + } + goto st0 + st28: + if p++; p == pe { + goto _test_eof28 + } + st_case_28: + if data[p] == 105 { + goto st29 + } + goto st0 + st29: + if p++; p == pe { + goto _test_eof29 + } + st_case_29: + if data[p] == 101 { + goto st30 + } + goto st0 + st30: + if p++; p == pe { + goto _test_eof30 + } + st_case_30: + if data[p] == 100 { + goto st31 + } + goto st0 + st31: + if p++; p == pe { + goto _test_eof31 + } + st_case_31: + if data[p] == 46 { + goto st32 + } + goto st0 + st32: + if p++; p == pe { + goto _test_eof32 + } + st_case_32: + if data[p] == 32 { + goto st33 + } + goto st0 + st33: + if p++; p == pe { + goto _test_eof33 + } + st_case_33: + if data[p] == 65 { + goto st34 + } + goto st0 + st34: + if p++; p == pe { + goto _test_eof34 + } + st_case_34: + if data[p] == 115 { + goto st35 + } + goto st0 + st35: + if p++; p == pe { + goto _test_eof35 + } + st_case_35: + if data[p] == 115 { + goto st36 + } + goto st0 + st36: + if p++; p == pe { + goto _test_eof36 + } + st_case_36: + if data[p] == 117 { + goto st37 + } + goto st0 + st37: + if p++; p == pe { + goto _test_eof37 + } + st_case_37: + if data[p] == 109 { + goto st38 + } + goto st0 + st38: + if p++; p == pe { + goto _test_eof38 + } + st_case_38: + if data[p] == 105 { + goto st39 + } + goto st0 + st39: + if p++; p == pe { + goto _test_eof39 + } + st_case_39: + if data[p] == 110 { + goto st40 + } + goto st0 + st40: + if p++; p == pe { + goto _test_eof40 + } + st_case_40: + if data[p] == 103 { + goto st41 + } + goto st0 + st41: + if p++; p == pe { + goto _test_eof41 + } + st_case_41: + if data[p] == 32 { + goto st42 + } + goto st0 + st42: + if p++; p == pe { + goto _test_eof42 + } + st_case_42: + if data[p] == 39 { + goto st43 + } + goto st0 + st43: + if p++; p == pe { + goto _test_eof43 + } + st_case_43: + if data[p] == 90 { + goto st44 + } + goto st0 + st44: + if p++; p == pe { + goto _test_eof44 + } + st_case_44: + if data[p] == 80 { + goto st45 + } + goto st0 + st45: + if p++; p == pe { + goto _test_eof45 + } + st_case_45: + if data[p] == 71 { + goto st46 + } + goto st0 + st46: + if p++; p == pe { + goto _test_eof46 + } + st_case_46: + if data[p] == 39 { + goto tr53 + } + goto st0 + tr53: +//line matcher.rl:68 + + agg.find(agg.current).assumeZPG = true + return true + + goto st408 + tr86: +//line matcher.rl:84 + + agg.find(agg.current).assumeCM++ + return true + + goto st408 + tr125: +//line matcher.rl:79 + + agg.find(pop()).unknown = true + return true + + goto st408 + tr179: +//line matcher.rl:49 + + agg.current = current() + return true + + goto st408 + tr221: +//line matcher.rl:73 + + v, _ = strconv.Atoi(pop()) + agg.find(agg.current).badValues += v + return true + + goto st408 + tr279: +//line matcher.rl:107 + + agg.hold = l + return true + + goto st408 + tr326: +//line matcher.rl:54 + + g = agg.find(current()) + v, _ = strconv.Atoi(pop()) + g.measurements += v + return true + + goto st408 + tr361: +//line matcher.rl:61 + + g = agg.find(current()) + v, _ = strconv.Atoi(pop()) + g.predictions += v + return true + + goto st408 + tr389: +//line matcher.rl:95 + + g = agg.find(agg.current) + g.missingValues = extend(g.missingValues, pop()) + return true + + goto st408 + tr418: +//line matcher.rl:101 + + g = agg.find(agg.current) + g.rescaleErrors = extend(g.rescaleErrors, pop()) + return true + + goto st408 + st408: + if p++; p == pe { + goto _test_eof408 + } + st_case_408: +//line matcher.go:1406 + goto st0 + st47: + if p++; p == pe { + goto _test_eof47 + } + st_case_47: + if data[p] == 110 { + goto st48 + } + goto st0 + st48: + if p++; p == pe { + goto _test_eof48 + } + st_case_48: + if data[p] == 105 { + goto st49 + } + goto st0 + st49: + if p++; p == pe { + goto _test_eof49 + } + st_case_49: + if data[p] == 116 { + goto st50 + } + goto st0 + st50: + if p++; p == pe { + goto _test_eof50 + } + st_case_50: + if data[p] == 39 { + goto st51 + } + goto st0 + st51: + if p++; p == pe { + goto _test_eof51 + } + st_case_51: + if data[p] == 32 { + goto st52 + } + goto st0 + st52: + if p++; p == pe { + goto _test_eof52 + } + st_case_52: + if data[p] == 110 { + goto st53 + } + goto st0 + st53: + if p++; p == pe { + goto _test_eof53 + } + st_case_53: + if data[p] == 111 { + goto st54 + } + goto st0 + st54: + if p++; p == pe { + goto _test_eof54 + } + st_case_54: + if data[p] == 116 { + goto st55 + } + goto st0 + st55: + if p++; p == pe { + goto _test_eof55 + } + st_case_55: + if data[p] == 32 { + goto st56 + } + goto st0 + st56: + if p++; p == pe { + goto _test_eof56 + } + st_case_56: + if data[p] == 115 { + goto st57 + } + goto st0 + st57: + if p++; p == pe { + goto _test_eof57 + } + st_case_57: + if data[p] == 112 { + goto st58 + } + goto st0 + st58: + if p++; p == pe { + goto _test_eof58 + } + st_case_58: + if data[p] == 101 { + goto st59 + } + goto st0 + st59: + if p++; p == pe { + goto _test_eof59 + } + st_case_59: + if data[p] == 99 { + goto st60 + } + goto st0 + st60: + if p++; p == pe { + goto _test_eof60 + } + st_case_60: + if data[p] == 105 { + goto st61 + } + goto st0 + st61: + if p++; p == pe { + goto _test_eof61 + } + st_case_61: + if data[p] == 102 { + goto st62 + } + goto st0 + st62: + if p++; p == pe { + goto _test_eof62 + } + st_case_62: + if data[p] == 105 { + goto st63 + } + goto st0 + st63: + if p++; p == pe { + goto _test_eof63 + } + st_case_63: + if data[p] == 101 { + goto st64 + } + goto st0 + st64: + if p++; p == pe { + goto _test_eof64 + } + st_case_64: + if data[p] == 100 { + goto st65 + } + goto st0 + st65: + if p++; p == pe { + goto _test_eof65 + } + st_case_65: + if data[p] == 46 { + goto st66 + } + goto st0 + st66: + if p++; p == pe { + goto _test_eof66 + } + st_case_66: + if data[p] == 32 { + goto st67 + } + goto st0 + st67: + if p++; p == pe { + goto _test_eof67 + } + st_case_67: + if data[p] == 65 { + goto st68 + } + goto st0 + st68: + if p++; p == pe { + goto _test_eof68 + } + st_case_68: + if data[p] == 115 { + goto st69 + } + goto st0 + st69: + if p++; p == pe { + goto _test_eof69 + } + st_case_69: + if data[p] == 115 { + goto st70 + } + goto st0 + st70: + if p++; p == pe { + goto _test_eof70 + } + st_case_70: + if data[p] == 117 { + goto st71 + } + goto st0 + st71: + if p++; p == pe { + goto _test_eof71 + } + st_case_71: + if data[p] == 109 { + goto st72 + } + goto st0 + st72: + if p++; p == pe { + goto _test_eof72 + } + st_case_72: + if data[p] == 105 { + goto st73 + } + goto st0 + st73: + if p++; p == pe { + goto _test_eof73 + } + st_case_73: + if data[p] == 110 { + goto st74 + } + goto st0 + st74: + if p++; p == pe { + goto _test_eof74 + } + st_case_74: + if data[p] == 103 { + goto st75 + } + goto st0 + st75: + if p++; p == pe { + goto _test_eof75 + } + st_case_75: + if data[p] == 32 { + goto st76 + } + goto st0 + st76: + if p++; p == pe { + goto _test_eof76 + } + st_case_76: + if data[p] == 39 { + goto st77 + } + goto st0 + st77: + if p++; p == pe { + goto _test_eof77 + } + st_case_77: + if data[p] == 99 { + goto st78 + } + goto st0 + st78: + if p++; p == pe { + goto _test_eof78 + } + st_case_78: + if data[p] == 109 { + goto st79 + } + goto st0 + st79: + if p++; p == pe { + goto _test_eof79 + } + st_case_79: + if data[p] == 39 { + goto tr86 + } + goto st0 + st80: + if p++; p == pe { + goto _test_eof80 + } + st_case_80: + if data[p] == 97 { + goto st81 + } + goto st0 + st81: + if p++; p == pe { + goto _test_eof81 + } + st_case_81: + if data[p] == 110 { + goto st82 + } + goto st0 + st82: + if p++; p == pe { + goto _test_eof82 + } + st_case_82: + if data[p] == 110 { + goto st83 + } + goto st0 + st83: + if p++; p == pe { + goto _test_eof83 + } + st_case_83: + if data[p] == 111 { + goto st84 + } + goto st0 + st84: + if p++; p == pe { + goto _test_eof84 + } + st_case_84: + if data[p] == 116 { + goto st85 + } + goto st0 + st85: + if p++; p == pe { + goto _test_eof85 + } + st_case_85: + if data[p] == 32 { + goto st86 + } + goto st0 + st86: + if p++; p == pe { + goto _test_eof86 + } + st_case_86: + if data[p] == 102 { + goto st87 + } + goto st0 + st87: + if p++; p == pe { + goto _test_eof87 + } + st_case_87: + if data[p] == 105 { + goto st88 + } + goto st0 + st88: + if p++; p == pe { + goto _test_eof88 + } + st_case_88: + if data[p] == 110 { + goto st89 + } + goto st0 + st89: + if p++; p == pe { + goto _test_eof89 + } + st_case_89: + if data[p] == 100 { + goto st90 + } + goto st0 + st90: + if p++; p == pe { + goto _test_eof90 + } + st_case_90: + if data[p] == 32 { + goto st91 + } + goto st0 + st91: + if p++; p == pe { + goto _test_eof91 + } + st_case_91: + if data[p] == 103 { + goto st92 + } + goto st0 + st92: + if p++; p == pe { + goto _test_eof92 + } + st_case_92: + if data[p] == 97 { + goto st93 + } + goto st0 + st93: + if p++; p == pe { + goto _test_eof93 + } + st_case_93: + if data[p] == 117 { + goto st94 + } + goto st0 + st94: + if p++; p == pe { + goto _test_eof94 + } + st_case_94: + if data[p] == 103 { + goto st95 + } + goto st0 + st95: + if p++; p == pe { + goto _test_eof95 + } + st_case_95: + if data[p] == 101 { + goto st96 + } + goto st0 + st96: + if p++; p == pe { + goto _test_eof96 + } + st_case_96: + if data[p] == 32 { + goto st97 + } + goto st0 + st97: + if p++; p == pe { + goto _test_eof97 + } + st_case_97: + if data[p] == 34 { + goto tr104 + } + goto st0 + tr104: +//line matcher.rl:45 + pos = p + goto st98 + st98: + if p++; p == pe { + goto _test_eof98 + } + st_case_98: +//line matcher.go:1876 + goto st99 + st99: + if p++; p == pe { + goto _test_eof99 + } + st_case_99: + goto st100 + st100: + if p++; p == pe { + goto _test_eof100 + } + st_case_100: + goto st101 + st101: + if p++; p == pe { + goto _test_eof101 + } + st_case_101: + goto st102 + st102: + if p++; p == pe { + goto _test_eof102 + } + st_case_102: + goto st103 + st103: + if p++; p == pe { + goto _test_eof103 + } + st_case_103: + goto st104 + st104: + if p++; p == pe { + goto _test_eof104 + } + st_case_104: + goto st105 + st105: + if p++; p == pe { + goto _test_eof105 + } + st_case_105: + goto st106 + st106: + if p++; p == pe { + goto _test_eof106 + } + st_case_106: + goto st107 + st107: + if p++; p == pe { + goto _test_eof107 + } + st_case_107: + goto st108 + st108: + if p++; p == pe { + goto _test_eof108 + } + st_case_108: + goto st109 + st109: + if p++; p == pe { + goto _test_eof109 + } + st_case_109: + goto st110 + st110: + if p++; p == pe { + goto _test_eof110 + } + st_case_110: + goto st111 + st111: + if p++; p == pe { + goto _test_eof111 + } + st_case_111: + goto st112 + st112: + if p++; p == pe { + goto _test_eof112 + } + st_case_112: + goto st113 + st113: + if p++; p == pe { + goto _test_eof113 + } + st_case_113: + goto st114 + st114: + if p++; p == pe { + goto _test_eof114 + } + st_case_114: + goto st115 + st115: + if p++; p == pe { + goto _test_eof115 + } + st_case_115: + goto st116 + st116: + if p++; p == pe { + goto _test_eof116 + } + st_case_116: + goto st117 + st117: + if p++; p == pe { + goto _test_eof117 + } + st_case_117: + goto tr124 + tr124: +//line matcher.rl:47 + stack = append(stack, current()) + goto st118 + st118: + if p++; p == pe { + goto _test_eof118 + } + st_case_118: +//line matcher.go:2001 + if data[p] == 34 { + goto tr125 + } + goto st0 + st119: + if p++; p == pe { + goto _test_eof119 + } + st_case_119: + if data[p] == 111 { + goto st120 + } + goto st0 + st120: + if p++; p == pe { + goto _test_eof120 + } + st_case_120: + if data[p] == 117 { + goto st121 + } + goto st0 + st121: + if p++; p == pe { + goto _test_eof121 + } + st_case_121: + if data[p] == 110 { + goto st122 + } + goto st0 + st122: + if p++; p == pe { + goto _test_eof122 + } + st_case_122: + if data[p] == 100 { + goto st123 + } + goto st0 + st123: + if p++; p == pe { + goto _test_eof123 + } + st_case_123: + if data[p] == 32 { + goto st124 + } + goto st0 + st124: + if p++; p == pe { + goto _test_eof124 + } + st_case_124: + if data[p] == 109 { + goto st125 + } + goto st0 + st125: + if p++; p == pe { + goto _test_eof125 + } + st_case_125: + if data[p] == 101 { + goto st126 + } + goto st0 + st126: + if p++; p == pe { + goto _test_eof126 + } + st_case_126: + if data[p] == 97 { + goto st127 + } + goto st0 + st127: + if p++; p == pe { + goto _test_eof127 + } + st_case_127: + if data[p] == 115 { + goto st128 + } + goto st0 + st128: + if p++; p == pe { + goto _test_eof128 + } + st_case_128: + if data[p] == 117 { + goto st129 + } + goto st0 + st129: + if p++; p == pe { + goto _test_eof129 + } + st_case_129: + if data[p] == 114 { + goto st130 + } + goto st0 + st130: + if p++; p == pe { + goto _test_eof130 + } + st_case_130: + if data[p] == 101 { + goto st131 + } + goto st0 + st131: + if p++; p == pe { + goto _test_eof131 + } + st_case_131: + if data[p] == 109 { + goto st132 + } + goto st0 + st132: + if p++; p == pe { + goto _test_eof132 + } + st_case_132: + if data[p] == 101 { + goto st133 + } + goto st0 + st133: + if p++; p == pe { + goto _test_eof133 + } + st_case_133: + if data[p] == 110 { + goto st134 + } + goto st0 + st134: + if p++; p == pe { + goto _test_eof134 + } + st_case_134: + if data[p] == 116 { + goto st135 + } + goto st0 + st135: + if p++; p == pe { + goto _test_eof135 + } + st_case_135: + if data[p] == 115 { + goto st136 + } + goto st0 + st136: + if p++; p == pe { + goto _test_eof136 + } + st_case_136: + if data[p] == 47 { + goto st137 + } + goto st0 + st137: + if p++; p == pe { + goto _test_eof137 + } + st_case_137: + if data[p] == 112 { + goto st138 + } + goto st0 + st138: + if p++; p == pe { + goto _test_eof138 + } + st_case_138: + if data[p] == 114 { + goto st139 + } + goto st0 + st139: + if p++; p == pe { + goto _test_eof139 + } + st_case_139: + if data[p] == 101 { + goto st140 + } + goto st0 + st140: + if p++; p == pe { + goto _test_eof140 + } + st_case_140: + if data[p] == 100 { + goto st141 + } + goto st0 + st141: + if p++; p == pe { + goto _test_eof141 + } + st_case_141: + if data[p] == 105 { + goto st142 + } + goto st0 + st142: + if p++; p == pe { + goto _test_eof142 + } + st_case_142: + if data[p] == 99 { + goto st143 + } + goto st0 + st143: + if p++; p == pe { + goto _test_eof143 + } + st_case_143: + if data[p] == 116 { + goto st144 + } + goto st0 + st144: + if p++; p == pe { + goto _test_eof144 + } + st_case_144: + if data[p] == 105 { + goto st145 + } + goto st0 + st145: + if p++; p == pe { + goto _test_eof145 + } + st_case_145: + if data[p] == 111 { + goto st146 + } + goto st0 + st146: + if p++; p == pe { + goto _test_eof146 + } + st_case_146: + if data[p] == 110 { + goto st147 + } + goto st0 + st147: + if p++; p == pe { + goto _test_eof147 + } + st_case_147: + if data[p] == 115 { + goto st148 + } + goto st0 + st148: + if p++; p == pe { + goto _test_eof148 + } + st_case_148: + if data[p] == 32 { + goto st149 + } + goto st0 + st149: + if p++; p == pe { + goto _test_eof149 + } + st_case_149: + if data[p] == 102 { + goto st150 + } + goto st0 + st150: + if p++; p == pe { + goto _test_eof150 + } + st_case_150: + if data[p] == 111 { + goto st151 + } + goto st0 + st151: + if p++; p == pe { + goto _test_eof151 + } + st_case_151: + if data[p] == 114 { + goto st152 + } + goto st0 + st152: + if p++; p == pe { + goto _test_eof152 + } + st_case_152: + if data[p] == 32 { + goto tr159 + } + goto st0 + tr159: +//line matcher.rl:45 + pos = p + goto st153 + st153: + if p++; p == pe { + goto _test_eof153 + } + st_case_153: +//line matcher.go:2321 + goto st154 + st154: + if p++; p == pe { + goto _test_eof154 + } + st_case_154: + goto st155 + st155: + if p++; p == pe { + goto _test_eof155 + } + st_case_155: + goto st156 + st156: + if p++; p == pe { + goto _test_eof156 + } + st_case_156: + goto st157 + st157: + if p++; p == pe { + goto _test_eof157 + } + st_case_157: + goto st158 + st158: + if p++; p == pe { + goto _test_eof158 + } + st_case_158: + goto st159 + st159: + if p++; p == pe { + goto _test_eof159 + } + st_case_159: + goto st160 + st160: + if p++; p == pe { + goto _test_eof160 + } + st_case_160: + goto st161 + st161: + if p++; p == pe { + goto _test_eof161 + } + st_case_161: + goto st162 + st162: + if p++; p == pe { + goto _test_eof162 + } + st_case_162: + goto st163 + st163: + if p++; p == pe { + goto _test_eof163 + } + st_case_163: + goto st164 + st164: + if p++; p == pe { + goto _test_eof164 + } + st_case_164: + goto st165 + st165: + if p++; p == pe { + goto _test_eof165 + } + st_case_165: + goto st166 + st166: + if p++; p == pe { + goto _test_eof166 + } + st_case_166: + goto st167 + st167: + if p++; p == pe { + goto _test_eof167 + } + st_case_167: + goto st168 + st168: + if p++; p == pe { + goto _test_eof168 + } + st_case_168: + goto st169 + st169: + if p++; p == pe { + goto _test_eof169 + } + st_case_169: + goto st170 + st170: + if p++; p == pe { + goto _test_eof170 + } + st_case_170: + goto st171 + st171: + if p++; p == pe { + goto _test_eof171 + } + st_case_171: + goto st172 + st172: + if p++; p == pe { + goto _test_eof172 + } + st_case_172: + goto tr179 + st173: + if p++; p == pe { + goto _test_eof173 + } + st_case_173: + switch data[p] { + case 103: + goto st174 + case 109: + goto st238 + case 110: + goto st270 + } + goto st0 + st174: + if p++; p == pe { + goto _test_eof174 + } + st_case_174: + if data[p] == 110 { + goto st175 + } + goto st0 + st175: + if p++; p == pe { + goto _test_eof175 + } + st_case_175: + if data[p] == 111 { + goto st176 + } + goto st0 + st176: + if p++; p == pe { + goto _test_eof176 + } + st_case_176: + if data[p] == 114 { + goto st177 + } + goto st0 + st177: + if p++; p == pe { + goto _test_eof177 + } + st_case_177: + if data[p] == 101 { + goto st178 + } + goto st0 + st178: + if p++; p == pe { + goto _test_eof178 + } + st_case_178: + if data[p] == 100 { + goto st179 + } + goto st0 + st179: + if p++; p == pe { + goto _test_eof179 + } + st_case_179: + if data[p] == 32 { + goto tr188 + } + goto st0 + tr188: +//line matcher.rl:45 + pos = p + goto st180 + st180: + if p++; p == pe { + goto _test_eof180 + } + st_case_180: +//line matcher.go:2514 + if data[p] == 109 { + goto st212 + } + if 48 <= data[p] && data[p] <= 57 { + goto tr189 + } + goto st0 + tr189: +//line matcher.rl:47 + stack = append(stack, current()) + goto st181 + st181: + if p++; p == pe { + goto _test_eof181 + } + st_case_181: +//line matcher.go:2531 + if data[p] == 32 { + goto st182 + } + if 48 <= data[p] && data[p] <= 57 { + goto tr189 + } + goto st0 + st182: + if p++; p == pe { + goto _test_eof182 + } + st_case_182: + if data[p] == 109 { + goto st183 + } + goto st0 + st183: + if p++; p == pe { + goto _test_eof183 + } + st_case_183: + if data[p] == 101 { + goto st184 + } + goto st0 + st184: + if p++; p == pe { + goto _test_eof184 + } + st_case_184: + if data[p] == 97 { + goto st185 + } + goto st0 + st185: + if p++; p == pe { + goto _test_eof185 + } + st_case_185: + if data[p] == 115 { + goto st186 + } + goto st0 + st186: + if p++; p == pe { + goto _test_eof186 + } + st_case_186: + if data[p] == 117 { + goto st187 + } + goto st0 + st187: + if p++; p == pe { + goto _test_eof187 + } + st_case_187: + if data[p] == 114 { + goto st188 + } + goto st0 + st188: + if p++; p == pe { + goto _test_eof188 + } + st_case_188: + if data[p] == 101 { + goto st189 + } + goto st0 + st189: + if p++; p == pe { + goto _test_eof189 + } + st_case_189: + if data[p] == 109 { + goto st190 + } + goto st0 + st190: + if p++; p == pe { + goto _test_eof190 + } + st_case_190: + if data[p] == 101 { + goto st191 + } + goto st0 + st191: + if p++; p == pe { + goto _test_eof191 + } + st_case_191: + if data[p] == 110 { + goto st192 + } + goto st0 + st192: + if p++; p == pe { + goto _test_eof192 + } + st_case_192: + if data[p] == 116 { + goto st193 + } + goto st0 + st193: + if p++; p == pe { + goto _test_eof193 + } + st_case_193: + if data[p] == 115 { + goto st194 + } + goto st0 + st194: + if p++; p == pe { + goto _test_eof194 + } + st_case_194: + if data[p] == 32 { + goto st195 + } + goto st0 + st195: + if p++; p == pe { + goto _test_eof195 + } + st_case_195: + if data[p] == 119 { + goto st196 + } + goto st0 + st196: + if p++; p == pe { + goto _test_eof196 + } + st_case_196: + if data[p] == 105 { + goto st197 + } + goto st0 + st197: + if p++; p == pe { + goto _test_eof197 + } + st_case_197: + if data[p] == 116 { + goto st198 + } + goto st0 + st198: + if p++; p == pe { + goto _test_eof198 + } + st_case_198: + if data[p] == 104 { + goto st199 + } + goto st0 + st199: + if p++; p == pe { + goto _test_eof199 + } + st_case_199: + if data[p] == 32 { + goto st200 + } + goto st0 + st200: + if p++; p == pe { + goto _test_eof200 + } + st_case_200: + if data[p] == 118 { + goto st201 + } + goto st0 + st201: + if p++; p == pe { + goto _test_eof201 + } + st_case_201: + if data[p] == 97 { + goto st202 + } + goto st0 + st202: + if p++; p == pe { + goto _test_eof202 + } + st_case_202: + if data[p] == 108 { + goto st203 + } + goto st0 + st203: + if p++; p == pe { + goto _test_eof203 + } + st_case_203: + if data[p] == 117 { + goto st204 + } + goto st0 + st204: + if p++; p == pe { + goto _test_eof204 + } + st_case_204: + if data[p] == 101 { + goto st205 + } + goto st0 + st205: + if p++; p == pe { + goto _test_eof205 + } + st_case_205: + if data[p] == 32 { + goto st206 + } + goto st0 + st206: + if p++; p == pe { + goto _test_eof206 + } + st_case_206: + if data[p] == 45 { + goto st207 + } + goto st0 + st207: + if p++; p == pe { + goto _test_eof207 + } + st_case_207: + if data[p] == 57 { + goto st208 + } + goto st0 + st208: + if p++; p == pe { + goto _test_eof208 + } + st_case_208: + if data[p] == 57 { + goto st209 + } + goto st0 + st209: + if p++; p == pe { + goto _test_eof209 + } + st_case_209: + if data[p] == 57 { + goto st210 + } + goto st0 + st210: + if p++; p == pe { + goto _test_eof210 + } + st_case_210: + if data[p] == 57 { + goto st211 + } + goto st0 + st211: + if p++; p == pe { + goto _test_eof211 + } + st_case_211: + if data[p] == 57 { + goto tr221 + } + goto st0 + st212: + if p++; p == pe { + goto _test_eof212 + } + st_case_212: + if data[p] == 101 { + goto st213 + } + goto st0 + st213: + if p++; p == pe { + goto _test_eof213 + } + st_case_213: + if data[p] == 115 { + goto st214 + } + goto st0 + st214: + if p++; p == pe { + goto _test_eof214 + } + st_case_214: + if data[p] == 115 { + goto st215 + } + goto st0 + st215: + if p++; p == pe { + goto _test_eof215 + } + st_case_215: + if data[p] == 97 { + goto st216 + } + goto st0 + st216: + if p++; p == pe { + goto _test_eof216 + } + st_case_216: + if data[p] == 103 { + goto st217 + } + goto st0 + st217: + if p++; p == pe { + goto _test_eof217 + } + st_case_217: + if data[p] == 101 { + goto st218 + } + goto st0 + st218: + if p++; p == pe { + goto _test_eof218 + } + st_case_218: + if data[p] == 32 { + goto st219 + } + goto st0 + st219: + if p++; p == pe { + goto _test_eof219 + } + st_case_219: + if data[p] == 119 { + goto st220 + } + goto st0 + st220: + if p++; p == pe { + goto _test_eof220 + } + st_case_220: + if data[p] == 105 { + goto st221 + } + goto st0 + st221: + if p++; p == pe { + goto _test_eof221 + } + st_case_221: + if data[p] == 116 { + goto st222 + } + goto st0 + st222: + if p++; p == pe { + goto _test_eof222 + } + st_case_222: + if data[p] == 104 { + goto st223 + } + goto st0 + st223: + if p++; p == pe { + goto _test_eof223 + } + st_case_223: + if data[p] == 32 { + goto st224 + } + goto st0 + st224: + if p++; p == pe { + goto _test_eof224 + } + st_case_224: + if data[p] == 109 { + goto st225 + } + goto st0 + st225: + if p++; p == pe { + goto _test_eof225 + } + st_case_225: + if data[p] == 101 { + goto st226 + } + goto st0 + st226: + if p++; p == pe { + goto _test_eof226 + } + st_case_226: + if data[p] == 97 { + goto st227 + } + goto st0 + st227: + if p++; p == pe { + goto _test_eof227 + } + st_case_227: + if data[p] == 115 { + goto st228 + } + goto st0 + st228: + if p++; p == pe { + goto _test_eof228 + } + st_case_228: + if data[p] == 117 { + goto st229 + } + goto st0 + st229: + if p++; p == pe { + goto _test_eof229 + } + st_case_229: + if data[p] == 114 { + goto st230 + } + goto st0 + st230: + if p++; p == pe { + goto _test_eof230 + } + st_case_230: + if data[p] == 101 { + goto st231 + } + goto st0 + st231: + if p++; p == pe { + goto _test_eof231 + } + st_case_231: + if data[p] == 95 { + goto st232 + } + goto st0 + st232: + if p++; p == pe { + goto _test_eof232 + } + st_case_232: + if data[p] == 99 { + goto st233 + } + goto st0 + st233: + if p++; p == pe { + goto _test_eof233 + } + st_case_233: + if data[p] == 111 { + goto st234 + } + goto st0 + st234: + if p++; p == pe { + goto _test_eof234 + } + st_case_234: + if data[p] == 100 { + goto st235 + } + goto st0 + st235: + if p++; p == pe { + goto _test_eof235 + } + st_case_235: + if data[p] == 101 { + goto st236 + } + goto st0 + st236: + if p++; p == pe { + goto _test_eof236 + } + st_case_236: + if data[p] == 32 { + goto tr246 + } + goto st0 + tr246: +//line matcher.rl:45 + pos = p + goto st237 + st237: + if p++; p == pe { + goto _test_eof237 + } + st_case_237: +//line matcher.go:3043 + goto tr247 + tr247: +//line matcher.rl:89 + + g = agg.find(agg.current) + g.ignMeasCodes = extend(g.ignMeasCodes, current()) + return true + + goto st409 + st409: + if p++; p == pe { + goto _test_eof409 + } + st_case_409: +//line matcher.go:3058 + goto tr247 + st238: + if p++; p == pe { + goto _test_eof238 + } + st_case_238: + if data[p] == 112 { + goto st239 + } + goto st0 + st239: + if p++; p == pe { + goto _test_eof239 + } + st_case_239: + if data[p] == 111 { + goto st240 + } + goto st0 + st240: + if p++; p == pe { + goto _test_eof240 + } + st_case_240: + if data[p] == 114 { + goto st241 + } + goto st0 + st241: + if p++; p == pe { + goto _test_eof241 + } + st_case_241: + if data[p] == 116 { + goto st242 + } + goto st0 + st242: + if p++; p == pe { + goto _test_eof242 + } + st_case_242: + if data[p] == 105 { + goto st243 + } + goto st0 + st243: + if p++; p == pe { + goto _test_eof243 + } + st_case_243: + if data[p] == 110 { + goto st244 + } + goto st0 + st244: + if p++; p == pe { + goto _test_eof244 + } + st_case_244: + if data[p] == 103 { + goto st245 + } + goto st0 + st245: + if p++; p == pe { + goto _test_eof245 + } + st_case_245: + if data[p] == 32 { + goto st246 + } + goto st0 + st246: + if p++; p == pe { + goto _test_eof246 + } + st_case_246: + if data[p] == 103 { + goto st247 + } + goto st0 + st247: + if p++; p == pe { + goto _test_eof247 + } + st_case_247: + if data[p] == 97 { + goto st248 + } + goto st0 + st248: + if p++; p == pe { + goto _test_eof248 + } + st_case_248: + if data[p] == 117 { + goto st249 + } + goto st0 + st249: + if p++; p == pe { + goto _test_eof249 + } + st_case_249: + if data[p] == 103 { + goto st250 + } + goto st0 + st250: + if p++; p == pe { + goto _test_eof250 + } + st_case_250: + if data[p] == 101 { + goto st251 + } + goto st0 + st251: + if p++; p == pe { + goto _test_eof251 + } + st_case_251: + if data[p] == 32 { + goto st252 + } + goto st0 + st252: + if p++; p == pe { + goto _test_eof252 + } + st_case_252: + if data[p] == 109 { + goto st253 + } + goto st0 + st253: + if p++; p == pe { + goto _test_eof253 + } + st_case_253: + if data[p] == 101 { + goto st254 + } + goto st0 + st254: + if p++; p == pe { + goto _test_eof254 + } + st_case_254: + if data[p] == 97 { + goto st255 + } + goto st0 + st255: + if p++; p == pe { + goto _test_eof255 + } + st_case_255: + if data[p] == 115 { + goto st256 + } + goto st0 + st256: + if p++; p == pe { + goto _test_eof256 + } + st_case_256: + if data[p] == 117 { + goto st257 + } + goto st0 + st257: + if p++; p == pe { + goto _test_eof257 + } + st_case_257: + if data[p] == 114 { + goto st258 + } + goto st0 + st258: + if p++; p == pe { + goto _test_eof258 + } + st_case_258: + if data[p] == 101 { + goto st259 + } + goto st0 + st259: + if p++; p == pe { + goto _test_eof259 + } + st_case_259: + if data[p] == 109 { + goto st260 + } + goto st0 + st260: + if p++; p == pe { + goto _test_eof260 + } + st_case_260: + if data[p] == 101 { + goto st261 + } + goto st0 + st261: + if p++; p == pe { + goto _test_eof261 + } + st_case_261: + if data[p] == 110 { + goto st262 + } + goto st0 + st262: + if p++; p == pe { + goto _test_eof262 + } + st_case_262: + if data[p] == 116 { + goto st263 + } + goto st0 + st263: + if p++; p == pe { + goto _test_eof263 + } + st_case_263: + if data[p] == 115 { + goto st264 + } + goto st0 + st264: + if p++; p == pe { + goto _test_eof264 + } + st_case_264: + if data[p] == 32 { + goto st265 + } + goto st0 + st265: + if p++; p == pe { + goto _test_eof265 + } + st_case_265: + if data[p] == 116 { + goto st266 + } + goto st0 + st266: + if p++; p == pe { + goto _test_eof266 + } + st_case_266: + if data[p] == 111 { + goto st267 + } + goto st0 + st267: + if p++; p == pe { + goto _test_eof267 + } + st_case_267: + if data[p] == 111 { + goto st268 + } + goto st0 + st268: + if p++; p == pe { + goto _test_eof268 + } + st_case_268: + if data[p] == 107 { + goto st269 + } + goto st0 + st269: + if p++; p == pe { + goto _test_eof269 + } + st_case_269: + if data[p] == 32 { + goto tr279 + } + goto st0 + st270: + if p++; p == pe { + goto _test_eof270 + } + st_case_270: + if data[p] == 115 { + goto st271 + } + goto st0 + st271: + if p++; p == pe { + goto _test_eof271 + } + st_case_271: + if data[p] == 101 { + goto st272 + } + goto st0 + st272: + if p++; p == pe { + goto _test_eof272 + } + st_case_272: + if data[p] == 114 { + goto st273 + } + goto st0 + st273: + if p++; p == pe { + goto _test_eof273 + } + st_case_273: + if data[p] == 116 { + goto st274 + } + goto st0 + st274: + if p++; p == pe { + goto _test_eof274 + } + st_case_274: + if data[p] == 101 { + goto st275 + } + goto st0 + st275: + if p++; p == pe { + goto _test_eof275 + } + st_case_275: + if data[p] == 100 { + goto st276 + } + goto st0 + st276: + if p++; p == pe { + goto _test_eof276 + } + st_case_276: + if data[p] == 32 { + goto tr286 + } + goto st0 + tr286: +//line matcher.rl:45 + pos = p + goto st277 + st277: + if p++; p == pe { + goto _test_eof277 + } + st_case_277: +//line matcher.go:3420 + if 48 <= data[p] && data[p] <= 57 { + goto tr287 + } + goto st0 + tr287: +//line matcher.rl:47 + stack = append(stack, current()) + goto st278 + st278: + if p++; p == pe { + goto _test_eof278 + } + st_case_278: +//line matcher.go:3434 + if data[p] == 32 { + goto st279 + } + if 48 <= data[p] && data[p] <= 57 { + goto tr287 + } + goto st0 + st279: + if p++; p == pe { + goto _test_eof279 + } + st_case_279: + switch data[p] { + case 109: + goto st280 + case 112: + goto st316 + } + goto st0 + st280: + if p++; p == pe { + goto _test_eof280 + } + st_case_280: + if data[p] == 101 { + goto st281 + } + goto st0 + st281: + if p++; p == pe { + goto _test_eof281 + } + st_case_281: + if data[p] == 97 { + goto st282 + } + goto st0 + st282: + if p++; p == pe { + goto _test_eof282 + } + st_case_282: + if data[p] == 115 { + goto st283 + } + goto st0 + st283: + if p++; p == pe { + goto _test_eof283 + } + st_case_283: + if data[p] == 117 { + goto st284 + } + goto st0 + st284: + if p++; p == pe { + goto _test_eof284 + } + st_case_284: + if data[p] == 114 { + goto st285 + } + goto st0 + st285: + if p++; p == pe { + goto _test_eof285 + } + st_case_285: + if data[p] == 101 { + goto st286 + } + goto st0 + st286: + if p++; p == pe { + goto _test_eof286 + } + st_case_286: + if data[p] == 109 { + goto st287 + } + goto st0 + st287: + if p++; p == pe { + goto _test_eof287 + } + st_case_287: + if data[p] == 101 { + goto st288 + } + goto st0 + st288: + if p++; p == pe { + goto _test_eof288 + } + st_case_288: + if data[p] == 110 { + goto st289 + } + goto st0 + st289: + if p++; p == pe { + goto _test_eof289 + } + st_case_289: + if data[p] == 116 { + goto st290 + } + goto st0 + st290: + if p++; p == pe { + goto _test_eof290 + } + st_case_290: + if data[p] == 115 { + goto st291 + } + goto st0 + st291: + if p++; p == pe { + goto _test_eof291 + } + st_case_291: + if data[p] == 32 { + goto st292 + } + goto st0 + st292: + if p++; p == pe { + goto _test_eof292 + } + st_case_292: + if data[p] == 102 { + goto st293 + } + goto st0 + st293: + if p++; p == pe { + goto _test_eof293 + } + st_case_293: + if data[p] == 111 { + goto st294 + } + goto st0 + st294: + if p++; p == pe { + goto _test_eof294 + } + st_case_294: + if data[p] == 114 { + goto st295 + } + goto st0 + st295: + if p++; p == pe { + goto _test_eof295 + } + st_case_295: + if data[p] == 32 { + goto tr306 + } + goto st0 + tr306: +//line matcher.rl:45 + pos = p + goto st296 + st296: + if p++; p == pe { + goto _test_eof296 + } + st_case_296: +//line matcher.go:3607 + goto st297 + st297: + if p++; p == pe { + goto _test_eof297 + } + st_case_297: + goto st298 + st298: + if p++; p == pe { + goto _test_eof298 + } + st_case_298: + goto st299 + st299: + if p++; p == pe { + goto _test_eof299 + } + st_case_299: + goto st300 + st300: + if p++; p == pe { + goto _test_eof300 + } + st_case_300: + goto st301 + st301: + if p++; p == pe { + goto _test_eof301 + } + st_case_301: + goto st302 + st302: + if p++; p == pe { + goto _test_eof302 + } + st_case_302: + goto st303 + st303: + if p++; p == pe { + goto _test_eof303 + } + st_case_303: + goto st304 + st304: + if p++; p == pe { + goto _test_eof304 + } + st_case_304: + goto st305 + st305: + if p++; p == pe { + goto _test_eof305 + } + st_case_305: + goto st306 + st306: + if p++; p == pe { + goto _test_eof306 + } + st_case_306: + goto st307 + st307: + if p++; p == pe { + goto _test_eof307 + } + st_case_307: + goto st308 + st308: + if p++; p == pe { + goto _test_eof308 + } + st_case_308: + goto st309 + st309: + if p++; p == pe { + goto _test_eof309 + } + st_case_309: + goto st310 + st310: + if p++; p == pe { + goto _test_eof310 + } + st_case_310: + goto st311 + st311: + if p++; p == pe { + goto _test_eof311 + } + st_case_311: + goto st312 + st312: + if p++; p == pe { + goto _test_eof312 + } + st_case_312: + goto st313 + st313: + if p++; p == pe { + goto _test_eof313 + } + st_case_313: + goto st314 + st314: + if p++; p == pe { + goto _test_eof314 + } + st_case_314: + goto st315 + st315: + if p++; p == pe { + goto _test_eof315 + } + st_case_315: + goto tr326 + st316: + if p++; p == pe { + goto _test_eof316 + } + st_case_316: + if data[p] == 114 { + goto st317 + } + goto st0 + st317: + if p++; p == pe { + goto _test_eof317 + } + st_case_317: + if data[p] == 101 { + goto st318 + } + goto st0 + st318: + if p++; p == pe { + goto _test_eof318 + } + st_case_318: + if data[p] == 100 { + goto st319 + } + goto st0 + st319: + if p++; p == pe { + goto _test_eof319 + } + st_case_319: + if data[p] == 105 { + goto st320 + } + goto st0 + st320: + if p++; p == pe { + goto _test_eof320 + } + st_case_320: + if data[p] == 99 { + goto st321 + } + goto st0 + st321: + if p++; p == pe { + goto _test_eof321 + } + st_case_321: + if data[p] == 116 { + goto st322 + } + goto st0 + st322: + if p++; p == pe { + goto _test_eof322 + } + st_case_322: + if data[p] == 105 { + goto st323 + } + goto st0 + st323: + if p++; p == pe { + goto _test_eof323 + } + st_case_323: + if data[p] == 111 { + goto st324 + } + goto st0 + st324: + if p++; p == pe { + goto _test_eof324 + } + st_case_324: + if data[p] == 110 { + goto st325 + } + goto st0 + st325: + if p++; p == pe { + goto _test_eof325 + } + st_case_325: + if data[p] == 115 { + goto st326 + } + goto st0 + st326: + if p++; p == pe { + goto _test_eof326 + } + st_case_326: + if data[p] == 32 { + goto st327 + } + goto st0 + st327: + if p++; p == pe { + goto _test_eof327 + } + st_case_327: + if data[p] == 102 { + goto st328 + } + goto st0 + st328: + if p++; p == pe { + goto _test_eof328 + } + st_case_328: + if data[p] == 111 { + goto st329 + } + goto st0 + st329: + if p++; p == pe { + goto _test_eof329 + } + st_case_329: + if data[p] == 114 { + goto st330 + } + goto st0 + st330: + if p++; p == pe { + goto _test_eof330 + } + st_case_330: + if data[p] == 32 { + goto tr341 + } + goto st0 + tr341: +//line matcher.rl:45 + pos = p + goto st331 + st331: + if p++; p == pe { + goto _test_eof331 + } + st_case_331: +//line matcher.go:3867 + goto st332 + st332: + if p++; p == pe { + goto _test_eof332 + } + st_case_332: + goto st333 + st333: + if p++; p == pe { + goto _test_eof333 + } + st_case_333: + goto st334 + st334: + if p++; p == pe { + goto _test_eof334 + } + st_case_334: + goto st335 + st335: + if p++; p == pe { + goto _test_eof335 + } + st_case_335: + goto st336 + st336: + if p++; p == pe { + goto _test_eof336 + } + st_case_336: + goto st337 + st337: + if p++; p == pe { + goto _test_eof337 + } + st_case_337: + goto st338 + st338: + if p++; p == pe { + goto _test_eof338 + } + st_case_338: + goto st339 + st339: + if p++; p == pe { + goto _test_eof339 + } + st_case_339: + goto st340 + st340: + if p++; p == pe { + goto _test_eof340 + } + st_case_340: + goto st341 + st341: + if p++; p == pe { + goto _test_eof341 + } + st_case_341: + goto st342 + st342: + if p++; p == pe { + goto _test_eof342 + } + st_case_342: + goto st343 + st343: + if p++; p == pe { + goto _test_eof343 + } + st_case_343: + goto st344 + st344: + if p++; p == pe { + goto _test_eof344 + } + st_case_344: + goto st345 + st345: + if p++; p == pe { + goto _test_eof345 + } + st_case_345: + goto st346 + st346: + if p++; p == pe { + goto _test_eof346 + } + st_case_346: + goto st347 + st347: + if p++; p == pe { + goto _test_eof347 + } + st_case_347: + goto st348 + st348: + if p++; p == pe { + goto _test_eof348 + } + st_case_348: + goto st349 + st349: + if p++; p == pe { + goto _test_eof349 + } + st_case_349: + goto st350 + st350: + if p++; p == pe { + goto _test_eof350 + } + st_case_350: + goto tr361 + st351: + if p++; p == pe { + goto _test_eof351 + } + st_case_351: + if data[p] == 105 { + goto st352 + } + goto st0 + st352: + if p++; p == pe { + goto _test_eof352 + } + st_case_352: + if data[p] == 115 { + goto st353 + } + goto st0 + st353: + if p++; p == pe { + goto _test_eof353 + } + st_case_353: + if data[p] == 115 { + goto st354 + } + goto st0 + st354: + if p++; p == pe { + goto _test_eof354 + } + st_case_354: + if data[p] == 105 { + goto st355 + } + goto st0 + st355: + if p++; p == pe { + goto _test_eof355 + } + st_case_355: + if data[p] == 110 { + goto st356 + } + goto st0 + st356: + if p++; p == pe { + goto _test_eof356 + } + st_case_356: + if data[p] == 103 { + goto st357 + } + goto st0 + st357: + if p++; p == pe { + goto _test_eof357 + } + st_case_357: + if data[p] == 32 { + goto st358 + } + goto st0 + st358: + if p++; p == pe { + goto _test_eof358 + } + st_case_358: + if data[p] == 109 { + goto st359 + } + goto st0 + st359: + if p++; p == pe { + goto _test_eof359 + } + st_case_359: + if data[p] == 97 { + goto st360 + } + goto st0 + st360: + if p++; p == pe { + goto _test_eof360 + } + st_case_360: + if data[p] == 110 { + goto st361 + } + goto st0 + st361: + if p++; p == pe { + goto _test_eof361 + } + st_case_361: + if data[p] == 100 { + goto st362 + } + goto st0 + st362: + if p++; p == pe { + goto _test_eof362 + } + st_case_362: + if data[p] == 97 { + goto st363 + } + goto st0 + st363: + if p++; p == pe { + goto _test_eof363 + } + st_case_363: + if data[p] == 116 { + goto st364 + } + goto st0 + st364: + if p++; p == pe { + goto _test_eof364 + } + st_case_364: + if data[p] == 111 { + goto st365 + } + goto st0 + st365: + if p++; p == pe { + goto _test_eof365 + } + st_case_365: + if data[p] == 114 { + goto st366 + } + goto st0 + st366: + if p++; p == pe { + goto _test_eof366 + } + st_case_366: + if data[p] == 121 { + goto st367 + } + goto st0 + st367: + if p++; p == pe { + goto _test_eof367 + } + st_case_367: + if data[p] == 32 { + goto st368 + } + goto st0 + st368: + if p++; p == pe { + goto _test_eof368 + } + st_case_368: + if data[p] == 118 { + goto st369 + } + goto st0 + st369: + if p++; p == pe { + goto _test_eof369 + } + st_case_369: + if data[p] == 97 { + goto st370 + } + goto st0 + st370: + if p++; p == pe { + goto _test_eof370 + } + st_case_370: + if data[p] == 108 { + goto st371 + } + goto st0 + st371: + if p++; p == pe { + goto _test_eof371 + } + st_case_371: + if data[p] == 117 { + goto st372 + } + goto st0 + st372: + if p++; p == pe { + goto _test_eof372 + } + st_case_372: + if data[p] == 101 { + goto st373 + } + goto st0 + st373: + if p++; p == pe { + goto _test_eof373 + } + st_case_373: + if data[p] == 32 { + goto st374 + } + goto st0 + st374: + if p++; p == pe { + goto _test_eof374 + } + st_case_374: + if data[p] == 97 { + goto st375 + } + goto st0 + st375: + if p++; p == pe { + goto _test_eof375 + } + st_case_375: + if data[p] == 116 { + goto st376 + } + goto st0 + st376: + if p++; p == pe { + goto _test_eof376 + } + st_case_376: + if data[p] == 32 { + goto tr387 + } + goto st0 + tr387: +//line matcher.rl:45 + pos = p + goto st377 + st377: + if p++; p == pe { + goto _test_eof377 + } + st_case_377: +//line matcher.go:4226 + if data[p] == 46 { + goto st0 + } + goto tr388 + tr388: +//line matcher.rl:47 + stack = append(stack, current()) + goto st378 + st378: + if p++; p == pe { + goto _test_eof378 + } + st_case_378: +//line matcher.go:4240 + if data[p] == 46 { + goto tr389 + } + goto tr388 + st379: + if p++; p == pe { + goto _test_eof379 + } + st_case_379: + if data[p] == 114 { + goto st380 + } + goto st0 + st380: + if p++; p == pe { + goto _test_eof380 + } + st_case_380: + if data[p] == 114 { + goto st381 + } + goto st0 + st381: + if p++; p == pe { + goto _test_eof381 + } + st_case_381: + if data[p] == 111 { + goto st382 + } + goto st0 + st382: + if p++; p == pe { + goto _test_eof382 + } + st_case_382: + if data[p] == 114 { + goto st383 + } + goto st0 + st383: + if p++; p == pe { + goto _test_eof383 + } + st_case_383: + if data[p] == 32 { + goto st384 + } + goto st0 + st384: + if p++; p == pe { + goto _test_eof384 + } + st_case_384: + if data[p] == 105 { + goto st385 + } + goto st0 + st385: + if p++; p == pe { + goto _test_eof385 + } + st_case_385: + if data[p] == 110 { + goto st386 + } + goto st0 + st386: + if p++; p == pe { + goto _test_eof386 + } + st_case_386: + if data[p] == 32 { + goto st387 + } + goto st0 + st387: + if p++; p == pe { + goto _test_eof387 + } + st_case_387: + if data[p] == 105 { + goto st388 + } + goto st0 + st388: + if p++; p == pe { + goto _test_eof388 + } + st_case_388: + if data[p] == 109 { + goto st389 + } + goto st0 + st389: + if p++; p == pe { + goto _test_eof389 + } + st_case_389: + if data[p] == 112 { + goto st390 + } + goto st0 + st390: + if p++; p == pe { + goto _test_eof390 + } + st_case_390: + if data[p] == 111 { + goto st391 + } + goto st0 + st391: + if p++; p == pe { + goto _test_eof391 + } + st_case_391: + if data[p] == 114 { + goto st392 + } + goto st0 + st392: + if p++; p == pe { + goto _test_eof392 + } + st_case_392: + if data[p] == 116 { + goto st393 + } + goto st0 + st393: + if p++; p == pe { + goto _test_eof393 + } + st_case_393: + if data[p] == 58 { + goto st269 + } + goto st0 + st394: + if p++; p == pe { + goto _test_eof394 + } + st_case_394: + if data[p] == 110 { + goto st395 + } + goto st0 + st395: + if p++; p == pe { + goto _test_eof395 + } + st_case_395: + if data[p] == 107 { + goto st396 + } + goto st0 + st396: + if p++; p == pe { + goto _test_eof396 + } + st_case_396: + if data[p] == 110 { + goto st397 + } + goto st0 + st397: + if p++; p == pe { + goto _test_eof397 + } + st_case_397: + if data[p] == 111 { + goto st398 + } + goto st0 + st398: + if p++; p == pe { + goto _test_eof398 + } + st_case_398: + if data[p] == 119 { + goto st399 + } + goto st0 + st399: + if p++; p == pe { + goto _test_eof399 + } + st_case_399: + if data[p] == 110 { + goto st400 + } + goto st0 + st400: + if p++; p == pe { + goto _test_eof400 + } + st_case_400: + if data[p] == 32 { + goto st401 + } + goto st0 + st401: + if p++; p == pe { + goto _test_eof401 + } + st_case_401: + if data[p] == 117 { + goto st402 + } + goto st0 + st402: + if p++; p == pe { + goto _test_eof402 + } + st_case_402: + if data[p] == 110 { + goto st403 + } + goto st0 + st403: + if p++; p == pe { + goto _test_eof403 + } + st_case_403: + if data[p] == 105 { + goto st404 + } + goto st0 + st404: + if p++; p == pe { + goto _test_eof404 + } + st_case_404: + if data[p] == 116 { + goto st405 + } + goto st0 + st405: + if p++; p == pe { + goto _test_eof405 + } + st_case_405: + if data[p] == 32 { + goto st406 + } + goto st0 + st406: + if p++; p == pe { + goto _test_eof406 + } + st_case_406: + if data[p] == 39 { + goto tr416 + } + goto st0 + tr416: +//line matcher.rl:45 + pos = p + goto st407 + tr417: +//line matcher.rl:47 + stack = append(stack, current()) + goto st407 + st407: + if p++; p == pe { + goto _test_eof407 + } + st_case_407: +//line matcher.go:4510 + if data[p] == 39 { + goto tr418 + } + goto tr417 + st_out: + _test_eof2: + cs = 2 + goto _test_eof + _test_eof3: + cs = 3 + goto _test_eof + _test_eof4: + cs = 4 + goto _test_eof + _test_eof5: + cs = 5 + goto _test_eof + _test_eof6: + cs = 6 + goto _test_eof + _test_eof7: + cs = 7 + goto _test_eof + _test_eof8: + cs = 8 + goto _test_eof + _test_eof9: + cs = 9 + goto _test_eof + _test_eof10: + cs = 10 + goto _test_eof + _test_eof11: + cs = 11 + goto _test_eof + _test_eof12: + cs = 12 + goto _test_eof + _test_eof13: + cs = 13 + goto _test_eof + _test_eof14: + cs = 14 + goto _test_eof + _test_eof15: + cs = 15 + goto _test_eof + _test_eof16: + cs = 16 + goto _test_eof + _test_eof17: + cs = 17 + goto _test_eof + _test_eof18: + cs = 18 + goto _test_eof + _test_eof19: + cs = 19 + goto _test_eof + _test_eof20: + cs = 20 + goto _test_eof + _test_eof21: + cs = 21 + goto _test_eof + _test_eof22: + cs = 22 + goto _test_eof + _test_eof23: + cs = 23 + goto _test_eof + _test_eof24: + cs = 24 + goto _test_eof + _test_eof25: + cs = 25 + goto _test_eof + _test_eof26: + cs = 26 + goto _test_eof + _test_eof27: + cs = 27 + goto _test_eof + _test_eof28: + cs = 28 + goto _test_eof + _test_eof29: + cs = 29 + goto _test_eof + _test_eof30: + cs = 30 + goto _test_eof + _test_eof31: + cs = 31 + goto _test_eof + _test_eof32: + cs = 32 + goto _test_eof + _test_eof33: + cs = 33 + goto _test_eof + _test_eof34: + cs = 34 + goto _test_eof + _test_eof35: + cs = 35 + goto _test_eof + _test_eof36: + cs = 36 + goto _test_eof + _test_eof37: + cs = 37 + goto _test_eof + _test_eof38: + cs = 38 + goto _test_eof + _test_eof39: + cs = 39 + goto _test_eof + _test_eof40: + cs = 40 + goto _test_eof + _test_eof41: + cs = 41 + goto _test_eof + _test_eof42: + cs = 42 + goto _test_eof + _test_eof43: + cs = 43 + goto _test_eof + _test_eof44: + cs = 44 + goto _test_eof + _test_eof45: + cs = 45 + goto _test_eof + _test_eof46: + cs = 46 + goto _test_eof + _test_eof408: + cs = 408 + goto _test_eof + _test_eof47: + cs = 47 + goto _test_eof + _test_eof48: + cs = 48 + goto _test_eof + _test_eof49: + cs = 49 + goto _test_eof + _test_eof50: + cs = 50 + goto _test_eof + _test_eof51: + cs = 51 + goto _test_eof + _test_eof52: + cs = 52 + goto _test_eof + _test_eof53: + cs = 53 + goto _test_eof + _test_eof54: + cs = 54 + goto _test_eof + _test_eof55: + cs = 55 + goto _test_eof + _test_eof56: + cs = 56 + goto _test_eof + _test_eof57: + cs = 57 + goto _test_eof + _test_eof58: + cs = 58 + goto _test_eof + _test_eof59: + cs = 59 + goto _test_eof + _test_eof60: + cs = 60 + goto _test_eof + _test_eof61: + cs = 61 + goto _test_eof + _test_eof62: + cs = 62 + goto _test_eof + _test_eof63: + cs = 63 + goto _test_eof + _test_eof64: + cs = 64 + goto _test_eof + _test_eof65: + cs = 65 + goto _test_eof + _test_eof66: + cs = 66 + goto _test_eof + _test_eof67: + cs = 67 + goto _test_eof + _test_eof68: + cs = 68 + goto _test_eof + _test_eof69: + cs = 69 + goto _test_eof + _test_eof70: + cs = 70 + goto _test_eof + _test_eof71: + cs = 71 + goto _test_eof + _test_eof72: + cs = 72 + goto _test_eof + _test_eof73: + cs = 73 + goto _test_eof + _test_eof74: + cs = 74 + goto _test_eof + _test_eof75: + cs = 75 + goto _test_eof + _test_eof76: + cs = 76 + goto _test_eof + _test_eof77: + cs = 77 + goto _test_eof + _test_eof78: + cs = 78 + goto _test_eof + _test_eof79: + cs = 79 + goto _test_eof + _test_eof80: + cs = 80 + goto _test_eof + _test_eof81: + cs = 81 + goto _test_eof + _test_eof82: + cs = 82 + goto _test_eof + _test_eof83: + cs = 83 + goto _test_eof + _test_eof84: + cs = 84 + goto _test_eof + _test_eof85: + cs = 85 + goto _test_eof + _test_eof86: + cs = 86 + goto _test_eof + _test_eof87: + cs = 87 + goto _test_eof + _test_eof88: + cs = 88 + goto _test_eof + _test_eof89: + cs = 89 + goto _test_eof + _test_eof90: + cs = 90 + goto _test_eof + _test_eof91: + cs = 91 + goto _test_eof + _test_eof92: + cs = 92 + goto _test_eof + _test_eof93: + cs = 93 + goto _test_eof + _test_eof94: + cs = 94 + goto _test_eof + _test_eof95: + cs = 95 + goto _test_eof + _test_eof96: + cs = 96 + goto _test_eof + _test_eof97: + cs = 97 + goto _test_eof + _test_eof98: + cs = 98 + goto _test_eof + _test_eof99: + cs = 99 + goto _test_eof + _test_eof100: + cs = 100 + goto _test_eof + _test_eof101: + cs = 101 + goto _test_eof + _test_eof102: + cs = 102 + goto _test_eof + _test_eof103: + cs = 103 + goto _test_eof + _test_eof104: + cs = 104 + goto _test_eof + _test_eof105: + cs = 105 + goto _test_eof + _test_eof106: + cs = 106 + goto _test_eof + _test_eof107: + cs = 107 + goto _test_eof + _test_eof108: + cs = 108 + goto _test_eof + _test_eof109: + cs = 109 + goto _test_eof + _test_eof110: + cs = 110 + goto _test_eof + _test_eof111: + cs = 111 + goto _test_eof + _test_eof112: + cs = 112 + goto _test_eof + _test_eof113: + cs = 113 + goto _test_eof + _test_eof114: + cs = 114 + goto _test_eof + _test_eof115: + cs = 115 + goto _test_eof + _test_eof116: + cs = 116 + goto _test_eof + _test_eof117: + cs = 117 + goto _test_eof + _test_eof118: + cs = 118 + goto _test_eof + _test_eof119: + cs = 119 + goto _test_eof + _test_eof120: + cs = 120 + goto _test_eof + _test_eof121: + cs = 121 + goto _test_eof + _test_eof122: + cs = 122 + goto _test_eof + _test_eof123: + cs = 123 + goto _test_eof + _test_eof124: + cs = 124 + goto _test_eof + _test_eof125: + cs = 125 + goto _test_eof + _test_eof126: + cs = 126 + goto _test_eof + _test_eof127: + cs = 127 + goto _test_eof + _test_eof128: + cs = 128 + goto _test_eof + _test_eof129: + cs = 129 + goto _test_eof + _test_eof130: + cs = 130 + goto _test_eof + _test_eof131: + cs = 131 + goto _test_eof + _test_eof132: + cs = 132 + goto _test_eof + _test_eof133: + cs = 133 + goto _test_eof + _test_eof134: + cs = 134 + goto _test_eof + _test_eof135: + cs = 135 + goto _test_eof + _test_eof136: + cs = 136 + goto _test_eof + _test_eof137: + cs = 137 + goto _test_eof + _test_eof138: + cs = 138 + goto _test_eof + _test_eof139: + cs = 139 + goto _test_eof + _test_eof140: + cs = 140 + goto _test_eof + _test_eof141: + cs = 141 + goto _test_eof + _test_eof142: + cs = 142 + goto _test_eof + _test_eof143: + cs = 143 + goto _test_eof + _test_eof144: + cs = 144 + goto _test_eof + _test_eof145: + cs = 145 + goto _test_eof + _test_eof146: + cs = 146 + goto _test_eof + _test_eof147: + cs = 147 + goto _test_eof + _test_eof148: + cs = 148 + goto _test_eof + _test_eof149: + cs = 149 + goto _test_eof + _test_eof150: + cs = 150 + goto _test_eof + _test_eof151: + cs = 151 + goto _test_eof + _test_eof152: + cs = 152 + goto _test_eof + _test_eof153: + cs = 153 + goto _test_eof + _test_eof154: + cs = 154 + goto _test_eof + _test_eof155: + cs = 155 + goto _test_eof + _test_eof156: + cs = 156 + goto _test_eof + _test_eof157: + cs = 157 + goto _test_eof + _test_eof158: + cs = 158 + goto _test_eof + _test_eof159: + cs = 159 + goto _test_eof + _test_eof160: + cs = 160 + goto _test_eof + _test_eof161: + cs = 161 + goto _test_eof + _test_eof162: + cs = 162 + goto _test_eof + _test_eof163: + cs = 163 + goto _test_eof + _test_eof164: + cs = 164 + goto _test_eof + _test_eof165: + cs = 165 + goto _test_eof + _test_eof166: + cs = 166 + goto _test_eof + _test_eof167: + cs = 167 + goto _test_eof + _test_eof168: + cs = 168 + goto _test_eof + _test_eof169: + cs = 169 + goto _test_eof + _test_eof170: + cs = 170 + goto _test_eof + _test_eof171: + cs = 171 + goto _test_eof + _test_eof172: + cs = 172 + goto _test_eof + _test_eof173: + cs = 173 + goto _test_eof + _test_eof174: + cs = 174 + goto _test_eof + _test_eof175: + cs = 175 + goto _test_eof + _test_eof176: + cs = 176 + goto _test_eof + _test_eof177: + cs = 177 + goto _test_eof + _test_eof178: + cs = 178 + goto _test_eof + _test_eof179: + cs = 179 + goto _test_eof + _test_eof180: + cs = 180 + goto _test_eof + _test_eof181: + cs = 181 + goto _test_eof + _test_eof182: + cs = 182 + goto _test_eof + _test_eof183: + cs = 183 + goto _test_eof + _test_eof184: + cs = 184 + goto _test_eof + _test_eof185: + cs = 185 + goto _test_eof + _test_eof186: + cs = 186 + goto _test_eof + _test_eof187: + cs = 187 + goto _test_eof + _test_eof188: + cs = 188 + goto _test_eof + _test_eof189: + cs = 189 + goto _test_eof + _test_eof190: + cs = 190 + goto _test_eof + _test_eof191: + cs = 191 + goto _test_eof + _test_eof192: + cs = 192 + goto _test_eof + _test_eof193: + cs = 193 + goto _test_eof + _test_eof194: + cs = 194 + goto _test_eof + _test_eof195: + cs = 195 + goto _test_eof + _test_eof196: + cs = 196 + goto _test_eof + _test_eof197: + cs = 197 + goto _test_eof + _test_eof198: + cs = 198 + goto _test_eof + _test_eof199: + cs = 199 + goto _test_eof + _test_eof200: + cs = 200 + goto _test_eof + _test_eof201: + cs = 201 + goto _test_eof + _test_eof202: + cs = 202 + goto _test_eof + _test_eof203: + cs = 203 + goto _test_eof + _test_eof204: + cs = 204 + goto _test_eof + _test_eof205: + cs = 205 + goto _test_eof + _test_eof206: + cs = 206 + goto _test_eof + _test_eof207: + cs = 207 + goto _test_eof + _test_eof208: + cs = 208 + goto _test_eof + _test_eof209: + cs = 209 + goto _test_eof + _test_eof210: + cs = 210 + goto _test_eof + _test_eof211: + cs = 211 + goto _test_eof + _test_eof212: + cs = 212 + goto _test_eof + _test_eof213: + cs = 213 + goto _test_eof + _test_eof214: + cs = 214 + goto _test_eof + _test_eof215: + cs = 215 + goto _test_eof + _test_eof216: + cs = 216 + goto _test_eof + _test_eof217: + cs = 217 + goto _test_eof + _test_eof218: + cs = 218 + goto _test_eof + _test_eof219: + cs = 219 + goto _test_eof + _test_eof220: + cs = 220 + goto _test_eof + _test_eof221: + cs = 221 + goto _test_eof + _test_eof222: + cs = 222 + goto _test_eof + _test_eof223: + cs = 223 + goto _test_eof + _test_eof224: + cs = 224 + goto _test_eof + _test_eof225: + cs = 225 + goto _test_eof + _test_eof226: + cs = 226 + goto _test_eof + _test_eof227: + cs = 227 + goto _test_eof + _test_eof228: + cs = 228 + goto _test_eof + _test_eof229: + cs = 229 + goto _test_eof + _test_eof230: + cs = 230 + goto _test_eof + _test_eof231: + cs = 231 + goto _test_eof + _test_eof232: + cs = 232 + goto _test_eof + _test_eof233: + cs = 233 + goto _test_eof + _test_eof234: + cs = 234 + goto _test_eof + _test_eof235: + cs = 235 + goto _test_eof + _test_eof236: + cs = 236 + goto _test_eof + _test_eof237: + cs = 237 + goto _test_eof + _test_eof409: + cs = 409 + goto _test_eof + _test_eof238: + cs = 238 + goto _test_eof + _test_eof239: + cs = 239 + goto _test_eof + _test_eof240: + cs = 240 + goto _test_eof + _test_eof241: + cs = 241 + goto _test_eof + _test_eof242: + cs = 242 + goto _test_eof + _test_eof243: + cs = 243 + goto _test_eof + _test_eof244: + cs = 244 + goto _test_eof + _test_eof245: + cs = 245 + goto _test_eof + _test_eof246: + cs = 246 + goto _test_eof + _test_eof247: + cs = 247 + goto _test_eof + _test_eof248: + cs = 248 + goto _test_eof + _test_eof249: + cs = 249 + goto _test_eof + _test_eof250: + cs = 250 + goto _test_eof + _test_eof251: + cs = 251 + goto _test_eof + _test_eof252: + cs = 252 + goto _test_eof + _test_eof253: + cs = 253 + goto _test_eof + _test_eof254: + cs = 254 + goto _test_eof + _test_eof255: + cs = 255 + goto _test_eof + _test_eof256: + cs = 256 + goto _test_eof + _test_eof257: + cs = 257 + goto _test_eof + _test_eof258: + cs = 258 + goto _test_eof + _test_eof259: + cs = 259 + goto _test_eof + _test_eof260: + cs = 260 + goto _test_eof + _test_eof261: + cs = 261 + goto _test_eof + _test_eof262: + cs = 262 + goto _test_eof + _test_eof263: + cs = 263 + goto _test_eof + _test_eof264: + cs = 264 + goto _test_eof + _test_eof265: + cs = 265 + goto _test_eof + _test_eof266: + cs = 266 + goto _test_eof + _test_eof267: + cs = 267 + goto _test_eof + _test_eof268: + cs = 268 + goto _test_eof + _test_eof269: + cs = 269 + goto _test_eof + _test_eof270: + cs = 270 + goto _test_eof + _test_eof271: + cs = 271 + goto _test_eof + _test_eof272: + cs = 272 + goto _test_eof + _test_eof273: + cs = 273 + goto _test_eof + _test_eof274: + cs = 274 + goto _test_eof + _test_eof275: + cs = 275 + goto _test_eof + _test_eof276: + cs = 276 + goto _test_eof + _test_eof277: + cs = 277 + goto _test_eof + _test_eof278: + cs = 278 + goto _test_eof + _test_eof279: + cs = 279 + goto _test_eof + _test_eof280: + cs = 280 + goto _test_eof + _test_eof281: + cs = 281 + goto _test_eof + _test_eof282: + cs = 282 + goto _test_eof + _test_eof283: + cs = 283 + goto _test_eof + _test_eof284: + cs = 284 + goto _test_eof + _test_eof285: + cs = 285 + goto _test_eof + _test_eof286: + cs = 286 + goto _test_eof + _test_eof287: + cs = 287 + goto _test_eof + _test_eof288: + cs = 288 + goto _test_eof + _test_eof289: + cs = 289 + goto _test_eof + _test_eof290: + cs = 290 + goto _test_eof + _test_eof291: + cs = 291 + goto _test_eof + _test_eof292: + cs = 292 + goto _test_eof + _test_eof293: + cs = 293 + goto _test_eof + _test_eof294: + cs = 294 + goto _test_eof + _test_eof295: + cs = 295 + goto _test_eof + _test_eof296: + cs = 296 + goto _test_eof + _test_eof297: + cs = 297 + goto _test_eof + _test_eof298: + cs = 298 + goto _test_eof + _test_eof299: + cs = 299 + goto _test_eof + _test_eof300: + cs = 300 + goto _test_eof + _test_eof301: + cs = 301 + goto _test_eof + _test_eof302: + cs = 302 + goto _test_eof + _test_eof303: + cs = 303 + goto _test_eof + _test_eof304: + cs = 304 + goto _test_eof + _test_eof305: + cs = 305 + goto _test_eof + _test_eof306: + cs = 306 + goto _test_eof + _test_eof307: + cs = 307 + goto _test_eof + _test_eof308: + cs = 308 + goto _test_eof + _test_eof309: + cs = 309 + goto _test_eof + _test_eof310: + cs = 310 + goto _test_eof + _test_eof311: + cs = 311 + goto _test_eof + _test_eof312: + cs = 312 + goto _test_eof + _test_eof313: + cs = 313 + goto _test_eof + _test_eof314: + cs = 314 + goto _test_eof + _test_eof315: + cs = 315 + goto _test_eof + _test_eof316: + cs = 316 + goto _test_eof + _test_eof317: + cs = 317 + goto _test_eof + _test_eof318: + cs = 318 + goto _test_eof + _test_eof319: + cs = 319 + goto _test_eof + _test_eof320: + cs = 320 + goto _test_eof + _test_eof321: + cs = 321 + goto _test_eof + _test_eof322: + cs = 322 + goto _test_eof + _test_eof323: + cs = 323 + goto _test_eof + _test_eof324: + cs = 324 + goto _test_eof + _test_eof325: + cs = 325 + goto _test_eof + _test_eof326: + cs = 326 + goto _test_eof + _test_eof327: + cs = 327 + goto _test_eof + _test_eof328: + cs = 328 + goto _test_eof + _test_eof329: + cs = 329 + goto _test_eof + _test_eof330: + cs = 330 + goto _test_eof + _test_eof331: + cs = 331 + goto _test_eof + _test_eof332: + cs = 332 + goto _test_eof + _test_eof333: + cs = 333 + goto _test_eof + _test_eof334: + cs = 334 + goto _test_eof + _test_eof335: + cs = 335 + goto _test_eof + _test_eof336: + cs = 336 + goto _test_eof + _test_eof337: + cs = 337 + goto _test_eof + _test_eof338: + cs = 338 + goto _test_eof + _test_eof339: + cs = 339 + goto _test_eof + _test_eof340: + cs = 340 + goto _test_eof + _test_eof341: + cs = 341 + goto _test_eof + _test_eof342: + cs = 342 + goto _test_eof + _test_eof343: + cs = 343 + goto _test_eof + _test_eof344: + cs = 344 + goto _test_eof + _test_eof345: + cs = 345 + goto _test_eof + _test_eof346: + cs = 346 + goto _test_eof + _test_eof347: + cs = 347 + goto _test_eof + _test_eof348: + cs = 348 + goto _test_eof + _test_eof349: + cs = 349 + goto _test_eof + _test_eof350: + cs = 350 + goto _test_eof + _test_eof351: + cs = 351 + goto _test_eof + _test_eof352: + cs = 352 + goto _test_eof + _test_eof353: + cs = 353 + goto _test_eof + _test_eof354: + cs = 354 + goto _test_eof + _test_eof355: + cs = 355 + goto _test_eof + _test_eof356: + cs = 356 + goto _test_eof + _test_eof357: + cs = 357 + goto _test_eof + _test_eof358: + cs = 358 + goto _test_eof + _test_eof359: + cs = 359 + goto _test_eof + _test_eof360: + cs = 360 + goto _test_eof + _test_eof361: + cs = 361 + goto _test_eof + _test_eof362: + cs = 362 + goto _test_eof + _test_eof363: + cs = 363 + goto _test_eof + _test_eof364: + cs = 364 + goto _test_eof + _test_eof365: + cs = 365 + goto _test_eof + _test_eof366: + cs = 366 + goto _test_eof + _test_eof367: + cs = 367 + goto _test_eof + _test_eof368: + cs = 368 + goto _test_eof + _test_eof369: + cs = 369 + goto _test_eof + _test_eof370: + cs = 370 + goto _test_eof + _test_eof371: + cs = 371 + goto _test_eof + _test_eof372: + cs = 372 + goto _test_eof + _test_eof373: + cs = 373 + goto _test_eof + _test_eof374: + cs = 374 + goto _test_eof + _test_eof375: + cs = 375 + goto _test_eof + _test_eof376: + cs = 376 + goto _test_eof + _test_eof377: + cs = 377 + goto _test_eof + _test_eof378: + cs = 378 + goto _test_eof + _test_eof379: + cs = 379 + goto _test_eof + _test_eof380: + cs = 380 + goto _test_eof + _test_eof381: + cs = 381 + goto _test_eof + _test_eof382: + cs = 382 + goto _test_eof + _test_eof383: + cs = 383 + goto _test_eof + _test_eof384: + cs = 384 + goto _test_eof + _test_eof385: + cs = 385 + goto _test_eof + _test_eof386: + cs = 386 + goto _test_eof + _test_eof387: + cs = 387 + goto _test_eof + _test_eof388: + cs = 388 + goto _test_eof + _test_eof389: + cs = 389 + goto _test_eof + _test_eof390: + cs = 390 + goto _test_eof + _test_eof391: + cs = 391 + goto _test_eof + _test_eof392: + cs = 392 + goto _test_eof + _test_eof393: + cs = 393 + goto _test_eof + _test_eof394: + cs = 394 + goto _test_eof + _test_eof395: + cs = 395 + goto _test_eof + _test_eof396: + cs = 396 + goto _test_eof + _test_eof397: + cs = 397 + goto _test_eof + _test_eof398: + cs = 398 + goto _test_eof + _test_eof399: + cs = 399 + goto _test_eof + _test_eof400: + cs = 400 + goto _test_eof + _test_eof401: + cs = 401 + goto _test_eof + _test_eof402: + cs = 402 + goto _test_eof + _test_eof403: + cs = 403 + goto _test_eof + _test_eof404: + cs = 404 + goto _test_eof + _test_eof405: + cs = 405 + goto _test_eof + _test_eof406: + cs = 406 + goto _test_eof + _test_eof407: + cs = 407 + goto _test_eof + + _test_eof: + { + } + _out: + { + } + } + +//line matcher.rl:142 + + return false +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/gmaggregate/matcher.rl Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,144 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSE +// +// Copyright (C) 2021 by via donau +// - Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> +package main + +import "strconv" + +%%{ + machine expression; + write data; +}%% + +func (agg *aggregator) match(data string, l *line) bool { + + // data := []rune(line) + + var cs int + + p, pe := 0, len(data) + + stack := agg.stack[:0] + var pos int + + var g *gauge + var v int + + current := func() string { return string(data[pos+1:p+1]) } + + pop := func() string { + s := stack[len(stack)-1] + stack = stack[:len(stack)-1] + return s + } + +%%{ + action mark { pos = p } + + action push { stack = append(stack, current()) } + + action foundMeasure { + agg.current = current() + return true + } + + action insertedMeas { + g = agg.find(current()) + v, _ = strconv.Atoi(pop()) + g.measurements += v + return true + } + + action insertedPreds { + g = agg.find(current()) + v , _ = strconv.Atoi(pop()) + g.predictions += v + return true + } + + action referenceCodeNotSpecified { + agg.find(agg.current).assumeZPG = true + return true + } + + action ignoredMeassurements { + v, _ = strconv.Atoi(pop()) + agg.find(agg.current).badValues += v + return true + } + + action cannotFindGauge { + agg.find(pop()).unknown = true + return true + } + + action unitNotSpecified { + agg.find(agg.current).assumeCM++ + return true + } + + action ignoredMessage { + g = agg.find(agg.current) + g.ignMeasCodes = extend(g.ignMeasCodes, current()) + return true + } + + action missingMandatoryValue { + g = agg.find(agg.current) + g.missingValues = extend(g.missingValues, pop()) + return true + } + + action unknownUnit { + g = agg.find(agg.current) + g.rescaleErrors = extend(g.rescaleErrors, pop()) + return true + } + + action holdBack { + agg.hold = l + return true + } + + expr := + 'Found measurements/predictions for ' @mark any{20} + @foundMeasure + | 'Inserted ' @mark digit+ @push ' measurements for ' @mark any{20} + @insertedMeas + | 'Inserted ' @mark digit+ @push ' predictions for ' @mark any{20} + @insertedPreds + | '\'Reference_code\' not specified. Assuming \'ZPG\'' + @referenceCodeNotSpecified + | 'Ignored ' @mark digit+ @push ' measurements with value -99999' + @ignoredMeassurements + | 'Cannot find gauge "' @mark any{20} @push '"' + @cannotFindGauge + | '\'Unit\' not specified. Assuming \'cm\'' + @unitNotSpecified + | 'Ignored message with measure_code ' @mark any+ + @ignoredMessage + | 'Missing mandatory value at ' @mark [^.]+ @push '.' + @missingMandatoryValue + | 'unknown unit \'' @mark [^']* @push '\'' + @unknownUnit + | 'Importing gauge measurements took ' + @holdBack + | 'error in import: ' + @holdBack + ; +}%% + + %% write init; + %% write exec; + + return false +}
--- a/example_conf.toml Wed Jul 21 15:14:40 2021 +0200 +++ b/example_conf.toml Tue Feb 08 10:20:26 2022 +0100 @@ -89,3 +89,8 @@ # schema-dirs = "$PATH_TO_SCHEMATA" # published-config ="$PATH/pub-config.json" # report-path = "$PATH_TO_XSLX_AND_YAML_PAIRS" + +# File to log to. Default empty -> stderr +# log-file = "" +# Level of logging. Possible values: trace, debug, info, warn, error, fatal. +# log-level = "info"
--- a/go.mod Wed Jul 21 15:14:40 2021 +0200 +++ b/go.mod Tue Feb 08 10:20:26 2022 +0100 @@ -3,39 +3,32 @@ go 1.13 require ( - github.com/360EntSecGroup-Skylar/excelize/v2 v2.4.0 - github.com/PaesslerAG/gval v1.1.0 + github.com/PaesslerAG/gval v1.1.1 github.com/cockroachdb/apd v1.1.0 // indirect github.com/fatih/structs v1.1.0 github.com/fogleman/contourmap v0.0.0-20190814184649-9f61d36c4199 - github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/gofrs/uuid v3.2.0+incompatible // indirect github.com/gorilla/mux v1.8.0 github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 // indirect github.com/jackc/pgx v3.6.2+incompatible github.com/jonas-p/go-shp v0.1.2-0.20190401125246-9fd306ae10a6 github.com/lib/pq v1.2.0 // indirect - github.com/magiconair/properties v1.8.5 // indirect github.com/mitchellh/go-homedir v1.1.0 - github.com/mitchellh/mapstructure v1.4.1 // indirect - github.com/pelletier/go-toml v1.9.1 // indirect - github.com/rs/cors v1.7.0 + github.com/rs/cors v1.8.0 github.com/sergi/go-diff v1.0.0 github.com/shopspring/decimal v0.0.0-20190905144223-a36b5d85f337 // indirect - github.com/spf13/afero v1.6.0 // indirect - github.com/spf13/cast v1.3.1 // indirect - github.com/spf13/cobra v1.1.3 - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.7.1 - github.com/tidwall/rtree v1.2.8 - go.etcd.io/bbolt v1.3.5 - golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a // indirect - golang.org/x/net v0.0.0-20210525063256-abc453219eb5 - golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea // indirect - gonum.org/v1/gonum v0.9.1 + github.com/spf13/cobra v1.2.1 + github.com/spf13/viper v1.9.0 + github.com/tidwall/rtree v1.3.1 + github.com/xuri/excelize/v2 v2.4.1 + go.etcd.io/bbolt v1.3.6 + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect + golang.org/x/net v0.0.0-20211020060615-d418f374d309 + golang.org/x/sys v0.0.0-20211020174200-9d6173849985 // indirect + golang.org/x/text v0.3.7 // indirect + gonum.org/v1/gonum v0.9.3 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df - gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/robfig/cron.v1 v1.2.0 gopkg.in/yaml.v2 v2.4.0 )
--- a/go.sum Wed Jul 21 15:14:40 2021 +0200 +++ b/go.sum Tue Feb 08 10:20:26 2022 +0100 @@ -5,108 +5,202 @@ cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -github.com/360EntSecGroup-Skylar/excelize/v2 v2.4.0 h1:X+2CWGf5W1tm2+W7Y/LLrAPLFSNlHATnqDudGoIzaxY= -github.com/360EntSecGroup-Skylar/excelize/v2 v2.4.0/go.mod h1:p9lGPoVX3HYEbFRfjgrPWaaKsHe/2u4EM9DB/qoctgU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PaesslerAG/gval v1.1.0 h1:k3RuxeZDO3eejD4cMPSt+74tUSvTnbGvLx0df4mdwFc= -github.com/PaesslerAG/gval v1.1.0/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I= +github.com/PaesslerAG/gval v1.1.1 h1:4d7pprU9876+m3rc08X33UjGip8oV1kkm8Gh5GBuTss= +github.com/PaesslerAG/gval v1.1.1/go.mod h1:Fa8gfkCmUsELXgayr8sfL/sw+VzCVoa03dcOcR/if2w= github.com/PaesslerAG/jsonpath v0.1.0 h1:gADYeifvlqK3R3i2cR5B4DGgxLXIPb3TRTH1mGi0jPI= github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fogleman/contourmap v0.0.0-20190814184649-9f61d36c4199 h1:kufr0u0RIG5ACpjFsPRbbuHa0FhMWsS3tnSFZ2hf07s= github.com/fogleman/contourmap v0.0.0-20190814184649-9f61d36c4199/go.mod h1:mqaaaP4j7nTF8T/hx5OCljA7BYWHmrH2uh+Q023OchE= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= +github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -118,8 +212,13 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= @@ -128,34 +227,40 @@ github.com/jackc/pgx v3.6.2+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= github.com/jonas-p/go-shp v0.1.2-0.20190401125246-9fd306ae10a6 h1:h5O7ee4tlSPVjdC75eSLX7jXZiHftthuHio/GtrhaSM= github.com/jonas-p/go-shp v0.1.2-0.20190401125246-9fd306ae10a6/go.mod h1:MRIhyxDQ6VVp0oYeD7yPGr5RSTNScUFKCDsI5DR7PtI= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -164,21 +269,20 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.1 h1:a6qW1EVNZWH9WGI6CsYdD8WAylkoXBS5yv0XHlh17Tc= -github.com/pelletier/go-toml v1.9.1/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -186,63 +290,51 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/richardlehane/mscfb v1.0.3 h1:rD8TBkYWkObWO0oLDFCbwMeZ4KoalxQy+QgniCj3nKI= github.com/richardlehane/mscfb v1.0.3/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= github.com/richardlehane/msoleps v1.0.1 h1:RfrALnSNXzmXLbGct/P2b4xkFz4e8Gmj/0Vj9M9xC1o= github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so= +github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shopspring/decimal v0.0.0-20190905144223-a36b5d85f337 h1:Da9XEUfFxgyDOqUfwgoTDcWzmnlOnCGi6i4iPS+8Fbw= github.com/shopspring/decimal v0.0.0-20190905144223-a36b5d85f337/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tidwall/cities v0.1.0 h1:CVNkmMf7NEC9Bvokf5GoSsArHCKRMTgLuubRTHnH0mE= @@ -251,29 +343,47 @@ github.com/tidwall/geoindex v1.4.4/go.mod h1:rvVVNEFfkJVWGUdEfU8QaoOg/9zFX0h9ofWzA60mz1I= github.com/tidwall/lotsa v1.0.2 h1:dNVBH5MErdaQ/xd9s769R31/n2dXavsQ0Yf4TMEHHw8= github.com/tidwall/lotsa v1.0.2/go.mod h1:X6NiU+4yHA3fE3Puvpnn1XMDrFZrE9JO2/w+UMuqgR8= -github.com/tidwall/rtree v1.2.8 h1:KzqIidAdzviaRM3BQoAHMym1zy2HYE2ta+UOPse9Pyo= -github.com/tidwall/rtree v1.2.8/go.mod h1:S+JSsqPTI8LfWA4xHBo5eXzie8WJLVFeppAutSegl6M= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/tidwall/rtree v1.3.1 h1:xu3vJPKJrmGce7YJcFUCoqLrp9DTUEJBnVgdPSXHgHs= +github.com/tidwall/rtree v1.3.1/go.mod h1:S+JSsqPTI8LfWA4xHBo5eXzie8WJLVFeppAutSegl6M= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/xuri/efp v0.0.0-20210322160811-ab561f5b45e3 h1:EpI0bqf/eX9SdZDwlMmahKM+CDBgNbsXMhsN28XrM8o= github.com/xuri/efp v0.0.0-20210322160811-ab561f5b45e3/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +github.com/xuri/excelize/v2 v2.4.1 h1:veeeFLAJwsNEBPBlDepzPIYS1eLyBVcXNZUW79exZ1E= +github.com/xuri/excelize/v2 v2.4.1/go.mod h1:rSu0C3papjzxQA3sdK8cU544TebhrPUoTOaGPIh0Q1A= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -282,8 +392,13 @@ golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136 h1:A1gGSx58LAGVHUUsOf7IiR0u8Xb6W51gRwfDBhkdcaw= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -302,16 +417,26 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -320,50 +445,137 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211020060615-d418f374d309 h1:A0lJIi+hcTR6aajJH4YqKWwohY4aW9RO7oRMcdv+HKI= +golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea h1:+WiDlPBBaO+h9vPNZi8uJ3k4BkKQB7Iow3aqwHVA5hI= -golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211020174200-9d6173849985 h1:LOlKVhfDyahgmqa97awczplwkjzNaELFg3zRIJ13RYo= +golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -375,19 +587,62 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.1 h1:HCWmqqNoELL0RAQeKBXWtkp04mGk8koafcB4He6+uhc= -gonum.org/v1/gonum v0.9.1/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.9.3 h1:DnoIG+QAMaF5NvxnGe/oKsgKcAc6PcUyl8q0VetfQ8s= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= @@ -397,10 +652,36 @@ google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -410,35 +691,120 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/robfig/cron.v1 v1.2.0 h1:PSJsm0uPEND0Rumxxbo7qNb7bxQUTIWDIdpPS59/tcw= gopkg.in/robfig/cron.v1 v1.2.0/go.mod h1:3I22DCB+7VAStCIqyArwi2xY9a7IioCiNjrsnCqs+HE= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
--- a/pkg/auth/opendb.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/auth/opendb.go Tue Feb 08 10:20:26 2022 +0100 @@ -104,7 +104,7 @@ ) SELECT rolname FROM pg_roles WHERE oid IN (SELECT oid FROM cte) AND rolname <> current_user -AND EXISTS (SELECT 1 FROM users.list_users WHERE username = current_user)` +AND EXISTS (SELECT 1 FROM users.list_users WHERE username = current_user AND active)` // AllOtherRoles loggs in as user with password and returns a list // of all roles the logged in user has in the system.
--- a/pkg/auth/store.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/auth/store.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,11 +16,12 @@ import ( "bytes" "errors" - "log" "time" + bolt "go.etcd.io/bbolt" + "gemma.intevation.de/gemma/pkg/config" - bolt "go.etcd.io/bbolt" + "gemma.intevation.de/gemma/pkg/log" ) // ErrNoSuchToken is returned if a given token does not @@ -130,7 +131,7 @@ return b.Delete([]byte(token)) }) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } @@ -163,7 +164,7 @@ return b.Put([]byte(token), buf.Bytes()) }) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } @@ -252,10 +253,10 @@ // If using the persistent mode the backing session database is closed. func (ss *SessionStore) Shutdown() error { if db := ss.storage; db != nil { - log.Println("info: shutdown persistent session store.") + log.Infof("shutdown persistent session store.") ss.storage = nil return db.Close() } - log.Println("info: shutdown in-memory session store.") + log.Infof("shutdown in-memory session store.") return nil }
--- a/pkg/common/attributes.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/common/attributes.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,10 +15,11 @@ package common import ( - "log" "strconv" "strings" "time" + + "gemma.intevation.de/gemma/pkg/log" ) type ( @@ -126,7 +127,7 @@ } d, err := time.Parse(DateFormat, s) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return time.Time{}, false } return d, true @@ -147,7 +148,7 @@ } t, err := time.Parse(TimeFormat, s) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return time.Time{}, false } return t, true @@ -171,7 +172,7 @@ } i, err := strconv.Atoi(s) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return 0, false } return i, true @@ -194,7 +195,7 @@ } f, err := strconv.ParseFloat(s, 64) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return 0, false } return f, true @@ -217,7 +218,7 @@ } d, err := time.ParseDuration(s) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return 0, false } return d, true
--- a/pkg/common/random.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/common/random.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,11 +17,12 @@ "bytes" "crypto/rand" "io" - "log" "math" "math/big" mrand "math/rand" "time" + + "gemma.intevation.de/gemma/pkg/log" ) // GenerateRandomKey generates a cryptographically secure random key @@ -54,7 +55,7 @@ for i := range out { v, err := rand.Int(rand.Reader, max) if err != nil { - log.Panicf("error: %v\n", err) + log.Panicf("%v\n", err) } out[i] = alphabet[v.Int64()] } @@ -63,7 +64,7 @@ return string(out) } } - log.Println("warn: Your random generator may be broken.") + log.Warnf("Your random generator may be broken.") out[0] = special[0] return string(out) } @@ -77,7 +78,7 @@ var seed int64 if seedInt, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64)); err != nil { - log.Printf("warn: Generating good random seed failed: %v\n", err) + log.Warnf("Generating good random seed failed: %v\n", err) seed = time.Now().Unix() } else { seed = seedInt.Int64()
--- a/pkg/config/config.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/config/config.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,7 +17,7 @@ import ( "crypto/sha256" "fmt" - "log" + lg "log" "sync" "time" @@ -27,6 +27,7 @@ "github.com/spf13/viper" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/log" ) // This is not part of the persistent config. @@ -125,6 +126,12 @@ // ReportPath is a path where report templates are stored. func ReportPath() string { return viper.GetString("report-path") } +// LogFile is the path to the log file. +func LogFile() string { return viper.GetString("log-file") } + +// LogLevel is the log level of the application. +func LogLevel() log.LogLevel { return log.ParseLogLevel(viper.GetString("log-level")) } + var ( proxyKeyOnce sync.Once proxyKey []byte @@ -192,7 +199,7 @@ if sessionTimeout == 0 { sessionTimeout = viper.GetDuration("session-timeout") if sessionTimeout <= 0 { - log.Println("warn: non-positive session-timeout configured.") + lg.Println("warn: non-positive session-timeout configured.") } } } @@ -296,6 +303,10 @@ str("report-path", "", "path to a report templates.") d("soap-timeout", 3*time.Minute, "Timeout till a SOAP request is canceled.") + + str("log-file", "", "path to a file to log to.") + str("log-level", log.InfoLogLevel.String(), "path to a file to log to.") + } var ( @@ -332,7 +343,7 @@ // Find home directory. home, err := homedir.Dir() if err != nil { - log.Fatalf("error: %v\n", err) + lg.Fatalf("error: %v\n", err) } // Search config in home directory with name ".cobra" (without extension). @@ -344,6 +355,6 @@ // Don't bother if not found. return } - log.Fatalf("Can't read config: %v\n", err) + lg.Fatalf("Can't read config: %v\n", err) } }
--- a/pkg/controllers/common.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/common.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,11 +15,12 @@ import ( "fmt" - "log" "strconv" "strings" "github.com/jackc/pgx/pgtype" + + "gemma.intevation.de/gemma/pkg/log" ) type ( @@ -94,7 +95,7 @@ } var ia pgtype.Int8Array if err := ia.Set(ints); err != nil { - log.Printf("warn: %v\n", err) + log.Warnf("%v\n", err) return nil } return &ia @@ -106,7 +107,7 @@ } var ta pgtype.TextArray if err := ta.Set(s); err != nil { - log.Printf("warn: %v\n", err) + log.Warnf("%v\n", err) return nil } return &ta
--- a/pkg/controllers/cross.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/cross.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,10 +17,10 @@ "context" "database/sql" "fmt" - "log" "net/http" "time" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/mesh" "gemma.intevation.de/gemma/pkg/models" @@ -78,7 +78,7 @@ ctx, conn, csi.Properties.Bottleneck, csi.Properties.Date.Time) - log.Printf("info: loading mesh took %s\n", time.Since(start)) + log.Infof("loading mesh took %s\n", time.Since(start)) if err != nil { return } @@ -110,7 +110,7 @@ coords, err := reproject(ctx, rp, csi.Geometry.Coordinates) - log.Printf("info: transforming input coords took %s\n", time.Since(start)) + log.Infof("transforming input coords took %s\n", time.Since(start)) if err != nil { return } @@ -133,16 +133,16 @@ }) if len(line) > 0 { - log.Printf("info: line length: %d\n", len(line)) + log.Infof("line length: %d\n", len(line)) // They are all on the segment (c1.Lat, c1.Lon) - (c2.Lat, c2.Lon). // Sort them by project them on this line. joined := line.JoinOnLine(c1.Lat, c1.Lon, c2.Lat, c2.Lon) - log.Printf("info: joined length: %d\n", len(joined)) + log.Infof("joined length: %d\n", len(joined)) segments = append(segments, joined...) } } - log.Printf("info: mesh traversal took %s\n", time.Since(start)) + log.Infof("mesh traversal took %s\n", time.Since(start)) start = time.Now() @@ -153,7 +153,7 @@ conn, ) - log.Printf("info: projecting back took %s\n", time.Since(start)) + log.Infof("projecting back took %s\n", time.Since(start)) if err != nil { return }
--- a/pkg/controllers/diff.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/diff.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,13 +18,13 @@ "database/sql" "errors" "fmt" - "log" "net/http" "runtime" "time" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/mesh" "gemma.intevation.de/gemma/pkg/models" @@ -166,7 +166,7 @@ ctx, conn, dci.Bottleneck, dci.Minuend.Time) - log.Printf("info: loading minuend mesh took %s\n", time.Since(start)) + log.Infof("loading minuend mesh took %s\n", time.Since(start)) if err != nil { return 0, err } @@ -199,13 +199,13 @@ return 0, errors.New("intersection is empty") } - log.Printf("info: bbox of intersection: (%.2f, %.2f) - (%.2f, %.2f)\n", + log.Infof("bbox of intersection: (%.2f, %.2f) - (%.2f, %.2f)\n", box.X1, box.Y1, box.X2, box.Y2) start = time.Now() raster := mesh.NewRaster(box, isoCellSize) raster.Rasterize(minuendTree.Value) - log.Printf("info: rasterizing minuend took %v\n", time.Since(start)) + log.Infof("rasterizing minuend took %v\n", time.Since(start)) minuendTree = nil @@ -215,7 +215,7 @@ ctx, conn, dci.Bottleneck, dci.Subtrahend.Time) - log.Printf("info: loading subtrahend mesh took %s\n", time.Since(start)) + log.Infof("loading subtrahend mesh took %s\n", time.Since(start)) if err != nil { return 0, err } @@ -234,7 +234,7 @@ start = time.Now() raster.Diff(subtrahendTree.Value) - log.Printf("info: A - B took %v\n", time.Since(start)) + log.Infof("A - B took %v\n", time.Since(start)) subtrahendTree = nil // XXX: Maybe we should start this transaction earlier!? @@ -249,7 +249,7 @@ return 0, errors.New("scans do not have common points") } - log.Printf("info: z range: %.3f - %.3f\n", zMin, zMax) + log.Infof("z range: %.3f - %.3f\n", zMin, zMax) var heights mesh.ClassBreaks @@ -257,7 +257,7 @@ ctx, tx, "morphology_classbreaks_compare") if err != nil { - log.Printf("warn: Loading class breaks failed: %v\n", err) + log.Warnf("Loading class breaks failed: %v\n", err) err = nil heights = mesh.SampleDiffHeights(zMin, zMax, contourStep) } else { @@ -266,7 +266,7 @@ heights = common.DedupFloat64s(heights) - log.Printf("info: num heights: %d\n", len(heights)) + log.Infof("num heights: %d\n", len(heights)) var isoStmt *sql.Stmt if isoStmt, err = tx.PrepareContext(ctx, insertDiffIsoAreasQL); err != nil { @@ -308,18 +308,18 @@ } } - log.Printf("info: Transferred WKB size: %.2fMB.\n", + log.Infof("Transferred WKB size: %.2fMB.\n", float64(size)/(1024*1024)) - log.Printf("info: calculating and storing iso areas took %v\n", + log.Infof("calculating and storing iso areas took %v\n", time.Since(start)) if err = tx.Commit(); err != nil { - log.Printf("info: difference calculation failed after %v\n", + log.Infof("difference calculation failed after %v\n", time.Since(begin)) return 0, err } - log.Printf("info: difference calculation succeed after %v\n", + log.Infof("difference calculation succeed after %v\n", time.Since(begin)) return id, nil @@ -443,7 +443,7 @@ } } case <-ctx.Done(): - log.Println("request canceled") + log.Infoln("request canceled") } return
--- a/pkg/controllers/fwa.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/fwa.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,7 +18,6 @@ "database/sql" "encoding/csv" "fmt" - "log" "net/http" "sort" "strconv" @@ -28,6 +27,7 @@ "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/middleware" ) @@ -219,7 +219,7 @@ } if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "cannot extract bottlenecks", http.StatusBadRequest) return } @@ -233,37 +233,45 @@ // load validities and limiting factors for i := range bns { if err := bns[i].loadLimitingValidities(ctx, conn, from, to); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "cannot load validities", http.StatusInternalServerError) return } // load LCDs if err := bns[i].loadLDCs(ctx, conn, from, to); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "cannot load LDCs", http.StatusInternalServerError) return } // load values if err := bns[i].loadValues(ctx, conn, from, to, los); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "cannot load values", http.StatusInternalServerError) return } } // separate breaks for depth and width - var ( - breaks = parseBreaks(req.FormValue("breaks"), afdRefs) - depthBreaks = parseBreaks(req.FormValue("depthbreaks"), breaks) - widthBreaks = parseBreaks(req.FormValue("widthbreaks"), breaks) - chooseBreaks = [...][]float64{ - limitingDepth: depthBreaks, - limitingWidth: widthBreaks, - } + breaks, ok := parseBreaks(rw, req, "breaks", afdRefs) + if !ok { + return + } + depthBreaks, ok := parseBreaks(rw, req, "depthbreaks", breaks) + if !ok { + return + } + widthBreaks, ok := parseBreaks(rw, req, "widthbreaks", breaks) + if !ok { + return + } - useDepth = bns.hasLimiting(limitingDepth, from, to) - useWidth = bns.hasLimiting(limitingWidth, from, to) - ) + chooseBreaks := [...][]float64{ + limitingDepth: depthBreaks, + limitingWidth: widthBreaks, + } + + useDepth := bns.hasLimiting(limitingDepth, from, to) + useWidth := bns.hasLimiting(limitingWidth, from, to) if useDepth && useWidth && len(widthBreaks) != len(depthBreaks) { http.Error( @@ -292,7 +300,7 @@ if err := out.Write(record); err != nil { // Too late for HTTP status message. - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } @@ -384,12 +392,12 @@ } } - if min := minClass(bns[i].measurements.classify( + classes := bns[i].measurements.classify( current, next, chooseBreaks[vs.limiting], - limitingAccess[vs.limiting]), - 12*time.Hour, - ); min < lowest { + limitingAccess[vs.limiting]) + + if min := minClass(classes, 12*time.Hour); min < lowest { lowest = min } } @@ -409,7 +417,7 @@ if finish(next) { if err := write(); err != nil { // Too late for HTTP status message. - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } @@ -427,14 +435,14 @@ if totalDays > 0 { if err := write(); err != nil { // Too late for HTTP status message. - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } } for i, days := range missingLDCs { if missingLDCs[i] > 0 { - log.Printf("warn: Missing LDCs for %s on %d days.\n", + log.Warnf("warn: Missing LDCs for %s on %d days.\n", bns[i].id, days) } } @@ -442,7 +450,7 @@ out.Flush() if err := out.Error(); err != nil { // Too late for HTTP status message. - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } @@ -488,25 +496,42 @@ } } -func breaksToReferenceValue(breaks string) []float64 { +func breaksToReferenceValue(breaks string) ([]float64, error) { parts := strings.Split(breaks, ",") var values []float64 for _, part := range parts { part = strings.TrimSpace(part) - if v, err := strconv.ParseFloat(part, 64); err == nil { - values = append(values, v) + v, err := strconv.ParseFloat(part, 64) + if err != nil { + return nil, err } + values = append(values, v) } - return common.DedupFloat64s(values) + return common.DedupFloat64s(values), nil } -func parseBreaks(breaks string, defaults []float64) []float64 { - if breaks != "" { - return breaksToReferenceValue(breaks) +func parseBreaks( + rw http.ResponseWriter, req *http.Request, + parameter string, + defaults []float64, +) ([]float64, bool) { + + breaks := strings.TrimSpace(req.FormValue(parameter)) + if breaks == "" { + return defaults, true } - return defaults + + defaults, err := breaksToReferenceValue(breaks) + if err != nil { + msg := fmt.Sprintf("Parameter '%s' is invalid: %s.", parameter, err) + log.Errorf("%s\n", msg) + http.Error(rw, msg, http.StatusBadRequest) + return nil, false + } + + return defaults, true } func (tr *timeRange) intersects(from, to time.Time) bool { @@ -561,7 +586,7 @@ case "width": return limitingWidth default: - log.Printf("warn: unknown limitation '%s'. default to 'depth'\n", limiting) + log.Warnf("unknown limitation '%s'. default to 'depth'\n", limiting) return limitingDepth } }
--- a/pkg/controllers/gauges.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/gauges.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,7 +18,6 @@ "database/sql" "encoding/csv" "fmt" - "log" "math" "net/http" "sort" @@ -31,6 +30,7 @@ "gonum.org/v1/gonum/stat" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" mw "gemma.intevation.de/gemma/pkg/middleware" @@ -193,8 +193,8 @@ begin := time.Date(year, time.January, 1, 0, 0, 0, 0, time.UTC) end := time.Date(year+1, time.January, 1, 0, 0, 0, 0, time.UTC).Add(-time.Microsecond) - log.Printf("info: begin %s\n", begin) - log.Printf("info: end %s\n", end) + log.Infof("begin %s\n", begin) + log.Infof("end %s\n", end) rows, err := conn.QueryContext( ctx, @@ -235,7 +235,7 @@ var when time.Time var value float64 if err := rows.Scan(&when, &value); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } @@ -243,7 +243,7 @@ day, month := when.Day(), int(when.Month()) if day != lastDay || month != lastMonth { if err := write(); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } @@ -253,13 +253,13 @@ } if err := rows.Err(); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } if err := write(); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. } } @@ -364,9 +364,9 @@ return } - log.Printf("info: loading entries took %s\n", time.Since(start)) + log.Infof("loading entries took %s\n", time.Since(start)) - log.Printf("info: days found: %d\n", len(results)) + log.Infof("days found: %d\n", len(results)) sort.Slice(results, func(i, j int) bool { if d := results[i].month - results[j].month; d != 0 { @@ -392,7 +392,7 @@ } if err := out.Write(record); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) // Too late for an HTTP error code. return } @@ -408,7 +408,7 @@ } if err := out.Write(record); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) // Too late for an HTTP error code. return } @@ -423,7 +423,7 @@ record[5] = float64format(r.q25) record[6] = float64format(r.q75) if err := out.Write(record); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) // Too late for an HTTP error code. return } @@ -431,7 +431,7 @@ out.Flush() if err := out.Error(); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } @@ -557,10 +557,10 @@ } // for i := range values { - // log.Printf("%v %f %d\n", values[i].when, values[i].observed, len(values[i].predicted)) + // log.Debugf("%v %f %d\n", values[i].when, values[i].observed, len(values[i].predicted)) // if len(values[i].predicted) > 0 { // for j := range values[i].predicted { - // log.Printf("\t%v %f\n", values[i].predicted[j].When, values[i].predicted[j].Value) + // log.Debugf("\t%v %f\n", values[i].predicted[j].When, values[i].predicted[j].Value) // } // } // } @@ -599,7 +599,7 @@ return } - log.Printf("info: found %d value(s) for Nash Sutcliffe.\n", len(values)) + log.Infof("found %d value(s) for Nash Sutcliffe.\n", len(values)) type coeff struct { Value float64 `json:"value"` @@ -746,7 +746,7 @@ } if err := out.Write(record); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } @@ -766,7 +766,7 @@ &valueMax, &predicted, ); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) // Too late for an HTTP error code. return } @@ -777,21 +777,21 @@ record[4] = boolFormat(predicted) if err := out.Write(record); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } } if err := rows.Err(); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return } out.Flush() if err := out.Error(); err != nil { - log.Printf("error: %v", err) + log.Errorf("%v", err) // Too late for an HTTP error code. return }
--- a/pkg/controllers/geostyling.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/geostyling.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,12 +17,12 @@ "bytes" "fmt" "io" - "log" "net/http" "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/geoserver" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" ) @@ -68,15 +68,15 @@ style, err := extractStyle(req) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) return } - log.Printf("info: uploaded file length: %d\n", len(style)) + log.Infof("uploaded file length: %d\n", len(style)) if err := models.UpdateInternalStyle(req, feature, style); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return }
--- a/pkg/controllers/importqueue.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/importqueue.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,7 +19,6 @@ "encoding/csv" "encoding/json" "fmt" - "log" "net/http" "strconv" "strings" @@ -31,6 +30,7 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/imports" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" mw "gemma.intevation.de/gemma/pkg/middleware" @@ -251,7 +251,7 @@ case err == sql.ErrNoRows: return nil case err != nil: - log.Printf("warn: %v\n", err) + log.Warnf("%v\n", err) return nil } return &models.ImportTime{Time: when.UTC()} @@ -283,7 +283,7 @@ if err := out.Write(record); err != nil { // Too late for HTTP status message. - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } @@ -291,7 +291,7 @@ ctx := req.Context() var rows *sql.Rows if rows, err = conn.QueryContext(ctx, list.stmt.String(), list.args...); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } defer rows.Close() @@ -341,10 +341,10 @@ if jc := imports.FindJobCreator(imports.JobKind(kind)); jc != nil { job := jc.Create() if err := common.FromJSONString(data, job); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } else if desc, ok := job.(Description); ok { if description, err = desc.Description(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } } @@ -361,18 +361,18 @@ record[9] = strings.Replace(description, ",", "|", -1) if err := out.Write(record); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } } out.Flush() if err := out.Error(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } if err = rows.Err(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } }
--- a/pkg/controllers/manualimports.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/manualimports.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,7 +15,6 @@ package controllers import ( - "log" "net/http" "time" @@ -24,6 +23,7 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/imports" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" mw "gemma.intevation.de/gemma/pkg/middleware" @@ -33,7 +33,7 @@ kind := mux.Vars(req)["kind"] ctor := imports.ImportModelForJobKind(imports.JobKind(kind)) if ctor == nil { - log.Printf("error: Unknown job kind '%s'.\n", kind) + log.Errorf("unknown job kind '%s'.\n", kind) panic(http.ErrAbortHandler) } return ctor() @@ -94,7 +94,7 @@ return } - log.Printf("info: added import #%d to queue\n", jobID) + log.Infof("added import #%d to queue\n", jobID) result := struct { ID int64 `json:"id"`
--- a/pkg/controllers/proxy.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/proxy.go Tue Feb 08 10:20:26 2022 +0100 @@ -22,7 +22,6 @@ "encoding/xml" "io" "io/ioutil" - "log" "net/http" "net/url" "regexp" @@ -32,6 +31,7 @@ "golang.org/x/net/html/charset" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/middleware" ) @@ -53,10 +53,10 @@ return func(req *http.Request) { - //log.Printf("proxyDirector: %s\n", req.RequestURI) + //log.Debugf("proxyDirector: %s\n", req.RequestURI) abort := func(format string, args ...interface{}) { - log.Printf(format, args...) + log.Errorf(format, args...) panic(http.ErrAbortHandler) } @@ -66,7 +66,7 @@ if entry, found := vars["entry"]; found { if s, found = lookup(entry); !found { - log.Printf("warn: cannot find entry '%s'\n", entry) + log.Warnf("cannot find entry '%s'\n", entry) panic(middleware.ErrNotFound) } } else { @@ -91,7 +91,7 @@ } nURL := s + "?" + req.URL.RawQuery - //log.Printf("%v\n", nURL) + //log.Debugf("%v\n", nURL) u, err := url.Parse(nURL) if err != nil { @@ -101,7 +101,7 @@ req.Host = u.Host //req.Header.Del("If-None-Match") - //log.Printf("headers: %v\n", req.Header) + //log.Debugf("headers: %v\n", req.Header) } } @@ -117,7 +117,7 @@ ) { switch enc := h.Get("Content-Encoding"); { case strings.Contains(enc, "gzip"): - //log.Println("info: gzip compression") + //log.Debugf("gzip compression") return func(r io.Reader) (io.ReadCloser, error) { return gzip.NewReader(r) }, @@ -125,7 +125,7 @@ return gzip.NewWriter(w), nil } case strings.Contains(enc, "deflate"): - //log.Println("info: deflate compression") + //log.Debugf("deflate compression") return func(r io.Reader) (io.ReadCloser, error) { return flate.NewReader(r), nil }, @@ -133,7 +133,7 @@ return flate.NewWriter(w, flate.DefaultCompression) } default: - //log.Println("info: no content compression") + //log.Debugf("no content compression") return func(r io.Reader) (io.ReadCloser, error) { if r2, ok := r.(io.ReadCloser); ok { return r2, nil @@ -184,10 +184,10 @@ w.Close() pw.Close() force.Close() - //log.Printf("info: rewrite took %s\n", time.Since(start)) + //log.Debugf("rewrite took %s\n", time.Since(start)) }() if err := rewrite(suffix, w, r); err != nil { - log.Printf("error: rewrite failed: %v\n", err) + log.Errorf("rewrite failed: %v\n", err) return } }(resp.Body)
--- a/pkg/controllers/pwreset.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/pwreset.go Tue Feb 08 10:20:26 2022 +0100 @@ -22,7 +22,6 @@ "encoding/hex" "errors" "io" - "log" "net/http" "os/exec" "strconv" @@ -40,6 +39,7 @@ "gemma.intevation.de/gemma/pkg/misc" "gemma.intevation.de/gemma/pkg/models" + "gemma.intevation.de/gemma/pkg/log" mw "gemma.intevation.de/gemma/pkg/middleware" ) @@ -142,7 +142,7 @@ return err }) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } } @@ -159,7 +159,7 @@ } var buf bytes.Buffer if err := passwordResetRequestMailTmpl.Execute(&buf, &content); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } return buf.String() } @@ -245,7 +245,7 @@ config.WaitReady() host := config.ExternalURL() if err := backgroundRequest(host, user); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } }(mw.JSONInput(req).(*models.PWResetUser)) @@ -312,7 +312,7 @@ } if err := changedMessageBody(rw, user, password); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } @@ -326,6 +326,6 @@ return err }, ); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } }
--- a/pkg/controllers/report.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/report.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,7 +16,6 @@ import ( "database/sql" "fmt" - "log" "net/http" "os" "path/filepath" @@ -27,10 +26,11 @@ "gemma.intevation.de/gemma/pkg/middleware" "gemma.intevation.de/gemma/pkg/xlsx" + "gemma.intevation.de/gemma/pkg/log" mw "gemma.intevation.de/gemma/pkg/middleware" - "github.com/360EntSecGroup-Skylar/excelize/v2" "github.com/gorilla/mux" + "github.com/xuri/excelize/v2" ) func listReports(req *http.Request) (jr mw.JSONResult, err error) { @@ -47,7 +47,7 @@ dir, err := os.Open(path) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Listing report templates failed.", @@ -57,7 +57,7 @@ defer dir.Close() files, err := dir.Readdirnames(-1) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Listing report templates failed.", @@ -110,15 +110,15 @@ if stat, err := os.Stat(path); err != nil { if os.IsNotExist(err) { - log.Printf("error: report dir '%s' does not exists.\n", path) + log.Errorf("report dir '%s' does not exists.\n", path) http.NotFound(rw, req) } else { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "Error: "+err.Error(), http.StatusInternalServerError) } return } else if !stat.Mode().IsDir() { - log.Printf("error: report dir '%s' is not a directory.\n", path) + log.Errorf("report dir '%s' is not a directory.\n", path) http.NotFound(rw, req) return } @@ -134,7 +134,7 @@ if os.IsNotExist(err) { http.NotFound(rw, req) } else { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "Error: "+err.Error(), http.StatusInternalServerError) } return @@ -143,7 +143,7 @@ template, err := excelize.OpenFile(xlsxFilename) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "Error: "+err.Error(), http.StatusInternalServerError) return } @@ -151,7 +151,7 @@ action, err := xlsx.ActionFromFile(yamlFilename) if err != nil { http.Error(rw, "Error: "+err.Error(), http.StatusInternalServerError) - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } @@ -162,7 +162,7 @@ defer tx.Rollback() if err := action.Execute(ctx, tx, template); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "Error: "+err.Error(), http.StatusInternalServerError) return } @@ -174,6 +174,6 @@ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") if _, err := template.WriteTo(rw); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } }
--- a/pkg/controllers/routes.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/routes.go Tue Feb 08 10:20:26 2022 +0100 @@ -340,7 +340,7 @@ // Handler for reporting api.Handle("/data/reports", - waterwayAdmin(&mw.JSONHandler{ + any(&mw.JSONHandler{ Handle: listReports, NoConn: true, })).Methods(http.MethodGet)
--- a/pkg/controllers/shapestretches.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/shapestretches.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,7 +19,6 @@ "fmt" "io" "io/ioutil" - "log" "net/http" "os" "path/filepath" @@ -30,6 +29,7 @@ "github.com/jonas-p/go-shp" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/middleware" "gemma.intevation.de/gemma/pkg/wkb" ) @@ -305,7 +305,7 @@ _, err = io.Copy(out, srcFile) return err }(); err != nil { - log.Printf("error: cannot write file: %v\n", err) + log.Errorf("cannot write file: %v\n", err) return } }
--- a/pkg/controllers/srimports.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/srimports.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,7 +17,6 @@ "archive/zip" "encoding/hex" "fmt" - "log" "net/http" "os" "path/filepath" @@ -32,6 +31,7 @@ "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/config" "gemma.intevation.de/gemma/pkg/imports" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/misc" "gemma.intevation.de/gemma/pkg/models" @@ -149,14 +149,14 @@ sr := new(imports.SoundingResult) if err := fetchSoundingResultMetaOverrides(sr, req); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) return } dir, err := fetchSoundingResult(req) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } @@ -164,7 +164,7 @@ serialized, err := common.ToJSONString(sr) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } @@ -183,12 +183,12 @@ serialized) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } - log.Printf("info: added import #%d to queue\n", jobID) + log.Infof("added import #%d to queue\n", jobID) result := struct { ID int64 `json:"id"` @@ -283,11 +283,11 @@ if noXYZ { code = http.StatusBadRequest if err2 := os.RemoveAll(dir); err2 != nil { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) } } else if result.Token, err = misc.MakeTempFile(dir); err != nil { if err2 := os.RemoveAll(dir); err2 != nil { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) } return }
--- a/pkg/controllers/statsupdates.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/statsupdates.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,11 +15,12 @@ import ( "database/sql" - "log" "net/http" + "github.com/gorilla/mux" + + "gemma.intevation.de/gemma/pkg/log" mw "gemma.intevation.de/gemma/pkg/middleware" - "github.com/gorilla/mux" ) const ( @@ -34,7 +35,7 @@ rows, err2 := conn.QueryContext(ctx, listStatsUpdatesSQL) if err2 != nil { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Listing stats update failed.", @@ -48,7 +49,7 @@ for rows.Next() { var name string if err2 := rows.Scan(&name); err2 != nil { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Fetching stats update names failed.", @@ -59,7 +60,7 @@ } if err2 := rows.Err(); err2 != nil { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Fetching stats update names failed.", @@ -92,7 +93,7 @@ } return case err2 != nil: - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Loading update script failed.", @@ -101,7 +102,7 @@ } if _, err2 := conn.ExecContext(ctx, script); err2 != nil { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Loading update script failed.",
--- a/pkg/controllers/system.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/system.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,7 +19,6 @@ "database/sql" "fmt" "io/ioutil" - "log" "net/http" "regexp" "strings" @@ -33,6 +32,7 @@ "gemma.intevation.de/gemma/pkg/config" "gemma.intevation.de/gemma/pkg/geoserver" "gemma.intevation.de/gemma/pkg/imports" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" mw "gemma.intevation.de/gemma/pkg/middleware" @@ -197,7 +197,7 @@ styles := strings.Split(which, ",") doBoth := func(req *http.Request) { - log.Printf("info: Trigger re-calculation of %s.", which) + log.Infof("trigger re-calculation of %s.", which) for _, style := range styles { geoserver.ReconfigureStyle(style) } @@ -210,7 +210,7 @@ oldCVs, err := models.ParseColorValues(old.String) if err != nil { - log.Printf("warn: old config value is broken: %v\n", err) + log.Warnf("old config value is broken: %v\n", err) return doBoth, nil } @@ -231,7 +231,7 @@ // Only the color changed -> no expensive recalc needed. if colorChanged { - log.Println("info: Only colors changed.") + log.Infof("only colors changed.") return func(*http.Request) { for _, style := range styles { geoserver.ReconfigureStyle(style) @@ -287,7 +287,7 @@ job := &imports.IsoRefresh{ClassBreaks: breaks} serialized, err := common.ToJSONString(job) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } var jobID int64 @@ -300,11 +300,11 @@ false, serialized, ); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } - log.Printf( - "info: Recalculate sounding results contours in job %d.\n", + log.Infof( + "recalculate sounding results contours in job %d.\n", jobID) } @@ -319,7 +319,7 @@ return err }, ); err != nil { - log.Printf("error: Cleaning sounding diffs cache failed: %v\n", err) + log.Errorf("cleaning sounding diffs cache failed: %v\n", err) } }
--- a/pkg/controllers/token.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/token.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,12 +16,12 @@ import ( "encoding/json" "fmt" - "log" "net/http" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/models" + "gemma.intevation.de/gemma/pkg/log" mw "gemma.intevation.de/gemma/pkg/middleware" ) @@ -33,7 +33,7 @@ http.NotFound(rw, req) return case err != nil: - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) return } @@ -73,7 +73,7 @@ } defer req.Body.Close() if err := json.NewDecoder(req.Body).Decode(&input); err != nil { - log.Printf("%v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) return } @@ -87,7 +87,7 @@ string(input.User), input.Password) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) return }
--- a/pkg/controllers/uploadedimports.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/uploadedimports.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,7 +15,6 @@ import ( "fmt" - "log" "net/http" "os" "strconv" @@ -24,6 +23,7 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/imports" + "gemma.intevation.de/gemma/pkg/log" mw "gemma.intevation.de/gemma/pkg/middleware" "gemma.intevation.de/gemma/pkg/misc" ) @@ -162,7 +162,7 @@ fname, maxUploadSize) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } @@ -170,20 +170,20 @@ job, err := create(req, dir) if err != nil { if err2 := os.RemoveAll(dir); err2 != nil { - log.Printf("warn: %v\n", err2) + log.Warnf("%v\n", err2) } if err2, ok := err.(badUploadParameterError); ok { http.Error(rw, string(err2), http.StatusBadRequest) return } - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } serialized, err := common.ToJSONString(job) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } @@ -202,12 +202,12 @@ serialized) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } - log.Printf("info: added import #%d to queue\n", jobID) + log.Infof("added import #%d to queue\n", jobID) result := struct { ID int64 `json:"id"`
--- a/pkg/controllers/user.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/controllers/user.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,7 +19,6 @@ "bytes" "database/sql" "fmt" - "log" "net/http" "strconv" "strings" @@ -29,6 +28,7 @@ "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/misc" "gemma.intevation.de/gemma/pkg/models" "gemma.intevation.de/gemma/pkg/pgxutils" @@ -39,10 +39,10 @@ const ( createUserSQL = `INSERT INTO users.list_users - VALUES ($1, $2, $3, $4, NULL, $5, $6)` + VALUES ($1, $2, $3, $4, NULL, $5, $6, true)` createUserExtentSQL = `INSERT INTO users.list_users VALUES ($1, $2, $3, $4, - ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9, $10)` + ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9, $10, true)` updateUserUnprivSQL = `UPDATE users.list_users SET (pw, map_extent, email_address) @@ -57,7 +57,23 @@ = ($2, $3, $4, $5, ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10, $11) WHERE username = $1` - deleteUserSQL = `DELETE FROM users.list_users WHERE username = $1` + deleteUserSQL = ` + WITH del AS ( + DELETE FROM users.list_users + WHERE username = $1 AND ( + rolname NOT IN ('waterway_admin', 'sys_admin') + OR NOT EXISTS (SELECT 1 FROM import.imports WHERE username = $1)) + RETURNING * + ), + up AS ( + UPDATE users.list_users + SET (email_address, report_reciever, active) = ('nomail@example.com', false, false) + WHERE username = $1 AND NOT EXISTS (SELECT * FROM del) + RETURNING * + ) + SELECT + EXISTS (SELECT * FROM del) AS deleted, + EXISTS (SELECT * FROM up) AS updated` listUsersSQL = `SELECT rolname, @@ -66,7 +82,8 @@ email_address, ST_XMin(map_extent), ST_YMin(map_extent), ST_XMax(map_extent), ST_YMax(map_extent), - report_reciever + report_reciever, + active FROM users.list_users` listUserSQL = `SELECT @@ -141,27 +158,44 @@ go func() { scheduler.UnbindByIDs(ids) }() } } else { - log.Printf("error: %v\n", err2) + log.Errorf("%v\n", err2) } - var res sql.Result - - if res, err = db.ExecContext(ctx, deleteUserSQL, user); err != nil { + var deleted, updated bool + if err = db.QueryRowContext(ctx, deleteUserSQL, user).Scan(&deleted, &updated); err != nil { return } - if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { + var action string + + switch { + case !deleted && !updated: err = mw.JSONError{ Code: http.StatusNotFound, Message: fmt.Sprintf("Cannot find user %s.", user), } return + case deleted: + action = "deleted" + case updated: + action = "deactivated" + default: + log.Errorf("Should not happen: user '%s' updated and deleted.\n", user) + action = "deleted" } // Running in a go routine should not be necessary. go func() { auth.Sessions.Logout(user) }() - jr = mw.JSONResult{Code: http.StatusNoContent} + log.Infof("User '%s' %s.\n", user, action) + + jr = mw.JSONResult{ + Result: struct { + Action string `json:"action"` + }{ + Action: action, + }, + } return } @@ -245,6 +279,8 @@ go func() { auth.Sessions.Logout(string(user)) }() } + log.Infof("User '%s' updated.\n", user) + jr = mw.JSONResult{ Code: http.StatusCreated, Result: struct { @@ -325,6 +361,9 @@ if patch.Reports != nil && priv { update("report_reciever", *patch.Reports) } + if patch.Active != nil && priv { + update("active", *patch.Active) + } if patch.Extent != nil { updateBox("map_extent", patch.Extent) } @@ -376,6 +415,14 @@ go func() { auth.Sessions.Logout(string(user)) }() } + // Log if the user should be reactivated, even if he is already active. + var reactivated string + if patch.Active != nil && *patch.Active && priv { + reactivated = " (reactivation requested)" + } + + log.Infof("User '%s' modified%s.\n", user, reactivated) + jr = mw.JSONResult{ Code: http.StatusCreated, Result: struct { @@ -423,6 +470,8 @@ return } + log.Infof("User '%s' created.\n", user.User) + jr = mw.JSONResult{ Code: http.StatusCreated, Result: struct { @@ -454,6 +503,7 @@ &user.Extent.X1, &user.Extent.Y1, &user.Extent.X2, &user.Extent.Y2, &user.Reports, + &user.Active, ); err != nil { return } @@ -571,7 +621,7 @@ var buf bytes.Buffer if err := bodyTmpl.Execute(&buf, &tmplVars); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } err = misc.SendMail(string(userData.Email), subject, buf.String())
--- a/pkg/geoserver/boot.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/geoserver/boot.go Tue Feb 08 10:20:26 2022 +0100 @@ -20,7 +20,6 @@ "encoding/xml" "fmt" "io" - "log" "net/http" "net/url" "strings" @@ -29,6 +28,7 @@ "golang.org/x/net/html/charset" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" ) @@ -55,7 +55,7 @@ if err := json.NewEncoder(&buf).Encode(x); err != nil { // Should not happen - log.Printf("warn: bad JSON: %v\n", err) + log.Warnf("bad JSON: %v\n", err) } return bytes.NewReader(buf.Bytes()) } @@ -66,7 +66,7 @@ buf := bytes.NewBufferString(xml.Header) if err := xml.NewEncoder(buf).Encode(x); err != nil { // Should not happen - log.Printf("warn: bad XML: %v\n", err) + log.Warnf("bad XML: %v\n", err) } return bytes.NewReader(buf.Bytes()) } @@ -102,13 +102,13 @@ } if resp.StatusCode != http.StatusNotFound { - log.Println("info: workspace " + workspaceName + " already exists.") + log.Infof("workspace " + workspaceName + " already exists.") return nil } // Create workspace - log.Println("info: creating workspace " + workspaceName) + log.Infof("creating workspace " + workspaceName) const createJSON = `{"workspace":{"name":"` + workspaceName + `"}}` @@ -158,12 +158,12 @@ } if resp.StatusCode != http.StatusNotFound { - log.Println("info: datastore " + datastoreName + " already exists.") + log.Infof("datastore " + datastoreName + " already exists.") return nil } // Create datastore. - log.Println("info: creating datastore " + datastoreName) + log.Infoln("creating datastore " + datastoreName) type entry struct { Key interface{} `json:"@key"` @@ -221,11 +221,11 @@ func ensureFeatures() error { tables := models.InternalServices.Filter(models.IntWFS) if len(tables) == 0 { - log.Println("info: no tables to publish") + log.Infoln("no tables to publish") return nil } - log.Printf("info: number of tables to publish %d\n", len(tables)) + log.Infof("number of tables to publish %d\n", len(tables)) var ( geoURL = config.GeoServerURL() @@ -283,7 +283,7 @@ defer func() { if len(already) > 0 { - log.Printf("info: already having featuretypes: %s\n", + log.Infof("already having featuretypes: %s\n", strings.Join(already, ", ")) } }() @@ -297,7 +297,7 @@ } // Create featuretype. - log.Printf("info: creating featuretype %s.\n", table) + log.Infof("creating featuretype %s.\n", table) var req *http.Request @@ -400,11 +400,11 @@ groups := models.InternalServices.LayerGroups() if len(groups) == 0 { - log.Println("info: no groups layers to publish") + log.Infoln("info: no groups layers to publish") return nil } - log.Printf("info: number of layer groups to publish %d\n", len(groups)) + log.Infof("number of layer groups to publish %d\n", len(groups)) var ( geoURL = config.GeoServerURL() @@ -457,7 +457,7 @@ defer func() { if len(already) > 0 { - log.Printf("info: already having layer groups: %s\n", + log.Infof("already having layer groups: %s\n", strings.Join(already, ", ")) } }() @@ -468,7 +468,7 @@ continue } - log.Printf("info: creating layer group %s.\n", groups[i].Name) + log.Infof("creating layer group %s.\n", groups[i].Name) type ( Layers struct { @@ -529,7 +529,7 @@ return nil } - log.Println("info: delete workspace " + workspaceName) + log.Infoln("info: delete workspace " + workspaceName) var ( geoURL = config.GeoServerURL() user = config.GeoServerUser() @@ -626,7 +626,7 @@ func updateStyle(entry *models.IntEntry, create bool) error { - log.Printf("info: creating style %s\n", entry.Name) + log.Infof("creating style %s\n", entry.Name) // Try to load the style data. binary, err := entry.LoadStyle() @@ -761,7 +761,7 @@ case tok == nil && err == io.EOF: return false case err != nil: - log.Printf("warn: invalid XML: %v\n", err) + log.Warnf("invalid XML: %v\n", err) return false } if t, ok := tok.(xml.StartElement); ok && @@ -772,7 +772,7 @@ } func ensureStyles() error { - log.Println("info: creating styles") + log.Infoln("creating styles") var stls styles if err := stls.load(); err != nil { @@ -788,7 +788,7 @@ defer func() { if len(already) > 0 { - log.Printf("info: already having styles: %s\n", + log.Infof("already having styles: %s\n", strings.Join(already, ", ")) } }() @@ -812,12 +812,12 @@ func PrepareGeoServer() error { if config.DBUser() == "" { - log.Println("info: Need metamorphic db user to configure GeoServer") + log.Infoln("need metamorphic db user to configure GeoServer") return nil } if config.GeoServerURL() == "" { - log.Println("info: No URL to GeoServer configured") + log.Infoln("no URL to GeoServer configured") return nil }
--- a/pkg/geoserver/reconf.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/geoserver/reconf.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,12 +15,12 @@ import ( "container/list" - "log" "net" "net/url" "sync" "time" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" ) @@ -43,13 +43,13 @@ fn = confQueue.Remove(confQueue.Front()).(func() error) confQueueCond.L.Unlock() if err := reconfigure(fn); err != nil { - log.Printf("warn: configure GeoServer failed: %v\n", err) + log.Warnf("configure GeoServer failed: %v\n", err) } } } func reconfigure(fn func() error) error { - log.Println("info: configure GeoServer...") + log.Infof("configure GeoServer...") const ( maxTries = 10 sleep = time.Second * 5 @@ -62,7 +62,7 @@ if try < maxTries { if uerr, ok := err.(*url.Error); ok { if oerr, ok := uerr.Err.(*net.OpError); ok && oerr.Op == "dial" { - log.Printf("warn: failed attempt %d of %d to configure GeoServer. "+ + log.Warnf("failed attempt %d of %d to configure GeoServer. "+ "Will try again in %s...\n", try, maxTries, sleep) time.Sleep(sleep) continue
--- a/pkg/imports/dsec.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/dsec.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,7 +18,8 @@ "database/sql" "errors" "fmt" - "log" + + "gemma.intevation.de/gemma/pkg/log" ) // DeleteSection is a Job to delete a section from the database. @@ -71,8 +72,8 @@ } n, err := res.RowsAffected() if err != nil { - log.Println( - "error: RowsAffected returned an error. Missing driver support?") + log.Errorf( + "RowsAffected returned an error. Missing driver support?") return nil } if n == 0 {
--- a/pkg/imports/email.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/email.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,12 +16,12 @@ import ( "context" "database/sql" - "log" "strings" "text/template" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/misc" ) @@ -62,7 +62,7 @@ return conn.QueryRowContext(ctx, selectEmailSQL, user).Scan(&email) }, ); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } @@ -82,11 +82,11 @@ var body strings.Builder if err := importNotificationMailTmpl.Execute(&body, &data); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return } if err := misc.SendMail(email, importNotificationMailSubject, body.String()); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } }
--- a/pkg/imports/erdms.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/erdms.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,9 +18,9 @@ "context" "database/sql" "fmt" - "log" "strings" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/soap" "gemma.intevation.de/gemma/pkg/soap/erdms" ) @@ -102,7 +102,7 @@ data, err := client.GetRisDataXML(request) if err != nil { if t, ok := err.(interface{ Timeout() bool }); ok && t.Timeout() && tries < maxTries { - log.Println("warn: ERDMS SOAP request timed out. Trying again.") + log.Warnln("warn: ERDMS SOAP request timed out. Trying again.") tries++ goto again }
--- a/pkg/imports/gm.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/gm.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,15 +19,17 @@ "context" "database/sql" "fmt" - "log" "sort" + "strconv" "strings" "time" + "github.com/jackc/pgx/pgtype" + + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" "gemma.intevation.de/gemma/pkg/pgxutils" "gemma.intevation.de/gemma/pkg/soap/nts" - "github.com/jackc/pgx/pgtype" ) // GaugeMeasurement is an import job to import @@ -185,7 +187,7 @@ if err != nil { if t, ok := err.(interface{ Timeout() bool }); ok && t.Timeout() && tries < maxTries { - log.Println("warn: NtS SOAP request timed out. Trying again.") + log.Warnln("NtS SOAP request timed out. Trying again.") tries++ goto again } @@ -320,6 +322,223 @@ return fn, nil } +type gmLog struct { + gid string + unknown bool + assumedZPG bool + ignoredMeasureCodes []string + rescaleErrors []string + missingValues []string + assumedCM int + badValues int + measurements int + predictions int +} + +type gmLogs []*gmLog + +func extend(haystack []string, needle string) []string { + for _, straw := range haystack { + if straw == needle { + return haystack + } + } + return append(haystack, needle) +} + +func (gl *gmLog) addRescaleError(err error) { + gl.rescaleErrors = extend(gl.rescaleErrors, err.Error()) +} + +func (gl *gmLog) ignoreMeasureCode(mc nts.Measure_code_enum) { + gl.ignoredMeasureCodes = extend(gl.ignoredMeasureCodes, string(mc)) +} + +func (gls gmLogs) find(gid string) *gmLog { + for _, gl := range gls { + if gl.gid == gid { + return gl + } + } + return nil +} + +func (gls gmLogs) logging(feedback Feedback) { + + gls.logBool( + (*gmLog).getUnknown, + "Cannot find following gauges: ", + feedback.Warn) + + gls.logBool( + (*gmLog).getAssumedZPG, + "'Reference_code' not specified. Assuming 'ZPG': ", + feedback.Warn) + + gls.logInt( + (*gmLog).getAssumedCM, + "'Unit' not specified. Assuming 'cm': ", + feedback.Warn) + + gls.logInt( + (*gmLog).getBadValues, + "Ignored measurements with value -99999: ", + feedback.Warn) + + gls.logString( + (*gmLog).getMissingValues, + "Missing mandatory values: ", + feedback.Warn) + + gls.logString( + (*gmLog).getRescaleErrors, + "Cannot convert units: ", + feedback.Error) + + gls.logString( + (*gmLog).getRescaleErrors, + "Ignored measure codes: ", + feedback.Warn) + + gls.logInt( + (*gmLog).getPredictions, + "New predictions: ", + feedback.Info) + + gls.logInt( + (*gmLog).getMeasurements, + "New measurements: ", + feedback.Info) + + gls.logBool( + (*gmLog).nothingChanged, + "No changes for: ", + feedback.Info) +} + +func (gl *gmLog) getAssumedZPG() bool { return gl.assumedZPG } +func (gl *gmLog) getUnknown() bool { return gl.unknown } +func (gl *gmLog) getIgnoredMeasureCodes() []string { return gl.ignoredMeasureCodes } +func (gl *gmLog) getRescaleErrors() []string { return gl.rescaleErrors } +func (gl *gmLog) getMissingValues() []string { return gl.missingValues } +func (gl *gmLog) getAssumedCM() int { return gl.assumedCM } +func (gl *gmLog) getBadValues() int { return gl.badValues } +func (gl *gmLog) getPredictions() int { return gl.predictions } +func (gl *gmLog) getMeasurements() int { return gl.measurements } +func (gl *gmLog) nothingChanged() bool { return gl.measurements == 0 && gl.predictions == 0 } + +func (gls gmLogs) logBool( + access func(*gmLog) bool, + header string, + log func(string, ...interface{}), +) { + var sb strings.Builder + for _, gl := range gls { + if access(gl) { + if sb.Len() == 0 { + sb.WriteString(header) + } else { + sb.WriteString(", ") + } + sb.WriteString(gl.gid) + } + } + if sb.Len() > 0 { + log(sb.String()) + } +} + +func (gls gmLogs) logInt( + access func(*gmLog) int, + header string, + log func(string, ...interface{}), +) { + gs := make(gmLogs, 0, len(gls)) + for _, g := range gls { + if access(g) > 0 { + gs = append(gs, g) + } + } + + if len(gs) == 0 { + return + } + + sort.SliceStable(gs, func(i, j int) bool { + return access(gs[i]) < access(gs[j]) + }) + + var sb strings.Builder + var last int + + for _, g := range gs { + if c := access(g); c != last { + if sb.Len() == 0 { + sb.WriteString(header) + } else { + sb.WriteString("); ") + } + sb.WriteString(strconv.Itoa(c)) + sb.WriteString(" (") + last = c + } else { + sb.WriteString(", ") + } + sb.WriteString(g.gid) + } + + sb.WriteByte(')') + log(sb.String()) +} + +func (gls gmLogs) logString( + access func(*gmLog) []string, + header string, + log func(string, ...interface{}), +) { + var sb strings.Builder + for _, gl := range gls { + if s := access(gl); len(s) > 0 { + if sb.Len() == 0 { + sb.WriteString(header) + } else { + sb.WriteString(", ") + } + sb.WriteString(gl.gid) + sb.WriteString(" (") + for i, v := range s { + if i > 0 { + sb.WriteString("; ") + } + sb.WriteString(v) + } + sb.WriteByte(')') + } + } + if sb.Len() > 0 { + log(sb.String()) + } +} + +// logFinder is a helper to search recently used logs +// or create a new one if no log for a given gauge +// existed before. +func logFinder(logs *gmLogs) func(string) *gmLog { + var lastLog *gmLog + return func(gid string) *gmLog { + if lastLog != nil && lastLog.gid == gid { + return lastLog + } + if ll := logs.find(gid); ll != nil { + lastLog = ll + return ll + } + lastLog = &gmLog{gid: gid} + *logs = append(*logs, lastLog) + return lastLog + } +} + func doForGM( ctx context.Context, gauges []string, @@ -352,6 +571,14 @@ } var gids []string + + // To prevent spamming the log actual logging + // is defered to be presented in an aggregated way. + var logs gmLogs + defer func() { logs.logging(feedback) }() + + findLog := logFinder(&logs) + for _, msg := range result { for _, wrm := range msg.Wrm { curr := string(*wrm.Geo_object.Id) @@ -361,45 +588,45 @@ feedback.Warn("Invalid ISRS code %v", err) continue } - feedback.Info("Found measurements/predictions for %s", curr) + logger := findLog(curr) + gids = append(gids, curr) + if !isKnown(curr) { - feedback.Warn("Cannot find gauge %q for import", curr) + logger.unknown = true continue } var referenceCode string if wrm.Reference_code == nil { - feedback.Info("'Reference_code' not specified. Assuming 'ZPG'") + logger.assumedZPG = true referenceCode = "ZPG" } else { referenceCode = string(*wrm.Reference_code) } - badValue := 0 - newM, newP := 0, 0 for _, measure := range wrm.Measure { var unit string if *measure.Measure_code != nts.Measure_code_enumWAL { - feedback.Warn("Ignored message with measure_code %s", - *measure.Measure_code) + logger.ignoreMeasureCode(*measure.Measure_code) continue } if measure.Unit == nil { - feedback.Info("'Unit' not specified. Assuming 'cm'") + logger.assumedCM++ unit = "cm" } else { unit = string(*measure.Unit) } if measure.Value == nil { - feedback.Warn("Missing mandatory value at %s. Ignored (bad service)", - measure.Measuredate.Format(time.RFC3339)) + logger.missingValues = append( + logger.missingValues, + measure.Measuredate.Time.Format(time.RFC3339)) continue } convert, err := rescale(unit) if err != nil { - feedback.Error(err.Error()) + logger.addRescaleError(err) continue } convert(measure.Value) @@ -408,7 +635,7 @@ // -99999 is used by some gauges to signal an error if *measure.Value == -99999 { - badValue++ + logger.badValues++ continue } @@ -458,7 +685,7 @@ case err != nil: feedback.Error(pgxutils.ReadableError{Err: err}.Error()) default: - newP++ + logger.predictions++ } } else { err = insertGMStmt.QueryRowContext( @@ -484,19 +711,10 @@ case err != nil: feedback.Error(pgxutils.ReadableError{Err: err}.Error()) default: - newM++ + logger.measurements++ } } } - if badValue > 0 { - feedback.Warn("Ignored %d measurements with value -99999", - badValue) - } - feedback.Info("Inserted %d measurements for %s", - newM, curr) - feedback.Info("Inserted %d predictions for %s", - newP, curr) - gids = append(gids, curr) } } return gids, nil
--- a/pkg/imports/isr.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/isr.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,9 +16,9 @@ import ( "context" "database/sql" - "log" "time" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/mesh" "gemma.intevation.de/gemma/pkg/models" ) @@ -341,7 +341,7 @@ } } default: - log.Printf("error: unknown survey type '%s'\n", sr.surveyType) + log.Errorf("unknown survey type '%s'\n", sr.surveyType) } } feedback.Info("Scan types: Single/Multi: %d Marking: %d", beams, markings)
--- a/pkg/imports/queue.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/queue.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,7 +19,6 @@ "encoding/json" "errors" "fmt" - "log" "runtime/debug" "sort" "strings" @@ -31,6 +30,7 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/pgxutils" ) @@ -121,8 +121,8 @@ const ( ReviewJobSuffix = "#review" - reviewJobRetries = 10 - reviewJobWait = time.Minute + reviewJobRetries = 200 + reviewJobWait = 10 * time.Minute ) const ( @@ -381,7 +381,7 @@ func LogImportKindNames() { kinds := ImportKindNames() sort.Strings(kinds) - log.Printf("info: registered import kinds: %s", + log.Infof("registered import kinds: %s", strings.Join(kinds, ", ")) } @@ -440,7 +440,7 @@ if idj.waitRetry.Status == pgtype.Present { var d time.Duration if err := idj.waitRetry.AssignTo(&d); err != nil { - log.Printf("error: converting waitRetry failed: %v\n", err) + log.Errorf("converting waitRetry failed: %v\n", err) } else { now = now.Add(d) } @@ -462,7 +462,7 @@ } d := new(time.Duration) if err := idj.waitRetry.AssignTo(d); err != nil { - log.Printf("error: converting waitRetry failed: %v\n", err) + log.Errorf("converting waitRetry failed: %v\n", err) return nil } return d @@ -560,7 +560,7 @@ data).Scan(&id) if err == nil && sync { - log.Printf("info: register wait for %d\n", id) + log.Infof("register wait for %d\n", id) done = make(chan struct{}) q.waiting[id] = done } @@ -675,7 +675,7 @@ if err != nil { return nil, err } - log.Printf("info: add review job %d\n", rID) + log.Infof("add review job %d\n", rID) _, err = tx.ExecContext(ctx, updateStateSQL, "reviewed", id) if err != nil && done != nil { go func() { @@ -741,7 +741,7 @@ return err }) if err != nil { - log.Printf("error: logging failed: %v\n", err) + log.Errorf("logging failed: %v\n", err) } } @@ -868,7 +868,7 @@ if err = auth.RunAs(ctx, queueUser, fn); err == nil || try == maxTries { return err } - log.Printf("warn: [try %d/%d] Storing state failed: %v (try again in %s).\n", + log.Warnf("[try %d/%d] Storing state failed: %v (try again in %s).\n", try, maxTries, err, sleep) time.Sleep(sleep) @@ -935,7 +935,7 @@ // re-enqueue the jobs that are in state running. // They where in progess when the server went down. if err := reEnqueueRunning(); err != nil { - log.Printf("error: re-enqueuing failed: %v", err) + log.Errorf("re-enqueuing failed: %v", err) } for { @@ -944,7 +944,7 @@ for { if idj, err = q.fetchJob(); err != nil && err != sql.ErrNoRows { - log.Printf("error: db: %v\n", err) + log.Errorf("error: db: %v\n", err) } if idj != nil { break @@ -957,7 +957,7 @@ } } - log.Printf("info: starting import #%d\n", idj.id) + log.Infof("starting import #%d\n", idj.id) jc := q.jobCreator(idj.kind) if jc == nil { @@ -978,7 +978,7 @@ // Unlock waiting. q.cmdCh <- func(q *importQueue) { if w := q.waiting[idj.id]; w != nil { - log.Printf("info: unlock waiting %d\n", idj.id) + log.Infof("unlock waiting %d\n", idj.id) if retry { w <- struct{}{} } else { @@ -1050,9 +1050,9 @@ } if !remove { if err := updateStateSummary(ctx, idj.id, state, summary); err != nil { - log.Printf("error: setting state of job %d failed: %v\n", idj.id, err) + log.Errorf("setting state of job %d failed: %v\n", idj.id, err) } - log.Printf("info: import #%d finished: %s\n", idj.id, state) + log.Infof("info: import #%d finished: %s\n", idj.id, state) } if idj.sendEmail { go sendNotificationMail(idj.user, jc.Description(), state, idj.id) @@ -1068,14 +1068,14 @@ idj.data, false) if err != nil { - log.Printf("error: retry enqueue failed: %v\n", err) + log.Errorf("retry enqueue failed: %v\n", err) } else { - log.Printf("info: re-enqueued job with id %d\n", nid) + log.Infof("re-enqueued job with id %d\n", nid) } } if remove { if err := deleteJob(ctx, idj.id); err != nil { - log.Printf("error: deleting job %d failed: %v\n", idj.id, err) + log.Errorf("deleting job %d failed: %v\n", idj.id, err) } } }(jc, idj)
--- a/pkg/imports/report.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/report.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,7 +19,6 @@ "database/sql" "errors" "fmt" - "log" "os" "path/filepath" "strings" @@ -29,11 +28,12 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/misc" "gemma.intevation.de/gemma/pkg/models" "gemma.intevation.de/gemma/pkg/xlsx" - "github.com/360EntSecGroup-Skylar/excelize/v2" + "github.com/xuri/excelize/v2" ) type Report struct { @@ -207,19 +207,19 @@ var admin misc.EmailReceiver if err := tx.QueryRowContext( ctx, selectCurrentUserSQL).Scan(&admin.Name, &admin.Address); err != nil { - log.Printf("error: Cannot find sender: %v\n") + log.Errorf("cannot find sender: %v\n") return nil, fmt.Errorf("cannot find sender: %v", err) } // Generate the actual report. if err := action.Execute(ctx, tx, template); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return nil, fmt.Errorf("Generating report failed: %v", err) } var buf bytes.Buffer if _, err := template.WriteTo(&buf); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return nil, fmt.Errorf("generating report failed: %v", err) }
--- a/pkg/imports/scheduled.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/scheduled.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,10 +17,10 @@ "context" "database/sql" "fmt" - "log" "time" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" "gemma.intevation.de/gemma/pkg/scheduler" ) @@ -29,10 +29,10 @@ run := func(cfgID int64) { jobID, err := RunConfiguredImport(cfgID) if err != nil { - log.Printf("error: running scheduled import failed: %v\n", err) + log.Errorf("running scheduled import failed: %v\n", err) return } - log.Printf("info: added import #%d to queue\n", jobID) + log.Infof("added import #%d to queue\n", jobID) } for kind := range kindToImportModel {
--- a/pkg/imports/sr.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/imports/sr.go Tue Feb 08 10:20:26 2022 +0100 @@ -303,6 +303,7 @@ var xform vertexTransform if sr.negateZ() { + feedback.Info("Z values will be negated.") xform = negateZTransform } else { xform = identityTransform
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/log/log.go Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,208 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2021 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package log + +import ( + "fmt" + lg "log" + "os" + "strings" + "sync" + "sync/atomic" +) + +type LogLevel uint32 + +const ( + TraceLogLevel = LogLevel(iota) + DebugLogLevel + InfoLogLevel + WarnLogLevel + ErrorLogLevel + FatalLogLevel +) + +var ( + logLevel = uint32(InfoLogLevel) + logFileMu sync.Mutex + logFile *os.File +) + +func init() { + lg.SetFlags(lg.LstdFlags | lg.Lshortfile) +} + +const callDepth = 2 + +func SetupLog(filename string, perm os.FileMode) error { + f, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, perm) + if err != nil { + return err + } + logFileMu.Lock() + defer logFileMu.Unlock() + if logFile != nil { + logFile.Close() + } + logFile = f + lg.SetOutput(logFile) + return nil +} + +func ShutdownLog() { + logFileMu.Lock() + defer logFileMu.Unlock() + if logFile != nil { + logFile.Close() + logFile = nil + } + lg.SetOutput(os.Stderr) +} + +func ParseLogLevel(s string) LogLevel { + switch strings.ToLower(s) { + case "trace": + return TraceLogLevel + case "debug": + return DebugLogLevel + case "info": + return InfoLogLevel + case "warn": + return WarnLogLevel + case "error": + return ErrorLogLevel + case "fatal": + return FatalLogLevel + default: + return InfoLogLevel + } +} + +func (level LogLevel) String() string { + switch level { + case TraceLogLevel: + return "trace" + case DebugLogLevel: + return "debug" + case InfoLogLevel: + return "info" + case WarnLogLevel: + return "warn" + case ErrorLogLevel: + return "error" + case FatalLogLevel: + return "fatal" + default: + return "unknown" + } +} + +func GetLogLevel() LogLevel { + return LogLevel(atomic.LoadUint32(&logLevel)) +} + +func SetLogLevel(level LogLevel) { + atomic.StoreUint32(&logLevel, uint32(level)) +} + +func Tracef(f string, args ...interface{}) { + if TraceLogLevel >= GetLogLevel() { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[TRACE] "+s) + } +} + +func Traceln(s string) { + if TraceLogLevel >= GetLogLevel() { + lg.Output(callDepth, "[TRACE] "+s) + } +} + +func Debugf(f string, args ...interface{}) { + if DebugLogLevel >= GetLogLevel() { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[DEBUG] "+s) + } +} + +func Debugln(s string) { + if DebugLogLevel >= GetLogLevel() { + lg.Output(callDepth, "[DEBUG] "+s) + } +} + +func Infof(f string, args ...interface{}) { + if InfoLogLevel >= GetLogLevel() { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[INFO] "+s) + } +} + +func Infoln(s string) { + if InfoLogLevel >= GetLogLevel() { + lg.Output(callDepth, "[INFO] "+s) + } +} + +func Warnf(f string, args ...interface{}) { + if WarnLogLevel >= GetLogLevel() { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[WARN] "+s) + } +} + +func Warnln(s string) { + if WarnLogLevel >= GetLogLevel() { + lg.Output(callDepth, "[WARN] "+s) + } +} + +func Errorf(f string, args ...interface{}) { + if ErrorLogLevel >= GetLogLevel() { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[ERROR] "+s) + } +} + +func Errorln(s string) { + if ErrorLogLevel >= GetLogLevel() { + lg.Output(callDepth, "[ERROR] "+s) + } +} + +func Fatalf(f string, args ...interface{}) { + if FatalLogLevel >= GetLogLevel() { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[FATAL] "+s) + os.Exit(1) + } +} + +func Fatalln(s string) { + if FatalLogLevel >= GetLogLevel() { + lg.Output(callDepth, "[FATAL] "+s) + os.Exit(1) + } +} + +func Panicf(f string, args ...interface{}) { + s := fmt.Sprintf(f, args...) + lg.Output(callDepth, "[PANIC] "+s) + panic(s) +} + +func Panicln(s string) { + lg.Output(callDepth, "[PANIC] "+s) + panic(s) +}
--- a/pkg/mesh/loader.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/loader.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,7 +18,8 @@ "bytes" "compress/gzip" "encoding/binary" - "log" + + "gemma.intevation.de/gemma/pkg/log" ) func (s *STRTree) deserializeIndex(r *bufio.Reader) error { @@ -104,7 +105,7 @@ return err } - log.Printf("info: EPSG: %d\n", t.EPSG) + log.Infof("EPSG: %d\n", t.EPSG) if err := t.Min.Read(r); err != nil { return err @@ -114,7 +115,7 @@ return err } - log.Printf("info: BBOX: [[%f, %f, %f], [%f, %f, %f]]\n", + log.Infof("BBOX: [[%f, %f, %f], [%f, %f, %f]]\n", t.Min.X, t.Min.Y, t.Min.Z, t.Max.X, t.Max.Y, t.Max.Z) @@ -123,7 +124,7 @@ return err } - log.Printf("info: vertices: %d\n", numVertices) + log.Infof("vertices: %d\n", numVertices) vertices := make([]Vertex, numVertices) t.Vertices = vertices @@ -139,7 +140,7 @@ return err } - log.Printf("info: triangles: %d\n", numTriangles) + log.Infof("triangles: %d\n", numTriangles) indices := make([]int32, 3*numTriangles) triangles := make([][]int32, numTriangles)
--- a/pkg/mesh/polygon.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/polygon.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,11 +17,11 @@ "bytes" "encoding/binary" "fmt" - "log" "math" "github.com/tidwall/rtree" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/wkb" ) @@ -464,7 +464,7 @@ rngs := make([]ring, numRings) - log.Printf("info: Number of rings: %d\n", len(rngs)) + log.Infof("number of rings: %d\n", len(rngs)) for rng := uint32(0); rng < numRings; rng++ { var numVertices uint32 @@ -472,7 +472,7 @@ return err } - log.Printf("info: Number of vertices in ring %d: %d\n", rng, numVertices) + log.Infof("number of vertices in ring %d: %d\n", rng, numVertices) numVertices *= 2 vertices := make([]float64, numVertices)
--- a/pkg/mesh/raster.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/raster.go Tue Feb 08 10:20:26 2022 +0100 @@ -14,7 +14,6 @@ package mesh import ( - "log" "math" "runtime" "sync" @@ -23,6 +22,7 @@ "github.com/fogleman/contourmap" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/wkb" ) @@ -40,12 +40,12 @@ width, height := bbox.Size() - log.Printf("info raster extent: %.2f / %.2f", width, height) + log.Infof("raster extent: %.2f / %.2f", width, height) xCells := int(math.Ceil(width / cellSize)) yCells := int(math.Ceil(height / cellSize)) - log.Printf("info raster size: %d / %d\n", xCells, yCells) + log.Infof("raster size: %d / %d\n", xCells, yCells) size := (xCells + 2) * (yCells + 2) cells := make([]float64, size) @@ -231,7 +231,7 @@ close(cnts) wg.Wait() - log.Printf("info: Tracing areas took %v\n", time.Since(start)) + log.Infof("Tracing areas took %v\n", time.Since(start)) return areas } @@ -362,7 +362,7 @@ forest.insertRoot(contour(cnt)) } - //log.Printf("cnts: %d roots: %d\n", len(cnts), len(bf.roots)) + //log.Debugf("cnts: %d roots: %d\n", len(cnts), len(bf.roots)) var mp wkb.MultiPolygonGeom
--- a/pkg/mesh/strtree.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/strtree.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,9 +18,10 @@ "compress/gzip" "encoding/binary" "io" - "log" "math" "sort" + + "gemma.intevation.de/gemma/pkg/log" ) // STRTreeDefaultEntries is the default number of children per node and leaf. @@ -275,7 +276,7 @@ last = x } - log.Printf("info: compressed index in bytes: %d %.2f (%d %.2f)\n", + log.Infof("compressed index in bytes: %d %.2f (%d %.2f)\n", written, float64(written)/(1024*1024), 4*len(s.index),
--- a/pkg/mesh/tin.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/tin.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,9 +19,9 @@ "errors" "fmt" "io" - "log" "math" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/models" "gemma.intevation.de/gemma/pkg/wkb" ) @@ -56,7 +56,7 @@ // Shared vertices are identified and referenced by the // same index. func (t *Tin) FromWKB(data []byte) error { - log.Printf("info: data length %d\n", len(data)) + log.Infof("data length %d\n", len(data)) r := bytes.NewReader(data) @@ -180,7 +180,7 @@ triangles = append(triangles, triangle) } - log.Printf("info: bbox: [[%f, %f], [%f, %f]]\n", + log.Infof("bbox: [[%f, %f], [%f, %f]]\n", min.X, min.Y, max.X, max.Y) *t = Tin{ @@ -240,7 +240,7 @@ if err != nil { return err } - log.Printf("info: vertices %d (%d)\n", len(t.Vertices), len(t.Vertices)*3*8) + log.Infof("vertices %d (%d)\n", len(t.Vertices), len(t.Vertices)*3*8) if err := binary.Write( w, binary.LittleEndian, uint32(len(t.Triangles))); err != nil { @@ -264,7 +264,7 @@ last = idx } } - log.Printf("info: compressed tin indices in bytes: %d (%d)\n", + log.Infof("compressed tin indices in bytes: %d (%d)\n", written, 3*4*len(t.Triangles)) return nil
--- a/pkg/mesh/triangulation.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/triangulation.go Tue Feb 08 10:20:26 2022 +0100 @@ -20,9 +20,9 @@ package mesh import ( - "log" "math" + "gemma.intevation.de/gemma/pkg/log" "gonum.org/v1/gonum/stat" ) @@ -115,7 +115,7 @@ var newCandidates []int32 - log.Printf("info: candidates: %d\n", len(candidates)) + log.Infof("candidates: %d\n", len(candidates)) for len(candidates) > 0 { oldRemoved := len(removed) @@ -137,9 +137,9 @@ newCandidates = newCandidates[:0] } - log.Printf("info: candidates left: %d\n", len(candidates)) - log.Printf("info: triangles: %d\n", len(t.Triangles)/3) - log.Printf("info: triangles to remove: %d\n", len(removed)) + log.Infof("candidates left: %d\n", len(candidates)) + log.Infof("triangles: %d\n", len(t.Triangles)/3) + log.Infof("info: triangles to remove: %d\n", len(removed)) type edge struct { a, b int32 @@ -213,11 +213,11 @@ } if len(open) > 0 { - log.Printf("warn: open vertices left: %d\n", len(open)) + log.Warnf("open vertices left: %d\n", len(open)) } if len(rings) == 0 { - log.Println("warn: no ring found") + log.Warnln("no ring found") return nil, removed } @@ -234,7 +234,7 @@ polygon = append(polygon, t.Points[rings[0].a]) - log.Printf("length of boundary: %d\n", len(polygon)) + log.Infof("length of boundary: %d\n", len(polygon)) return polygon, removed }
--- a/pkg/mesh/vertex.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/mesh/vertex.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,10 +18,10 @@ "encoding/binary" "fmt" "io" - "log" "math" "sort" + "gemma.intevation.de/gemma/pkg/log" "gemma.intevation.de/gemma/pkg/wkb" ) @@ -571,7 +571,7 @@ out = append(out, curr) } - log.Printf("info: ignored parts: %d\n", ignored) + log.Infof("ignored parts: %d\n", ignored) return out } @@ -787,7 +787,7 @@ } } - // log.Printf("segments before/after merge: %d/%d (%d rings)\n", + // log.Debugf("segments before/after merge: %d/%d (%d rings)\n", // len(mls), len(out), rings) return out
--- a/pkg/middleware/dbconn.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/middleware/dbconn.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,10 +17,10 @@ "context" "database/sql" "fmt" - "log" "net/http" "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/log" ) type wrapDBKeyType int @@ -61,7 +61,7 @@ next.ServeHTTP(rw, req) return nil }); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) } })
--- a/pkg/middleware/jsonhandler.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/middleware/jsonhandler.go Tue Feb 08 10:20:26 2022 +0100 @@ -19,12 +19,12 @@ "encoding/json" "fmt" "io" - "log" "net/http" "github.com/jackc/pgx" "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/log" ) // JSONResult defines the return type of JSONHandler handler function. @@ -137,7 +137,7 @@ } if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) switch e := err.(type) { case pgx.PgError: var res = struct { @@ -152,7 +152,7 @@ rw.Header().Set("Content-Type", "application/json") rw.WriteHeader(http.StatusInternalServerError) if err := json.NewEncoder(rw).Encode(&res); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } case JSONError: rw.Header().Set("Content-Type", "application/json") @@ -166,7 +166,7 @@ Message: e.Message, } if err := json.NewEncoder(rw).Encode(&res); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } default: http.Error(rw, @@ -194,7 +194,7 @@ err = json.NewEncoder(rw).Encode(jr.Result) } if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } } } @@ -206,6 +206,6 @@ rw.Header().Set("X-Content-Type-Options", "nosniff") rw.WriteHeader(code) if err := json.NewEncoder(rw).Encode(data); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } }
--- a/pkg/middleware/modifyquery.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/middleware/modifyquery.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,12 +15,12 @@ import ( "encoding/hex" - "log" "net/http" "net/url" "strings" "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/log" ) // ParseQuery is a modified version of the internal query @@ -76,13 +76,13 @@ parameters := make(url.Values) if err := ParseQuery(parameters, req.URL.RawQuery, "&", "=", nil); err != nil { - log.Printf("parsing query failed: %v\n", err) + log.Errorf("parsing query failed: %v\n", err) http.Error(rw, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } if err := modify(req, parameters); err != nil { - log.Printf("modifying query parameters failed: %v\n", err) + log.Errorf("modifying query parameters failed: %v\n", err) http.Error(rw, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) } @@ -101,7 +101,7 @@ parameters.Del("env") if session, ok := auth.GetSession(req); ok { - // log.Printf("info: injecting user %s\n", session.User) + // log.Infof("injecting user %s\n", session.User) parameters.Set("env", "user:"+hex.EncodeToString([]byte(session.User))) } return nil
--- a/pkg/misc/tmpfiles.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/misc/tmpfiles.go Tue Feb 08 10:20:26 2022 +0100 @@ -15,7 +15,6 @@ import ( "encoding/hex" - "log" "os" "path/filepath" "sort" @@ -24,6 +23,7 @@ "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" ) const ( @@ -40,7 +40,7 @@ config.WaitReady() for { if err := cleanupTmpFiles(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } time.Sleep(tmpfilesCleanUp) }
--- a/pkg/models/extservices.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/models/extservices.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,11 +16,11 @@ import ( "context" "database/sql" - "log" "sort" "sync" "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/log" ) type ExtEntry struct { @@ -45,7 +45,7 @@ if es.entries == nil { if err := es.load(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return "", false } } @@ -99,7 +99,7 @@ defer es.mu.Unlock() if es.entries == nil { if err := es.load(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return nil } }
--- a/pkg/models/intservices.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/models/intservices.go Tue Feb 08 10:20:26 2022 +0100 @@ -17,12 +17,12 @@ import ( "context" "database/sql" - "log" "net/http" "sync" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" ) const DatabaseScheme = "waterway" @@ -120,7 +120,7 @@ if ps.entries == nil { if err := ps.load(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return nil } } @@ -142,7 +142,7 @@ if ps.entries == nil { if err := ps.load(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return "", false } } @@ -261,7 +261,7 @@ defer ps.mu.Unlock() if ps.entries == nil { if err := ps.load(); err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) return nil } }
--- a/pkg/models/user.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/models/user.go Tue Feb 08 10:20:26 2022 +0100 @@ -47,6 +47,7 @@ Email Email `json:"email"` Country Country `json:"country"` Reports bool `json:"reports"` + Active bool `json:"active"` Extent *BoundingBox `json:"extent"` } @@ -58,6 +59,7 @@ Email *Email `json:"email,omitempty"` Country *Country `json:"country,omitempty"` Reports *bool `json:"reports,omitempty"` + Active *bool `json:"active,omitempty"` Extent *BoundingBox `json:"extent,omitempty"` }
--- a/pkg/scheduler/boot.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/scheduler/boot.go Tue Feb 08 10:20:26 2022 +0100 @@ -16,10 +16,10 @@ import ( "context" "database/sql" - "log" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" ) const ( @@ -50,7 +50,7 @@ // the database which have a schedule. func boot() { config.WaitReady() - log.Println("info: booting scheduler from database.") + log.Infoln("booting scheduler from database.") ctx := context.Background() err := auth.RunAs( ctx, bootRole, @@ -84,7 +84,7 @@ return rows.Err() }) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) } }
--- a/pkg/scheduler/scheduler.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/scheduler/scheduler.go Tue Feb 08 10:20:26 2022 +0100 @@ -14,12 +14,13 @@ package scheduler import ( - "log" "sort" "strings" "sync" cron "gopkg.in/robfig/cron.v1" + + "gemma.intevation.de/gemma/pkg/log" ) // Action is called with a configuration id. @@ -42,7 +43,7 @@ if a := ua.scheduler.action(ua.name); a != nil { a(ua.cfgID) } else { - log.Printf("warn: scheduled action '%s' not found.", ua.name) + log.Warnf("scheduled action '%s' not found.", ua.name) } } @@ -104,7 +105,7 @@ numJobs++ } - log.Printf("info: booting %d scheduler jobs from database.\n", numJobs) + log.Infof("booting %d scheduler jobs from database.\n", numJobs) s.mu.Lock() defer s.mu.Unlock() @@ -299,7 +300,7 @@ func LogActionNames() { names := global.actionNames() sort.Strings(names) - log.Printf("info: actions registered to scheduler: %s\n", + log.Infof("actions registered to scheduler: %s\n", strings.Join(names, ", ")) }
--- a/pkg/soap/soap.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/soap/soap.go Tue Feb 08 10:20:26 2022 +0100 @@ -20,7 +20,6 @@ "encoding/xml" "fmt" "io/ioutil" - "log" "math/rand" "net" "net/http" @@ -28,6 +27,7 @@ "time" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" ) type SOAPEnvelope struct { @@ -312,11 +312,11 @@ return err } if len(rawbody) == 0 { - log.Println("warn: empty response") + log.Warnln("empty response") return nil } - //log.Println(string(rawbody)) + //log.Debugln(string(rawbody)) respEnvelope := new(SOAPEnvelope) respEnvelope.Body = SOAPBody{Content: response} err = xml.Unmarshal(rawbody, respEnvelope)
--- a/pkg/wfs/download.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/wfs/download.go Tue Feb 08 10:20:26 2022 +0100 @@ -20,13 +20,14 @@ "errors" "fmt" "io" - "log" "net/http" "net/url" "strconv" "strings" "golang.org/x/net/html/charset" + + "gemma.intevation.de/gemma/pkg/log" ) var ( @@ -155,7 +156,7 @@ var numFeatures int if supportsPaging { - log.Printf("info: Paging supported with %d feature per page.\n", + log.Infof("Paging supported with %d feature per page.\n", featuresPerPage) if !op.SupportsHits() { @@ -163,12 +164,12 @@ } else { numFeatures, err = numberFeaturesGET(getU, featureTypeName, wfsVersion) if err != nil { - log.Printf("error: %v\n", err) + log.Errorf("%v\n", err) supportsPaging = false } else if numFeatures == 0 { return nil, nil } else { - log.Printf("info: Number of features: %d\n", numFeatures) + log.Infof("Number of features: %d\n", numFeatures) } } } @@ -224,10 +225,10 @@ } if numFeatures > 0 { if numFeatures <= featuresPerPage { - log.Println("info: All features can be fetched in one page.") + log.Infof("all features can be fetched in one page.") downloadURLs = []string{pagedURL(0, numFeatures)} } else { - log.Println("info: Features need to be downloaded in pages.") + log.Infof("features need to be downloaded in pages.") for pos := 0; pos < numFeatures; { var count int if rest := numFeatures - pos; rest >= numFeatures {
--- a/pkg/wfs/global.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/wfs/global.go Tue Feb 08 10:20:26 2022 +0100 @@ -18,12 +18,13 @@ "fmt" "io" "io/ioutil" - "log" "os" "os/exec" "path/filepath" + "sync" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/log" ) var ( @@ -53,17 +54,30 @@ GMLDownloader []string ) -// GetFeatures is the default Downloader in this Gemma server. -var GetFeatures = setup() +var ( + getFeaturesOnce sync.Once + getFeatures func(*Capabilities, string, string) (Downloader, error) +) -func setup() func(*Capabilities, string, string) (Downloader, error) { +func getFeaturesOnceFunc() { path, err := exec.LookPath("ogr2ogr") if err != nil { - log.Println("info: ogr2ogr not installed. Using direct GeoJSON WFS download.") - return getFeaturesGeoJSON + log.Infoln("ogr2ogr not installed. Using direct GeoJSON WFS download.") + getFeatures = getFeaturesGeoJSON + } else { + log.Infof("ogr2ogr found at %s. Using GML WFS download.\n", path) + getFeatures = getFeaturesGML } - log.Printf("info: ogr2ogr found at %s. Using GML WFS download.\n", path) - return getFeaturesGML +} + +// GetFeatures is the default Downloader in this Gemma server. +func GetFeatures( + caps *Capabilities, + featureTypeName string, + sortBy string, +) (Downloader, error) { + getFeaturesOnce.Do(getFeaturesOnceFunc) + return getFeatures(caps, featureTypeName, sortBy) } func getFeaturesGeoJSON(
--- a/pkg/xlsx/templater.go Wed Jul 21 15:14:40 2021 +0200 +++ b/pkg/xlsx/templater.go Tue Feb 08 10:20:26 2022 +0100 @@ -20,15 +20,16 @@ "errors" "fmt" "io" - "log" "os" "strconv" "strings" - "github.com/360EntSecGroup-Skylar/excelize/v2" + "github.com/xuri/excelize/v2" "gopkg.in/yaml.v2" "github.com/PaesslerAG/gval" + + "gemma.intevation.de/gemma/pkg/log" ) type Action struct { @@ -291,7 +292,7 @@ var areas []area - //log.Println("merged cells") + //log.Debugln("merged cells") if mcs, err := e.template.GetMergeCells(e.sourceSheet); err == nil { areas = make([]area, 0, len(mcs)) for _, mc := range mcs { @@ -522,7 +523,7 @@ } num, err := excelize.ColumnNameToNumber(name) if err != nil { - log.Printf("error: invalid column name '%v'\n", col) + log.Errorf("invalid column name '%v'\n", col) return 1 } return num @@ -554,18 +555,18 @@ func coord2cell(ix, iy interface{}) interface{} { x, err := asInt(ix) if err != nil { - log.Printf("error: invalid x value: %v\n", err) + log.Errorf("invalid x value: %v\n", err) return "A1" } y, err := asInt(iy) if err != nil { - log.Printf("error: invalid y value: %v\n", err) + log.Errorf("invalid y value: %v\n", err) return "A1" } cell, err := excelize.CoordinatesToCellName(x, y) if err != nil { - log.Printf("error: invalid cell coord (%d, %d)\n", x, y) + log.Errorf("invalid cell coord (%d, %d)\n", x, y) return "A1" } return cell @@ -621,7 +622,7 @@ } s, err = eval.EvalString(e.ctx, vars) if err != nil { - log.Printf("error: '%s' '%s' %v\n", str, s, err) + log.Errorf("'%s' '%s' %v\n", str, s, err) } return s } @@ -652,7 +653,7 @@ repCount++ last, err = eval(e.ctx, vars) if err != nil { - log.Printf("error: '%s' '%s' %v\n", str, s, err) + log.Errorf("'%s' '%s' %v\n", str, s, err) } return fmt.Sprintf("%v", last) }
--- a/report-templates/data-quality-report.yaml Wed Jul 21 15:14:40 2021 +0200 +++ b/report-templates/data-quality-report.yaml Tue Feb 08 10:20:26 2022 +0100 @@ -17,7 +17,7 @@ # BN names - type: select statement: > - SELECT DISTINCT objnam AS bnnam, hm + SELECT DISTINCT objnam AS bnnam, hm FROM waterway.dqr_bottleneck_stats WHERE cc = {{ cc }} ORDER BY hm, objnam; actions:
--- a/schema/gemma.sql Wed Jul 21 15:14:40 2021 +0200 +++ b/schema/gemma.sql Tue Feb 08 10:20:26 2022 +0100 @@ -385,7 +385,8 @@ country char(2) NOT NULL REFERENCES countries, map_extent box2d NOT NULL, email_address varchar NOT NULL, - report_reciever boolean NOT NULL DEFAULT false + report_reciever boolean NOT NULL DEFAULT false, + active boolean NOT NULL DEFAULT true ) ; @@ -500,7 +501,8 @@ p.country, p.map_extent, p.email_address, - p.report_reciever + p.report_reciever, + p.active FROM internal.user_profiles p JOIN pg_roles u ON p.username = u.rolname JOIN pg_auth_members a ON u.oid = a.member
--- a/schema/isrs_functions.sql Wed Jul 21 15:14:40 2021 +0200 +++ b/schema/isrs_functions.sql Tue Feb 08 10:20:26 2022 +0100 @@ -65,7 +65,8 @@ geom AS wtwaxs, ST_Boundary(geom) AS bdr FROM waterway.waterway_axis, - ST_Dump(ST_Transform(wtwaxs::geometry, z)); + ST_Dump(ST_Transform(wtwaxs::geometry, z)) + WHERE validity @> current_timestamp; CREATE INDEX axs_bdr ON axis USING GiST (bdr); ANALYZE axis; @@ -89,8 +90,7 @@ -- to find the contiguous axis on which given distance marks lie (SELECT ARRAY[id] AS ids, wtwaxs FROM axis, points - WHERE ST_Intersects( - ST_Buffer(axis.wtwaxs, 0.0001), points.geom) + WHERE ST_DWithin(axis.wtwaxs, points.geom, 0.0001) FETCH FIRST ROW ONLY) UNION -- Connect endpoint of next linestring with closest @@ -102,29 +102,25 @@ SELECT refgeom UNION -- Fill eventual gap - SELECT ST_ShortestLine( - ST_Boundary(refgeom), bdr) + SELECT ST_ShortestLine(refbdr, bdr) UNION -- Linestring to be added SELECT geom))) FROM axis_snapped AS axis_snapped (refids, refgeom), axis AS axis (id, geom, bdr), - (SELECT ST_Collect(points.geom) AS pts - FROM points) AS points + ST_Boundary(refgeom) AS refbdr (refbdr) WHERE id <> ALL(refids) - AND ST_DWithin( - ST_Boundary(refgeom), bdr, tolerance) - AND NOT ST_Covers(ST_Buffer(refgeom, 0.0001), points.pts) - ORDER BY ST_Boundary(refgeom) <-> bdr + AND ST_DWithin(refbdr, bdr, tolerance) + -- Stop if refgeom goes through both distance marks + AND NOT 0.0001 >= ALL(SELECT refgeom <-> geom FROM points) + ORDER BY refbdr <-> bdr FETCH FIRST ROW ONLY)), axis_segment AS ( -- Fetch end result from snapping SELECT wtwaxs AS line - FROM axis_snapped, - (SELECT ST_Collect(points.geom) AS pts - FROM points) AS points + FROM axis_snapped -- Return end result only if both distance marks were connected - WHERE ST_Covers(ST_Buffer(wtwaxs, 0.0001), points.pts)) + WHERE 0.0001 >= ALL(SELECT wtwaxs <-> geom FROM points)) -- Use linear referencing to clip axis between distance marks. -- Simplification is used to work-around the problem, that -- ST_LineSubstring might generate very small line segments at an @@ -202,7 +198,8 @@ FROM rotated_ends) -- From the polygons returned by the last CTE, select only those -- around the clipped axis - SELECT ST_Multi(ST_Transform(ST_Union(range_area.geom), ST_SRID(area))) + SELECT ST_Multi(ST_CollectionExtract(ST_MakeValid(ST_Transform( + ST_Union(range_area.geom), ST_SRID(area))), 3)) INTO result_geom FROM range_area WHERE ST_Intersects(ST_Buffer(range_area.geom, -0.0001), axis);
--- a/schema/manage_users.sql Wed Jul 21 15:14:40 2021 +0200 +++ b/schema/manage_users.sql Tue Feb 08 10:20:26 2022 +0100 @@ -82,8 +82,18 @@ END IF; INSERT INTO internal.user_profiles ( - username, country, map_extent, email_address) - VALUES (NEW.username, NEW.country, NEW.map_extent, NEW.email_address); + username, country, map_extent, email_address, + report_reciever, active) + VALUES (NEW.username, NEW.country, NEW.map_extent, NEW.email_address, + NEW.report_reciever, NEW.active); + + IF NEW.active THEN + EXECUTE format( + 'ALTER ROLE %I LOGIN', NEW.username); + ELSE + EXECUTE format( + 'ALTER ROLE %I NOLOGIN', NEW.username); + END IF; -- Do not leak new password NEW.pw = ''; @@ -152,8 +162,10 @@ END IF; UPDATE internal.user_profiles p - SET (username, country, map_extent, email_address) - = (NEW.username, NEW.country, NEW.map_extent, NEW.email_address) + SET (username, country, map_extent, email_address, + report_reciever, active) + = (NEW.username, NEW.country, NEW.map_extent, NEW.email_address, + NEW.report_reciever, NEW.active) WHERE p.username = cur_username; IF NEW.rolname <> OLD.rolname @@ -172,6 +184,16 @@ internal.check_password(NEW.pw)); END IF; + IF NEW.active <> OLD.active THEN + IF NEW.active THEN + EXECUTE format( + 'ALTER ROLE %I LOGIN', cur_username); + ELSE + EXECUTE format( + 'ALTER ROLE %I NOLOGIN', cur_username); + END IF; + END IF; + -- Do not leak new password NEW.pw = ''; RETURN NEW; @@ -212,7 +234,6 @@ CREATE TRIGGER delete_user INSTEAD OF DELETE ON users.list_users FOR EACH ROW EXECUTE PROCEDURE internal.delete_user(); - -- To set a role from a hex-encoded user name (which is save from SQL injections). CREATE OR REPLACE FUNCTION public.setrole(role text) RETURNS void AS $$
--- a/schema/manage_users_tests.sql Wed Jul 21 15:14:40 2021 +0200 +++ b/schema/manage_users_tests.sql Tue Feb 08 10:20:26 2022 +0100 @@ -74,7 +74,7 @@ -- SELECT lives_ok($$ INSERT INTO users.list_users VALUES ( - 'waterway_user', 'test1', 'secret1$', 'AT', NULL, 'test1') + 'waterway_user', 'test1', 'secret1$', 'AT', NULL, 'test1', false, true) $$, 'New waterway user can be added'); @@ -112,7 +112,7 @@ INSERT INTO users.list_users VALUES ( 'waterway_user', 'Test Nutzer AT, Test User RO, Täst Nützer ÄT, Täst Üser RÖ', - 'secret1$', 'AT', NULL, 'test4') + 'secret1$', 'AT', NULL, 'test4', false, true) $$, 23514, NULL, 'User name length is restricted to 63 bytes'); @@ -201,7 +201,7 @@ SELECT lives_ok($$ INSERT INTO users.list_users VALUES ( - 'waterway_user', 'test2', 'secret1$', 'AT', NULL, 'test2'); + 'waterway_user', 'test2', 'secret1$', 'AT', NULL, 'test2', false, true); UPDATE users.list_users SET (rolname, username, pw, country, map_extent, email_address) = ('waterway_user', 'test2_new', 'new_secret1$', 'AT', @@ -336,7 +336,7 @@ -- See also comments in function definition. SELECT lives_ok($$ INSERT INTO users.list_users VALUES ( - 'waterway_user', 'test3', 'secret1$', 'AT', NULL, 'test3'); + 'waterway_user', 'test3', 'secret1$', 'AT', NULL, 'test3', false, true); DELETE FROM users.list_users WHERE username = 'test3' $$, 'Existing user can be deleted');
--- a/schema/std_login_roles.sql Wed Jul 21 15:14:40 2021 +0200 +++ b/schema/std_login_roles.sql Tue Feb 08 10:20:26 2022 +0100 @@ -52,7 +52,7 @@ -- Initial Admin account used to bootstrap the personalized accounts IF to_regrole(admin) IS NULL THEN INSERT INTO users.list_users VALUES ( - adminrole, admin, adminpw, dummy_country, box, ''); + adminrole, admin, adminpw, dummy_country, box, '', false, true); RAISE NOTICE 'Default admin user ''%'' created with password ''%''', admin, adminpw; ELSE
--- a/schema/tap_tests_data.sql Wed Jul 21 15:14:40 2021 +0200 +++ b/schema/tap_tests_data.sql Tue Feb 08 10:20:26 2022 +0100 @@ -52,17 +52,17 @@ INSERT INTO users.stretch_countries SELECT id, objnam FROM insert_st; INSERT INTO users.list_users VALUES ( - 'waterway_user', 'test_user_at', 'user_at1$', 'AT', NULL, 'xxx'); + 'waterway_user', 'test_user_at', 'user_at1$', 'AT', NULL, 'xxx', false, true); INSERT INTO users.list_users VALUES ( - 'waterway_user', 'test_user_ro', 'user_ro1$', 'RO', NULL, 'xxy'); + 'waterway_user', 'test_user_ro', 'user_ro1$', 'RO', NULL, 'xxy', false, true); INSERT INTO users.list_users VALUES ( - 'waterway_admin', 'test_admin_at', 'admin_at1$', 'AT', NULL, 'yyy'); + 'waterway_admin', 'test_admin_at', 'admin_at1$', 'AT', NULL, 'yyy', false, true); INSERT INTO users.list_users VALUES ( - 'waterway_admin', 'test_admin_at2', 'admin_at2$', 'AT', NULL, 'yyy'); + 'waterway_admin', 'test_admin_at2', 'admin_at2$', 'AT', NULL, 'yyy', false, true); INSERT INTO users.list_users VALUES ( - 'waterway_admin', 'test_admin_ro', 'admin_ro1$', 'RO', NULL, 'yyx'); + 'waterway_admin', 'test_admin_ro', 'admin_ro1$', 'RO', NULL, 'yyx', false, true); INSERT INTO users.list_users VALUES ( - 'sys_admin', 'test_sys_admin1', 'sys_admin1$', 'AT', NULL, 'zzz'); + 'sys_admin', 'test_sys_admin1', 'sys_admin1$', 'AT', NULL, 'zzz', false, true); INSERT INTO limiting_factors VALUES ('depth'), ('width');
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1464/01.active.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,100 @@ +ALTER TABLE internal.user_profiles + ADD COLUMN active boolean NOT NULL DEFAULT true; + +CREATE OR REPLACE VIEW users.list_users WITH (security_barrier) AS + SELECT + r.rolname, + p.username, + CAST('' AS varchar) AS pw, + p.country, + p.map_extent, + p.email_address, + p.report_reciever, + p.active + FROM internal.user_profiles p + JOIN pg_roles u ON p.username = u.rolname + JOIN pg_auth_members a ON u.oid = a.member + JOIN pg_roles r ON a.roleid = r.oid + WHERE p.username = current_user + OR pg_has_role('waterway_admin', 'MEMBER') + AND p.country = ( + SELECT country FROM internal.user_profiles + WHERE username = current_user) + AND r.rolname <> 'sys_admin' + OR pg_has_role('sys_admin', 'MEMBER'); + +CREATE OR REPLACE FUNCTION internal.update_user() RETURNS trigger +AS $$ +DECLARE + cur_username varchar; +BEGIN + cur_username = OLD.username; + + IF NEW.username <> cur_username + THEN + EXECUTE format( + 'ALTER ROLE %I RENAME TO %I', cur_username, NEW.username); + cur_username = NEW.username; + END IF; + + UPDATE internal.user_profiles p + SET (username, country, map_extent, email_address, report_reciever, active) + = (NEW.username, NEW.country, NEW.map_extent, NEW.email_address, NEW.report_reciever, NEW.active) + WHERE p.username = cur_username; + + IF NEW.rolname <> OLD.rolname + THEN + EXECUTE format( + 'REVOKE %I FROM %I', OLD.rolname, cur_username); + EXECUTE format( + 'GRANT %I TO %I', NEW.rolname, cur_username); + END IF; + + IF NEW.pw IS NOT NULL AND NEW.pw <> '' + THEN + EXECUTE format( + 'ALTER ROLE %I PASSWORD %L', + cur_username, + internal.check_password(NEW.pw)); + END IF; + + -- Do not leak new password + NEW.pw = ''; + RETURN NEW; +END; +$$ + LANGUAGE plpgsql + SECURITY DEFINER; + +CREATE OR REPLACE FUNCTION internal.create_user() RETURNS trigger +AS $$ +BEGIN + IF NEW.map_extent IS NULL + THEN + NEW.map_extent = ST_Extent(CAST(area AS geometry)) + FROM users.stretches st + JOIN users.stretch_countries stc ON stc.stretch_id = st.id + WHERE stc.country = NEW.country; + END IF; + + IF NEW.username IS NOT NULL + -- otherwise let the constraint on user_profiles speak + THEN + EXECUTE format( + 'CREATE ROLE %I IN ROLE %I LOGIN PASSWORD %L', + NEW.username, + NEW.rolname, + internal.check_password(NEW.pw)); + END IF; + + INSERT INTO internal.user_profiles ( + username, country, map_extent, email_address, report_reciever, active) + VALUES (NEW.username, NEW.country, NEW.map_extent, NEW.email_address, NEW.report_reciever, NEW.active); + + -- Do not leak new password + NEW.pw = ''; + RETURN NEW; +END; +$$ + LANGUAGE plpgsql + SECURITY DEFINER;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1465/01.delete_user.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,98 @@ + +CREATE OR REPLACE FUNCTION internal.create_user() RETURNS trigger +AS $$ +BEGIN + IF NEW.map_extent IS NULL + THEN + NEW.map_extent = ST_Extent(CAST(area AS geometry)) + FROM users.stretches st + JOIN users.stretch_countries stc ON stc.stretch_id = st.id + WHERE stc.country = NEW.country; + END IF; + + IF NEW.username IS NOT NULL + -- otherwise let the constraint on user_profiles speak + THEN + EXECUTE format( + 'CREATE ROLE %I IN ROLE %I LOGIN PASSWORD %L', + NEW.username, + NEW.rolname, + internal.check_password(NEW.pw)); + END IF; + + INSERT INTO internal.user_profiles ( + username, country, map_extent, email_address, + report_reciever, active) + VALUES (NEW.username, NEW.country, NEW.map_extent, NEW.email_address, + NEW.report_reciever, NEW.active); + + IF NEW.active THEN + EXECUTE format( + 'ALTER ROLE %I LOGIN', NEW.username); + ELSE + EXECUTE format( + 'ALTER ROLE %I NOLOGIN', NEW.username); + END IF; + + -- Do not leak new password + NEW.pw = ''; + RETURN NEW; +END; +$$ + LANGUAGE plpgsql + SECURITY DEFINER; + +CREATE OR REPLACE FUNCTION internal.update_user() RETURNS trigger +AS $$ +DECLARE + cur_username varchar; +BEGIN + cur_username = OLD.username; + + IF NEW.username <> cur_username + THEN + EXECUTE format( + 'ALTER ROLE %I RENAME TO %I', cur_username, NEW.username); + cur_username = NEW.username; + END IF; + + UPDATE internal.user_profiles p + SET (username, country, map_extent, email_address, + report_reciever, active) + = (NEW.username, NEW.country, NEW.map_extent, NEW.email_address, + NEW.report_reciever, NEW.active) + WHERE p.username = cur_username; + + IF NEW.rolname <> OLD.rolname + THEN + EXECUTE format( + 'REVOKE %I FROM %I', OLD.rolname, cur_username); + EXECUTE format( + 'GRANT %I TO %I', NEW.rolname, cur_username); + END IF; + + IF NEW.pw IS NOT NULL AND NEW.pw <> '' + THEN + EXECUTE format( + 'ALTER ROLE %I PASSWORD %L', + cur_username, + internal.check_password(NEW.pw)); + END IF; + + IF NEW.active <> OLD.active THEN + IF NEW.active THEN + EXECUTE format( + 'ALTER ROLE %I LOGIN', cur_username); + ELSE + EXECUTE format( + 'ALTER ROLE %I NOLOGIN', cur_username); + END IF; + END IF; + + -- Do not leak new password + NEW.pw = ''; + RETURN NEW; +END; +$$ + LANGUAGE plpgsql + SECURITY DEFINER;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1466/01.fix_ISRSrange_axis.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,106 @@ +CREATE OR REPLACE FUNCTION ISRSrange_axis( + stretch isrsrange, + tolerance float + -- in m, up to which linestrings will be connected at their boundary +) RETURNS geometry +AS $$ +DECLARE z int; +DECLARE result_geom geometry; +BEGIN + -- Find best matchting UTM zone + z = best_utm(stretch); + + CREATE TEMP TABLE axis AS + SELECT row_number() OVER () AS id, + geom AS wtwaxs, + ST_Boundary(geom) AS bdr + FROM waterway.waterway_axis, + ST_Dump(ST_Transform(wtwaxs::geometry, z)) + WHERE validity @> current_timestamp; + CREATE INDEX axs_bdr ON axis USING GiST (bdr); + ANALYZE axis; + + WITH RECURSIVE + -- In order to guarantee the following ST_Covers to work, + -- snap distance mark coordinates to axis + points0 AS ( + SELECT ST_ClosestPoint( + wtwaxs, + ST_Transform(geom, z)) AS geom + FROM ST_Dump(ISRSrange_points(stretch)), ( + SELECT ST_Collect(wtwaxs) AS wtwaxs + FROM axis) AS ax), + -- Ensure two distinct points on axis have been found + points AS ( + SELECT geom + FROM points0 + WHERE 2 = (SELECT count(DISTINCT geom) FROM points0)), + axis_snapped AS ( + -- Iteratively connect non-contiguous axis chunks + -- to find the contiguous axis on which given distance marks lie + (SELECT ARRAY[id] AS ids, wtwaxs + FROM axis, points + WHERE ST_Intersects( + ST_Buffer(axis.wtwaxs, 0.0001), points.geom) + FETCH FIRST ROW ONLY) + UNION + -- Connect endpoint of next linestring with closest + -- endpoint of merged linestring until a contiguous + -- linestring connecting both distance marks is build up + (SELECT refids || id, + ST_LineMerge(ST_Collect(ARRAY( + -- Linestring build up so far + SELECT refgeom + UNION + -- Fill eventual gap + SELECT ST_ShortestLine( + ST_Boundary(refgeom), bdr) + UNION + -- Linestring to be added + SELECT geom))) + FROM axis_snapped AS axis_snapped (refids, refgeom), + axis AS axis (id, geom, bdr), + (SELECT ST_Collect(points.geom) AS pts + FROM points) AS points + WHERE id <> ALL(refids) + AND ST_DWithin( + ST_Boundary(refgeom), bdr, tolerance) + AND NOT ST_Covers(ST_Buffer(refgeom, 0.0001), points.pts) + ORDER BY ST_Boundary(refgeom) <-> bdr + FETCH FIRST ROW ONLY)), + axis_segment AS ( + -- Fetch end result from snapping + SELECT wtwaxs AS line + FROM axis_snapped, + (SELECT ST_Collect(points.geom) AS pts + FROM points) AS points + -- Return end result only if both distance marks were connected + WHERE ST_Covers(ST_Buffer(wtwaxs, 0.0001), points.pts)) + -- Use linear referencing to clip axis between distance marks. + -- Simplification is used to work-around the problem, that + -- ST_LineSubstring might generate very small line segments at an + -- end of the resulting linestring, that significantly differ from + -- the direction of the input linestring due to finite precision + -- of the calculation. The generated small segment of the + -- resulting line would lead e.g. to unexpected results in an area + -- generated by ISRSrange_area(). + SELECT ST_SimplifyPreserveTopology(ST_LineSubstring( + axis_segment.line, min(fractions.f), max(fractions.f)), + 0.0001) AS line + INTO STRICT result_geom + FROM axis_segment, LATERAL ( + SELECT ST_LineLocatePoint(axis_segment.line, points.geom) AS f + FROM points) AS fractions + GROUP BY axis_segment.line; + + -- Drop temporary table to avoid side effects on PostgreSQL's MVCC, + -- because otherwise subsequent invocations of the function will not see + -- changes on the underlying waterway.waterway_axis that might have + -- occured. + DROP TABLE axis; + + RETURN result_geom; +END; + $$ + LANGUAGE plpgsql + PARALLEL RESTRICTED;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1466/02.fix_bn_areas.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,43 @@ +DO $$ +DECLARE + bns CURSOR FOR SELECT * FROM waterway.bottlenecks FOR UPDATE; + call_stack text; +BEGIN + FOR cur_bn IN bns LOOP + BEGIN + UPDATE waterway.bottlenecks bn SET area = ISRSrange_area( + ISRSrange_axis(stretch, + COALESCE(( + -- Guess tolerance from the last successful + -- bottleneck import owned by a waterway_admin of + -- the country matching the bottleneck_id + SELECT DISTINCT ON (usr.country) + CAST(substring(msg FROM '((\d*\.)?\d+)$') + AS float) + FROM import.import_logs log + JOIN import.imports imp + ON log.import_id = imp.id + JOIN users.list_users usr USING (username) + WHERE starts_with(log.msg, + 'Tolerance used to snap waterway axis:') + AND imp.kind = 'bn' + AND imp.state IN('accepted', 'reviewed') + AND usr.rolname = 'waterway_admin' + AND usr.country = substring( + bn.bottleneck_id FROM 1 FOR 2) + ORDER BY usr.country, imp.changed DESC), + -- Use default tolerance if originally used cannot + -- be determined + 5)), + (SELECT ST_Collect(CAST(area AS geometry)) + FROM waterway.waterway_area)) + WHERE CURRENT OF bns; + EXCEPTION + WHEN no_data_found THEN + GET STACKED DIAGNOSTICS call_stack = PG_EXCEPTION_CONTEXT; + RAISE WARNING '% (%): %, CONTEXT: %', + cur_bn.bottleneck_id, cur_bn.validity, + SQLERRM, call_stack; + END; + END LOOP; +END $$;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1467/01.improve_ISRSrange_axis.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,101 @@ +CREATE OR REPLACE FUNCTION ISRSrange_axis( + stretch isrsrange, + tolerance float + -- in m, up to which linestrings will be connected at their boundary +) RETURNS geometry +AS $$ +DECLARE z int; +DECLARE result_geom geometry; +BEGIN + -- Find best matchting UTM zone + z = best_utm(stretch); + + CREATE TEMP TABLE axis AS + SELECT row_number() OVER () AS id, + geom AS wtwaxs, + ST_Boundary(geom) AS bdr + FROM waterway.waterway_axis, + ST_Dump(ST_Transform(wtwaxs::geometry, z)) + WHERE validity @> current_timestamp; + CREATE INDEX axs_bdr ON axis USING GiST (bdr); + ANALYZE axis; + + WITH RECURSIVE + -- In order to guarantee the following ST_Covers to work, + -- snap distance mark coordinates to axis + points0 AS ( + SELECT ST_ClosestPoint( + wtwaxs, + ST_Transform(geom, z)) AS geom + FROM ST_Dump(ISRSrange_points(stretch)), ( + SELECT ST_Collect(wtwaxs) AS wtwaxs + FROM axis) AS ax), + -- Ensure two distinct points on axis have been found + points AS ( + SELECT geom + FROM points0 + WHERE 2 = (SELECT count(DISTINCT geom) FROM points0)), + axis_snapped AS ( + -- Iteratively connect non-contiguous axis chunks + -- to find the contiguous axis on which given distance marks lie + (SELECT ARRAY[id] AS ids, wtwaxs + FROM axis, points + WHERE ST_DWithin(axis.wtwaxs, points.geom, 0.0001) + FETCH FIRST ROW ONLY) + UNION + -- Connect endpoint of next linestring with closest + -- endpoint of merged linestring until a contiguous + -- linestring connecting both distance marks is build up + (SELECT refids || id, + ST_LineMerge(ST_Collect(ARRAY( + -- Linestring build up so far + SELECT refgeom + UNION + -- Fill eventual gap + SELECT ST_ShortestLine(refbdr, bdr) + UNION + -- Linestring to be added + SELECT geom))) + FROM axis_snapped AS axis_snapped (refids, refgeom), + axis AS axis (id, geom, bdr), + ST_Boundary(refgeom) AS refbdr (refbdr) + WHERE id <> ALL(refids) + AND ST_DWithin(refbdr, bdr, tolerance) + -- Stop if refgeom goes through both distance marks + AND NOT 0.0001 >= ALL(SELECT refgeom <-> geom FROM points) + ORDER BY refbdr <-> bdr + FETCH FIRST ROW ONLY)), + axis_segment AS ( + -- Fetch end result from snapping + SELECT wtwaxs AS line + FROM axis_snapped + -- Return end result only if both distance marks were connected + WHERE 0.0001 >= ALL(SELECT wtwaxs <-> geom FROM points)) + -- Use linear referencing to clip axis between distance marks. + -- Simplification is used to work-around the problem, that + -- ST_LineSubstring might generate very small line segments at an + -- end of the resulting linestring, that significantly differ from + -- the direction of the input linestring due to finite precision + -- of the calculation. The generated small segment of the + -- resulting line would lead e.g. to unexpected results in an area + -- generated by ISRSrange_area(). + SELECT ST_SimplifyPreserveTopology(ST_LineSubstring( + axis_segment.line, min(fractions.f), max(fractions.f)), + 0.0001) AS line + INTO STRICT result_geom + FROM axis_segment, LATERAL ( + SELECT ST_LineLocatePoint(axis_segment.line, points.geom) AS f + FROM points) AS fractions + GROUP BY axis_segment.line; + + -- Drop temporary table to avoid side effects on PostgreSQL's MVCC, + -- because otherwise subsequent invocations of the function will not see + -- changes on the underlying waterway.waterway_axis that might have + -- occured. + DROP TABLE axis; + + RETURN result_geom; +END; + $$ + LANGUAGE plpgsql + PARALLEL RESTRICTED;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1468/01.makevalid_isrsrange_area.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,51 @@ +CREATE OR REPLACE FUNCTION ISRSrange_area( + axis geometry, + area geometry +) RETURNS geometry +AS $$ +DECLARE + area_subset geometry; + result_geom geometry; +BEGIN + -- In case area is a multipolygon, process the union of those + -- polygons, which intersect with the axis. The union is to avoid + -- problems with invalid/self-intersecting multipolygons + SELECT ST_Union(a_dmp.geom) + INTO STRICT area_subset + FROM (SELECT ST_MakeValid(ST_Transform(geom, ST_SRID(axis))) + FROM ST_Dump(area)) AS a_dmp (geom) + WHERE ST_Intersects(a_dmp.geom, axis) + HAVING ST_Union(a_dmp.geom) IS NOT NULL; + + WITH + rotated_ends AS ( + SELECT ST_Collect(ST_Scale( + ST_Translate(e, + (ST_X(p1) - ST_X(p2)) / 2, + (ST_Y(p1) - ST_Y(p2)) / 2), + ST_Point(d, d), p1)) AS blade + FROM (SELECT i, ST_PointN(axis, i) AS p1 + FROM (VALUES (1), (-1)) AS idx (i)) AS ep, + ST_Rotate(ST_PointN(axis, i*2), pi()/2, p1) AS ep2 (p2), + ST_Makeline(p1, p2) AS e (e), + LATERAL ( + SELECT (ST_MaxDistance(p1, area_subset) / ST_Length(e)) + * 2) AS d (d)), + range_area AS ( + -- Split area by orthogonal lines at the ends of the clipped axis + SELECT (ST_Dump(ST_CollectionExtract( + ST_Split(area_subset, blade), 3))).geom + FROM rotated_ends) + -- From the polygons returned by the last CTE, select only those + -- around the clipped axis + SELECT ST_Multi(ST_MakeValid(ST_Transform( + ST_Union(range_area.geom), ST_SRID(area)))) + INTO result_geom + FROM range_area + WHERE ST_Intersects(ST_Buffer(range_area.geom, -0.0001), axis); + + RETURN result_geom; +END; + $$ + LANGUAGE plpgsql + STABLE PARALLEL SAFE;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1469/01.fix_isrsrange_area.sql Tue Feb 08 10:20:26 2022 +0100 @@ -0,0 +1,51 @@ +CREATE OR REPLACE FUNCTION ISRSrange_area( + axis geometry, + area geometry +) RETURNS geometry +AS $$ +DECLARE + area_subset geometry; + result_geom geometry; +BEGIN + -- In case area is a multipolygon, process the union of those + -- polygons, which intersect with the axis. The union is to avoid + -- problems with invalid/self-intersecting multipolygons + SELECT ST_Union(a_dmp.geom) + INTO STRICT area_subset + FROM (SELECT ST_MakeValid(ST_Transform(geom, ST_SRID(axis))) + FROM ST_Dump(area)) AS a_dmp (geom) + WHERE ST_Intersects(a_dmp.geom, axis) + HAVING ST_Union(a_dmp.geom) IS NOT NULL; + + WITH + rotated_ends AS ( + SELECT ST_Collect(ST_Scale( + ST_Translate(e, + (ST_X(p1) - ST_X(p2)) / 2, + (ST_Y(p1) - ST_Y(p2)) / 2), + ST_Point(d, d), p1)) AS blade + FROM (SELECT i, ST_PointN(axis, i) AS p1 + FROM (VALUES (1), (-1)) AS idx (i)) AS ep, + ST_Rotate(ST_PointN(axis, i*2), pi()/2, p1) AS ep2 (p2), + ST_Makeline(p1, p2) AS e (e), + LATERAL ( + SELECT (ST_MaxDistance(p1, area_subset) / ST_Length(e)) + * 2) AS d (d)), + range_area AS ( + -- Split area by orthogonal lines at the ends of the clipped axis + SELECT (ST_Dump(ST_CollectionExtract( + ST_Split(area_subset, blade), 3))).geom + FROM rotated_ends) + -- From the polygons returned by the last CTE, select only those + -- around the clipped axis + SELECT ST_Multi(ST_CollectionExtract(ST_MakeValid(ST_Transform( + ST_Union(range_area.geom), ST_SRID(area))), 3)) + INTO result_geom + FROM range_area + WHERE ST_Intersects(ST_Buffer(range_area.geom, -0.0001), axis); + + RETURN result_geom; +END; + $$ + LANGUAGE plpgsql + STABLE PARALLEL SAFE;