mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Explore: Fix unsubscribing from Loki websocket (#19263)
This commit is contained in:
@@ -123,6 +123,7 @@
|
|||||||
"redux-mock-store": "1.5.3",
|
"redux-mock-store": "1.5.3",
|
||||||
"regexp-replace-loader": "1.0.1",
|
"regexp-replace-loader": "1.0.1",
|
||||||
"rimraf": "2.6.3",
|
"rimraf": "2.6.3",
|
||||||
|
"rxjs-spy": "^7.5.1",
|
||||||
"sass-lint": "1.12.1",
|
"sass-lint": "1.12.1",
|
||||||
"sass-loader": "7.1.0",
|
"sass-loader": "7.1.0",
|
||||||
"sinon": "1.17.6",
|
"sinon": "1.17.6",
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import {
|
|||||||
DataQueryResponseData,
|
DataQueryResponseData,
|
||||||
DataQueryError,
|
DataQueryError,
|
||||||
} from '@grafana/ui';
|
} from '@grafana/ui';
|
||||||
|
|
||||||
import { LoadingState, dateMath, toDataFrame, DataFrame, guessFieldTypes } from '@grafana/data';
|
import { LoadingState, dateMath, toDataFrame, DataFrame, guessFieldTypes } from '@grafana/data';
|
||||||
|
|
||||||
type MapOfResponsePackets = { [str: string]: DataQueryResponse };
|
type MapOfResponsePackets = { [str: string]: DataQueryResponse };
|
||||||
|
|||||||
@@ -37,10 +37,9 @@ describe('Live Stream Tests', () => {
|
|||||||
const labels: Labels = { job: 'varlogs' };
|
const labels: Labels = { job: 'varlogs' };
|
||||||
const target = makeTarget('fake', labels);
|
const target = makeTarget('fake', labels);
|
||||||
const stream = new LiveStreams().getStream(target);
|
const stream = new LiveStreams().getStream(target);
|
||||||
expect.assertions(5);
|
expect.assertions(4);
|
||||||
|
|
||||||
const tests = [
|
const tests = [
|
||||||
(val: DataFrame[]) => expect(val).toEqual([]),
|
|
||||||
(val: DataFrame[]) => {
|
(val: DataFrame[]) => {
|
||||||
expect(val[0].length).toEqual(7);
|
expect(val[0].length).toEqual(7);
|
||||||
expect(val[0].labels).toEqual(labels);
|
expect(val[0].labels).toEqual(labels);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { DataFrame, FieldType, parseLabels, KeyValue, CircularDataFrame } from '@grafana/data';
|
import { DataFrame, FieldType, parseLabels, KeyValue, CircularDataFrame } from '@grafana/data';
|
||||||
import { Observable, BehaviorSubject } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { webSocket } from 'rxjs/webSocket';
|
import { webSocket } from 'rxjs/webSocket';
|
||||||
import { LokiResponse } from './types';
|
import { LokiResponse } from './types';
|
||||||
import { finalize, map, multicast, refCount } from 'rxjs/operators';
|
import { finalize, map } from 'rxjs/operators';
|
||||||
import { appendResponseToBufferedData } from './result_transformer';
|
import { appendResponseToBufferedData } from './result_transformer';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +32,6 @@ export class LiveStreams {
|
|||||||
data.addField({ name: 'line', type: FieldType.string });
|
data.addField({ name: 'line', type: FieldType.string });
|
||||||
data.addField({ name: 'labels', type: FieldType.other });
|
data.addField({ name: 'labels', type: FieldType.other });
|
||||||
|
|
||||||
const subject = new BehaviorSubject<DataFrame[]>([]);
|
|
||||||
stream = webSocket(target.url).pipe(
|
stream = webSocket(target.url).pipe(
|
||||||
finalize(() => {
|
finalize(() => {
|
||||||
delete this.streams[target.url];
|
delete this.streams[target.url];
|
||||||
@@ -40,9 +39,7 @@ export class LiveStreams {
|
|||||||
map((response: LokiResponse) => {
|
map((response: LokiResponse) => {
|
||||||
appendResponseToBufferedData(response, data);
|
appendResponseToBufferedData(response, data);
|
||||||
return [data];
|
return [data];
|
||||||
}),
|
})
|
||||||
multicast(subject),
|
|
||||||
refCount()
|
|
||||||
);
|
);
|
||||||
this.streams[target.url] = stream;
|
this.streams[target.url] = stream;
|
||||||
}
|
}
|
||||||
|
|||||||
39
yarn.lock
39
yarn.lock
@@ -2725,6 +2725,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/circular-json@^0.4.0":
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/circular-json/-/circular-json-0.4.0.tgz#7401f7e218cfe87ad4c43690da5658b9acaf51be"
|
||||||
|
integrity sha512-7+kYB7x5a7nFWW1YPBh3KxhwKfiaI4PbZ1RvzBU91LZy7lWJO822CI+pqzSre/DZ7KsCuMKdHnLHHFu8AyXbQg==
|
||||||
|
|
||||||
"@types/classnames@2.2.7":
|
"@types/classnames@2.2.7":
|
||||||
version "2.2.7"
|
version "2.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.7.tgz#fb68cc9be8487e6ea5b13700e759bfbab7e0fefd"
|
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.7.tgz#fb68cc9be8487e6ea5b13700e759bfbab7e0fefd"
|
||||||
@@ -3471,6 +3476,11 @@
|
|||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
||||||
|
|
||||||
|
"@types/stacktrace-js@^0.0.32":
|
||||||
|
version "0.0.32"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/stacktrace-js/-/stacktrace-js-0.0.32.tgz#d23e4a36a5073d39487fbea8234cc6186862d389"
|
||||||
|
integrity sha512-SdxmlrHfO0BxgbBP9HZWMUo2rima8lwMjPiWm6S0dyKkDa5CseamktFhXg8umu3TPVBkSlX6ZoB5uUDJK89yvg==
|
||||||
|
|
||||||
"@types/storybook__addon-actions@3.4.2":
|
"@types/storybook__addon-actions@3.4.2":
|
||||||
version "3.4.2"
|
version "3.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/storybook__addon-actions/-/storybook__addon-actions-3.4.2.tgz#1d08689cc3259269ddb3479a2307c9d16944309e"
|
resolved "https://registry.yarnpkg.com/@types/storybook__addon-actions/-/storybook__addon-actions-3.4.2.tgz#1d08689cc3259269ddb3479a2307c9d16944309e"
|
||||||
@@ -5441,6 +5451,11 @@ circular-json@^0.3.1:
|
|||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
||||||
|
|
||||||
|
circular-json@^0.5.0:
|
||||||
|
version "0.5.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
|
||||||
|
integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
|
||||||
|
|
||||||
class-utils@^0.3.5:
|
class-utils@^0.3.5:
|
||||||
version "0.3.6"
|
version "0.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
|
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
|
||||||
@@ -16103,6 +16118,17 @@ rx-lite@^3.1.2:
|
|||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
|
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
|
||||||
|
|
||||||
|
rxjs-spy@^7.5.1:
|
||||||
|
version "7.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/rxjs-spy/-/rxjs-spy-7.5.1.tgz#1a9ef50bc8d7dd00d9ecf3c54c00929231eaf319"
|
||||||
|
integrity sha512-dJ9mO4HvW2r16PsU15Qsc0RVkG7pFrfyCNTGx3vrxWje3kIgZ6QjMVnWblQxbniZ32lwLk/2x9+D2O6GhgXV/w==
|
||||||
|
dependencies:
|
||||||
|
"@types/circular-json" "^0.4.0"
|
||||||
|
"@types/stacktrace-js" "^0.0.32"
|
||||||
|
circular-json "^0.5.0"
|
||||||
|
error-stack-parser "^2.0.1"
|
||||||
|
stacktrace-gps "^3.0.2"
|
||||||
|
|
||||||
rxjs@6.4.0:
|
rxjs@6.4.0:
|
||||||
version "6.4.0"
|
version "6.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
|
||||||
@@ -16879,6 +16905,11 @@ stackframe@^1.0.4:
|
|||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
|
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
|
||||||
|
|
||||||
|
stackframe@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.1.0.tgz#e3fc2eb912259479c9822f7d1f1ff365bd5cbc83"
|
||||||
|
integrity sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==
|
||||||
|
|
||||||
stacktrace-gps@^3.0.1:
|
stacktrace-gps@^3.0.1:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz#33f8baa4467323ab2bd1816efa279942ba431ccc"
|
resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz#33f8baa4467323ab2bd1816efa279942ba431ccc"
|
||||||
@@ -16886,6 +16917,14 @@ stacktrace-gps@^3.0.1:
|
|||||||
source-map "0.5.6"
|
source-map "0.5.6"
|
||||||
stackframe "^1.0.4"
|
stackframe "^1.0.4"
|
||||||
|
|
||||||
|
stacktrace-gps@^3.0.2:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.3.tgz#b89f84cc13bb925b96607e737b617c8715facf57"
|
||||||
|
integrity sha512-51Rr7dXkyFUKNmhY/vqZWK+EvdsfFSRiQVtgHTFlAdNIYaDD7bVh21yBHXaNWAvTD+w+QSjxHg7/v6Tz4veExA==
|
||||||
|
dependencies:
|
||||||
|
source-map "0.5.6"
|
||||||
|
stackframe "^1.1.0"
|
||||||
|
|
||||||
stacktrace-js@^2.0.0:
|
stacktrace-js@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.0.tgz#776ca646a95bc6c6b2b90776536a7fc72c6ddb58"
|
resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.0.tgz#776ca646a95bc6c6b2b90776536a7fc72c6ddb58"
|
||||||
|
|||||||
Reference in New Issue
Block a user