@gitpod/gitpod-protocol 0.1.5-tweak-workspaceconfig-origin-docs-fork.0 → 0.1.5-update-yarnlock.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.
Files changed (436) hide show
  1. package/data/gitpod-schema.json +150 -8
  2. package/lib/accounting-protocol.d.ts +21 -11
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +44 -33
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +29 -1
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +1 -1
  9. package/lib/admin-protocol.js.map +1 -1
  10. package/lib/analytics.d.ts +5 -6
  11. package/lib/analytics.d.ts.map +1 -1
  12. package/lib/analytics.js +1 -1
  13. package/lib/analytics.js.map +1 -1
  14. package/lib/attribution.d.ts +25 -0
  15. package/lib/attribution.d.ts.map +1 -0
  16. package/lib/attribution.js +58 -0
  17. package/lib/attribution.js.map +1 -0
  18. package/lib/auth.d.ts +1 -1
  19. package/lib/auth.d.ts.map +1 -1
  20. package/lib/auth.js +1 -1
  21. package/lib/billing-mode.d.ts +45 -0
  22. package/lib/billing-mode.d.ts.map +1 -0
  23. package/lib/billing-mode.js +44 -0
  24. package/lib/billing-mode.js.map +1 -0
  25. package/lib/blocked-repositories-protocol.d.ts +13 -0
  26. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  27. package/lib/blocked-repositories-protocol.js +8 -0
  28. package/lib/blocked-repositories-protocol.js.map +1 -0
  29. package/lib/context-url.d.ts +19 -7
  30. package/lib/context-url.d.ts.map +1 -1
  31. package/lib/context-url.js +60 -9
  32. package/lib/context-url.js.map +1 -1
  33. package/lib/context-url.spec.d.ts +3 -3
  34. package/lib/context-url.spec.d.ts.map +1 -1
  35. package/lib/context-url.spec.js +20 -12
  36. package/lib/context-url.spec.js.map +1 -1
  37. package/lib/encryption/container-module.d.ts +1 -1
  38. package/lib/encryption/container-module.d.ts.map +1 -1
  39. package/lib/encryption/container-module.js +2 -2
  40. package/lib/encryption/container-module.js.map +1 -1
  41. package/lib/encryption/encryption-engine.d.ts +1 -1
  42. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  43. package/lib/encryption/encryption-engine.js +10 -10
  44. package/lib/encryption/encryption-engine.js.map +1 -1
  45. package/lib/encryption/encryption-engine.spec.d.ts +1 -1
  46. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  47. package/lib/encryption/encryption-engine.spec.js +3 -4
  48. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  49. package/lib/encryption/encryption-service.d.ts +1 -1
  50. package/lib/encryption/encryption-service.d.ts.map +1 -1
  51. package/lib/encryption/encryption-service.js +2 -2
  52. package/lib/encryption/encryption-service.js.map +1 -1
  53. package/lib/encryption/key-provider.d.ts +1 -1
  54. package/lib/encryption/key-provider.d.ts.map +1 -1
  55. package/lib/encryption/key-provider.js +8 -10
  56. package/lib/encryption/key-provider.js.map +1 -1
  57. package/lib/env.d.ts +1 -6
  58. package/lib/env.d.ts.map +1 -1
  59. package/lib/env.js +2 -21
  60. package/lib/env.js.map +1 -1
  61. package/lib/experiments/always-default.d.ts +8 -0
  62. package/lib/experiments/always-default.d.ts.map +1 -0
  63. package/lib/experiments/always-default.js +20 -0
  64. package/lib/experiments/always-default.js.map +1 -0
  65. package/lib/experiments/configcat-server.d.ts +10 -0
  66. package/lib/experiments/configcat-server.d.ts.map +1 -0
  67. package/lib/experiments/configcat-server.js +37 -0
  68. package/lib/experiments/configcat-server.js.map +1 -0
  69. package/lib/experiments/configcat.d.ts +21 -0
  70. package/lib/experiments/configcat.d.ts.map +1 -0
  71. package/lib/experiments/configcat.js +51 -0
  72. package/lib/experiments/configcat.js.map +1 -0
  73. package/lib/experiments/types.d.ts +22 -0
  74. package/lib/experiments/types.d.ts.map +1 -0
  75. package/lib/experiments/types.js +10 -0
  76. package/lib/experiments/types.js.map +1 -0
  77. package/lib/frontend-dashboard-service.d.ts +99 -0
  78. package/lib/frontend-dashboard-service.d.ts.map +1 -0
  79. package/lib/frontend-dashboard-service.js +55 -0
  80. package/lib/frontend-dashboard-service.js.map +1 -0
  81. package/lib/gitpod-file-parser.d.ts +1 -1
  82. package/lib/gitpod-file-parser.d.ts.map +1 -1
  83. package/lib/gitpod-file-parser.js +7 -7
  84. package/lib/gitpod-file-parser.js.map +1 -1
  85. package/lib/gitpod-file-parser.spec.d.ts +1 -1
  86. package/lib/gitpod-file-parser.spec.js +43 -40
  87. package/lib/gitpod-file-parser.spec.js.map +1 -1
  88. package/lib/gitpod-service.d.ts +143 -51
  89. package/lib/gitpod-service.d.ts.map +1 -1
  90. package/lib/gitpod-service.js +78 -36
  91. package/lib/gitpod-service.js.map +1 -1
  92. package/lib/headless-workspace-log.d.ts +2 -1
  93. package/lib/headless-workspace-log.d.ts.map +1 -1
  94. package/lib/headless-workspace-log.js +3 -2
  95. package/lib/headless-workspace-log.js.map +1 -1
  96. package/lib/ide-frontend-service.d.ts +2 -2
  97. package/lib/ide-frontend-service.js +1 -1
  98. package/lib/ide-protocol.d.ts +53 -8
  99. package/lib/ide-protocol.d.ts.map +1 -1
  100. package/lib/ide-protocol.js +11 -1
  101. package/lib/ide-protocol.js.map +1 -1
  102. package/lib/index.d.ts +17 -15
  103. package/lib/index.d.ts.map +1 -1
  104. package/lib/index.js +4 -2
  105. package/lib/index.js.map +1 -1
  106. package/lib/installation-admin-protocol.d.ts +30 -0
  107. package/lib/installation-admin-protocol.d.ts.map +1 -0
  108. package/lib/installation-admin-protocol.js +31 -0
  109. package/lib/installation-admin-protocol.js.map +1 -0
  110. package/lib/license-protocol.d.ts +8 -1
  111. package/lib/license-protocol.d.ts.map +1 -1
  112. package/lib/license-protocol.js +1 -1
  113. package/lib/license-protocol.js.map +1 -1
  114. package/lib/messaging/browser/connection.d.ts +1 -1
  115. package/lib/messaging/browser/connection.d.ts.map +1 -1
  116. package/lib/messaging/browser/connection.js +19 -19
  117. package/lib/messaging/browser/connection.js.map +1 -1
  118. package/lib/messaging/browser/window-connection.d.ts +5 -5
  119. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  120. package/lib/messaging/browser/window-connection.js +10 -7
  121. package/lib/messaging/browser/window-connection.js.map +1 -1
  122. package/lib/messaging/client-call-metrics.d.ts +5 -19
  123. package/lib/messaging/client-call-metrics.d.ts.map +1 -1
  124. package/lib/messaging/client-call-metrics.js +35 -23
  125. package/lib/messaging/client-call-metrics.js.map +1 -1
  126. package/lib/messaging/error.d.ts +12 -2
  127. package/lib/messaging/error.d.ts.map +1 -1
  128. package/lib/messaging/error.js +26 -4
  129. package/lib/messaging/error.js.map +1 -1
  130. package/lib/messaging/handler.d.ts.map +1 -1
  131. package/lib/messaging/handler.js +1 -1
  132. package/lib/messaging/node/connection.d.ts +1 -17
  133. package/lib/messaging/node/connection.d.ts.map +1 -1
  134. package/lib/messaging/node/connection.js +23 -59
  135. package/lib/messaging/node/connection.js.map +1 -1
  136. package/lib/messaging/proxy-factory.d.ts +1 -1
  137. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  138. package/lib/messaging/proxy-factory.js +7 -9
  139. package/lib/messaging/proxy-factory.js.map +1 -1
  140. package/lib/oss-allowlist.d.ts +14 -0
  141. package/lib/oss-allowlist.d.ts.map +1 -0
  142. package/lib/oss-allowlist.js +8 -0
  143. package/lib/oss-allowlist.js.map +1 -0
  144. package/lib/payment-protocol.d.ts +1 -1
  145. package/lib/payment-protocol.d.ts.map +1 -1
  146. package/lib/payment-protocol.js +2 -2
  147. package/lib/payment-protocol.js.map +1 -1
  148. package/lib/permission.d.ts +13 -4
  149. package/lib/permission.d.ts.map +1 -1
  150. package/lib/permission.js +38 -26
  151. package/lib/permission.js.map +1 -1
  152. package/lib/plans.d.ts +8 -5
  153. package/lib/plans.d.ts.map +1 -1
  154. package/lib/plans.js +227 -172
  155. package/lib/plans.js.map +1 -1
  156. package/lib/protocol.d.ts +238 -104
  157. package/lib/protocol.d.ts.map +1 -1
  158. package/lib/protocol.js +322 -105
  159. package/lib/protocol.js.map +1 -1
  160. package/lib/protocol.spec.d.ts +7 -0
  161. package/lib/protocol.spec.d.ts.map +1 -0
  162. package/lib/protocol.spec.js +127 -0
  163. package/lib/protocol.spec.js.map +1 -0
  164. package/lib/snapshot-url.d.ts +1 -1
  165. package/lib/snapshot-url.js +1 -1
  166. package/lib/snapshot-url.spec.d.ts +1 -1
  167. package/lib/snapshot-url.spec.js +1 -1
  168. package/lib/snapshot-url.spec.js.map +1 -1
  169. package/lib/team-subscription-protocol.d.ts +24 -4
  170. package/lib/team-subscription-protocol.d.ts.map +1 -1
  171. package/lib/team-subscription-protocol.js +25 -6
  172. package/lib/team-subscription-protocol.js.map +1 -1
  173. package/lib/teams-projects-protocol.d.ts +39 -6
  174. package/lib/teams-projects-protocol.d.ts.map +1 -1
  175. package/lib/teams-projects-protocol.js +21 -3
  176. package/lib/teams-projects-protocol.js.map +1 -1
  177. package/lib/typings/globals.d.ts +7 -3
  178. package/lib/typings/globals.d.ts.map +1 -1
  179. package/lib/typings/globals.js +1 -1
  180. package/lib/usage.d.ts +73 -0
  181. package/lib/usage.d.ts.map +1 -0
  182. package/lib/usage.js +20 -0
  183. package/lib/usage.js.map +1 -0
  184. package/lib/util/analytics.d.ts +1 -1
  185. package/lib/util/analytics.d.ts.map +1 -1
  186. package/lib/util/analytics.js +13 -4
  187. package/lib/util/analytics.js.map +1 -1
  188. package/lib/util/async-iterator.d.ts +1 -1
  189. package/lib/util/async-iterator.d.ts.map +1 -1
  190. package/lib/util/async-iterator.js +4 -4
  191. package/lib/util/async-iterator.js.map +1 -1
  192. package/lib/util/cancelable.d.ts +1 -1
  193. package/lib/util/cancelable.js +1 -1
  194. package/lib/util/cancelable.js.map +1 -1
  195. package/lib/util/date-time.d.ts +1 -1
  196. package/lib/util/date-time.js +7 -7
  197. package/lib/util/date-time.js.map +1 -1
  198. package/lib/util/debug-app.d.ts +25 -0
  199. package/lib/util/debug-app.d.ts.map +1 -0
  200. package/lib/util/debug-app.js +100 -0
  201. package/lib/util/debug-app.js.map +1 -0
  202. package/lib/util/deep-partial.d.ts +1 -1
  203. package/lib/util/deep-partial.js +1 -1
  204. package/lib/util/deferred.d.ts +1 -1
  205. package/lib/util/deferred.js +1 -1
  206. package/lib/util/deferred.js.map +1 -1
  207. package/lib/util/disposable.d.ts.map +1 -1
  208. package/lib/util/disposable.js +2 -2
  209. package/lib/util/disposable.js.map +1 -1
  210. package/lib/util/event.d.ts.map +1 -1
  211. package/lib/util/event.js +5 -3
  212. package/lib/util/event.js.map +1 -1
  213. package/lib/util/garbage-collected-cache.d.ts +2 -1
  214. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  215. package/lib/util/garbage-collected-cache.js +12 -3
  216. package/lib/util/garbage-collected-cache.js.map +1 -1
  217. package/lib/util/generate-workspace-id.d.ts +6 -1
  218. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  219. package/lib/util/generate-workspace-id.js +461 -440
  220. package/lib/util/generate-workspace-id.js.map +1 -1
  221. package/lib/util/generate-workspace-id.spec.d.ts +1 -1
  222. package/lib/util/generate-workspace-id.spec.js +37 -2
  223. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  224. package/lib/util/gitpod-cookie.d.ts +2 -2
  225. package/lib/util/gitpod-cookie.d.ts.map +1 -1
  226. package/lib/util/gitpod-cookie.js +1 -4
  227. package/lib/util/gitpod-cookie.js.map +1 -1
  228. package/lib/util/gitpod-host-url.d.ts +12 -5
  229. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  230. package/lib/util/gitpod-host-url.js +69 -41
  231. package/lib/util/gitpod-host-url.js.map +1 -1
  232. package/lib/util/gitpod-host-url.spec.d.ts +1 -1
  233. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  234. package/lib/util/gitpod-host-url.spec.js +16 -6
  235. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  236. package/lib/util/grpc.d.ts +21 -1
  237. package/lib/util/grpc.d.ts.map +1 -1
  238. package/lib/util/grpc.js +74 -2
  239. package/lib/util/grpc.js.map +1 -1
  240. package/lib/util/jaeger-client-types.d.ts +68 -0
  241. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  242. package/lib/{theia-plugins.js → util/jaeger-client-types.js} +2 -2
  243. package/lib/util/jaeger-client-types.js.map +1 -0
  244. package/lib/util/logging.d.ts +2 -2
  245. package/lib/util/logging.d.ts.map +1 -1
  246. package/lib/util/logging.js +32 -26
  247. package/lib/util/logging.js.map +1 -1
  248. package/lib/util/logging.spec.d.ts +7 -0
  249. package/lib/util/logging.spec.d.ts.map +1 -0
  250. package/lib/util/logging.spec.js +52 -0
  251. package/lib/util/logging.spec.js.map +1 -0
  252. package/lib/util/make-link.d.ts +1 -1
  253. package/lib/util/make-link.js +6 -6
  254. package/lib/util/make-link.js.map +1 -1
  255. package/lib/util/nice-grpc.d.ts +9 -0
  256. package/lib/util/nice-grpc.d.ts.map +1 -0
  257. package/lib/util/nice-grpc.js +121 -0
  258. package/lib/util/nice-grpc.js.map +1 -0
  259. package/lib/util/parse-workspace-id.d.ts +1 -1
  260. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  261. package/lib/util/parse-workspace-id.js +3 -4
  262. package/lib/util/parse-workspace-id.js.map +1 -1
  263. package/lib/util/parse-workspace-id.spec.d.ts +1 -1
  264. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  265. package/lib/util/parse-workspace-id.spec.js +1 -1
  266. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  267. package/lib/util/queue.d.ts +1 -1
  268. package/lib/util/queue.js +1 -1
  269. package/lib/util/queue.spec.d.ts +1 -1
  270. package/lib/util/queue.spec.js +10 -7
  271. package/lib/util/queue.spec.js.map +1 -1
  272. package/lib/util/repeat.d.ts +15 -0
  273. package/lib/util/repeat.d.ts.map +1 -0
  274. package/lib/util/repeat.js +55 -0
  275. package/lib/util/repeat.js.map +1 -0
  276. package/lib/util/semaphore.d.ts +1 -1
  277. package/lib/util/semaphore.d.ts.map +1 -1
  278. package/lib/util/semaphore.js +1 -1
  279. package/lib/util/semaphore.js.map +1 -1
  280. package/lib/util/skip-if.d.ts +1 -1
  281. package/lib/util/skip-if.d.ts.map +1 -1
  282. package/lib/util/skip-if.js +1 -1
  283. package/lib/util/skip-if.js.map +1 -1
  284. package/lib/util/timeutil.d.ts +3 -1
  285. package/lib/util/timeutil.d.ts.map +1 -1
  286. package/lib/util/timeutil.js +16 -4
  287. package/lib/util/timeutil.js.map +1 -1
  288. package/lib/util/timeutil.spec.d.ts +3 -1
  289. package/lib/util/timeutil.spec.d.ts.map +1 -1
  290. package/lib/util/timeutil.spec.js +35 -1
  291. package/lib/util/timeutil.spec.js.map +1 -1
  292. package/lib/util/tracing.d.ts +47 -13
  293. package/lib/util/tracing.d.ts.map +1 -1
  294. package/lib/util/tracing.js +141 -32
  295. package/lib/util/tracing.js.map +1 -1
  296. package/lib/util/tracing.spec.d.ts +7 -0
  297. package/lib/util/tracing.spec.d.ts.map +1 -0
  298. package/lib/util/tracing.spec.js +121 -0
  299. package/lib/util/tracing.spec.js.map +1 -0
  300. package/lib/util/workspace-port-authentication.d.ts +8 -8
  301. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  302. package/lib/util/workspace-port-authentication.js +9 -12
  303. package/lib/util/workspace-port-authentication.js.map +1 -1
  304. package/lib/webhook-event.d.ts +44 -0
  305. package/lib/webhook-event.d.ts.map +1 -0
  306. package/lib/webhook-event.js +8 -0
  307. package/lib/webhook-event.js.map +1 -0
  308. package/lib/workspace-class.d.ts +14 -0
  309. package/lib/workspace-class.d.ts.map +1 -0
  310. package/lib/workspace-class.js +8 -0
  311. package/lib/workspace-class.js.map +1 -0
  312. package/lib/workspace-cluster.d.ts +24 -18
  313. package/lib/workspace-cluster.d.ts.map +1 -1
  314. package/lib/workspace-cluster.js +22 -2
  315. package/lib/workspace-cluster.js.map +1 -1
  316. package/lib/workspace-instance.d.ts +41 -4
  317. package/lib/workspace-instance.d.ts.map +1 -1
  318. package/lib/workspace-instance.js +1 -1
  319. package/lib/wsready.d.ts +8 -2
  320. package/lib/wsready.d.ts.map +1 -1
  321. package/lib/wsready.js +3 -3
  322. package/package.json +18 -8
  323. package/pkg-yarn.lock +11 -6
  324. package/provenance-bundle.jsonl +2 -0
  325. package/src/accounting-protocol.ts +76 -52
  326. package/src/admin-protocol.ts +59 -19
  327. package/src/analytics.ts +27 -29
  328. package/src/attribution.ts +67 -0
  329. package/src/auth.ts +3 -3
  330. package/src/billing-mode.ts +84 -0
  331. package/src/blocked-repositories-protocol.ts +13 -0
  332. package/src/context-url.spec.ts +25 -15
  333. package/src/context-url.ts +93 -37
  334. package/src/encryption/container-module.ts +3 -4
  335. package/src/encryption/encryption-engine.spec.ts +10 -9
  336. package/src/encryption/encryption-engine.ts +21 -17
  337. package/src/encryption/encryption-service.ts +5 -6
  338. package/src/encryption/key-provider.ts +17 -20
  339. package/src/env.ts +2 -25
  340. package/src/experiments/always-default.ts +24 -0
  341. package/src/experiments/configcat-server.ts +42 -0
  342. package/src/experiments/configcat.ts +56 -0
  343. package/src/experiments/types.ts +34 -0
  344. package/src/frontend-dashboard-service.ts +148 -0
  345. package/src/gitpod-file-parser.spec.ts +56 -62
  346. package/src/gitpod-file-parser.ts +17 -18
  347. package/src/gitpod-service.ts +315 -136
  348. package/src/headless-workspace-log.ts +7 -5
  349. package/src/ide-frontend-service.ts +3 -3
  350. package/src/ide-protocol.ts +63 -8
  351. package/src/index.ts +17 -15
  352. package/src/installation-admin-protocol.ts +45 -0
  353. package/src/license-protocol.ts +13 -7
  354. package/src/messaging/browser/connection.ts +45 -47
  355. package/src/messaging/browser/window-connection.ts +40 -30
  356. package/src/messaging/client-call-metrics.ts +79 -82
  357. package/src/messaging/error.ts +37 -8
  358. package/src/messaging/handler.ts +6 -6
  359. package/src/messaging/node/connection.ts +23 -70
  360. package/src/messaging/proxy-factory.ts +23 -30
  361. package/src/oss-allowlist.ts +15 -0
  362. package/src/payment-protocol.ts +3 -3
  363. package/src/permission.ts +45 -33
  364. package/src/plans.ts +257 -190
  365. package/src/protocol.spec.ts +97 -0
  366. package/src/protocol.ts +650 -305
  367. package/src/snapshot-url.spec.ts +10 -8
  368. package/src/snapshot-url.ts +1 -1
  369. package/src/team-subscription-protocol.ts +63 -23
  370. package/src/teams-projects-protocol.ts +60 -12
  371. package/src/typings/globals.ts +12 -5
  372. package/src/usage.ts +85 -0
  373. package/src/util/analytics.ts +47 -25
  374. package/src/util/async-iterator.ts +5 -6
  375. package/src/util/cancelable.ts +4 -4
  376. package/src/util/date-time.ts +9 -9
  377. package/src/util/debug-app.ts +81 -0
  378. package/src/util/deep-partial.ts +1 -1
  379. package/src/util/deferred.ts +7 -7
  380. package/src/util/disposable.ts +3 -6
  381. package/src/util/event.ts +9 -11
  382. package/src/util/garbage-collected-cache.ts +15 -7
  383. package/src/util/generate-workspace-id.spec.ts +35 -8
  384. package/src/util/generate-workspace-id.ts +465 -441
  385. package/src/util/gitpod-cookie.ts +9 -10
  386. package/src/util/gitpod-host-url.spec.ts +41 -14
  387. package/src/util/gitpod-host-url.ts +81 -46
  388. package/src/util/grpc.ts +94 -2
  389. package/src/util/jaeger-client-types.ts +102 -0
  390. package/src/util/logging.spec.ts +23 -0
  391. package/src/util/logging.ts +61 -43
  392. package/src/util/make-link.ts +7 -8
  393. package/src/util/nice-grpc.ts +96 -0
  394. package/src/util/parse-workspace-id.spec.ts +18 -9
  395. package/src/util/parse-workspace-id.ts +7 -8
  396. package/src/util/queue.spec.ts +28 -26
  397. package/src/util/queue.ts +1 -1
  398. package/src/util/repeat.ts +45 -0
  399. package/src/util/semaphore.ts +5 -7
  400. package/src/util/skip-if.ts +10 -7
  401. package/src/util/timeutil.spec.ts +41 -15
  402. package/src/util/timeutil.ts +28 -12
  403. package/src/util/tracing.spec.ts +88 -0
  404. package/src/util/tracing.ts +175 -59
  405. package/src/util/workspace-port-authentication.ts +11 -14
  406. package/src/webhook-event.ts +55 -0
  407. package/src/workspace-class.ts +14 -0
  408. package/src/workspace-cluster.ts +46 -21
  409. package/src/workspace-instance.ts +84 -22
  410. package/src/wsready.ts +11 -4
  411. package/data/builtin-theia-plugins.json +0 -372
  412. package/lib/email-protocol.d.ts +0 -49
  413. package/lib/email-protocol.d.ts.map +0 -1
  414. package/lib/email-protocol.js +0 -28
  415. package/lib/email-protocol.js.map +0 -1
  416. package/lib/messaging/connection-error-handler.d.ts +0 -27
  417. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  418. package/lib/messaging/connection-error-handler.js +0 -34
  419. package/lib/messaging/connection-error-handler.js.map +0 -1
  420. package/lib/theia-plugins.d.ts +0 -11
  421. package/lib/theia-plugins.d.ts.map +0 -1
  422. package/lib/theia-plugins.js.map +0 -1
  423. package/lib/util/repeater.d.ts +0 -22
  424. package/lib/util/repeater.d.ts.map +0 -1
  425. package/lib/util/repeater.js +0 -65
  426. package/lib/util/repeater.js.map +0 -1
  427. package/lib/util/safe-promise.d.ts +0 -11
  428. package/lib/util/safe-promise.d.ts.map +0 -1
  429. package/lib/util/safe-promise.js +0 -31
  430. package/lib/util/safe-promise.js.map +0 -1
  431. package/src/email-protocol.ts +0 -66
  432. package/src/messaging/connection-error-handler.ts +0 -62
  433. package/src/theia-plugins.ts +0 -11
  434. package/src/util/jaeger-client.d.ts +0 -105
  435. package/src/util/repeater.ts +0 -49
  436. package/src/util/safe-promise.ts +0 -26
@@ -1,22 +1,21 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
8
7
  export class Semaphore {
9
8
  protected queue: (() => void)[] = [];
10
9
  protected used: number;
11
10
 
12
11
  constructor(protected readonly capacity: number) {
13
- if(capacity < 1) {
12
+ if (capacity < 1) {
14
13
  throw new Error("Capacity cannot be less than 1");
15
14
  }
16
15
  }
17
16
 
18
17
  public release() {
19
- if(this.used == 0) return;
18
+ if (this.used == 0) return;
20
19
 
21
20
  const queued = this.queue.shift();
22
21
  if (queued) {
@@ -28,7 +27,7 @@ export class Semaphore {
28
27
 
29
28
  public async acquire(): Promise<void> {
30
29
  this.used++;
31
- if(this.used <= this.capacity) {
30
+ if (this.used <= this.capacity) {
32
31
  return Promise.resolve();
33
32
  }
34
33
 
@@ -36,5 +35,4 @@ export class Semaphore {
36
35
  this.queue.push(rs);
37
36
  });
38
37
  }
39
-
40
- }
38
+ }
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
8
7
  /**
9
8
  * The subset of actually available fields and methods which are not exported but we care about
10
9
  */
@@ -18,14 +17,18 @@ interface TestSuiteContext extends Mocha.ISuiteCallbackContext {
18
17
  * @param doSkip A function which takes a TestSuite and decides if it should be skipped
19
18
  */
20
19
  export function skipIf(doSkip: (suite: TestSuiteContext) => boolean): MochaTypeScript.SuiteTrait {
21
- const trait: MochaTypeScript.SuiteTrait = function(this: Mocha.ISuiteCallbackContext, ctx: Mocha.ISuiteCallbackContext, ctor: Function): void {
22
- const suite = ctx as any as TestSuiteContext; // No idea why those fields are not exported in the types
20
+ const trait: MochaTypeScript.SuiteTrait = function (
21
+ this: Mocha.ISuiteCallbackContext,
22
+ ctx: Mocha.ISuiteCallbackContext,
23
+ ctor: Function,
24
+ ): void {
25
+ const suite = ctx as any as TestSuiteContext; // No idea why those fields are not exported in the types
23
26
  const skip = doSkip(suite);
24
- suite.beforeEach(function(this: Mocha.IHookCallbackContext) {
27
+ suite.beforeEach(function (this: Mocha.IHookCallbackContext) {
25
28
  if (skip) {
26
29
  this.skip();
27
30
  }
28
- })
31
+ });
29
32
  };
30
33
 
31
34
  // Mark as "trait": mimics the behavior of https://github.com/testdeck/testdeck/blob/9d2dd6a458c2c86c945f6f2999b8278b7528a7a7/index.ts#L433
@@ -45,4 +48,4 @@ export function skipIfEnvVarNotSet(name: string): MochaTypeScript.SuiteTrait {
45
48
  }
46
49
  return skip;
47
50
  });
48
- }
51
+ }
@@ -1,43 +1,69 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import * as chai from 'chai';
7
+ import * as chai from "chai";
8
8
  const expect = chai.expect;
9
- import { suite, test } from 'mocha-typescript';
10
- import { oneMonthLater } from './timeutil';
9
+ import { suite, test } from "mocha-typescript";
10
+ import { daysBefore, hoursBefore, oneMonthLater } from "./timeutil";
11
11
 
12
12
  @suite()
13
13
  export class TimeutilSpec {
14
+ @test
15
+ testDaysBefore() {
16
+ const now = new Date().toISOString();
17
+ expect(daysBefore(now, 2)).to.be.eq(hoursBefore(now, 48));
18
+ }
14
19
 
15
20
  @test
16
21
  testTimeutil() {
17
22
  // targeting a 1st, 1th of Jan => 1st of Feb
18
- this.isOneMonthLater(new Date(2000, 0, 1), 1, new Date(2000, 1, 1))
23
+ this.isOneMonthLater(new Date(2000, 0, 1), 1, new Date(2000, 1, 1));
19
24
 
20
25
  // targeting a 31th, 30th of Apr => 31st of May
21
- this.isOneMonthLater(new Date(2000, 3, 30), 31, new Date(2000, 4, 31))
26
+ this.isOneMonthLater(new Date(2000, 3, 30), 31, new Date(2000, 4, 31));
22
27
 
23
28
  // targeting a 31th, 31th of Mar => 30th of Apr
24
- this.isOneMonthLater(new Date(2000, 2, 31), 31, new Date(2000, 3, 30))
29
+ this.isOneMonthLater(new Date(2000, 2, 31), 31, new Date(2000, 3, 30));
25
30
 
26
31
  // targeting a 30th, 30th of Mar => 30th of Apr
27
- this.isOneMonthLater(new Date(2000, 2, 30), 30, new Date(2000, 3, 30))
32
+ this.isOneMonthLater(new Date(2000, 2, 30), 30, new Date(2000, 3, 30));
28
33
 
29
34
  // next year
30
- this.isOneMonthLater(new Date(2000, 11, 1), 1, new Date(2001, 0, 1))
31
- this.isOneMonthLater(new Date(2000, 11, 31), 31, new Date(2001, 0, 31))
35
+ this.isOneMonthLater(new Date(2000, 11, 1), 1, new Date(2001, 0, 1));
36
+ this.isOneMonthLater(new Date(2000, 11, 31), 31, new Date(2001, 0, 31));
32
37
 
33
38
  // Feb
34
- this.isOneMonthLater(new Date(2001, 0, 31), 31, new Date(2001, 1, 28))
39
+ this.isOneMonthLater(new Date(2001, 0, 31), 31, new Date(2001, 1, 28));
35
40
  // Feb leap year
36
- this.isOneMonthLater(new Date(2000, 0, 31), 31, new Date(2000, 1, 29))
41
+ this.isOneMonthLater(new Date(2000, 0, 31), 31, new Date(2000, 1, 29));
37
42
  }
38
43
 
39
44
  isOneMonthLater(from: Date, day: number, expectation: Date) {
40
- const later = oneMonthLater(from.toISOString(), day)
41
- expect(later, `expected ${later} to be equal ${expectation}`).to.be.equal(expectation.toISOString())
45
+ const later = oneMonthLater(from.toISOString(), day);
46
+ expect(later, `expected ${later} to be equal ${expectation}`).to.be.equal(expectation.toISOString());
47
+ }
48
+
49
+ @test
50
+ testDaysBefore2() {
51
+ const tests: { date: Date; daysEarlier: number; expectation: string }[] = [
52
+ {
53
+ date: new Date("2021-07-13T00:00:00.000Z"),
54
+ daysEarlier: 365,
55
+ expectation: "2020-07-13T00:00:00.000Z",
56
+ },
57
+ {
58
+ date: new Date("2019-02-01T00:00:00.000Z"),
59
+ daysEarlier: 365,
60
+ expectation: "2018-02-01T00:00:00.000Z",
61
+ },
62
+ ];
63
+
64
+ for (const t of tests) {
65
+ const actual = daysBefore(t.date.toISOString(), t.daysEarlier);
66
+ expect(actual).to.equal(t.expectation, `expected ${actual} to be equal ${t.expectation}`);
67
+ }
42
68
  }
43
- }
69
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  /**
@@ -24,28 +24,44 @@ export function oneMonthLater(fromDate: string, day?: number): string {
24
24
  }
25
25
  return later.toISOString();
26
26
  }
27
- export const yearsLater = (fromDate: string, years: number): string => liftDate1(fromDate, (d) => {
28
- d.setUTCFullYear(d.getUTCFullYear() + years);
29
- return d.toISOString();
30
- });
27
+ export const yearsLater = (fromDate: string, years: number): string =>
28
+ liftDate1(fromDate, (d) => {
29
+ d.setUTCFullYear(d.getUTCFullYear() + years);
30
+ return d.toISOString();
31
+ });
31
32
 
32
33
  // tslint:disable-next-line:no-shadowed-variable
33
- export const addMillis = (d1: string, millis: number) => liftDate1(d1, (d1) => new Date(d1.getTime() + millis).toISOString());
34
- export const durationInHours = (d1: string, d2: string) => liftDate(d1, d2, (d1, d2) => millisecondsToHours(d1.getTime() - d2.getTime()));
34
+ export const addMillis = (d1: string, millis: number) =>
35
+ liftDate1(d1, (d1) => new Date(d1.getTime() + millis).toISOString());
36
+ export const durationInHours = (d1: string, d2: string) =>
37
+ liftDate(d1, d2, (d1, d2) => millisecondsToHours(d1.getTime() - d2.getTime()));
35
38
  export const durationInMillis = (d1: string, d2: string) => liftDate(d1, d2, (d1, d2) => d1.getTime() - d2.getTime());
36
39
  // tslint:disable-next-line:no-shadowed-variable
37
- export const isDateGreaterOrEqual = (d1: string, d2: string): boolean => liftDate(d1, d2, (d1, d2) => d1.getTime() >= d2.getTime());
40
+ export const isDateGreaterOrEqual = (d1: string, d2: string): boolean =>
41
+ liftDate(d1, d2, (d1, d2) => d1.getTime() >= d2.getTime());
38
42
  export const isDateSmallerOrEqual = (d1: string, d2: string | undefined) => !d2 || d1 <= d2;
39
43
  export const isDateSmaller = (d1: string, d2: string | undefined) => !d2 || d1 < d2;
40
- export const oldest = (d1: string, d2: string): string => d1 > d2 ? d1 : d2;
41
- export const earliest = (d1: string, d2: string): string => d1 < d2 ? d1 : d2;
44
+ export const oldest = (d1: string, d2: string): string => (d1 > d2 ? d1 : d2);
45
+ export const earliest = (d1: string, d2: string): string => (d1 < d2 ? d1 : d2);
42
46
  export const orderAsc = (d1: string, d2: string): number => liftDate(d1, d2, (d1, d2) => d1.getTime() - d2.getTime());
43
47
  export const liftDate1 = <T>(d1: string, f: (d1: Date) => T): T => f(new Date(d1));
44
48
  export const liftDate = <T>(d1: string, d2: string, f: (d1: Date, d2: Date) => T): T => f(new Date(d1), new Date(d2));
45
49
 
50
+ export function daysBefore(date: string, days: number): string {
51
+ const result = new Date(date);
52
+ result.setDate(result.getDate() - days);
53
+ return result.toISOString();
54
+ }
55
+
56
+ export function hoursBefore(date: string, hours: number): string {
57
+ const result = new Date(date);
58
+ result.setHours(result.getHours() - hours);
59
+ return result.toISOString();
60
+ }
61
+
46
62
  export function hoursLater(date: string, hours: number): string {
47
- const result = new Date(date)
48
- result.setHours(result.getHours() + hours)
63
+ const result = new Date(date);
64
+ result.setHours(result.getHours() + hours);
49
65
  return result.toISOString();
50
66
  }
51
67
 
@@ -0,0 +1,88 @@
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 { suite, test } from "mocha-typescript";
8
+ import * as chai from "chai";
9
+ import { TraceContext } from "./tracing";
10
+ import { MockTracer } from "opentracing";
11
+
12
+ const expect = chai.expect;
13
+
14
+ @suite
15
+ class TestTracing {
16
+ @test public async testTracingContext_addNestedTags() {
17
+ const tracer = new MockTracer();
18
+ const span = tracer.startSpan("testTracingContext_addNestedTags");
19
+ TraceContext.addNestedTags(
20
+ { span },
21
+ {
22
+ rpc: {
23
+ system: "jsonrpc",
24
+ jsonrpc: {
25
+ version: "1.0",
26
+ method: "test",
27
+ parameters: ["abc", "def"],
28
+ },
29
+ },
30
+ },
31
+ );
32
+
33
+ const mockSpan = tracer.report().spans[0];
34
+ expect(mockSpan.tags()).to.deep.equal({
35
+ "rpc.system": "jsonrpc",
36
+ "rpc.jsonrpc.version": "1.0",
37
+ "rpc.jsonrpc.method": "test",
38
+ "rpc.jsonrpc.parameters.0": "abc",
39
+ "rpc.jsonrpc.parameters.1": "def",
40
+ });
41
+ }
42
+
43
+ @test public async testTracingContext_addNestedTags_null() {
44
+ const tracer = new MockTracer();
45
+ const span = tracer.startSpan("testTracingContext_addNestedTags_null");
46
+ TraceContext.addNestedTags(
47
+ { span },
48
+ {
49
+ someShape: {
50
+ thisIsNull: null,
51
+ thisIsUndefined: undefined,
52
+ },
53
+ },
54
+ );
55
+
56
+ const mockSpan = tracer.report().spans[0];
57
+ expect(mockSpan.tags()).to.deep.equal({
58
+ "someShape.thisIsNull": null,
59
+ "someShape.thisIsUndefined": undefined,
60
+ });
61
+ }
62
+
63
+ @test public async testTracingContext_addJsonRPCParameters() {
64
+ const tracer = new MockTracer();
65
+ const span = tracer.startSpan("testTracingContext_addJsonRPCParameters");
66
+ const ctx = { span };
67
+ TraceContext.addJsonRPCParameters(ctx, {
68
+ one: "one",
69
+ two: {
70
+ name: "two",
71
+ some: "shape",
72
+ containing: "PII",
73
+ },
74
+ three: "three",
75
+ });
76
+
77
+ const mockSpan = tracer.report().spans[0];
78
+ expect(mockSpan.tags()).to.deep.equal({
79
+ "rpc.jsonrpc.parameters.one": "one",
80
+ "rpc.jsonrpc.parameters.two.containing": "PII",
81
+ "rpc.jsonrpc.parameters.two.name": "two",
82
+ "rpc.jsonrpc.parameters.two.some": "shape",
83
+ "rpc.jsonrpc.parameters.three": "three",
84
+ "rpc.system": "jsonrpc",
85
+ });
86
+ }
87
+ }
88
+ module.exports = new TestTracing();
@@ -1,96 +1,204 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
8
- import * as opentracing from 'opentracing';
9
- import { TracingConfig, initTracerFromEnv, Sampler, SamplingDecision } from 'jaeger-client';
10
- import { initGlobalTracer } from 'opentracing';
11
- import { injectable } from 'inversify';
12
- import { ResponseError } from 'vscode-jsonrpc';
7
+ import * as opentracing from "opentracing";
8
+ import { TracingConfig, initTracerFromEnv } from "jaeger-client";
9
+ import { Sampler, SamplingDecision } from "./jaeger-client-types";
10
+ import { initGlobalTracer } from "opentracing";
11
+ import { injectable } from "inversify";
12
+ import { ResponseError } from "vscode-jsonrpc";
13
+ import { log, LogContext } from "./logging";
13
14
 
14
15
  export interface TraceContext {
15
- span?: opentracing.Span
16
+ span?: opentracing.Span;
16
17
  }
17
18
  export type TraceContextWithSpan = TraceContext & {
18
- span: opentracing.Span
19
- }
20
-
19
+ span: opentracing.Span;
20
+ };
21
21
 
22
22
  export namespace TraceContext {
23
- export function startSpan(operation: string, parentCtx: TraceContext): opentracing.Span {
24
- const options: opentracing.SpanOptions = {
25
- childOf: parentCtx.span
23
+ export function startSpan(operation: string, parentCtx?: TraceContext): opentracing.Span {
24
+ const options: opentracing.SpanOptions = {};
25
+
26
+ // references should contain span id.
27
+ // cf. https://github.com/jaegertracing/jaeger-client-node/issues/432
28
+ if (!!parentCtx?.span) {
29
+ const ctx = parentCtx?.span?.context();
30
+ if (ctx && !!ctx.toTraceId() && !!ctx.toSpanId()) {
31
+ options.references = [opentracing.followsFrom(ctx)];
32
+ }
26
33
  }
34
+
27
35
  return opentracing.globalTracer().startSpan(operation, options);
28
36
  }
29
37
 
30
- export function childContextWithSpan(operation: string, parentCtx: TraceContext): TraceContextWithSpan {
38
+ export function childContext(operation: string, parentCtx: TraceContext): TraceContextWithSpan {
31
39
  const span = startSpan(operation, parentCtx);
32
40
  return { span };
33
41
  }
34
42
 
35
- export function startAsyncSpan(operation: string, ctx: TraceContext): opentracing.Span {
36
- const options: opentracing.SpanOptions = {};
37
- if (!!ctx.span) {
38
- options.references = [opentracing.followsFrom(ctx.span.context())];
43
+ export function withSpan(operation: string, callback: (ctx: TraceContext) => void, ctx?: TraceContext): void {
44
+ // if we don't have a parent span, don't create a trace here as those <trace-without-root-spans> are not useful.
45
+ if (!ctx || !ctx.span || !ctx.span.context()) {
46
+ callback({});
47
+ return;
48
+ }
49
+
50
+ const span = TraceContext.startSpan(operation, ctx);
51
+ try {
52
+ callback({ span });
53
+ } catch (e) {
54
+ TraceContext.setError({ span }, e);
55
+ throw e;
56
+ } finally {
57
+ span.finish();
39
58
  }
40
- return opentracing.globalTracer().startSpan(operation, options);
41
59
  }
42
60
 
43
- export function logError(ctx: TraceContext, err: Error) {
61
+ export function setError(ctx: TraceContext, err: Error) {
44
62
  if (!ctx.span) {
45
63
  return;
46
64
  }
47
65
 
48
- ctx.span.log({
49
- "error": err.message,
50
- "stacktrace": err.stack
51
- })
66
+ TraceContext.addNestedTags(ctx, {
67
+ error: {
68
+ message: err.message,
69
+ stacktrace: err.stack,
70
+ },
71
+ });
52
72
  ctx.span.setTag("error", true);
53
73
  }
54
74
 
55
- export function logJsonRPCError(ctx: TraceContext, method: string, err: ResponseError<any>) {
75
+ export function setJsonRPCMetadata(ctx: TraceContext, method?: string) {
56
76
  if (!ctx.span) {
57
77
  return;
58
78
  }
59
- logError(ctx, err);
60
79
 
61
- // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md#json-rpc
62
- ctx.span.addTags({
80
+ const tags: { [key: string]: any } = {
63
81
  rpc: {
64
82
  system: "jsonrpc",
65
- method,
83
+ // version,
84
+ },
85
+ };
86
+ if (method) {
87
+ tags.rpc.method = method;
88
+ }
89
+ addNestedTags(ctx, tags);
90
+ }
91
+
92
+ export function setJsonRPCError(
93
+ ctx: TraceContext,
94
+ method: string,
95
+ err: ResponseError<any>,
96
+ withStatusCode: boolean = false,
97
+ ) {
98
+ if (!ctx.span) {
99
+ return;
100
+ }
101
+ // not use setError bc this is (most likely) a working operation
102
+
103
+ setJsonRPCMetadata(ctx, method);
104
+ // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md#json-rpc
105
+ addNestedTags(ctx, {
106
+ rpc: {
66
107
  jsonrpc: {
67
108
  error_code: err.code,
68
109
  error_message: err.message,
69
110
  },
70
111
  },
71
112
  });
113
+
114
+ // the field "status_code" is used by honeycomb to derive insights like success rate, etc. Defaults to "0".
115
+ if (withStatusCode) {
116
+ ctx.span.setTag("status_code", err.code);
117
+ }
72
118
  }
73
119
 
74
- export function addJsonRPCParameters(ctx: TraceContext, method: string, args: any[]) {
120
+ export function addJsonRPCParameters(ctx: TraceContext, params: { [key: string]: any }) {
75
121
  if (!ctx.span) {
76
122
  return;
77
123
  }
78
124
 
79
- ctx.span.addTags({
125
+ setJsonRPCMetadata(ctx);
126
+ addNestedTags(ctx, {
80
127
  rpc: {
81
- system: "jsonrpc",
82
- method,
83
128
  jsonrpc: {
84
- parameters: args.slice(),
129
+ parameters: params,
85
130
  },
86
131
  },
87
132
  });
88
133
  }
134
+
135
+ /**
136
+ * Does what one would expect from `span.addTags`: Calls `span.addTag` for all keys in map, recursively for objects.
137
+ * Example:
138
+ * ```
139
+ * TraceContext.addNestedTags(ctx, {
140
+ * rpc: {
141
+ * system: "jsonrpc",
142
+ * jsonrpc: {
143
+ * version: "1.0",
144
+ * method: "test",
145
+ * parameters: ["abc", "def"],
146
+ * },
147
+ * },
148
+ * });
149
+ * ```
150
+ * gives
151
+ * rpc.system = "jsonrpc"
152
+ * rpc.jsonrpc.version = "1.0"
153
+ * rpc.jsonrpc.method = "test"
154
+ * rpc.jsonrpc.parameters.0 = "abc"
155
+ * rpc.jsonrpc.parameters.1 = "def"
156
+ * @param ctx
157
+ * @param keyValueMap
158
+ * @returns
159
+ */
160
+ export function addNestedTags(ctx: TraceContext, keyValueMap: { [key: string]: any }, _namespace?: string) {
161
+ if (!ctx.span) {
162
+ return;
163
+ }
164
+ const namespace = _namespace ? `${_namespace}.` : "";
165
+
166
+ try {
167
+ for (const k of Object.keys(keyValueMap)) {
168
+ const v = keyValueMap[k];
169
+ if (v instanceof Object) {
170
+ addNestedTags(ctx, v, `${namespace}${k}`);
171
+ } else {
172
+ ctx.span.setTag(`${namespace}${k}`, v);
173
+ }
174
+ }
175
+ } catch (err) {
176
+ // general resilience against odd shapes/parameters
177
+ log.error("Tracing.addNestedTags", err, { namespace });
178
+ }
179
+ }
180
+
181
+ export function setOWI(ctx: TraceContext, owi: LogContext) {
182
+ if (!ctx.span) {
183
+ return;
184
+ }
185
+ addNestedTags(ctx, {
186
+ context: owi,
187
+ });
188
+ }
189
+
190
+ export function finishOnce(span: opentracing.Span): () => void {
191
+ let done = false;
192
+ return () => {
193
+ if (done) return;
194
+ span.finish();
195
+ done = true;
196
+ };
197
+ }
89
198
  }
90
199
 
91
200
  @injectable()
92
201
  export class TracingManager {
93
-
94
202
  public setup(serviceName: string, opts?: CustomTracerOpts) {
95
203
  initGlobalTracer(this.getTracerForService(serviceName, opts));
96
204
  }
@@ -99,13 +207,18 @@ export class TracingManager {
99
207
  const config: TracingConfig = {
100
208
  disable: false,
101
209
  reporter: {
102
- logSpans: false
210
+ logSpans: false,
103
211
  },
104
- serviceName
105
- }
212
+ serviceName,
213
+ };
106
214
  const t = initTracerFromEnv(config, {
107
- logger: console
215
+ logger: console,
216
+ tags: {
217
+ "service.build.commit": process.env.GITPOD_BUILD_GIT_COMMIT,
218
+ "service.build.version": process.env.GITPOD_BUILD_VERSION,
219
+ },
108
220
  });
221
+
109
222
  if (opts) {
110
223
  if (opts.perOpSampling) {
111
224
  (t as any)._sampler = new PerOperationSampler((t as any)._sampler, opts.perOpSampling);
@@ -113,24 +226,22 @@ export class TracingManager {
113
226
  }
114
227
  return t;
115
228
  }
116
-
117
229
  }
118
230
 
119
231
  export interface CustomTracerOpts {
120
- perOpSampling?: PerOperationSampling
232
+ perOpSampling?: PerOperationSampling;
121
233
  }
122
234
 
123
-
124
235
  // has to conform to https://github.com/jaegertracing/jaeger-client-node/blob/0042b1c0a0796bb655eb93e77ff76ab5e94c2bb6/src/_flow/sampler-thrift.js#L32
125
236
  export interface PerOperationSampling {
126
- [key: string]: boolean
237
+ [key: string]: boolean;
127
238
  }
128
239
 
129
240
  export class PerOperationSampler implements Sampler {
130
241
  constructor(protected readonly fallback: Sampler, protected readonly strategies: PerOperationSampling) {}
131
242
 
132
243
  name(): string {
133
- return 'PerOperationSampler';
244
+ return "PerOperationSampler";
134
245
  }
135
246
 
136
247
  toString(): string {
@@ -170,7 +281,7 @@ export class PerOperationSampler implements Sampler {
170
281
  return false; // TODO equal should be removed
171
282
  }
172
283
 
173
- close(callback: ()=>void): void {
284
+ close(callback: () => void): void {
174
285
  // all nested samplers are of simple types, so we do not need to Close them
175
286
  if (callback) {
176
287
  callback();
@@ -179,18 +290,23 @@ export class PerOperationSampler implements Sampler {
179
290
  }
180
291
 
181
292
  // Augment interfaces with an leading parameter "TraceContext" on every method
182
- type IsValidArg<T> = T extends object ? keyof T extends never ? false : true : true;
183
- type AddTraceContext<T> =
184
- T extends (a: infer A, b: infer B, c: infer C, d: infer D, e: infer E, f: infer F) => infer R ? (
185
- IsValidArg<F> extends true ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D, e: E, f: F) => R :
186
- IsValidArg<E> extends true ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D, e: E) => R :
187
- IsValidArg<D> extends true ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D) => R :
188
- IsValidArg<C> extends true ? (ctx: TraceContextWithSpan, a: A, b: B, c: C) => R :
189
- IsValidArg<B> extends true ? (ctx: TraceContextWithSpan, a: A, b: B) => R :
190
- IsValidArg<A> extends true ? (ctx: TraceContextWithSpan, a: A) => R :
191
- (ctx: TraceContextWithSpan) => Promise<R>
192
- ) : never;
293
+ type IsValidArg<T> = T extends object ? (keyof T extends never ? false : true) : true;
294
+ type AddTraceContext<T> = T extends (a: infer A, b: infer B, c: infer C, d: infer D, e: infer E, f: infer F) => infer R
295
+ ? IsValidArg<F> extends true
296
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D, e: E, f: F) => R
297
+ : IsValidArg<E> extends true
298
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D, e: E) => R
299
+ : IsValidArg<D> extends true
300
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D) => R
301
+ : IsValidArg<C> extends true
302
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C) => R
303
+ : IsValidArg<B> extends true
304
+ ? (ctx: TraceContextWithSpan, a: A, b: B) => R
305
+ : IsValidArg<A> extends true
306
+ ? (ctx: TraceContextWithSpan, a: A) => R
307
+ : (ctx: TraceContextWithSpan) => Promise<R>
308
+ : never;
193
309
 
194
310
  export type InterfaceWithTraceContext<T> = {
195
- [P in keyof T]: AddTraceContext<T[P]>
196
- };
311
+ [P in keyof T]: AddTraceContext<T[P]>;
312
+ };