@opensumi/ide-connection 3.0.5-next-1717640331.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IDisposable } from '@opensumi/ide-core-common';
|
|
1
|
+
import { IDisposable, IReporterService } from '@opensumi/ide-core-common';
|
|
2
2
|
import { TSumiProtocol } from '../rpc';
|
|
3
3
|
import { SumiConnection } from '../rpc/connection';
|
|
4
4
|
import { IBench, ILogger, RPCServiceMethod, ServiceType } from '../types';
|
|
@@ -13,6 +13,9 @@ export declare class RPCServiceCenter implements IDisposable {
|
|
|
13
13
|
private deferred;
|
|
14
14
|
private logger;
|
|
15
15
|
constructor(bench?: IBench | undefined, logger?: ILogger);
|
|
16
|
+
private _reporterService;
|
|
17
|
+
private _reportThreshold;
|
|
18
|
+
setReporter(reporterService: IReporterService, minimumReportThresholdTime?: number): void;
|
|
16
19
|
registerService(serviceName: string, type: ServiceType): void;
|
|
17
20
|
ready(): Promise<void>;
|
|
18
21
|
loadProtocol(protocol: TSumiProtocol): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"center.d.ts","sourceRoot":"","sources":["../../../src/common/rpc-service/center.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"center.d.ts","sourceRoot":"","sources":["../../../src/common/rpc-service/center.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACX,gBAAgB,EAIjB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,qBAAa,gBAAiB,YAAW,WAAW;IAatC,OAAO,CAAC,KAAK,CAAC;IAZ1B,OAAO,CAAC,YAAY,CAAyB;IAEtC,GAAG,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,eAAe,CAAgD;IACvE,OAAO,CAAC,gBAAgB,CAAiD;IAEzE,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,MAAM,CAAU;gBAEJ,KAAK,CAAC,oBAAQ,EAAE,MAAM,CAAC,EAAE,OAAO;IAKpD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAA8C;IACtE,WAAW,CACT,eAAe,EAAE,gBAAgB,EACjC,0BAA0B,GAAE,MAA2C;IAMzE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAQ7D,KAAK;IAIL,YAAY,CAAC,QAAQ,EAAE,aAAa;IAMpC,iBAAiB,CAAC,UAAU,EAAE,cAAc;;;IAoB5C,aAAa,CAAC,UAAU,EAAE,iBAAiB;;;IAkB3C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB;IAItE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;IAM5C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IA2DjF,OAAO,IAAI,IAAI;CAGhB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAEpE;AACD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAE/D;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAE9D"}
|
|
@@ -7,6 +7,7 @@ const constants_1 = require("../constants");
|
|
|
7
7
|
const types_1 = require("../types");
|
|
8
8
|
const proxy_1 = require("./proxy");
|
|
9
9
|
const registry_1 = require("./registry");
|
|
10
|
+
const kDefaultMinimumReportThresholdTime = 200;
|
|
10
11
|
class RPCServiceCenter {
|
|
11
12
|
constructor(bench, logger) {
|
|
12
13
|
this.bench = bench;
|
|
@@ -15,9 +16,14 @@ class RPCServiceCenter {
|
|
|
15
16
|
this.serviceRegistry = this._disposables.add(new registry_1.ServiceRegistry());
|
|
16
17
|
this.protocolRegistry = this._disposables.add(new registry_1.ProtocolRegistry());
|
|
17
18
|
this.deferred = new ide_core_common_1.Deferred();
|
|
19
|
+
this._reportThreshold = kDefaultMinimumReportThresholdTime;
|
|
18
20
|
this.uid = (0, ide_core_common_1.randomString)(6);
|
|
19
21
|
this.logger = logger || console;
|
|
20
22
|
}
|
|
23
|
+
setReporter(reporterService, minimumReportThresholdTime = kDefaultMinimumReportThresholdTime) {
|
|
24
|
+
this._reporterService = reporterService;
|
|
25
|
+
this._reportThreshold = minimumReportThresholdTime;
|
|
26
|
+
}
|
|
21
27
|
registerService(serviceName, type) {
|
|
22
28
|
if (type === types_1.ServiceType.Service) {
|
|
23
29
|
if (this.bench) {
|
|
@@ -73,6 +79,10 @@ class RPCServiceCenter {
|
|
|
73
79
|
async broadcast(serviceName, _name, ...args) {
|
|
74
80
|
await this.ready();
|
|
75
81
|
const name = getMethodName(serviceName, _name);
|
|
82
|
+
let timer;
|
|
83
|
+
if (this._reporterService) {
|
|
84
|
+
timer = this._reporterService.time(ide_core_common_1.REPORT_NAME.RPC_TIMMING_MEASURE);
|
|
85
|
+
}
|
|
76
86
|
const broadcastResult = await Promise.all(this.proxies.map((proxy) => proxy.invoke(name, ...args)));
|
|
77
87
|
const doubtfulResult = [];
|
|
78
88
|
const result = [];
|
|
@@ -88,8 +98,22 @@ class RPCServiceCenter {
|
|
|
88
98
|
this.logger.warn(`broadcast rpc \`${name}\` getting doubtful responses: ${doubtfulResult.join(',')}`);
|
|
89
99
|
}
|
|
90
100
|
if (result.length === 0) {
|
|
101
|
+
if (timer) {
|
|
102
|
+
timer.timeEnd(name, {
|
|
103
|
+
success: false,
|
|
104
|
+
}, {
|
|
105
|
+
minimumReportThresholdTime: this._reportThreshold,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
91
108
|
throw new Error(`broadcast rpc \`${name}\` error: no remote service can handle this call`);
|
|
92
109
|
}
|
|
110
|
+
if (timer) {
|
|
111
|
+
timer.timeEnd(name, {
|
|
112
|
+
success: true,
|
|
113
|
+
}, {
|
|
114
|
+
minimumReportThresholdTime: this._reportThreshold,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
93
117
|
// FIXME: this is an unreasonable design, if remote service only returned doubtful result, we will return an empty array.
|
|
94
118
|
// but actually we should throw an error to tell user that no remote service can handle this call.
|
|
95
119
|
// or just return `undefined`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"center.js","sourceRoot":"","sources":["../../../src/common/rpc-service/center.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"center.js","sourceRoot":"","sources":["../../../src/common/rpc-service/center.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-connection",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -19,16 +19,16 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@furyjs/fury": "0.5.9-beta",
|
|
21
21
|
"@opensumi/events": "^1.0.0",
|
|
22
|
-
"@opensumi/ide-core-common": "3.
|
|
22
|
+
"@opensumi/ide-core-common": "3.1.0",
|
|
23
23
|
"@opensumi/reconnecting-websocket": "^4.4.0",
|
|
24
24
|
"@opensumi/vscode-jsonrpc": "^8.0.0-next.2",
|
|
25
25
|
"path-to-regexp": "^6.2.1",
|
|
26
26
|
"ws": "^8.16.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@opensumi/ide-components": "3.
|
|
30
|
-
"@opensumi/ide-dev-tool": "3.
|
|
29
|
+
"@opensumi/ide-components": "3.1.0",
|
|
30
|
+
"@opensumi/ide-dev-tool": "3.1.0",
|
|
31
31
|
"@opensumi/mock-socket": "^9.3.1"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "9d963432d1ba24e64ef26e1c35cd49bf1abed6b7"
|
|
34
34
|
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Deferred,
|
|
3
|
+
DisposableStore,
|
|
4
|
+
IDisposable,
|
|
5
|
+
IReporterService,
|
|
6
|
+
IReporterTimer,
|
|
7
|
+
REPORT_NAME,
|
|
8
|
+
randomString,
|
|
9
|
+
} from '@opensumi/ide-core-common';
|
|
2
10
|
import { addElement } from '@opensumi/ide-utils/lib/arrays';
|
|
3
11
|
|
|
4
12
|
import { METHOD_NOT_REGISTERED } from '../constants';
|
|
@@ -12,6 +20,8 @@ import { ProtocolRegistry, ServiceRegistry } from './registry';
|
|
|
12
20
|
|
|
13
21
|
import type { MessageConnection } from '@opensumi/vscode-jsonrpc';
|
|
14
22
|
|
|
23
|
+
const kDefaultMinimumReportThresholdTime = 200;
|
|
24
|
+
|
|
15
25
|
export class RPCServiceCenter implements IDisposable {
|
|
16
26
|
private _disposables = new DisposableStore();
|
|
17
27
|
|
|
@@ -30,6 +40,16 @@ export class RPCServiceCenter implements IDisposable {
|
|
|
30
40
|
this.logger = logger || console;
|
|
31
41
|
}
|
|
32
42
|
|
|
43
|
+
private _reporterService: IReporterService | undefined;
|
|
44
|
+
private _reportThreshold: number = kDefaultMinimumReportThresholdTime;
|
|
45
|
+
setReporter(
|
|
46
|
+
reporterService: IReporterService,
|
|
47
|
+
minimumReportThresholdTime: number = kDefaultMinimumReportThresholdTime,
|
|
48
|
+
) {
|
|
49
|
+
this._reporterService = reporterService;
|
|
50
|
+
this._reportThreshold = minimumReportThresholdTime;
|
|
51
|
+
}
|
|
52
|
+
|
|
33
53
|
registerService(serviceName: string, type: ServiceType): void {
|
|
34
54
|
if (type === ServiceType.Service) {
|
|
35
55
|
if (this.bench) {
|
|
@@ -98,8 +118,13 @@ export class RPCServiceCenter implements IDisposable {
|
|
|
98
118
|
|
|
99
119
|
async broadcast(serviceName: string, _name: string, ...args: any[]): Promise<any> {
|
|
100
120
|
await this.ready();
|
|
101
|
-
|
|
102
121
|
const name = getMethodName(serviceName, _name);
|
|
122
|
+
|
|
123
|
+
let timer: IReporterTimer | undefined;
|
|
124
|
+
if (this._reporterService) {
|
|
125
|
+
timer = this._reporterService.time(REPORT_NAME.RPC_TIMMING_MEASURE);
|
|
126
|
+
}
|
|
127
|
+
|
|
103
128
|
const broadcastResult = await Promise.all(this.proxies.map((proxy) => proxy.invoke(name, ...args)));
|
|
104
129
|
|
|
105
130
|
const doubtfulResult = [] as any[];
|
|
@@ -117,9 +142,33 @@ export class RPCServiceCenter implements IDisposable {
|
|
|
117
142
|
}
|
|
118
143
|
|
|
119
144
|
if (result.length === 0) {
|
|
145
|
+
if (timer) {
|
|
146
|
+
timer.timeEnd(
|
|
147
|
+
name,
|
|
148
|
+
{
|
|
149
|
+
success: false,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
minimumReportThresholdTime: this._reportThreshold,
|
|
153
|
+
},
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
120
157
|
throw new Error(`broadcast rpc \`${name}\` error: no remote service can handle this call`);
|
|
121
158
|
}
|
|
122
159
|
|
|
160
|
+
if (timer) {
|
|
161
|
+
timer.timeEnd(
|
|
162
|
+
name,
|
|
163
|
+
{
|
|
164
|
+
success: true,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
minimumReportThresholdTime: this._reportThreshold,
|
|
168
|
+
},
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
123
172
|
// FIXME: this is an unreasonable design, if remote service only returned doubtful result, we will return an empty array.
|
|
124
173
|
// but actually we should throw an error to tell user that no remote service can handle this call.
|
|
125
174
|
// or just return `undefined`.
|