@kalisio/kdk 2.4.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,7 @@
22
22
  import _ from 'lodash'
23
23
  import moment from 'moment'
24
24
  import { computed } from 'vue'
25
+ import { Time } from '../../time.js'
25
26
 
26
27
  // Props
27
28
  const props = defineProps({
@@ -66,7 +67,9 @@ const model = computed({
66
67
  }
67
68
  })
68
69
  const format = computed(() => {
69
- return _.get(props.options, 'format', mask)
70
+ const dateDateFormat = _.get(Time.getFormat(), 'date.short')
71
+ const defaultYearFormat = _.get(Time.getFormat(), 'year.long')
72
+ return _.get(props.options, 'format', `${dateDateFormat}/${defaultYearFormat}`)
70
73
  })
71
74
  const picker = computed(() => {
72
75
  return _.merge({}, _.get(props.options, 'picker'), { mask })
@@ -3,7 +3,7 @@
3
3
  <!-- Start dateTime -->
4
4
  <KDateTime
5
5
  v-model="startModel"
6
- :options="props.options"
6
+ :options="props.options.dateTime || props.options"
7
7
  :min="props.min"
8
8
  :max="props.max"
9
9
  :disabled="disabled"
@@ -15,7 +15,7 @@
15
15
  <!-- End dateTime -->
16
16
  <KDateTime
17
17
  v-model="endModel"
18
- :options="props.options"
18
+ :options="props.options.dateTime || props.options"
19
19
  :min="startDateTime ? startDateTime.toISOString() : null"
20
20
  :max="props.max"
21
21
  :disabled="disabled || startDateTime === null"
@@ -22,6 +22,7 @@
22
22
  import _ from 'lodash'
23
23
  import moment from 'moment'
24
24
  import { computed } from 'vue'
25
+ import { Time } from '../../time.js'
25
26
 
26
27
  // Props
27
28
  const props = defineProps({
@@ -66,7 +67,8 @@ const model = computed({
66
67
  }
67
68
  })
68
69
  const format = computed(() => {
69
- return _.get(props.options, 'format', mask.substring(0, 5))
70
+ const defaultFormat = _.get(Time.getFormat(), 'time.long')
71
+ return _.get(props.options, 'format', defaultFormat)
70
72
  })
71
73
  const picker = computed(() => {
72
74
  return _.merge({}, _.get(props.options, 'picker'), { mask })
@@ -18,7 +18,7 @@ export const Time = {
18
18
  const end = now.clone().endOf('day')
19
19
  // Try to guess user timezone
20
20
  const timezone = moment.tz.guess() || ''
21
- Store.set('time', _.merge(config.time || {}, {
21
+ Store.set('time', _.defaultsDeep(config.time || {}, {
22
22
  range: {
23
23
  start,
24
24
  end,
@@ -24,6 +24,7 @@ const TiledFeatureLayer = L.GridLayer.extend({
24
24
  return getFeatureId(feature, this.layer)
25
25
  }
26
26
 
27
+ this.probeSource = options.probeSource
27
28
  this.featureSource = options.featureSource
28
29
 
29
30
  this.flyingTiles = new Map()
@@ -365,9 +366,7 @@ const TiledFeatureLayer = L.GridLayer.extend({
365
366
  // may have children tiles too, these will get updated also.
366
367
  const featureRequests = this.mergeRequests(tilesWithFeaturesRequest)
367
368
  featureRequests.forEach((r) => {
368
- const promise = this.layer.probeService
369
- ? this.activity.getProbeFeatures(_.merge({ baseQuery: r.query }, this.layer))
370
- : this.featureSource(r.query)
369
+ const promise = this.layer.probeService ? this.probeSource(r.query) : this.featureSource(r.query)
371
370
  r.tiles.forEach((tile) => {
372
371
  tile.featuresRequest = promise
373
372
 
@@ -198,7 +198,8 @@ export const geojsonLayers = {
198
198
  leafletOptions.removeMissing = false
199
199
  // Fetching is managed by tiles but even for manual update leaflet realtime require a src
200
200
  _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})
201
- // Generate fetch function for tiled feature layer
201
+ // Generate fetch functions for tiled feature layer
202
+ leafletOptions.probeSource = (baseQuery) => this.getProbeFeatures(_.merge({ baseQuery }, options))
202
203
  leafletOptions.featureSource = (baseQuery) => this.getFeatures(_.merge({ baseQuery }, options))
203
204
  } else {
204
205
  leafletOptions.removeMissing = !options.probeService
@@ -43,6 +43,16 @@ export function getFeatureId (feature, layer) {
43
43
  return featureId.map(id => _.get(feature, 'properties.' + id, _.get(feature, id))).join('-')
44
44
  }
45
45
 
46
+ export function getFeatureLabel (feature, layer) {
47
+ // Support compound labels
48
+ let featureLabel = layer.featureLabel || 'name'
49
+ featureLabel = (Array.isArray(featureLabel) ? featureLabel : [featureLabel])
50
+ return featureLabel.reduce((result, label) => {
51
+ label = _.get(feature, `properties.${label}`)
52
+ return (result ? result + ` - ${label}` : label)
53
+ }, '')
54
+ }
55
+
46
56
  export function formatUserCoordinates (lat, lon, format, options) {
47
57
  if (format === 'aeronautical') {
48
58
  const coords = formatcoords(lat, lon)
@@ -1,10 +1,12 @@
1
1
  import _ from 'lodash'
2
2
  import moment from 'moment'
3
+ import centroid from '@turf/centroid'
3
4
  import { Time, Units, i18n } from '../../../core/client/index.js'
4
5
  import { isMeasureLayer } from './utils.layers.js'
5
6
  import { getMeasureForFeature } from './utils.features.js'
6
7
  import { getForecastForLocation, getForecastProbe, getForecastForFeature } from './utils.weacast.js'
7
8
 
9
+ // Extract target variable data for timeseries from timeseries request result
8
10
  async function getDataForVariable(data, variable, forecastLevel, runTime) {
9
11
  data = await data
10
12
  const times = _.get(data, 'time', _.get(data, 'forecastTime', {}))
@@ -28,9 +30,10 @@ async function getDataForVariable(data, variable, forecastLevel, runTime) {
28
30
  return values
29
31
  }
30
32
 
31
- async function fetchDataForSeries({
33
+ // Retrieve data coming from a weather forecast request for timeseries
34
+ async function fetchDataForForecastSeries({
32
35
  feature, location, layer, startTime, endTime,
33
- level, forecastModel, forecastLevel, probeFunction, weacastApi
36
+ forecastModel, forecastLevel, weacastApi
34
37
  }) {
35
38
  // Use current time range if not provided
36
39
  const { start, end } = Time.getRange()
@@ -40,16 +43,13 @@ async function fetchDataForSeries({
40
43
  let data
41
44
  // No feature clicked => custom probe function or dynamic weacast probe at position
42
45
  if (!feature) {
43
- if (probeFunction) data = await probeFunction({ longitude: location.lng, latitude: location.lat, startTime, endTime })
44
- else data = await getForecastForLocation({ longitude: location.lng, latitude: location.lat, startTime, endTime, forecastModel, forecastLevel, weacastApi })
46
+ data = await getForecastForLocation({ longitude: location.lng, latitude: location.lat, startTime, endTime, forecastModel, forecastLevel, weacastApi })
45
47
  } else if (layer.probe) { // Static weacast probe
46
48
  const probe = await getForecastProbe({ name: layer.probe, forecastModel, weacastApi })
47
49
  if (probe) {
48
50
  data = await getForecastForFeature({ probe, featureId: _.get(feature, probe.featureId), startTime, endTime, forecastModel, forecastLevel, weacastApi })
49
51
  }
50
- } else if (isMeasureLayer(layer)) { // Static measure probe
51
- data = await getMeasureForFeature(layer, feature, startTime, endTime, level)
52
- } else { // dynamic weacast probe at feature position
52
+ } else { // Dynamic weacast probe at feature position
53
53
  const location = centroid(feature)
54
54
  const longitude = _.get(location, 'geometry.coordinates[0]')
55
55
  const latitude = _.get(location, 'geometry.coordinates[1]')
@@ -58,12 +58,89 @@ async function fetchDataForSeries({
58
58
  return data
59
59
  }
60
60
 
61
+ // Retrieve data coming from a measure request for timeseries
62
+ // Can also use a custom probing function if provided
63
+ async function fetchDataForMeasureSeries({
64
+ feature, location, layer, startTime, endTime, level, probeFunction
65
+ }) {
66
+ // Use current time range if not provided
67
+ const { start, end } = Time.getRange()
68
+ if (!startTime) startTime = start
69
+ if (!endTime) endTime = end
70
+ // Depending on input use the right function to retrieve data
71
+ let data
72
+ // No feature clicked => custom probe function or dynamic weacast probe at position
73
+ if (probeFunction) {
74
+ data = await probeFunction({ feature, location, layer, level, startTime, endTime })
75
+ } else if (isMeasureLayer(layer)) { // Static measure probe
76
+ data = await getMeasureForFeature(layer, feature, startTime, endTime, level)
77
+ }
78
+ return data
79
+ }
80
+
61
81
  // Build timeseries to be used in charts for target feature and associated layer definition or probe location
62
- export function getTimeSeries({
82
+ export function getForecastTimeSeries({
83
+ feature, location, layer, startTime, endTime, runTime,
84
+ forecastLayers, forecastModel, forecastLevel, weacastApi, fetchDelay
85
+ }) {
86
+ let forecastVariables = []
87
+ if (forecastLayers && forecastLayers.length > 0) forecastLayers.forEach(layer => { forecastVariables = forecastVariables.concat(_.get(layer, 'variables', [])) })
88
+ forecastVariables = _.uniqBy(forecastVariables, 'name')
89
+ if (forecastVariables.length === 0) return []
90
+ const properties = _.get(feature, 'properties', {})
91
+ // Create promise to fetch data as it will be shared by all series,
92
+ // indeed a weather forecast request gets all aggregated variables
93
+ const forecastData = fetchDataForForecastSeries({
94
+ feature, location, layer, startTime, endTime, forecastModel, forecastLevel, weacastApi
95
+ })
96
+ // Fetch data function to request data update,
97
+ // we use debounce as a weather forecast request stores all aggregated variables
98
+ // so that when all series are updated at once a single query will be send.
99
+ const fetchForecast = _.debounce(() => fetchDataForForecastSeries({
100
+ feature, location, layer, startTime, endTime, forecastModel, forecastLevel, weacastApi
101
+ }), fetchDelay || 250, { leading: true, trailing: false })
102
+
103
+ const series = forecastVariables.map(variable => {
104
+ // Base unit could be either directly the unit or the property of the measure storing the unit
105
+ const baseUnit = _.get(properties, 'unit', variable.unit)
106
+ // Known by the unit system ?
107
+ const unit = Units.getUnit(baseUnit)
108
+ const targetUnit = Units.getTargetUnit(baseUnit)
109
+ const serie = {
110
+ probedLocationData: forecastData,
111
+ data: getDataForVariable(forecastData, variable, forecastLevel, runTime),
112
+ variable: {
113
+ name: variable.name,
114
+ label: `${i18n.tie(variable.label)} (${Units.getTargetUnitSymbol(baseUnit)})`,
115
+ unit,
116
+ targetUnit,
117
+ chartjs: Object.assign({
118
+ parsing: {
119
+ xAxisKey: 'time',
120
+ yAxisKey: (forecastLevel ? `${variable.name}-${forecastLevel}` : variable.name)
121
+ },
122
+ cubicInterpolationMode: 'monotone',
123
+ tension: 0.4
124
+ }, _.cloneDeep(variable.chartjs))
125
+ }
126
+ }
127
+ serie.fetch = () => {
128
+ serie.probedLocationData = fetchForecast()
129
+ serie.data = getDataForVariable(serie.probedLocationData, variable, forecastLevel, runTime)
130
+ return serie.data
131
+ }
132
+ return serie
133
+ })
134
+
135
+ return series
136
+ }
137
+
138
+ // Build timeseries to be used in charts for target feature and associated layer definition or probe location
139
+ export function getMeasureTimeSeries({
63
140
  feature, location, layer, layers, startTime, endTime, runTime,
64
- level, forecastModel, forecastLevel, probeFunction, weacastApi, fetchDelay
141
+ level, probeFunction, fetchDelay
65
142
  }) {
66
- // A feature comes from a single layer so target variables from it
143
+ // A feature comes from a single layer so target variables from it by default
67
144
  let variables = _.get(layer, 'variables', [])
68
145
  // However, a probe can target variables coming from multiple layers
69
146
  if (layers && layers.length > 0) layers.forEach(layer => { variables = variables.concat(_.get(layer, 'variables', [])) })
@@ -71,18 +148,16 @@ export function getTimeSeries({
71
148
  if (variables.length === 0) return []
72
149
  const properties = _.get(feature, 'properties', {})
73
150
  // Create promise to fetch data as it will be shared by all series,
74
- // indeed a measure stores all aggregated variables
75
- const data = fetchDataForSeries({
76
- feature, location, layer, startTime, endTime,
77
- level, forecastModel, forecastLevel, probeFunction, weacastApi
151
+ // indeed a measure request gets all aggregated variables
152
+ const data = fetchDataForMeasureSeries({
153
+ feature, location, layer, startTime, endTime, level, probeFunction
78
154
  })
79
155
  // Fetch data function to request data update,
80
- // we use debounce as a measure stores all aggregated variables
156
+ // we use debounce as a measure request stores all aggregated variables
81
157
  // so that when all series are updated at once a single query will be send.
82
- const fetch = _.debounce(() => fetchDataForSeries({
83
- feature, location, layer, startTime, endTime,
84
- level, forecastModel, forecastLevel, probeFunction, weacastApi
85
- }), fetchDelay || 250, { leading: true, trailing: false })
158
+ const fetch = _.debounce(() => fetchDataForMeasureSeries({
159
+ feature, location, layer, startTime, endTime, level, probeFunction
160
+ }), fetchDelay || 250, { leading: true, trailing: false })
86
161
 
87
162
  const series = variables.map(variable => {
88
163
  // Base unit could be either directly the unit or the property of the measure storing the unit
@@ -91,8 +166,8 @@ export function getTimeSeries({
91
166
  const unit = Units.getUnit(baseUnit)
92
167
  const targetUnit = Units.getTargetUnit(baseUnit)
93
168
  const serie = {
94
- probedLocation: data,
95
- data: getDataForVariable(data, variable, forecastLevel),
169
+ probedLocationData: data,
170
+ data: getDataForVariable(data, variable),
96
171
  variable: {
97
172
  name: variable.name,
98
173
  label: `${i18n.tie(variable.label)} (${Units.getTargetUnitSymbol(baseUnit)})`,
@@ -101,17 +176,16 @@ export function getTimeSeries({
101
176
  chartjs: Object.assign({
102
177
  parsing: {
103
178
  xAxisKey: 'time',
104
- yAxisKey: (forecastLevel ? `${variable.name}-${forecastLevel}` : variable.name)
179
+ yAxisKey: variable.name
105
180
  },
106
181
  cubicInterpolationMode: 'monotone',
107
182
  tension: 0.4
108
183
  }, _.cloneDeep(variable.chartjs))
109
184
  }
110
185
  }
111
- // FIXME: how to share promise between series ?
112
186
  serie.fetch = () => {
113
- serie.probedLocation = fetch()
114
- serie.data = getDataForVariable(serie.probedLocation, variable, forecastLevel, runTime)
187
+ serie.probedLocationData = fetch()
188
+ serie.data = getDataForVariable(serie.probedLocationData, variable)
115
189
  return serie.data
116
190
  }
117
191
  return serie
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kalisio/kdk",
3
3
  "description": "Kalisio Development Kit",
4
- "version": "2.4.0",
4
+ "version": "2.4.1",
5
5
  "homepage": "https://github.com/kalisio/kdk",
6
6
  "type": "module",
7
7
  "keywords": [
File without changes
@@ -0,0 +1,30 @@
1
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
2
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
3
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
4
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
5
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
6
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
7
+ {"level":"error","message":"Could not connect to mongodb database(s), please check your configuration failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]","name":"MongoNetworkError","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {\n name: 'MongoNetworkError'\n}]\n at Pool.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/topologies/server.js:441:11)\n at Pool.emit (node:events:519:28)\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:564:14\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/pool.js:1000:11\n at /home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:32:7\n at callback (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:300:5)\n at Socket.<anonymous> (/home/luc/Development/kalisio/kdk/node_modules/mongodb/lib/core/connection/connect.js:330:7)\n at Object.onceWrapper (node:events:634:26)\n at Socket.emit (node:events:519:28)\n at emitErrorNT (node:internal/streams/destroy:169:8)\n at emitErrorCloseNT (node:internal/streams/destroy:128:3)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
8
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
9
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
10
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
11
+ {"level":"error","message":"error: api/tags - Method: create: You are not allowed to access service tags"}
12
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
13
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
14
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to change authorisation on resource"}
15
+ {"level":"error","message":"error: api/authorisations - Method: remove: You are not allowed to change authorisation on subject(s)"}
16
+ {"level":"info","message":"This is a log test"}
17
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
18
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
19
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
20
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
21
+ {"level":"error","message":"error: api/storage - Method: get: The specified key does not exist."}
22
+ {"level":"error","message":"error: api/storage - Method: get: The specified key does not exist."}
23
+ {"level":"error","message":"error: api/organisations - Method: create: You are not allowed to access service organisations"}
24
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
25
+ {"level":"error","message":"error: api/674ecb93d03838d4be0587a4/storage - Method: get: You are not allowed to access service 674ecb93d03838d4be0587a4/storage"}
26
+ {"level":"error","message":"error: api/674ecb93d03838d4be0587a4/groups - Method: create: You are not allowed to perform create operation on groups"}
27
+ {"level":"error","message":"error: api/674ecb93d03838d4be0587a4/groups - Method: patch: You are not allowed to perform patch operation on groups"}
28
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
29
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
30
+ {"level":"error","message":"error: api/users - Method: remove: You are not allowed to delete the user undefined"}