(queue)
| 135 | } |
| 136 | |
| 137 | async function updateDashboards(queue) { |
| 138 | const conditions = { |
| 139 | where: { |
| 140 | updateSchedule: { [Op.ne]: "" } |
| 141 | }, |
| 142 | attributes: ["id", "team_id", "lastUpdatedAt", "updateSchedule", "timezone"], |
| 143 | }; |
| 144 | |
| 145 | try { |
| 146 | const dashboards = await db.Project.findAll(conditions); |
| 147 | if (!dashboards || dashboards.length === 0) { |
| 148 | return; |
| 149 | } |
| 150 | |
| 151 | const skippedDashboardIds = []; |
| 152 | |
| 153 | const jobs = dashboards.map(async (dashboard) => { |
| 154 | const { |
| 155 | frequency, |
| 156 | dayOfWeek, |
| 157 | daysOfWeek, |
| 158 | time, |
| 159 | frequencyNumber, |
| 160 | } = dashboard.updateSchedule || {}; |
| 161 | const timezone = getProjectUpdateTimezone(dashboard); |
| 162 | |
| 163 | const now = DateTime.now().setZone(timezone); |
| 164 | const lastUpdated = dashboard.lastUpdatedAt |
| 165 | ? DateTime.fromJSDate(dashboard.lastUpdatedAt, { zone: timezone }) |
| 166 | : null; |
| 167 | |
| 168 | let shouldUpdate = false; |
| 169 | |
| 170 | if (!lastUpdated) { |
| 171 | shouldUpdate = frequency !== "daily" || shouldRunOnWeekday(daysOfWeek, now); |
| 172 | } else if (frequency === "daily") { |
| 173 | const updateTime = DateTime.now() |
| 174 | .setZone(timezone) |
| 175 | .set({ |
| 176 | hour: time.hour, |
| 177 | minute: time.minute, |
| 178 | second: 0, |
| 179 | millisecond: 0 |
| 180 | }); |
| 181 | shouldUpdate = shouldRunOnWeekday(daysOfWeek, now) |
| 182 | && now > updateTime |
| 183 | && now.diff(lastUpdated, "days").as("days") >= 1; |
| 184 | } else if (frequency === "weekly" && dayOfWeek) { |
| 185 | const weekdayNumber = getWeekdayNumber(dayOfWeek); |
| 186 | |
| 187 | if (weekdayNumber) { |
| 188 | const updateTime = DateTime.now() |
| 189 | .setZone(timezone) |
| 190 | .set({ |
| 191 | hour: time.hour, |
| 192 | minute: time.minute, |
| 193 | second: 0, |
| 194 | millisecond: 0, |
no test coverage detected