Skip to content

Commit f63603c

Browse files
committed
upgrade to rxjs 6
1 parent 87344df commit f63603c

File tree

25 files changed

+362
-196
lines changed

25 files changed

+362
-196
lines changed

spring-boot-admin-server-ui/package-lock.json

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

spring-boot-admin-server-ui/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"popper.js": "^1.14.3",
3434
"pretty-bytes": "^5.1.0",
3535
"resize-observer-polyfill": "^1.5.0",
36-
"rxjs": "^5.5.11",
36+
"rxjs": "^6.2.1",
3737
"vue": "^2.5.16",
3838
"vue-clickaway": "^2.2.1",
3939
"vue-router": "^3.0.1",

spring-boot-admin-server-ui/src/main/frontend/services/application.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import axios from '@/utils/axios';
1818
import waitForPolyfill from '@/utils/eventsource-polyfill';
19-
import {Observable} from '@/utils/rxjs';
19+
import {concat, from, ignoreElements, Observable} from '@/utils/rxjs';
2020
import uri from '@/utils/uri';
2121
import * as _ from 'lodash';
2222
import Instance from './instance';
@@ -46,7 +46,8 @@ class Application {
4646
}
4747

4848
static getStream() {
49-
return Observable.from(waitForPolyfill()).ignoreElements().concat(
49+
return concat(
50+
from(waitForPolyfill()).pipe(ignoreElements()),
5051
Observable.create(observer => {
5152
const eventSource = new EventSource('applications');
5253
eventSource.onmessage = message => observer.next({
@@ -58,7 +59,8 @@ class Application {
5859
return () => {
5960
eventSource.close();
6061
};
61-
}));
62+
})
63+
);
6264
}
6365

6466
static _transformResponse(data) {

spring-boot-admin-server-ui/src/main/frontend/services/instance.js

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import axios from '@/utils/axios';
1818
import waitForPolyfill from '@/utils/eventsource-polyfill';
1919
import logtail from '@/utils/logtail';
20-
import {Observable} from '@/utils/rxjs'
20+
import {concat, from, ignoreElements, Observable} from '@/utils/rxjs';
2121
import uri from '@/utils/uri';
2222
import _ from 'lodash';
2323

@@ -222,17 +222,20 @@ class Instance {
222222
}
223223

224224
static getEventStream() {
225-
return Observable.from(waitForPolyfill()).ignoreElements().concat(Observable.create(observer => {
226-
const eventSource = new EventSource('instances/events');
227-
eventSource.onmessage = message => observer.next({
228-
...message,
229-
data: JSON.parse(message.data)
230-
});
231-
eventSource.onerror = err => observer.error(err);
232-
return () => {
233-
eventSource.close();
234-
};
235-
}));
225+
return concat(
226+
from(waitForPolyfill()).pipe(ignoreElements()),
227+
Observable.create(observer => {
228+
const eventSource = new EventSource('instances/events');
229+
eventSource.onmessage = message => observer.next({
230+
...message,
231+
data: JSON.parse(message.data)
232+
});
233+
eventSource.onerror = err => observer.error(err);
234+
return () => {
235+
eventSource.close();
236+
};
237+
})
238+
);
236239
}
237240

238241
static async get(id) {

spring-boot-admin-server-ui/src/main/frontend/store.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616
import Application from '@/services/application';
17-
import {Observable} from '@/utils/rxjs';
17+
import {concat, concatMap, defer, delay, doFirst, map, retryWhen, tap} from '@/utils/rxjs';
1818

1919
export default class {
2020
constructor() {
@@ -71,13 +71,19 @@ export default class {
7171
}
7272

7373
start() {
74-
const listing = Observable.defer(() => Application.list()).concatMap(message => message.data);
75-
const stream = Application.getStream().map(message => message.data);
76-
this.subscription = listing.concat(stream)
77-
.doFirst(() => this._dispatchEvent('connected'))
78-
.retryWhen(errors => errors
79-
.do(error => this._dispatchEvent('error', error))
80-
.delay(5000)
74+
const list = defer(() => Application.list())
75+
.pipe(concatMap(message => message.data));
76+
const stream = Application.getStream()
77+
.pipe(map(message => message.data));
78+
this.subscription = concat(list, stream)
79+
.pipe(
80+
doFirst(() => this._dispatchEvent('connected')),
81+
retryWhen(
82+
errors => errors.pipe(
83+
tap(error => this._dispatchEvent('error', error)),
84+
delay(5000)
85+
)
86+
)
8187
).subscribe({
8288
next: application => {
8389
const idx = this.applications.indexOfApplication(application.name);

spring-boot-admin-server-ui/src/main/frontend/utils/logtail.js

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,59 +14,62 @@
1414
* limitations under the License.
1515
*/
1616

17+
import {concatMap, EMPTY, of, timer} from '@/utils/rxjs';
1718
import axios from './axios';
18-
import {Observable} from './rxjs';
1919

2020
export default (url, interval, initialSize = 300 * 1024) => {
2121
let range = `bytes=-${initialSize}`;
2222
let size = 0;
2323

24-
return Observable.timer(0, interval)
25-
.concatMap(() =>
26-
axios.get(url, {
27-
headers: {
28-
range
29-
}
30-
}))
31-
.concatMap(response => {
32-
const initial = size === 0;
33-
const contentLength = response.data.length;
34-
if (response.status === 200) {
35-
if (!initial) {
36-
throw 'Expected 206 - Partial Content on subsequent requests.';
24+
return timer(0, interval)
25+
.pipe(
26+
concatMap(() =>
27+
axios.get(url, {
28+
headers: {
29+
range
30+
}
31+
})
32+
),
33+
concatMap(response => {
34+
const initial = size === 0;
35+
const contentLength = response.data.length;
36+
if (response.status === 200) {
37+
if (!initial) {
38+
throw 'Expected 206 - Partial Content on subsequent requests.';
39+
}
40+
size = contentLength;
41+
} else if (response.status === 206) {
42+
size = parseInt(response.headers['content-range'].split('/')[1]);
43+
} else {
44+
throw 'Unexpected response status: ' + response.status;
3745
}
38-
size = contentLength;
39-
} else if (response.status === 206) {
40-
size = parseInt(response.headers['content-range'].split('/')[1]);
41-
} else {
42-
throw 'Unexpected response status: ' + response.status;
43-
}
4446

45-
// Reload the last byte to avoid a 416: Range unsatisfiable.
46-
// If the response has length = 1 the file hasn't beent changed.
47-
// If the response status is 416 the logfile has been truncated.
48-
range = `bytes=${size - 1}-`;
47+
// Reload the last byte to avoid a 416: Range unsatisfiable.
48+
// If the response has length = 1 the file hasn't beent changed.
49+
// If the response status is 416 the logfile has been truncated.
50+
range = `bytes=${size - 1}-`;
4951

50-
let addendum = null;
51-
let skipped = 0;
52+
let addendum = null;
53+
let skipped = 0;
5254

53-
if (initial) {
54-
if (contentLength >= size) {
55-
addendum = response.data;
56-
} else {
57-
// In case of a partial response find the first line break.
58-
addendum = response.data.substring(response.data.indexOf('\n') + 1);
59-
skipped = size - addendum.length;
55+
if (initial) {
56+
if (contentLength >= size) {
57+
addendum = response.data;
58+
} else {
59+
// In case of a partial response find the first line break.
60+
addendum = response.data.substring(response.data.indexOf('\n') + 1);
61+
skipped = size - addendum.length;
62+
}
63+
} else if (response.data.length > 1) {
64+
// Remove the first byte which has been part of the previos response.
65+
addendum = response.data.substring(1);
6066
}
61-
} else if (response.data.length > 1) {
62-
// Remove the first byte which has been part of the previos response.
63-
addendum = response.data.substring(1);
64-
}
6567

66-
return addendum ? Observable.of({
67-
totalBytes: size,
68-
skipped,
69-
addendum
70-
}) : Observable.empty();
71-
});
68+
return addendum ? of({
69+
totalBytes: size,
70+
skipped,
71+
addendum
72+
}) : EMPTY;
73+
})
74+
);
7275
}

spring-boot-admin-server-ui/src/main/frontend/utils/rxjs.js

Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,66 +14,67 @@
1414
* limitations under the License.
1515
*/
1616

17-
import 'rxjs/add/observable/defer';
18-
import 'rxjs/add/observable/empty';
19-
import 'rxjs/add/observable/from';
20-
import 'rxjs/add/observable/of';
21-
import 'rxjs/add/observable/timer';
22-
import 'rxjs/add/operator/concat';
23-
import 'rxjs/add/operator/concatAll';
24-
import 'rxjs/add/operator/concatMap';
25-
import 'rxjs/add/operator/delay';
26-
import 'rxjs/add/operator/do';
27-
import 'rxjs/add/operator/filter';
28-
import 'rxjs/add/operator/ignoreElements';
29-
import 'rxjs/add/operator/map';
30-
import 'rxjs/add/operator/merge';
31-
import 'rxjs/add/operator/retryWhen';
17+
import {defer} from 'rxjs/internal/observable/defer';
18+
import {tap} from 'rxjs/internal/operators/tap';
3219

33-
import {Observable} from 'rxjs/Observable';
34-
import {animationFrame} from 'rxjs/scheduler/animationFrame';
35-
import {Subject} from 'rxjs/Subject';
20+
export {throwError} from 'rxjs/internal/observable/throwError';
21+
export {of} from 'rxjs/internal/observable/of';
22+
export {defer} from 'rxjs/internal/observable/defer';
23+
export {concat} from 'rxjs/internal/observable/concat';
24+
export {EMPTY} from 'rxjs/internal/observable/empty';
25+
export {from} from 'rxjs/internal/observable/from';
26+
export {timer} from 'rxjs/internal/observable/timer';
27+
export {Observable} from 'rxjs/internal/Observable';
28+
export {Subject} from 'rxjs/internal/Subject';
29+
export {animationFrame as animationFrameScheduler} from 'rxjs/internal/scheduler/animationFrame';
3630

37-
Observable.prototype.doOnSubscribe = function (onSubscribe) {
38-
let source = this;
39-
return Observable.defer(() => {
40-
onSubscribe();
41-
return source;
31+
export {concatMap} from 'rxjs/internal/operators/concatMap';
32+
export {delay} from 'rxjs/internal/operators/delay';
33+
export {merge} from 'rxjs/internal/operators/merge';
34+
export {map} from 'rxjs/internal/operators/map';
35+
export {retryWhen} from 'rxjs/internal/operators/retryWhen';
36+
export {tap} from 'rxjs/internal/operators/tap';
37+
export {filter} from 'rxjs/internal/operators/filter';
38+
export {concatAll} from 'rxjs/internal/operators/concatAll';
39+
export {ignoreElements} from 'rxjs/internal/operators/ignoreElements';
40+
41+
42+
43+
export const doOnSubscribe = cb => source =>
44+
defer(() => {
45+
cb();
46+
return source
4247
});
43-
};
4448

45-
Observable.prototype.doFirst = function (doFirst) {
46-
let source = this;
47-
let triggered = false;
48-
return Observable.defer(() => {
49+
export const doFirst = cb => source => {
50+
let triggered;
51+
return defer(() => {
4952
triggered = false;
5053
return source;
51-
}).do(n => {
52-
if (!triggered) {
53-
triggered = true;
54-
doFirst(n);
55-
}
56-
});
54+
}).pipe(
55+
tap( v => {
56+
if (!triggered) {
57+
triggered = true;
58+
cb(v);
59+
}
60+
})
61+
);
5762
};
5863

59-
Observable.prototype.listen = function (callbackFn) {
64+
export const listen = (cb, execDelay = 150) => source => {
6065
let handle = null;
61-
return this.doOnSubscribe(() => handle = setTimeout(() => callbackFn('executing'), 150))
62-
.do({
66+
return source.pipe(
67+
doOnSubscribe(() => handle = setTimeout(() => cb('executing'), execDelay)),
68+
tap({
6369
complete: () => {
6470
handle && clearTimeout(handle);
65-
callbackFn('completed');
71+
cb('completed');
6672
},
6773
error: (error) => {
6874
console.warn('Operation failed:', error);
6975
handle && clearTimeout(handle);
70-
callbackFn('failed');
76+
cb('failed');
7177
}
72-
});
73-
};
74-
75-
export {
76-
Observable,
77-
Subject,
78-
animationFrame
78+
})
79+
)
7980
};

0 commit comments

Comments
 (0)