@gitpod/gitpod-protocol 0.1.5-port-description-3059-fork.0 → 0.1.5-port-description-3059-fork.2
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.
- package/data/gitpod-schema.json +2 -3
- package/lib/gitpod-service.d.ts +2 -0
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js.map +1 -1
- package/lib/messaging/node/connection.d.ts +0 -10
- package/lib/messaging/node/connection.d.ts.map +1 -1
- package/lib/messaging/node/connection.js +1 -39
- package/lib/messaging/node/connection.js.map +1 -1
- package/lib/protocol.d.ts +1 -1
- package/lib/protocol.d.ts.map +1 -1
- package/lib/util/garbage-collected-cache.d.ts +1 -0
- package/lib/util/garbage-collected-cache.d.ts.map +1 -1
- package/lib/util/garbage-collected-cache.js +5 -1
- package/lib/util/garbage-collected-cache.js.map +1 -1
- package/lib/util/jaeger-client-types.d.ts +68 -0
- package/lib/util/jaeger-client-types.d.ts.map +1 -0
- package/lib/util/jaeger-client-types.js +8 -0
- package/lib/util/jaeger-client-types.js.map +1 -0
- package/lib/util/repeat.d.ts +15 -0
- package/lib/util/repeat.d.ts.map +1 -0
- package/lib/util/repeat.js +55 -0
- package/lib/util/repeat.js.map +1 -0
- package/lib/util/tracing.d.ts +40 -8
- package/lib/util/tracing.d.ts.map +1 -1
- package/lib/util/tracing.js +103 -31
- package/lib/util/tracing.js.map +1 -1
- package/lib/util/tracing.spec.d.ts +7 -0
- package/lib/util/tracing.spec.d.ts.map +1 -0
- package/lib/util/tracing.spec.js +121 -0
- package/lib/util/tracing.spec.js.map +1 -0
- package/package.json +2 -1
- package/pkg-yarn.lock +1 -1
- package/src/gitpod-service.ts +2 -0
- package/src/messaging/node/connection.ts +1 -45
- package/src/protocol.ts +1 -1
- package/src/util/garbage-collected-cache.ts +7 -1
- package/src/util/jaeger-client-types.ts +102 -0
- package/src/util/repeat.ts +45 -0
- package/src/util/tracing.spec.ts +83 -0
- package/src/util/tracing.ts +102 -28
- package/lib/util/repeater.d.ts +0 -22
- package/lib/util/repeater.d.ts.map +0 -1
- package/lib/util/repeater.js +0 -65
- package/lib/util/repeater.js.map +0 -1
- package/src/util/jaeger-client.d.ts +0 -105
- package/src/util/repeater.ts +0 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/util/tracing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/util/tracing.ts"],"names":[],"mappings":"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"}
|
package/lib/util/tracing.js
CHANGED
|
@@ -16,49 +16,62 @@ const opentracing = require("opentracing");
|
|
|
16
16
|
const jaeger_client_1 = require("jaeger-client");
|
|
17
17
|
const opentracing_1 = require("opentracing");
|
|
18
18
|
const inversify_1 = require("inversify");
|
|
19
|
+
const logging_1 = require("./logging");
|
|
19
20
|
var TraceContext;
|
|
20
21
|
(function (TraceContext) {
|
|
21
22
|
function startSpan(operation, parentCtx) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
let options = undefined;
|
|
24
|
+
if (parentCtx) {
|
|
25
|
+
options = {
|
|
26
|
+
childOf: parentCtx.span
|
|
27
|
+
};
|
|
28
|
+
}
|
|
25
29
|
return opentracing.globalTracer().startSpan(operation, options);
|
|
26
30
|
}
|
|
27
31
|
TraceContext.startSpan = startSpan;
|
|
28
|
-
function
|
|
32
|
+
function childContext(operation, parentCtx) {
|
|
29
33
|
const span = startSpan(operation, parentCtx);
|
|
30
34
|
return { span };
|
|
31
35
|
}
|
|
32
|
-
TraceContext.
|
|
33
|
-
function
|
|
34
|
-
const options = {};
|
|
35
|
-
if (!!ctx.span) {
|
|
36
|
-
options.references = [opentracing.followsFrom(ctx.span.context())];
|
|
37
|
-
}
|
|
38
|
-
return opentracing.globalTracer().startSpan(operation, options);
|
|
39
|
-
}
|
|
40
|
-
TraceContext.startAsyncSpan = startAsyncSpan;
|
|
41
|
-
function logError(ctx, err) {
|
|
36
|
+
TraceContext.childContext = childContext;
|
|
37
|
+
function setError(ctx, err) {
|
|
42
38
|
if (!ctx.span) {
|
|
43
39
|
return;
|
|
44
40
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
TraceContext.addNestedTags(ctx, {
|
|
42
|
+
error: {
|
|
43
|
+
message: err.message,
|
|
44
|
+
stacktrace: err.stack,
|
|
45
|
+
},
|
|
48
46
|
});
|
|
49
47
|
ctx.span.setTag("error", true);
|
|
50
48
|
}
|
|
51
|
-
TraceContext.
|
|
52
|
-
function
|
|
49
|
+
TraceContext.setError = setError;
|
|
50
|
+
function setJsonRPCMetadata(ctx, method) {
|
|
53
51
|
if (!ctx.span) {
|
|
54
52
|
return;
|
|
55
53
|
}
|
|
56
|
-
|
|
57
|
-
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md#json-rpc
|
|
58
|
-
ctx.span.addTags({
|
|
54
|
+
const tags = {
|
|
59
55
|
rpc: {
|
|
60
56
|
system: "jsonrpc",
|
|
61
|
-
|
|
57
|
+
// version,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
if (method) {
|
|
61
|
+
tags.rpc.method = method;
|
|
62
|
+
}
|
|
63
|
+
addNestedTags(ctx, tags);
|
|
64
|
+
}
|
|
65
|
+
TraceContext.setJsonRPCMetadata = setJsonRPCMetadata;
|
|
66
|
+
function setJsonRPCError(ctx, method, err) {
|
|
67
|
+
if (!ctx.span) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// not use setError bc this is (most likely) a working operation
|
|
71
|
+
setJsonRPCMetadata(ctx);
|
|
72
|
+
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md#json-rpc
|
|
73
|
+
addNestedTags(ctx, {
|
|
74
|
+
rpc: {
|
|
62
75
|
jsonrpc: {
|
|
63
76
|
error_code: err.code,
|
|
64
77
|
error_message: err.message,
|
|
@@ -66,22 +79,77 @@ var TraceContext;
|
|
|
66
79
|
},
|
|
67
80
|
});
|
|
68
81
|
}
|
|
69
|
-
TraceContext.
|
|
70
|
-
function addJsonRPCParameters(ctx,
|
|
82
|
+
TraceContext.setJsonRPCError = setJsonRPCError;
|
|
83
|
+
function addJsonRPCParameters(ctx, params) {
|
|
71
84
|
if (!ctx.span) {
|
|
72
85
|
return;
|
|
73
86
|
}
|
|
74
|
-
ctx
|
|
87
|
+
setJsonRPCMetadata(ctx);
|
|
88
|
+
addNestedTags(ctx, {
|
|
75
89
|
rpc: {
|
|
76
|
-
system: "jsonrpc",
|
|
77
|
-
method,
|
|
78
90
|
jsonrpc: {
|
|
79
|
-
parameters:
|
|
91
|
+
parameters: params,
|
|
80
92
|
},
|
|
81
93
|
},
|
|
82
94
|
});
|
|
83
95
|
}
|
|
84
96
|
TraceContext.addJsonRPCParameters = addJsonRPCParameters;
|
|
97
|
+
/**
|
|
98
|
+
* Does what one would expect from `span.addTags`: Calls `span.addTag` for all keys in map, recursively for objects.
|
|
99
|
+
* Example:
|
|
100
|
+
* ```
|
|
101
|
+
* TraceContext.addNestedTags(ctx, {
|
|
102
|
+
* rpc: {
|
|
103
|
+
* system: "jsonrpc",
|
|
104
|
+
* jsonrpc: {
|
|
105
|
+
* version: "1.0",
|
|
106
|
+
* method: "test",
|
|
107
|
+
* parameters: ["abc", "def"],
|
|
108
|
+
* },
|
|
109
|
+
* },
|
|
110
|
+
* });
|
|
111
|
+
* ```
|
|
112
|
+
* gives
|
|
113
|
+
* rpc.system = "jsonrpc"
|
|
114
|
+
* rpc.jsonrpc.version = "1.0"
|
|
115
|
+
* rpc.jsonrpc.method = "test"
|
|
116
|
+
* rpc.jsonrpc.parameters.0 = "abc"
|
|
117
|
+
* rpc.jsonrpc.parameters.1 = "def"
|
|
118
|
+
* @param ctx
|
|
119
|
+
* @param keyValueMap
|
|
120
|
+
* @returns
|
|
121
|
+
*/
|
|
122
|
+
function addNestedTags(ctx, keyValueMap, _namespace) {
|
|
123
|
+
if (!ctx.span) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const namespace = _namespace ? `${_namespace}.` : '';
|
|
127
|
+
try {
|
|
128
|
+
for (const k of Object.keys(keyValueMap)) {
|
|
129
|
+
const v = keyValueMap[k];
|
|
130
|
+
if (v instanceof Object) {
|
|
131
|
+
addNestedTags(ctx, v, `${namespace}${k}`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
ctx.span.setTag(`${namespace}${k}`, v);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
// general resilience against odd shapes/parameters
|
|
140
|
+
logging_1.log.error("Tracing.addNestedTags", err, { namespace });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
TraceContext.addNestedTags = addNestedTags;
|
|
144
|
+
function setOWI(ctx, owi) {
|
|
145
|
+
if (!ctx.span) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
addNestedTags(ctx, {
|
|
149
|
+
context: owi,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
TraceContext.setOWI = setOWI;
|
|
85
153
|
})(TraceContext = exports.TraceContext || (exports.TraceContext = {}));
|
|
86
154
|
let TracingManager = class TracingManager {
|
|
87
155
|
setup(serviceName, opts) {
|
|
@@ -93,10 +161,14 @@ let TracingManager = class TracingManager {
|
|
|
93
161
|
reporter: {
|
|
94
162
|
logSpans: false
|
|
95
163
|
},
|
|
96
|
-
serviceName
|
|
164
|
+
serviceName,
|
|
97
165
|
};
|
|
98
166
|
const t = (0, jaeger_client_1.initTracerFromEnv)(config, {
|
|
99
|
-
logger: console
|
|
167
|
+
logger: console,
|
|
168
|
+
tags: {
|
|
169
|
+
'service.build.commit': process.env.GITPOD_BUILD_GIT_COMMIT,
|
|
170
|
+
'service.build.version': process.env.GITPOD_BUILD_VERSION,
|
|
171
|
+
}
|
|
100
172
|
});
|
|
101
173
|
if (opts) {
|
|
102
174
|
if (opts.perOpSampling) {
|
package/lib/util/tracing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/util/tracing.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;AAGH,2CAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/util/tracing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.spec.d.ts","sourceRoot":"","sources":["../../src/util/tracing.spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
4
|
+
* Licensed under the GNU Affero General Public License (AGPL).
|
|
5
|
+
* See License-AGPL.txt in the project root for license information.
|
|
6
|
+
*/
|
|
7
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
8
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
10
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
11
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
12
|
+
};
|
|
13
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
15
|
+
};
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const mocha_typescript_1 = require("mocha-typescript");
|
|
27
|
+
const chai = require("chai");
|
|
28
|
+
const tracing_1 = require("./tracing");
|
|
29
|
+
const opentracing_1 = require("opentracing");
|
|
30
|
+
const expect = chai.expect;
|
|
31
|
+
let TestTracing = class TestTracing {
|
|
32
|
+
testTracingContext_addNestedTags() {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const tracer = new opentracing_1.MockTracer();
|
|
35
|
+
const span = tracer.startSpan('testTracingContext_addNestedTags');
|
|
36
|
+
tracing_1.TraceContext.addNestedTags({ span }, {
|
|
37
|
+
rpc: {
|
|
38
|
+
system: "jsonrpc",
|
|
39
|
+
jsonrpc: {
|
|
40
|
+
version: "1.0",
|
|
41
|
+
method: "test",
|
|
42
|
+
parameters: ["abc", "def"],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
const mockSpan = tracer.report().spans[0];
|
|
47
|
+
expect(mockSpan.tags()).to.deep.equal({
|
|
48
|
+
"rpc.system": "jsonrpc",
|
|
49
|
+
"rpc.jsonrpc.version": "1.0",
|
|
50
|
+
"rpc.jsonrpc.method": "test",
|
|
51
|
+
"rpc.jsonrpc.parameters.0": "abc",
|
|
52
|
+
"rpc.jsonrpc.parameters.1": "def",
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
testTracingContext_addNestedTags_null() {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const tracer = new opentracing_1.MockTracer();
|
|
59
|
+
const span = tracer.startSpan('testTracingContext_addNestedTags_null');
|
|
60
|
+
tracing_1.TraceContext.addNestedTags({ span }, {
|
|
61
|
+
someShape: {
|
|
62
|
+
thisIsNull: null,
|
|
63
|
+
thisIsUndefined: undefined,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
const mockSpan = tracer.report().spans[0];
|
|
67
|
+
expect(mockSpan.tags()).to.deep.equal({
|
|
68
|
+
"someShape.thisIsNull": null,
|
|
69
|
+
"someShape.thisIsUndefined": undefined,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
testTracingContext_addJsonRPCParameters() {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
const tracer = new opentracing_1.MockTracer();
|
|
76
|
+
const span = tracer.startSpan('testTracingContext_addJsonRPCParameters');
|
|
77
|
+
const ctx = { span };
|
|
78
|
+
tracing_1.TraceContext.addJsonRPCParameters(ctx, {
|
|
79
|
+
one: "one",
|
|
80
|
+
two: {
|
|
81
|
+
name: "two",
|
|
82
|
+
some: "shape",
|
|
83
|
+
containing: "PII",
|
|
84
|
+
},
|
|
85
|
+
three: "three",
|
|
86
|
+
});
|
|
87
|
+
const mockSpan = tracer.report().spans[0];
|
|
88
|
+
expect(mockSpan.tags()).to.deep.equal({
|
|
89
|
+
"rpc.jsonrpc.parameters.one": "one",
|
|
90
|
+
"rpc.jsonrpc.parameters.two.containing": "PII",
|
|
91
|
+
"rpc.jsonrpc.parameters.two.name": "two",
|
|
92
|
+
"rpc.jsonrpc.parameters.two.some": "shape",
|
|
93
|
+
"rpc.jsonrpc.parameters.three": "three",
|
|
94
|
+
"rpc.system": "jsonrpc",
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
__decorate([
|
|
100
|
+
mocha_typescript_1.test,
|
|
101
|
+
__metadata("design:type", Function),
|
|
102
|
+
__metadata("design:paramtypes", []),
|
|
103
|
+
__metadata("design:returntype", Promise)
|
|
104
|
+
], TestTracing.prototype, "testTracingContext_addNestedTags", null);
|
|
105
|
+
__decorate([
|
|
106
|
+
mocha_typescript_1.test,
|
|
107
|
+
__metadata("design:type", Function),
|
|
108
|
+
__metadata("design:paramtypes", []),
|
|
109
|
+
__metadata("design:returntype", Promise)
|
|
110
|
+
], TestTracing.prototype, "testTracingContext_addNestedTags_null", null);
|
|
111
|
+
__decorate([
|
|
112
|
+
mocha_typescript_1.test,
|
|
113
|
+
__metadata("design:type", Function),
|
|
114
|
+
__metadata("design:paramtypes", []),
|
|
115
|
+
__metadata("design:returntype", Promise)
|
|
116
|
+
], TestTracing.prototype, "testTracingContext_addJsonRPCParameters", null);
|
|
117
|
+
TestTracing = __decorate([
|
|
118
|
+
mocha_typescript_1.suite
|
|
119
|
+
], TestTracing);
|
|
120
|
+
module.exports = new TestTracing();
|
|
121
|
+
//# sourceMappingURL=tracing.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.spec.js","sourceRoot":"","sources":["../../src/util/tracing.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"@types/analytics-node": "^3.1.5",
|
|
27
27
|
"@types/chai-subset": "^1.3.3",
|
|
28
28
|
"@types/cookie": "^0.4.1",
|
|
29
|
+
"@types/jaeger-client": "^3.18.3",
|
|
29
30
|
"@types/js-yaml": "^3.10.1",
|
|
30
31
|
"@types/mocha": "^5.2.7",
|
|
31
32
|
"@types/node": "^16.11.6",
|
|
@@ -59,5 +60,5 @@
|
|
|
59
60
|
"watch": "leeway exec --package .:lib --transitive-dependencies --filter-type yarn --components --parallel -- tsc -w --preserveWatchOutput"
|
|
60
61
|
},
|
|
61
62
|
"types": "./lib/index.d.ts",
|
|
62
|
-
"version": "0.1.5-port-description-3059-fork.
|
|
63
|
+
"version": "0.1.5-port-description-3059-fork.2"
|
|
63
64
|
}
|
package/pkg-yarn.lock
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"@gitpod/gitpod-protocol@0.1.5":
|
|
6
6
|
version "0.1.5"
|
|
7
|
-
resolved "file:///tmp/cache/
|
|
7
|
+
resolved "file:///tmp/cache/a3edaf8ff99c8f62a22b010683e0e8456208ad2d.tar.gz"
|
|
8
8
|
dependencies:
|
|
9
9
|
"@types/react" "17.0.32"
|
|
10
10
|
ajv "^6.5.4"
|
package/src/gitpod-service.ts
CHANGED
|
@@ -139,6 +139,8 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
|
|
|
139
139
|
setProjectConfiguration(projectId: string, configString: string): Promise<void>;
|
|
140
140
|
fetchProjectRepositoryConfiguration(projectId: string): Promise<string | undefined>;
|
|
141
141
|
guessProjectConfiguration(projectId: string): Promise<string | undefined>;
|
|
142
|
+
fetchRepositoryConfiguration(cloneUrl: string): Promise<string | undefined>;
|
|
143
|
+
guessRepositoryConfiguration(cloneUrl: string): Promise<string | undefined>;
|
|
142
144
|
|
|
143
145
|
// content service
|
|
144
146
|
getContentBlobUploadUrl(name: string): Promise<string>
|
|
@@ -7,58 +7,14 @@
|
|
|
7
7
|
|
|
8
8
|
import * as ws from "ws";
|
|
9
9
|
import * as http from "http";
|
|
10
|
-
import * as https from "https";
|
|
11
|
-
import * as url from "url";
|
|
12
10
|
import * as net from "net";
|
|
13
|
-
import {
|
|
14
|
-
import { createWebSocketConnection, IWebSocket } from "vscode-ws-jsonrpc";
|
|
11
|
+
import { IWebSocket } from "vscode-ws-jsonrpc";
|
|
15
12
|
import { log } from '../../util/logging';
|
|
16
13
|
|
|
17
|
-
export interface IServerOptions {
|
|
18
|
-
readonly server: http.Server | https.Server;
|
|
19
|
-
readonly path?: string;
|
|
20
|
-
matches?(request: http.IncomingMessage): boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function createServerWebSocketConnection(options: IServerOptions, onConnect: (connection: MessageConnection) => void): void {
|
|
24
|
-
openJsonRpcSocket(options, socket => {
|
|
25
|
-
onConnect(createWebSocketConnection(socket, console));
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function openJsonRpcSocket(options: IServerOptions, onOpen: (socket: IWebSocket) => void): void {
|
|
30
|
-
openSocket(options, socket => {
|
|
31
|
-
const webSocket = toIWebSocket(socket);
|
|
32
|
-
onOpen(webSocket);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
14
|
export interface OnOpen {
|
|
37
15
|
(webSocket: ws, request: http.IncomingMessage, socket: net.Socket, head: Buffer): void;
|
|
38
16
|
}
|
|
39
17
|
|
|
40
|
-
export function openSocket(options: IServerOptions, onOpen: OnOpen): void {
|
|
41
|
-
const wss = new ws.Server({
|
|
42
|
-
noServer: true,
|
|
43
|
-
perMessageDeflate: {
|
|
44
|
-
// don't compress if a message is less than 256kb
|
|
45
|
-
threshold: 256 * 1024
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
options.server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
|
|
49
|
-
const pathname = request.url ? url.parse(request.url).pathname : undefined;
|
|
50
|
-
if (options.path && pathname === options.path || options.matches && options.matches(request)) {
|
|
51
|
-
wss.handleUpgrade(request, socket, head, webSocket => {
|
|
52
|
-
if (webSocket.readyState === webSocket.OPEN) {
|
|
53
|
-
onOpen(webSocket, request, socket, head);
|
|
54
|
-
} else {
|
|
55
|
-
webSocket.on('open', () => onOpen(webSocket, request, socket, head));
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
|
|
62
18
|
export function toIWebSocket(webSocket: ws) {
|
|
63
19
|
let sendsAfterOpen = 0;
|
|
64
20
|
return <IWebSocket>{
|
package/src/protocol.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { repeat } from "./repeat";
|
|
8
|
+
|
|
7
9
|
|
|
8
10
|
interface CacheEntry<T> {
|
|
9
11
|
key: string;
|
|
@@ -41,8 +43,12 @@ export class GarbageCollectedCache<T> {
|
|
|
41
43
|
return entry.value;
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
public delete(key: string) {
|
|
47
|
+
this.store.delete(key);
|
|
48
|
+
}
|
|
49
|
+
|
|
44
50
|
protected regularlyCollectGarbage() {
|
|
45
|
-
|
|
51
|
+
repeat(() => this.collectGarbage(), this.gcIntervalSeconds * 1000);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
protected collectGarbage() {
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
3
|
+
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
+
* See License-AGPL.txt in the project root for license information.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { opentracing } from "jaeger-client";
|
|
8
|
+
|
|
9
|
+
// Type definitions for jaeger-client which are not exported by @types/jaeger-client
|
|
10
|
+
// Project: https://github.com/uber/jaeger-client-node
|
|
11
|
+
// Definitions by: Julian Steger <https://github.com/julianste>
|
|
12
|
+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
13
|
+
|
|
14
|
+
export interface TracingConfig {
|
|
15
|
+
serviceName?: string;
|
|
16
|
+
disable?: boolean;
|
|
17
|
+
sampler?: SamplerConfig;
|
|
18
|
+
reporter?: ReporterConfig;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface TracingOptions {
|
|
22
|
+
reporter?: Reporter;
|
|
23
|
+
metrics?: MetricsFactory;
|
|
24
|
+
logger?: Logger;
|
|
25
|
+
tags?: any;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ReporterConfig {
|
|
29
|
+
logSpans?: boolean;
|
|
30
|
+
agentHost?: string;
|
|
31
|
+
agentPort?: number;
|
|
32
|
+
flushIntervalMs?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface SamplerConfig {
|
|
36
|
+
type: string;
|
|
37
|
+
param: number;
|
|
38
|
+
host?: string;
|
|
39
|
+
port?: number;
|
|
40
|
+
refreshIntervalMs?: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface Logger {
|
|
44
|
+
info(msg: string): void;
|
|
45
|
+
error(msg: string): void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface Reporter {
|
|
49
|
+
report(span: opentracing.Span): void;
|
|
50
|
+
close(callback?: () => void): void;
|
|
51
|
+
setProcess(serviceName: string, tags: any): void;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface MetricsFactory {
|
|
55
|
+
createCounter(name: string, tags: any): Counter;
|
|
56
|
+
createTimer(name: string, tags: any): Timer;
|
|
57
|
+
createGauge(name: string, tags: any): Gauge;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Counter tracks the number of times an event has occurred
|
|
61
|
+
export interface Counter {
|
|
62
|
+
// Adds the given value to the counter.
|
|
63
|
+
increment(delta: number): void;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Timer tracks how long an operation took and also computes percentiles.
|
|
67
|
+
export interface Timer {
|
|
68
|
+
// Records the time passed in.
|
|
69
|
+
record(value: number): void;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Gauge returns instantaneous measurements of something as an int64 value
|
|
73
|
+
export interface Gauge {
|
|
74
|
+
// Update the gauge to the value passed in.
|
|
75
|
+
update(value: number): void;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// export function initTracer(
|
|
79
|
+
// tracingConfig: TracingConfig,
|
|
80
|
+
// tracingOptions: TracingOptions,
|
|
81
|
+
// ): opentracing.Tracer;
|
|
82
|
+
|
|
83
|
+
// export function initTracerFromEnv(
|
|
84
|
+
// tracingConfig: TracingConfig,
|
|
85
|
+
// tracingOptions: TracingOptions,
|
|
86
|
+
// ): opentracing.Tracer;
|
|
87
|
+
|
|
88
|
+
export interface SamplingDecision {
|
|
89
|
+
sample: boolean;
|
|
90
|
+
retryable: boolean;
|
|
91
|
+
tags: any;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// added by TypeFox
|
|
95
|
+
export interface Sampler {
|
|
96
|
+
name(): string
|
|
97
|
+
isSampled(operation: string, tags: any): boolean;
|
|
98
|
+
onCreateSpan(span: opentracing.Span): SamplingDecision;
|
|
99
|
+
onSetOperationName(span: opentracing.Span, operationName: string): SamplingDecision;
|
|
100
|
+
onSetTag(span: opentracing.Span, key: string, value: any): SamplingDecision;
|
|
101
|
+
close(callback: () => void): void
|
|
102
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
3
|
+
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
+
* See License-AGPL.txt in the project root for license information.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Disposable } from "..";
|
|
8
|
+
import { log } from "./logging";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* This intends to be a drop-in replacement for 'setInterval' implemented with a 'setTimeout' chain
|
|
12
|
+
* to ensure we're not creating more timeouts than we can process.
|
|
13
|
+
* @param op
|
|
14
|
+
* @param everyMilliseconds
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
export function repeat(op: () => Promise<void> | void, everyMilliseconds: number): Disposable {
|
|
18
|
+
let timer: NodeJS.Timeout | undefined = undefined;
|
|
19
|
+
let stopped = false;
|
|
20
|
+
const repeated = () => {
|
|
21
|
+
if (stopped) {
|
|
22
|
+
// in case we missed the clearTimeout i 'await'
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
timer = setTimeout(async () => {
|
|
27
|
+
try {
|
|
28
|
+
await op();
|
|
29
|
+
} catch (err) {
|
|
30
|
+
// catch error here to
|
|
31
|
+
log.error(err);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
repeated(); // chain ourselves - after the 'await'
|
|
35
|
+
}, everyMilliseconds);
|
|
36
|
+
};
|
|
37
|
+
repeated();
|
|
38
|
+
|
|
39
|
+
return Disposable.create(() => {
|
|
40
|
+
stopped = true;
|
|
41
|
+
if (timer) {
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|