Skip to content

Commit 8bcc3da

Browse files
committed
feat(retry): add 6x 500ms spaced retries
1 parent 5e98b19 commit 8bcc3da

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

services/youtrack/youtrack-issues.service.js

+22-11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import { metric } from '../text-formatters.js'
55
import { description } from './youtrack-helper.js'
66
import YoutrackBase from './youtrack-base.js'
77

8+
function sleep(ms) {
9+
return new Promise(resolve => setTimeout(resolve, ms))
10+
}
11+
812
const schema = Joi.object({
913
count: Joi.number().required(),
1014
$type: Joi.equal('IssueCountResponse'),
@@ -71,18 +75,25 @@ export default class YoutrackIssues extends YoutrackBase {
7175
})
7276
}
7377

74-
async handle({ project }, { youtrack_url: baseUrl, query }) {
75-
const data = await this.fetch({
76-
baseUrl,
77-
query: `project: ${project} ${query}`,
78-
})
79-
80-
if (data.count === -1) {
81-
throw new InvalidResponse({
82-
prettyMessage: 'processing',
83-
cacheSeconds: 10,
78+
async handle({ project }, { youtrack_url: baseUrl, query = '' }) {
79+
for (let i = 0; i < 6; i++) {
80+
// 6 trials
81+
const data = await this.fetch({
82+
baseUrl,
83+
query: `project: ${project} ${query}`,
8484
})
85+
86+
if (data.count === -1) {
87+
await sleep(500)
88+
continue
89+
}
90+
91+
return this.constructor.render({ count: data.count })
8592
}
86-
return this.constructor.render({ count: data.count })
93+
94+
throw new InvalidResponse({
95+
prettyMessage: 'invalid',
96+
cacheSeconds: 10,
97+
})
8798
}
8899
}

services/youtrack/youtrack-issues.tester.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import Joi from 'joi'
21
import { createServiceTester } from '../tester.js'
32
import { isMetric } from '../test-validators.js'
43

@@ -10,14 +9,14 @@ t.create('Issues (DEMO) (Cloud)')
109
)
1110
.expectBadge({
1211
label: 'issues',
13-
message: Joi.alternatives().try(isMetric, 'processing', 'timeout'),
12+
message: isMetric,
1413
})
1514

1615
t.create('Issues (DEMO) (Empty Query) (Cloud)')
1716
.get('/DEMO.json?youtrack_url=https://shields.youtrack.cloud')
1817
.expectBadge({
1918
label: 'issues',
20-
message: Joi.alternatives().try(isMetric, 'processing', 'timeout'),
19+
message: isMetric,
2120
})
2221

2322
t.create('Issues (DEMO) (Invalid State) (Cloud Hosted)')

0 commit comments

Comments
 (0)