fleetmap-reports 2.0.354 → 2.0.357

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "2.0.354",
3
+ "version": "2.0.357",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -1,5 +1,5 @@
1
1
  const traccarHelper = require('../util/traccar')
2
- const { getDriverData } = require('../util/driver')
2
+ const { getDriverData, devicesByDriver } = require('../util/driver')
3
3
  const { getCanDriverStyleMessages, parseCanDriverStyleMessage } = require('../util/xpert')
4
4
  const { calculateRPMSections } = require('./performance-report')
5
5
  const { getTranslations, isClientSide, convertToLocaleString, convertMS } = require('../util/utils')
@@ -29,10 +29,12 @@ async function create (from, to, userData, traccar) {
29
29
  drivers: []
30
30
  }
31
31
 
32
- const devices = userData.devices
33
32
  userData.geofences = []
34
33
  userData.roadSpeedLimits = true
35
34
 
35
+ const { devices, drivers } = await devicesByDriver(traccar, from, to, userData.drivers, userData.devices)
36
+ userData.drivers = drivers
37
+
36
38
  let deviceCount = 0
37
39
  const driversData = new Map()
38
40
  const overspeedEvents = await getOverspeedEvents(from, to, userData, devices, userData, traccar)
@@ -65,6 +67,9 @@ async function create (from, to, userData, traccar) {
65
67
  await processDevice(driversData, device, userData, { route, trips }, deviceAlarmEvents, deviceOverspeedEvents)
66
68
  deviceCount++
67
69
  }
70
+
71
+ console.log('LOADING_MESSAGE:' + slice[0].name)
72
+ console.log(`PROGRESS_PERC:${deviceCount / devices.length * 100}`)
68
73
  }
69
74
 
70
75
  const allDriversData = (Array.from(driversData.values())).filter(d => d.distance > 0)
@@ -132,7 +132,17 @@ async function getEvents (traccarInstance, from, to, devices, userData, deviceCo
132
132
  if (processServerSide() && !userData.useVehicleSpeedLimit) {
133
133
  const cookie = await axios.get('/pinmeapi/cookie/get', { withCredentials: true }).then(d => d.data)
134
134
  const url = `https://${getServerHost()}/pinmeapi/reports/speeding-report/getEvents`
135
- return axios.post(url, { from, to, devices, userData, deviceCount, totalDevices, sliceSize, cookie }, { withCredentials: true }).then(d => d.data)
135
+ const maxAttempts = 3
136
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
137
+ try {
138
+ return await axios.post(url, { from, to, devices, userData, deviceCount, totalDevices, sliceSize, cookie }, { withCredentials: true, timeout: 60000 }).then(d => d.data)
139
+ } catch (e) {
140
+ console.log(`getEvents failed for devices [${devices.map(d => d.name).join(', ')}] (attempt ${attempt}/${maxAttempts}): ${e.message}`)
141
+ if (attempt === maxAttempts) {
142
+ return []
143
+ }
144
+ }
145
+ }
136
146
  } else {
137
147
  const geofencesFeatures = userData.geofences.filter(g => g.area && g.area.startsWith('POLYGON') &&
138
148
  g.attributes.speedLimit).map(g => convertToFeature(g))
package/src/util/utils.js CHANGED
@@ -115,6 +115,7 @@ function getDates (startDate, endDate, timezone) {
115
115
  let currentDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), 12, 0, 0, 0)
116
116
  let _endDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate(), 23, 59, 59, 0)
117
117
 
118
+ timezone = safeTimezone(timezone)
118
119
  if (!isClientSide() && timezone) {
119
120
  const startDateUserTimezone = convertFromUTC(startDate, timezone)
120
121
  currentDate = new Date(startDateUserTimezone.getFullYear(), startDateUserTimezone.getMonth(), startDateUserTimezone.getDate(), 12, 0, 0, 0)
@@ -160,13 +161,25 @@ async function getImgFromUrl (hostname) {
160
161
 
161
162
  function isClientSide () { return (typeof window !== 'undefined') }
162
163
 
164
+ // Guards against corrupt user attributes (e.g. timezone === true) reaching Intl,
165
+ // which throws RangeError: Invalid time zone specified
166
+ function safeTimezone (timezone) {
167
+ if (typeof timezone !== 'string' || !timezone) return undefined
168
+ try {
169
+ Intl.DateTimeFormat(undefined, { timeZone: timezone })
170
+ return timezone
171
+ } catch (e) {
172
+ return undefined
173
+ }
174
+ }
175
+
163
176
  function convertToLocaleString (value, lang, timezone, user) {
164
177
  if (isClientSide()) {
165
178
  return new Date(value).toLocaleString()
166
179
  }
167
180
  if ((lang && timezone) || user) {
168
181
  return new Date(value).toLocaleString(lang || getUserPartner(user).lang, {
169
- timeZone: timezone || getUserPartner(user).timezone,
182
+ timeZone: safeTimezone(timezone) || safeTimezone(user && getUserPartner(user).timezone),
170
183
  hour12: false
171
184
  })
172
185
  }
@@ -178,7 +191,7 @@ function convertToLocaleDateString (value, lang, timezone, user) {
178
191
  return new Date(value).toLocaleDateString()
179
192
  } else {
180
193
  return new Date(value).toLocaleDateString(lang || getUserPartner(user).lang, {
181
- timeZone: timezone || getUserPartner(user).timezone,
194
+ timeZone: safeTimezone(timezone) || safeTimezone(user && getUserPartner(user).timezone),
182
195
  hour12: false
183
196
  })
184
197
  }
@@ -189,7 +202,7 @@ function convertToLocaleTimeString (value, lang, timezone, user) {
189
202
  return new Date(value).toLocaleTimeString()
190
203
  } else {
191
204
  return new Date(value).toLocaleTimeString(lang || getUserPartner(user).lang, {
192
- timeZone: timezone || getUserPartner(user).timezone,
205
+ timeZone: safeTimezone(timezone) || safeTimezone(user && getUserPartner(user).timezone),
193
206
  hour12: false
194
207
  })
195
208
  }
@@ -199,6 +212,10 @@ function getTimezoneOffset (timezone, date = new Date()) {
199
212
  if (isClientSide()) {
200
213
  return date.getTimezoneOffset()
201
214
  } else {
215
+ timezone = safeTimezone(timezone)
216
+ if (!timezone) {
217
+ return 0
218
+ }
202
219
  const utcDate = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' }))
203
220
  const tzDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }))
204
221
  return (utcDate.getTime() - tzDate.getTime()) / 6e4