Skip to content

Commit bcd147e

Browse files
committed
megre main
2 parents d862b16 + 4e9f479 commit bcd147e

File tree

9 files changed

+313
-59
lines changed

9 files changed

+313
-59
lines changed
Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
'use strict';
2+
3+
const TIME_START_END_TO_DATETIME_3 = `
4+
ALTER TABLE runs
5+
CHANGE COLUMN time_start time_start DATETIME(3) AS (COALESCE(time_trg_start, time_trg_end)) VIRTUAL,
6+
CHANGE COLUMN time_end time_end DATETIME(3) AS (COALESCE(time_trg_end, time_o2_end)) VIRTUAL;
7+
`;
8+
9+
const TIME_START_END_TO_DATETIME = `
10+
ALTER TABLE runs
11+
CHANGE COLUMN time_start time_start DATETIME AS (COALESCE(time_trg_start, time_trg_end)) VIRTUAL,
12+
CHANGE COLUMN time_end time_end DATETIME AS (COALESCE(time_trg_end, time_o2_end)) VIRTUAL;
13+
`;
14+
15+
/** @type {import('sequelize-cli').Migration} */
16+
module.exports = {
17+
up: async (queryInterface, Sequelize) => queryInterface.sequelize.transaction(async (transaction) => {
18+
await queryInterface.changeColumn(
19+
'runs',
20+
'time_o2_start',
21+
{
22+
type: Sequelize.DATE(3),
23+
},
24+
{ transaction },
25+
);
26+
await queryInterface.changeColumn(
27+
'runs',
28+
'time_trg_start',
29+
{
30+
type: Sequelize.DATE(3),
31+
},
32+
{ transaction },
33+
);
34+
await queryInterface.changeColumn(
35+
'runs',
36+
'first_tf_timestamp',
37+
{
38+
type: Sequelize.DATE(3),
39+
},
40+
{ transaction },
41+
);
42+
await queryInterface.changeColumn(
43+
'runs',
44+
'last_tf_timestamp',
45+
{
46+
type: Sequelize.DATE(3),
47+
},
48+
{ transaction },
49+
);
50+
await queryInterface.changeColumn(
51+
'runs',
52+
'time_trg_end',
53+
{
54+
type: Sequelize.DATE(3),
55+
},
56+
{ transaction },
57+
);
58+
await queryInterface.changeColumn(
59+
'runs',
60+
'time_o2_end',
61+
{
62+
type: Sequelize.DATE(3),
63+
},
64+
{ transaction },
65+
);
66+
await queryInterface.changeColumn(
67+
'quality_control_flags',
68+
'from',
69+
{
70+
type: Sequelize.DATE(3),
71+
},
72+
{ transaction },
73+
);
74+
await queryInterface.changeColumn(
75+
'quality_control_flags',
76+
'to',
77+
{
78+
type: Sequelize.DATE(3),
79+
},
80+
{ transaction },
81+
);
82+
await queryInterface.changeColumn(
83+
'quality_control_flags',
84+
'created_at',
85+
{
86+
type: Sequelize.DATE(3),
87+
allowNull: false,
88+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
89+
},
90+
{ transaction },
91+
);
92+
await queryInterface.changeColumn(
93+
'quality_control_flags',
94+
'updated_at',
95+
{
96+
type: Sequelize.DATE(3),
97+
allowNull: false,
98+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
99+
},
100+
{ transaction },
101+
);
102+
await queryInterface.changeColumn(
103+
'quality_control_flag_effective_periods',
104+
'from',
105+
{
106+
type: Sequelize.DATE(3),
107+
},
108+
{ transaction },
109+
);
110+
await queryInterface.changeColumn(
111+
'quality_control_flag_effective_periods',
112+
'to',
113+
{
114+
type: Sequelize.DATE(3),
115+
},
116+
{ transaction },
117+
);
118+
await queryInterface.changeColumn(
119+
'quality_control_flag_effective_periods',
120+
'created_at',
121+
{
122+
type: Sequelize.DATE(3),
123+
allowNull: false,
124+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
125+
},
126+
{ transaction },
127+
);
128+
await queryInterface.changeColumn(
129+
'quality_control_flag_effective_periods',
130+
'updated_at',
131+
{
132+
type: Sequelize.DATE(3),
133+
allowNull: false,
134+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
135+
},
136+
{ transaction },
137+
);
138+
139+
await queryInterface.sequelize.query(TIME_START_END_TO_DATETIME_3, { transaction });
140+
}),
141+
142+
down: async (queryInterface, Sequelize) => queryInterface.sequelize.transaction(async (transaction) => {
143+
await queryInterface.changeColumn(
144+
'runs',
145+
'time_o2_start',
146+
{
147+
type: Sequelize.DATE,
148+
},
149+
{ transaction },
150+
);
151+
await queryInterface.changeColumn(
152+
'runs',
153+
'time_trg_start',
154+
{
155+
type: Sequelize.DATE,
156+
},
157+
{ transaction },
158+
);
159+
await queryInterface.changeColumn(
160+
'runs',
161+
'first_tf_timestamp',
162+
{
163+
type: Sequelize.DATE,
164+
},
165+
{ transaction },
166+
);
167+
await queryInterface.changeColumn(
168+
'runs',
169+
'last_tf_timestamp',
170+
{
171+
type: Sequelize.DATE,
172+
},
173+
{ transaction },
174+
);
175+
await queryInterface.changeColumn(
176+
'runs',
177+
'time_trg_end',
178+
{
179+
type: Sequelize.DATE,
180+
},
181+
{ transaction },
182+
);
183+
await queryInterface.changeColumn(
184+
'runs',
185+
'time_o2_end',
186+
{
187+
type: Sequelize.DATE,
188+
},
189+
{ transaction },
190+
);
191+
await queryInterface.changeColumn(
192+
'quality_control_flags',
193+
'from',
194+
{
195+
type: Sequelize.DATE,
196+
},
197+
{ transaction },
198+
);
199+
await queryInterface.changeColumn(
200+
'quality_control_flags',
201+
'to',
202+
{
203+
type: Sequelize.DATE,
204+
},
205+
{ transaction },
206+
);
207+
await queryInterface.changeColumn(
208+
'quality_control_flags',
209+
'created_at',
210+
{
211+
type: Sequelize.DATE,
212+
allowNull: false,
213+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
214+
},
215+
{ transaction },
216+
);
217+
await queryInterface.changeColumn(
218+
'quality_control_flags',
219+
'updated_at',
220+
{
221+
type: Sequelize.DATE,
222+
allowNull: false,
223+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
224+
},
225+
{ transaction },
226+
);
227+
await queryInterface.changeColumn(
228+
'quality_control_flag_effective_periods',
229+
'from',
230+
{
231+
type: Sequelize.DATE,
232+
},
233+
{ transaction },
234+
);
235+
await queryInterface.changeColumn(
236+
'quality_control_flag_effective_periods',
237+
'to',
238+
{
239+
type: Sequelize.DATE,
240+
},
241+
{ transaction },
242+
);
243+
await queryInterface.changeColumn(
244+
'quality_control_flag_effective_periods',
245+
'created_at',
246+
{
247+
type: Sequelize.DATE,
248+
allowNull: false,
249+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
250+
},
251+
{ transaction },
252+
);
253+
await queryInterface.changeColumn(
254+
'quality_control_flag_effective_periods',
255+
'updated_at',
256+
{
257+
type: Sequelize.DATE,
258+
allowNull: false,
259+
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
260+
},
261+
{ transaction },
262+
);
263+
264+
await queryInterface.sequelize.query(TIME_START_END_TO_DATETIME, { transaction });
265+
}),
266+
};

lib/database/repositories/EnvironmentHistoryItemRepository.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ const getHistoryDistributionQuery = ({ from, to }) => `
2929
FROM environments e
3030
INNER JOIN environments_history_items AS ehi
3131
ON e.id = ehi.environment_id
32-
WHERE e.updated_at >= '${timestampToMysql(from)}'
33-
AND e.created_at < '${timestampToMysql(to)}'
32+
WHERE e.updated_at >= '${timestampToMysql(from, true)}'
33+
AND e.created_at < '${timestampToMysql(to, true)}'
3434
GROUP BY e.id
3535
HAVING FIND_IN_SET('DESTROYED', statusHistory) > 0 OR FIND_IN_SET('ERROR', statusHistory) > 0
3636
) AS statusHistoryByEnvironmentId

lib/server/services/run/setO2StopOfLostRuns.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ exports.setO2StopOfLostRuns = async (runNumbersOfRunningRuns, modificationTimePe
2929
WHERE time_o2_end IS NULL
3030
AND time_trg_end IS NULL
3131
AND COALESCE(time_trg_start, time_o2_start) IS NOT NULL
32-
AND COALESCE(time_trg_start, time_o2_start) >= '${timestampToMysql(modificationTimePeriod.from)}'
33-
AND COALESCE(time_trg_start, time_o2_start) < '${timestampToMysql(modificationTimePeriod.to)}'
32+
AND COALESCE(time_trg_start, time_o2_start) >= '${timestampToMysql(modificationTimePeriod.from, true)}'
33+
AND COALESCE(time_trg_start, time_o2_start) < '${timestampToMysql(modificationTimePeriod.to, true)}'
3434
`;
3535
if (runNumbersOfRunningRuns.length > 0) {
3636
fetchQuery += ` AND run_number NOT IN (${runNumbersOfRunningRuns.join(',')})`;

lib/server/utilities/timestampToMysql.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
* Convert a UNIX timestamp (in ms) to a MySQL date expression
1616
*
1717
* @param {number} timestamp the timestamp to convert
18+
* @param {boolean} [milliseconds=false] if true, milliseconds will be stored in database
1819
* @return {string} the resulting SQL date
1920
*/
20-
exports.timestampToMysql = (timestamp) => new Date(timestamp).toISOString().slice(0, 19).replace('T', ' ');
21+
exports.timestampToMysql = (timestamp, milliseconds = false) => {
22+
let dateIso = new Date(timestamp).toISOString();
23+
dateIso = dateIso.slice(0, milliseconds ? 23 : 19);
24+
return dateIso.replace('T', ' ');
25+
};

package-lock.json

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)