@itwin/core-backend 4.0.0-dev.7 → 4.0.0-dev.70

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 (254) hide show
  1. package/CHANGELOG.md +89 -67
  2. package/lib/cjs/BackendHubAccess.d.ts +224 -224
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js +41 -41
  5. package/lib/cjs/BackendHubAccess.js.map +1 -1
  6. package/lib/cjs/BackendLoggerCategory.d.ts +90 -91
  7. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
  8. package/lib/cjs/BackendLoggerCategory.js +98 -99
  9. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  10. package/lib/cjs/BisCoreSchema.d.ts +21 -21
  11. package/lib/cjs/BisCoreSchema.js +60 -60
  12. package/lib/cjs/BriefcaseManager.d.ts +170 -170
  13. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  14. package/lib/cjs/BriefcaseManager.js +408 -414
  15. package/lib/cjs/BriefcaseManager.js.map +1 -1
  16. package/lib/cjs/Category.d.ts +153 -153
  17. package/lib/cjs/Category.js +243 -243
  18. package/lib/cjs/Category.js.map +1 -1
  19. package/lib/cjs/ChangeSummaryManager.d.ts +187 -187
  20. package/lib/cjs/ChangeSummaryManager.js +444 -445
  21. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  22. package/lib/cjs/ChangedElementsDb.d.ts +99 -99
  23. package/lib/cjs/ChangedElementsDb.js +165 -165
  24. package/lib/cjs/ChangedElementsManager.d.ts +39 -39
  25. package/lib/cjs/ChangedElementsManager.js +88 -88
  26. package/lib/cjs/ChannelControl.d.ts +70 -0
  27. package/lib/cjs/ChannelControl.d.ts.map +1 -0
  28. package/lib/cjs/ChannelControl.js +89 -0
  29. package/lib/cjs/ChannelControl.js.map +1 -0
  30. package/lib/cjs/CheckpointManager.d.ts +121 -121
  31. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  32. package/lib/cjs/CheckpointManager.js +351 -349
  33. package/lib/cjs/CheckpointManager.js.map +1 -1
  34. package/lib/cjs/ClassRegistry.d.ts +79 -79
  35. package/lib/cjs/ClassRegistry.js +249 -245
  36. package/lib/cjs/ClassRegistry.js.map +1 -1
  37. package/lib/cjs/CloudSqlite.d.ts +355 -350
  38. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  39. package/lib/cjs/CloudSqlite.js +154 -153
  40. package/lib/cjs/CloudSqlite.js.map +1 -1
  41. package/lib/cjs/CodeService.d.ts +396 -396
  42. package/lib/cjs/CodeService.d.ts.map +1 -1
  43. package/lib/cjs/CodeService.js +63 -63
  44. package/lib/cjs/CodeService.js.map +1 -1
  45. package/lib/cjs/CodeSpecs.d.ts +55 -55
  46. package/lib/cjs/CodeSpecs.js +124 -124
  47. package/lib/cjs/ConcurrentQuery.d.ts +13 -13
  48. package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
  49. package/lib/cjs/ConcurrentQuery.js +36 -36
  50. package/lib/cjs/CustomViewState3dCreator.d.ts +21 -21
  51. package/lib/cjs/CustomViewState3dCreator.d.ts.map +1 -1
  52. package/lib/cjs/CustomViewState3dCreator.js +82 -81
  53. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  54. package/lib/cjs/DevTools.d.ts +74 -71
  55. package/lib/cjs/DevTools.d.ts.map +1 -1
  56. package/lib/cjs/DevTools.js +156 -154
  57. package/lib/cjs/DevTools.js.map +1 -1
  58. package/lib/cjs/DisplayStyle.d.ts +106 -106
  59. package/lib/cjs/DisplayStyle.js +253 -256
  60. package/lib/cjs/DisplayStyle.js.map +1 -1
  61. package/lib/cjs/ECDb.d.ts +194 -191
  62. package/lib/cjs/ECDb.d.ts.map +1 -1
  63. package/lib/cjs/ECDb.js +353 -350
  64. package/lib/cjs/ECDb.js.map +1 -1
  65. package/lib/cjs/ECSchemaXmlContext.d.ts +18 -18
  66. package/lib/cjs/ECSchemaXmlContext.d.ts.map +1 -1
  67. package/lib/cjs/ECSchemaXmlContext.js +41 -41
  68. package/lib/cjs/ECSqlStatement.d.ts +473 -473
  69. package/lib/cjs/ECSqlStatement.js +791 -791
  70. package/lib/cjs/Element.d.ts +1113 -1109
  71. package/lib/cjs/Element.d.ts.map +1 -1
  72. package/lib/cjs/Element.js +1424 -1427
  73. package/lib/cjs/Element.js.map +1 -1
  74. package/lib/cjs/ElementAspect.d.ts +176 -179
  75. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  76. package/lib/cjs/ElementAspect.js +203 -211
  77. package/lib/cjs/ElementAspect.js.map +1 -1
  78. package/lib/cjs/ElementGraphics.d.ts +9 -9
  79. package/lib/cjs/ElementGraphics.js +41 -41
  80. package/lib/cjs/ElementGraphics.js.map +1 -1
  81. package/lib/cjs/ElementTreeWalker.d.ts +162 -162
  82. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  83. package/lib/cjs/ElementTreeWalker.js +409 -409
  84. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  85. package/lib/cjs/Entity.d.ts +106 -106
  86. package/lib/cjs/Entity.d.ts.map +1 -1
  87. package/lib/cjs/Entity.js +134 -134
  88. package/lib/cjs/Entity.js.map +1 -1
  89. package/lib/cjs/EntityReferences.d.ts +49 -49
  90. package/lib/cjs/EntityReferences.d.ts.map +1 -1
  91. package/lib/cjs/EntityReferences.js +95 -95
  92. package/lib/cjs/ExportGraphics.d.ts +317 -317
  93. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  94. package/lib/cjs/ExportGraphics.js +208 -208
  95. package/lib/cjs/ExternalSource.d.ts +96 -96
  96. package/lib/cjs/ExternalSource.js +131 -131
  97. package/lib/cjs/ExternalSource.js.map +1 -1
  98. package/lib/cjs/GeoCoordConfig.d.ts +19 -19
  99. package/lib/cjs/GeoCoordConfig.js +85 -85
  100. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  101. package/lib/cjs/GeometrySummary.d.ts +4 -4
  102. package/lib/cjs/GeometrySummary.js +333 -333
  103. package/lib/cjs/GeometrySummary.js.map +1 -1
  104. package/lib/cjs/HubMock.d.ts +94 -94
  105. package/lib/cjs/HubMock.js +220 -222
  106. package/lib/cjs/HubMock.js.map +1 -1
  107. package/lib/cjs/IModelCloneContext.d.ts +8 -8
  108. package/lib/cjs/IModelCloneContext.d.ts.map +1 -1
  109. package/lib/cjs/IModelCloneContext.js +15 -15
  110. package/lib/cjs/IModelDb.d.ts +1216 -1196
  111. package/lib/cjs/IModelDb.d.ts.map +1 -1
  112. package/lib/cjs/IModelDb.js +2387 -2392
  113. package/lib/cjs/IModelDb.js.map +1 -1
  114. package/lib/cjs/IModelElementCloneContext.d.ts +89 -89
  115. package/lib/cjs/IModelElementCloneContext.js +159 -159
  116. package/lib/cjs/IModelHost.d.ts +355 -369
  117. package/lib/cjs/IModelHost.d.ts.map +1 -1
  118. package/lib/cjs/IModelHost.js +472 -496
  119. package/lib/cjs/IModelHost.js.map +1 -1
  120. package/lib/cjs/IModelJsFs.d.ts +62 -62
  121. package/lib/cjs/IModelJsFs.js +139 -140
  122. package/lib/cjs/IModelJsFs.js.map +1 -1
  123. package/lib/cjs/IpcHost.d.ts +104 -104
  124. package/lib/cjs/IpcHost.js +276 -278
  125. package/lib/cjs/IpcHost.js.map +1 -1
  126. package/lib/cjs/LineStyle.d.ts +311 -311
  127. package/lib/cjs/LineStyle.js +295 -295
  128. package/lib/cjs/LocalHub.d.ts +162 -162
  129. package/lib/cjs/LocalHub.d.ts.map +1 -1
  130. package/lib/cjs/LocalHub.js +579 -584
  131. package/lib/cjs/LocalHub.js.map +1 -1
  132. package/lib/cjs/LocalhostIpcHost.d.ts +20 -20
  133. package/lib/cjs/LocalhostIpcHost.js +79 -81
  134. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  135. package/lib/cjs/Material.d.ts +131 -131
  136. package/lib/cjs/Material.js +180 -181
  137. package/lib/cjs/Material.js.map +1 -1
  138. package/lib/cjs/Model.d.ts +392 -392
  139. package/lib/cjs/Model.d.ts.map +1 -1
  140. package/lib/cjs/Model.js +489 -485
  141. package/lib/cjs/Model.js.map +1 -1
  142. package/lib/cjs/NativeAppStorage.d.ts +51 -51
  143. package/lib/cjs/NativeAppStorage.js +202 -202
  144. package/lib/cjs/NativeAppStorage.js.map +1 -1
  145. package/lib/cjs/NativeHost.d.ts +52 -52
  146. package/lib/cjs/NativeHost.js +160 -163
  147. package/lib/cjs/NativeHost.js.map +1 -1
  148. package/lib/cjs/NavigationRelationship.d.ts +156 -156
  149. package/lib/cjs/NavigationRelationship.js +225 -225
  150. package/lib/cjs/NavigationRelationship.js.map +1 -1
  151. package/lib/cjs/PromiseMemoizer.d.ts +51 -51
  152. package/lib/cjs/PromiseMemoizer.d.ts.map +1 -1
  153. package/lib/cjs/PromiseMemoizer.js +101 -101
  154. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  155. package/lib/cjs/PropertyStore.d.ts +132 -132
  156. package/lib/cjs/PropertyStore.js +11 -11
  157. package/lib/cjs/Relationship.d.ts +416 -416
  158. package/lib/cjs/Relationship.js +494 -494
  159. package/lib/cjs/Relationship.js.map +1 -1
  160. package/lib/cjs/RpcBackend.d.ts +5 -5
  161. package/lib/cjs/RpcBackend.js +32 -32
  162. package/lib/cjs/SQLiteDb.d.ts +219 -219
  163. package/lib/cjs/SQLiteDb.js +212 -214
  164. package/lib/cjs/SQLiteDb.js.map +1 -1
  165. package/lib/cjs/Schema.d.ts +55 -55
  166. package/lib/cjs/Schema.js +83 -83
  167. package/lib/cjs/Schema.js.map +1 -1
  168. package/lib/cjs/ServerBasedLocks.d.ts +57 -57
  169. package/lib/cjs/ServerBasedLocks.js +168 -168
  170. package/lib/cjs/ServerBasedLocks.js.map +1 -1
  171. package/lib/cjs/SqliteStatement.d.ts +360 -360
  172. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  173. package/lib/cjs/SqliteStatement.js +586 -586
  174. package/lib/cjs/Texture.d.ts +58 -58
  175. package/lib/cjs/Texture.js +82 -82
  176. package/lib/cjs/Texture.js.map +1 -1
  177. package/lib/cjs/TileStorage.d.ts +44 -18
  178. package/lib/cjs/TileStorage.d.ts.map +1 -1
  179. package/lib/cjs/TileStorage.js +109 -90
  180. package/lib/cjs/TileStorage.js.map +1 -1
  181. package/lib/cjs/TxnManager.d.ts +202 -202
  182. package/lib/cjs/TxnManager.d.ts.map +1 -1
  183. package/lib/cjs/TxnManager.js +356 -356
  184. package/lib/cjs/TxnManager.js.map +1 -1
  185. package/lib/cjs/ViewDefinition.d.ts +435 -439
  186. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  187. package/lib/cjs/ViewDefinition.js +646 -646
  188. package/lib/cjs/ViewDefinition.js.map +1 -1
  189. package/lib/cjs/ViewStateHydrator.d.ts +13 -13
  190. package/lib/cjs/ViewStateHydrator.js +103 -103
  191. package/lib/cjs/core-backend.d.ts +184 -184
  192. package/lib/cjs/core-backend.d.ts.map +1 -1
  193. package/lib/cjs/core-backend.js +208 -204
  194. package/lib/cjs/core-backend.js.map +1 -1
  195. package/lib/cjs/domains/FunctionalElements.d.ts +101 -101
  196. package/lib/cjs/domains/FunctionalElements.js +145 -145
  197. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  198. package/lib/cjs/domains/FunctionalSchema.d.ts +13 -13
  199. package/lib/cjs/domains/FunctionalSchema.d.ts.map +1 -1
  200. package/lib/cjs/domains/FunctionalSchema.js +39 -40
  201. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  202. package/lib/cjs/domains/GenericElements.d.ts +177 -177
  203. package/lib/cjs/domains/GenericElements.js +263 -263
  204. package/lib/cjs/domains/GenericSchema.d.ts +10 -10
  205. package/lib/cjs/domains/GenericSchema.js +28 -28
  206. package/lib/cjs/rpc/multipart.d.ts +11 -11
  207. package/lib/cjs/rpc/multipart.js +71 -71
  208. package/lib/cjs/rpc/tracing.d.ts +28 -28
  209. package/lib/cjs/rpc/tracing.js +73 -74
  210. package/lib/cjs/rpc/tracing.js.map +1 -1
  211. package/lib/cjs/rpc/web/logging.d.ts +9 -9
  212. package/lib/cjs/rpc/web/logging.js +43 -43
  213. package/lib/cjs/rpc/web/request.d.ts +6 -6
  214. package/lib/cjs/rpc/web/request.js +73 -74
  215. package/lib/cjs/rpc/web/request.js.map +1 -1
  216. package/lib/cjs/rpc/web/response.d.ts +6 -6
  217. package/lib/cjs/rpc/web/response.js +105 -106
  218. package/lib/cjs/rpc/web/response.js.map +1 -1
  219. package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts +15 -15
  220. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js +32 -32
  221. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +47 -47
  222. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +293 -294
  223. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  224. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts +20 -22
  225. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -1
  226. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +187 -205
  227. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  228. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +36 -36
  229. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +166 -168
  230. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  231. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +16 -16
  232. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +42 -43
  233. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  234. package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +15 -15
  235. package/lib/cjs/rpc-impl/WipRpcImpl.js +37 -37
  236. package/lib/cjs/workspace/Settings.d.ts +186 -186
  237. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  238. package/lib/cjs/workspace/Settings.js +154 -155
  239. package/lib/cjs/workspace/Settings.js.map +1 -1
  240. package/lib/cjs/workspace/SettingsSchemas.d.ts +75 -75
  241. package/lib/cjs/workspace/SettingsSchemas.js +190 -191
  242. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  243. package/lib/cjs/workspace/Workspace.d.ts +414 -414
  244. package/lib/cjs/workspace/Workspace.js +537 -543
  245. package/lib/cjs/workspace/Workspace.js.map +1 -1
  246. package/package.json +21 -21
  247. package/lib/cjs/AliCloudStorageService.d.ts +0 -24
  248. package/lib/cjs/AliCloudStorageService.d.ts.map +0 -1
  249. package/lib/cjs/AliCloudStorageService.js +0 -72
  250. package/lib/cjs/AliCloudStorageService.js.map +0 -1
  251. package/lib/cjs/CloudStorageBackend.d.ts +0 -59
  252. package/lib/cjs/CloudStorageBackend.d.ts.map +0 -1
  253. package/lib/cjs/CloudStorageBackend.js +0 -174
  254. package/lib/cjs/CloudStorageBackend.js.map +0 -1
@@ -1,72 +1,75 @@
1
- /// <reference types="node" />
2
- import * as os from "os";
3
- import { LogLevel } from "@itwin/core-bentley";
4
- /**
5
- * Performance and Memory statistics of backend
6
- * @internal
7
- */
8
- export interface DevToolsStats {
9
- os: DevToolsOsStats;
10
- process: DevToolsProcessStats;
11
- }
12
- /**
13
- * OS stats of backend
14
- * @internal
15
- */
16
- export interface DevToolsOsStats {
17
- platform: NodeJS.Platform;
18
- hostname: string;
19
- totalmem: number;
20
- freemem: number;
21
- uptime: number;
22
- cpus: os.CpuInfo[];
23
- cpuUsage: number;
24
- }
25
- /**
26
- * Process stats of backend
27
- * @internal
28
- */
29
- export interface DevToolsProcessStats {
30
- uptime: number;
31
- pid: number;
32
- ppid: number;
33
- memoryUsage: NodeJS.MemoryUsage;
34
- }
35
- /** Utility to format the JSON created by DevTools.stats() to include the appropriate units
36
- * @internal
37
- */
38
- export declare class DevToolsStatsFormatter {
39
- private static readonly _megaByteProps;
40
- private static readonly _percentProps;
41
- private static readonly _mHzProps;
42
- private static readonly _secondsProps;
43
- /** Replacer that includes units - can be used with JSON.stringify() */
44
- private static _replacer;
45
- /** Converts the input stats to another JSON object with the appropriate units setup for various fields */
46
- static toFormattedJson(stats: any): any;
47
- }
48
- /**
49
- * Internal diagnostic utility
50
- * @internal
51
- */
52
- export declare class DevTools {
53
- /** Receives a ping and returns true */
54
- static ping(): boolean;
55
- private static hrtimeToMS;
56
- private static bytesToMegaBytes;
57
- private static evaluateCpuUsage;
58
- private static evaluateCpus;
59
- private static evaluateMemoryUsage;
60
- private static evaluateProcessStats;
61
- private static evaluateOsStats;
62
- /** Returns JSON object with backend statistics */
63
- static stats(): DevToolsStats;
64
- /** Sets up a log level at the backend and returns the old log level */
65
- static setLogLevel(inLoggerCategory: string, newLevel: LogLevel): LogLevel | undefined;
66
- /** Obtains the backend application and iTwin.js Core versions */
67
- static versions(): {
68
- application: string;
69
- iTwinJs: any;
70
- };
71
- }
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import * as os from "os";
4
+ import { LogLevel } from "@itwin/core-bentley";
5
+ import { RpcInterfaceEndpoints } from "@itwin/core-common";
6
+ /**
7
+ * Performance and Memory statistics of backend
8
+ * @internal
9
+ */
10
+ export interface DevToolsStats {
11
+ os: DevToolsOsStats;
12
+ process: DevToolsProcessStats;
13
+ }
14
+ /**
15
+ * OS stats of backend
16
+ * @internal
17
+ */
18
+ export interface DevToolsOsStats {
19
+ platform: NodeJS.Platform;
20
+ hostname: string;
21
+ totalmem: number;
22
+ freemem: number;
23
+ uptime: number;
24
+ cpus: os.CpuInfo[];
25
+ cpuUsage: number;
26
+ }
27
+ /**
28
+ * Process stats of backend
29
+ * @internal
30
+ */
31
+ export interface DevToolsProcessStats {
32
+ uptime: number;
33
+ pid: number;
34
+ ppid: number;
35
+ memoryUsage: NodeJS.MemoryUsage;
36
+ }
37
+ /** Utility to format the JSON created by DevTools.stats() to include the appropriate units
38
+ * @internal
39
+ */
40
+ export declare class DevToolsStatsFormatter {
41
+ private static readonly _megaByteProps;
42
+ private static readonly _percentProps;
43
+ private static readonly _mHzProps;
44
+ private static readonly _secondsProps;
45
+ /** Replacer that includes units - can be used with JSON.stringify() */
46
+ private static _replacer;
47
+ /** Converts the input stats to another JSON object with the appropriate units setup for various fields */
48
+ static toFormattedJson(stats: any): any;
49
+ }
50
+ /**
51
+ * Internal diagnostic utility
52
+ * @internal
53
+ */
54
+ export declare class DevTools {
55
+ /** Receives a ping and returns true */
56
+ static ping(): boolean;
57
+ private static hrtimeToMS;
58
+ private static bytesToMegaBytes;
59
+ private static evaluateCpuUsage;
60
+ private static evaluateCpus;
61
+ private static evaluateMemoryUsage;
62
+ private static evaluateProcessStats;
63
+ private static evaluateOsStats;
64
+ /** Returns JSON object with backend statistics */
65
+ static stats(): DevToolsStats;
66
+ /** Sets up a log level at the backend and returns the old log level */
67
+ static setLogLevel(inLoggerCategory: string, newLevel: LogLevel): LogLevel | undefined;
68
+ /** Obtains the backend application and iTwin.js Core versions */
69
+ static versions(): Promise<{
70
+ application: string;
71
+ iTwinJs: any;
72
+ availableRpcs: RpcInterfaceEndpoints[];
73
+ }>;
74
+ }
72
75
  //# sourceMappingURL=DevTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevTools.d.ts","sourceRoot":"","sources":["../../src/DevTools.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAYvD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,eAAe,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuE;IAC7G,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAsD;IAC3F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAa;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAc;IAEnD,wEAAwE;IACxE,OAAO,CAAC,MAAM,CAAC,SAAS,CAUtB;IAEF,0GAA0G;WAC5F,eAAe,CAAC,KAAK,EAAE,GAAG;CAOzC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IAEnB,uCAAuC;WACzB,IAAI,IAAI,OAAO;IAK7B,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAK/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsB/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAoB3B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAWlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IASnC,OAAO,CAAC,MAAM,CAAC,eAAe;IAY9B,kDAAkD;WACpC,KAAK,IAAI,aAAa;IAapC,uEAAuE;WACzD,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAQ7F,iEAAiE;WACnD,QAAQ;;;;CAMvB"}
1
+ {"version":3,"file":"DevTools.d.ts","sourceRoot":"","sources":["../../src/DevTools.ts"],"names":[],"mappings":";;AAKA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAU3D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,eAAe,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuE;IAC7G,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAsD;IAC3F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAa;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAc;IAEnD,wEAAwE;IACxE,OAAO,CAAC,MAAM,CAAC,SAAS,CAUtB;IAEF,0GAA0G;WAC5F,eAAe,CAAC,KAAK,EAAE,GAAG;CAOzC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IAEnB,uCAAuC;WACzB,IAAI,IAAI,OAAO;IAK7B,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAK/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsB/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAoB3B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAWlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IASnC,OAAO,CAAC,MAAM,CAAC,eAAe;IAY9B,kDAAkD;WACpC,KAAK,IAAI,aAAa;IAapC,uEAAuE;WACzD,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAQ7F,iEAAiE;WAC7C,QAAQ;;;;;CAQ7B"}
@@ -1,155 +1,157 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DevTools = exports.DevToolsStatsFormatter = void 0;
8
- const os = require("os");
9
- const process = require("process");
10
- const core_bentley_1 = require("@itwin/core-bentley");
11
- const BackendLoggerCategory_1 = require("./BackendLoggerCategory");
12
- const IModelHost_1 = require("./IModelHost");
13
- // cspell:ignore ppid elap
14
- const loggerCategory = BackendLoggerCategory_1.BackendLoggerCategory.DevTools;
15
- /** Utility to format the JSON created by DevTools.stats() to include the appropriate units
16
- * @internal
17
- */
18
- class DevToolsStatsFormatter {
19
- /** Converts the input stats to another JSON object with the appropriate units setup for various fields */
20
- static toFormattedJson(stats) {
21
- // Serialize the stats to a string with a replacer that sets up units during the serialization
22
- const statsStr = JSON.stringify(stats, DevToolsStatsFormatter._replacer);
23
- // Deserialize back to JSON
24
- return JSON.parse(statsStr);
25
- }
26
- }
27
- exports.DevToolsStatsFormatter = DevToolsStatsFormatter;
28
- DevToolsStatsFormatter._megaByteProps = ["totalmem", "freemem", "rss", "heapTotal", "heapUsed", "external"];
29
- DevToolsStatsFormatter._percentProps = ["user", "nice", "sys", "idle", "irq", "cpuUsage"];
30
- DevToolsStatsFormatter._mHzProps = ["speed"];
31
- DevToolsStatsFormatter._secondsProps = ["uptime"];
32
- /** Replacer that includes units - can be used with JSON.stringify() */
33
- DevToolsStatsFormatter._replacer = (key, value) => {
34
- if (DevToolsStatsFormatter._megaByteProps.includes(key))
35
- return `${value.toFixed()} MB`;
36
- if (DevToolsStatsFormatter._percentProps.includes(key))
37
- return `${value.toFixed()}%`;
38
- if (DevToolsStatsFormatter._mHzProps.includes(key))
39
- return `${value.toString()} MHz`;
40
- if (DevToolsStatsFormatter._secondsProps.includes(key))
41
- return `${value.toFixed()} secs`;
42
- return value;
43
- };
44
- /**
45
- * Internal diagnostic utility
46
- * @internal
47
- */
48
- class DevTools {
49
- /** Receives a ping and returns true */
50
- static ping() {
51
- core_bentley_1.Logger.logInfo(loggerCategory, "Received ping at backend");
52
- return true;
53
- }
54
- static hrtimeToMS(hrtime) {
55
- return hrtime[0] * 1000 + hrtime[1] / 1000000;
56
- }
57
- static bytesToMegaBytes(bytes) {
58
- const megaBytes = bytes / Math.pow(1024, 2);
59
- return Math.round(megaBytes * 100) / 100;
60
- }
61
- static evaluateCpuUsage() {
62
- const NUMBER_OF_CPUS = os.cpus().length;
63
- const startTime = process.hrtime();
64
- const startUsage = process.cpuUsage();
65
- // spin the CPU for 500 milliseconds
66
- const now = Date.now();
67
- while (Date.now() - now < 500)
68
- ;
69
- const elapTime = process.hrtime(startTime);
70
- const elapUsage = process.cpuUsage(startUsage);
71
- const elapTimeMS = this.hrtimeToMS(elapTime);
72
- const elapUserMS = elapUsage.user / 1000; // microseconds to milliseconds
73
- const elapSystMS = elapUsage.system / 1000;
74
- const cpuPercent = Math.round((100 * (elapUserMS + elapSystMS) / elapTimeMS / NUMBER_OF_CPUS));
75
- return cpuPercent;
76
- }
77
- static evaluateCpus() {
78
- // Create a clone
79
- const srcCpus = os.cpus();
80
- const cpus = new Array(srcCpus.length);
81
- let ii = 0;
82
- for (const srcCpu of srcCpus)
83
- cpus[ii++] = { ...srcCpu };
84
- // Evaluate cpu usage as percentages
85
- for (const cpu of Object.values(cpus)) {
86
- const total = Object.values(cpu.times).reduce((_total, currValue) => _total += currValue, 0);
87
- const cpuTimes = cpu.times;
88
- for (const type of Object.keys(cpuTimes)) {
89
- const cpuPercent = Math.round(100 * cpuTimes[type] / total);
90
- cpuTimes[type] = cpuPercent;
91
- }
92
- }
93
- return cpus;
94
- }
95
- static evaluateMemoryUsage() {
96
- // Create a clone
97
- const memUsage = { ...process.memoryUsage() };
98
- const memUsageObj = memUsage;
99
- // Evaluate memory usage as mega bytes
100
- for (const type of Object.keys(memUsageObj)) {
101
- memUsageObj[type] = this.bytesToMegaBytes(memUsageObj[type]);
102
- }
103
- return memUsage;
104
- }
105
- static evaluateProcessStats() {
106
- return {
107
- uptime: process.uptime(),
108
- pid: process.pid,
109
- ppid: process.ppid,
110
- memoryUsage: this.evaluateMemoryUsage(),
111
- };
112
- }
113
- static evaluateOsStats() {
114
- return {
115
- platform: os.platform(),
116
- hostname: os.hostname(),
117
- totalmem: this.bytesToMegaBytes(os.totalmem()),
118
- freemem: this.bytesToMegaBytes(os.freemem()),
119
- uptime: os.uptime(),
120
- cpus: this.evaluateCpus(),
121
- cpuUsage: this.evaluateCpuUsage(),
122
- };
123
- }
124
- /** Returns JSON object with backend statistics */
125
- static stats() {
126
- try {
127
- const stats = {
128
- os: this.evaluateOsStats(),
129
- process: this.evaluateProcessStats(),
130
- };
131
- return stats;
132
- }
133
- catch (error) {
134
- core_bentley_1.Logger.logError(loggerCategory, "Could not fetch stats at backend");
135
- throw error;
136
- }
137
- }
138
- /** Sets up a log level at the backend and returns the old log level */
139
- static setLogLevel(inLoggerCategory, newLevel) {
140
- const oldLevel = core_bentley_1.Logger.getLevel(inLoggerCategory);
141
- core_bentley_1.Logger.logInfo(loggerCategory, `Setting log level`, () => ({ loggerCategory: inLoggerCategory, oldLevel, newLevel }));
142
- core_bentley_1.Logger.setLevel(inLoggerCategory, newLevel);
143
- IModelHost_1.IModelHost.platform.clearLogLevelCache();
144
- return oldLevel;
145
- }
146
- /** Obtains the backend application and iTwin.js Core versions */
147
- static versions() {
148
- return {
149
- application: IModelHost_1.IModelHost.applicationVersion,
150
- iTwinJs: require("../../package.json").version, // eslint-disable-line @typescript-eslint/no-var-requires
151
- };
152
- }
153
- }
154
- exports.DevTools = DevTools;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DevTools = exports.DevToolsStatsFormatter = void 0;
8
+ const os = require("os");
9
+ const process = require("process");
10
+ const core_bentley_1 = require("@itwin/core-bentley");
11
+ const BackendLoggerCategory_1 = require("./BackendLoggerCategory");
12
+ const IModelHost_1 = require("./IModelHost");
13
+ // cspell:ignore ppid elap
14
+ const loggerCategory = BackendLoggerCategory_1.BackendLoggerCategory.DevTools;
15
+ /** Utility to format the JSON created by DevTools.stats() to include the appropriate units
16
+ * @internal
17
+ */
18
+ class DevToolsStatsFormatter {
19
+ /** Converts the input stats to another JSON object with the appropriate units setup for various fields */
20
+ static toFormattedJson(stats) {
21
+ // Serialize the stats to a string with a replacer that sets up units during the serialization
22
+ const statsStr = JSON.stringify(stats, DevToolsStatsFormatter._replacer);
23
+ // Deserialize back to JSON
24
+ return JSON.parse(statsStr);
25
+ }
26
+ }
27
+ DevToolsStatsFormatter._megaByteProps = ["totalmem", "freemem", "rss", "heapTotal", "heapUsed", "external"];
28
+ DevToolsStatsFormatter._percentProps = ["user", "nice", "sys", "idle", "irq", "cpuUsage"];
29
+ DevToolsStatsFormatter._mHzProps = ["speed"];
30
+ DevToolsStatsFormatter._secondsProps = ["uptime"];
31
+ /** Replacer that includes units - can be used with JSON.stringify() */
32
+ DevToolsStatsFormatter._replacer = (key, value) => {
33
+ if (DevToolsStatsFormatter._megaByteProps.includes(key))
34
+ return `${value.toFixed()} MB`;
35
+ if (DevToolsStatsFormatter._percentProps.includes(key))
36
+ return `${value.toFixed()}%`;
37
+ if (DevToolsStatsFormatter._mHzProps.includes(key))
38
+ return `${value.toString()} MHz`;
39
+ if (DevToolsStatsFormatter._secondsProps.includes(key))
40
+ return `${value.toFixed()} secs`;
41
+ return value;
42
+ };
43
+ exports.DevToolsStatsFormatter = DevToolsStatsFormatter;
44
+ /**
45
+ * Internal diagnostic utility
46
+ * @internal
47
+ */
48
+ class DevTools {
49
+ /** Receives a ping and returns true */
50
+ static ping() {
51
+ core_bentley_1.Logger.logInfo(loggerCategory, "Received ping at backend");
52
+ return true;
53
+ }
54
+ static hrtimeToMS(hrtime) {
55
+ return hrtime[0] * 1000 + hrtime[1] / 1000000;
56
+ }
57
+ static bytesToMegaBytes(bytes) {
58
+ const megaBytes = bytes / Math.pow(1024, 2);
59
+ return Math.round(megaBytes * 100) / 100;
60
+ }
61
+ static evaluateCpuUsage() {
62
+ const NUMBER_OF_CPUS = os.cpus().length;
63
+ const startTime = process.hrtime();
64
+ const startUsage = process.cpuUsage();
65
+ // spin the CPU for 500 milliseconds
66
+ const now = Date.now();
67
+ while (Date.now() - now < 500)
68
+ ;
69
+ const elapTime = process.hrtime(startTime);
70
+ const elapUsage = process.cpuUsage(startUsage);
71
+ const elapTimeMS = this.hrtimeToMS(elapTime);
72
+ const elapUserMS = elapUsage.user / 1000; // microseconds to milliseconds
73
+ const elapSystMS = elapUsage.system / 1000;
74
+ const cpuPercent = Math.round((100 * (elapUserMS + elapSystMS) / elapTimeMS / NUMBER_OF_CPUS));
75
+ return cpuPercent;
76
+ }
77
+ static evaluateCpus() {
78
+ // Create a clone
79
+ const srcCpus = os.cpus();
80
+ const cpus = new Array(srcCpus.length);
81
+ let ii = 0;
82
+ for (const srcCpu of srcCpus)
83
+ cpus[ii++] = { ...srcCpu };
84
+ // Evaluate cpu usage as percentages
85
+ for (const cpu of Object.values(cpus)) {
86
+ const total = Object.values(cpu.times).reduce((_total, currValue) => _total += currValue, 0);
87
+ const cpuTimes = cpu.times;
88
+ for (const type of Object.keys(cpuTimes)) {
89
+ const cpuPercent = Math.round(100 * cpuTimes[type] / total);
90
+ cpuTimes[type] = cpuPercent;
91
+ }
92
+ }
93
+ return cpus;
94
+ }
95
+ static evaluateMemoryUsage() {
96
+ // Create a clone
97
+ const memUsage = { ...process.memoryUsage() };
98
+ const memUsageObj = memUsage;
99
+ // Evaluate memory usage as mega bytes
100
+ for (const type of Object.keys(memUsageObj)) {
101
+ memUsageObj[type] = this.bytesToMegaBytes(memUsageObj[type]);
102
+ }
103
+ return memUsage;
104
+ }
105
+ static evaluateProcessStats() {
106
+ return {
107
+ uptime: process.uptime(),
108
+ pid: process.pid,
109
+ ppid: process.ppid,
110
+ memoryUsage: this.evaluateMemoryUsage(),
111
+ };
112
+ }
113
+ static evaluateOsStats() {
114
+ return {
115
+ platform: os.platform(),
116
+ hostname: os.hostname(),
117
+ totalmem: this.bytesToMegaBytes(os.totalmem()),
118
+ freemem: this.bytesToMegaBytes(os.freemem()),
119
+ uptime: os.uptime(),
120
+ cpus: this.evaluateCpus(),
121
+ cpuUsage: this.evaluateCpuUsage(),
122
+ };
123
+ }
124
+ /** Returns JSON object with backend statistics */
125
+ static stats() {
126
+ try {
127
+ const stats = {
128
+ os: this.evaluateOsStats(),
129
+ process: this.evaluateProcessStats(),
130
+ };
131
+ return stats;
132
+ }
133
+ catch (error) {
134
+ core_bentley_1.Logger.logError(loggerCategory, "Could not fetch stats at backend");
135
+ throw error;
136
+ }
137
+ }
138
+ /** Sets up a log level at the backend and returns the old log level */
139
+ static setLogLevel(inLoggerCategory, newLevel) {
140
+ const oldLevel = core_bentley_1.Logger.getLevel(inLoggerCategory);
141
+ core_bentley_1.Logger.logInfo(loggerCategory, `Setting log level`, () => ({ loggerCategory: inLoggerCategory, oldLevel, newLevel }));
142
+ core_bentley_1.Logger.setLevel(inLoggerCategory, newLevel);
143
+ IModelHost_1.IModelHost.platform.clearLogLevelCache();
144
+ return oldLevel;
145
+ }
146
+ /** Obtains the backend application and iTwin.js Core versions */
147
+ static async versions() {
148
+ const availableRpcs = [];
149
+ return {
150
+ application: IModelHost_1.IModelHost.applicationVersion,
151
+ iTwinJs: require("../../package.json").version,
152
+ availableRpcs, // filled in on the frontend
153
+ };
154
+ }
155
+ }
156
+ exports.DevTools = DevTools;
155
157
  //# sourceMappingURL=DevTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevTools.js","sourceRoot":"","sources":["../../src/DevTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as os from \"os\";\r\nimport * as process from \"process\";\r\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { IModelHost } from \"./IModelHost\";\r\n\r\n// cspell:ignore ppid elap\r\n\r\nconst loggerCategory: string = BackendLoggerCategory.DevTools;\r\n\r\ninterface StringIndexedObject<T> {\r\n [index: string]: T;\r\n}\r\n\r\n/**\r\n * Performance and Memory statistics of backend\r\n * @internal\r\n */\r\nexport interface DevToolsStats {\r\n os: DevToolsOsStats;\r\n process: DevToolsProcessStats;\r\n}\r\n\r\n/**\r\n * OS stats of backend\r\n * @internal\r\n */\r\nexport interface DevToolsOsStats {\r\n platform: NodeJS.Platform;\r\n hostname: string;\r\n totalmem: number;\r\n freemem: number;\r\n uptime: number;\r\n cpus: os.CpuInfo[];\r\n cpuUsage: number;\r\n}\r\n\r\n/**\r\n * Process stats of backend\r\n * @internal\r\n */\r\nexport interface DevToolsProcessStats {\r\n uptime: number;\r\n pid: number;\r\n ppid: number;\r\n memoryUsage: NodeJS.MemoryUsage;\r\n}\r\n\r\n/** Utility to format the JSON created by DevTools.stats() to include the appropriate units\r\n * @internal\r\n */\r\nexport class DevToolsStatsFormatter {\r\n private static readonly _megaByteProps = [\"totalmem\", \"freemem\", \"rss\", \"heapTotal\", \"heapUsed\", \"external\"];\r\n private static readonly _percentProps = [\"user\", \"nice\", \"sys\", \"idle\", \"irq\", \"cpuUsage\"];\r\n private static readonly _mHzProps = [\"speed\"];\r\n private static readonly _secondsProps = [\"uptime\"];\r\n\r\n /** Replacer that includes units - can be used with JSON.stringify() */\r\n private static _replacer = (key: string, value: any) => {\r\n if (DevToolsStatsFormatter._megaByteProps.includes(key))\r\n return `${value.toFixed()} MB`;\r\n if (DevToolsStatsFormatter._percentProps.includes(key))\r\n return `${value.toFixed()}%`;\r\n if (DevToolsStatsFormatter._mHzProps.includes(key))\r\n return `${value.toString()} MHz`;\r\n if (DevToolsStatsFormatter._secondsProps.includes(key))\r\n return `${value.toFixed()} secs`;\r\n return value;\r\n };\r\n\r\n /** Converts the input stats to another JSON object with the appropriate units setup for various fields */\r\n public static toFormattedJson(stats: any) {\r\n // Serialize the stats to a string with a replacer that sets up units during the serialization\r\n const statsStr = JSON.stringify(stats, DevToolsStatsFormatter._replacer);\r\n\r\n // Deserialize back to JSON\r\n return JSON.parse(statsStr);\r\n }\r\n}\r\n\r\n/**\r\n * Internal diagnostic utility\r\n * @internal\r\n */\r\nexport class DevTools {\r\n\r\n /** Receives a ping and returns true */\r\n public static ping(): boolean {\r\n Logger.logInfo(loggerCategory, \"Received ping at backend\");\r\n return true;\r\n }\r\n\r\n private static hrtimeToMS(hrtime: any) {\r\n return hrtime[0] * 1000 + hrtime[1] / 1000000;\r\n }\r\n\r\n private static bytesToMegaBytes(bytes: number): number {\r\n const megaBytes = bytes / Math.pow(1024, 2);\r\n return Math.round(megaBytes * 100) / 100;\r\n }\r\n\r\n private static evaluateCpuUsage(): number {\r\n const NUMBER_OF_CPUS = os.cpus().length;\r\n const startTime = process.hrtime();\r\n const startUsage = process.cpuUsage();\r\n\r\n // spin the CPU for 500 milliseconds\r\n const now = Date.now();\r\n while (Date.now() - now < 500)\r\n ;\r\n\r\n const elapTime = process.hrtime(startTime);\r\n const elapUsage = process.cpuUsage(startUsage);\r\n\r\n const elapTimeMS = this.hrtimeToMS(elapTime);\r\n\r\n const elapUserMS = elapUsage.user / 1000; // microseconds to milliseconds\r\n const elapSystMS = elapUsage.system / 1000;\r\n const cpuPercent = Math.round((100 * (elapUserMS + elapSystMS) / elapTimeMS / NUMBER_OF_CPUS));\r\n\r\n return cpuPercent;\r\n }\r\n\r\n private static evaluateCpus(): os.CpuInfo[] {\r\n // Create a clone\r\n const srcCpus = os.cpus();\r\n const cpus = new Array<os.CpuInfo>(srcCpus.length);\r\n let ii = 0;\r\n for (const srcCpu of srcCpus)\r\n cpus[ii++] = { ...srcCpu };\r\n\r\n // Evaluate cpu usage as percentages\r\n for (const cpu of Object.values(cpus)) {\r\n const total = Object.values(cpu.times).reduce((_total: number, currValue) => _total += currValue, 0);\r\n const cpuTimes = cpu.times as StringIndexedObject<number>;\r\n for (const type of Object.keys(cpuTimes)) {\r\n const cpuPercent = Math.round(100 * cpuTimes[type] / total);\r\n cpuTimes[type] = cpuPercent;\r\n }\r\n }\r\n return cpus;\r\n }\r\n\r\n private static evaluateMemoryUsage() {\r\n // Create a clone\r\n const memUsage = { ...process.memoryUsage() } as NodeJS.MemoryUsage;\r\n const memUsageObj = (memUsage as any) as StringIndexedObject<number>;\r\n // Evaluate memory usage as mega bytes\r\n for (const type of Object.keys(memUsageObj)) {\r\n memUsageObj[type] = this.bytesToMegaBytes(memUsageObj[type]);\r\n }\r\n return memUsage;\r\n }\r\n\r\n private static evaluateProcessStats(): DevToolsProcessStats {\r\n return {\r\n uptime: process.uptime(),\r\n pid: process.pid,\r\n ppid: process.ppid,\r\n memoryUsage: this.evaluateMemoryUsage(),\r\n } as DevToolsProcessStats;\r\n }\r\n\r\n private static evaluateOsStats(): DevToolsOsStats {\r\n return {\r\n platform: os.platform(),\r\n hostname: os.hostname(),\r\n totalmem: this.bytesToMegaBytes(os.totalmem()),\r\n freemem: this.bytesToMegaBytes(os.freemem()),\r\n uptime: os.uptime(),\r\n cpus: this.evaluateCpus(),\r\n cpuUsage: this.evaluateCpuUsage(),\r\n } as DevToolsOsStats;\r\n }\r\n\r\n /** Returns JSON object with backend statistics */\r\n public static stats(): DevToolsStats {\r\n try {\r\n const stats = {\r\n os: this.evaluateOsStats(),\r\n process: this.evaluateProcessStats(),\r\n } as DevToolsStats;\r\n return stats;\r\n } catch (error) {\r\n Logger.logError(loggerCategory, \"Could not fetch stats at backend\");\r\n throw error;\r\n }\r\n }\r\n\r\n /** Sets up a log level at the backend and returns the old log level */\r\n public static setLogLevel(inLoggerCategory: string, newLevel: LogLevel): LogLevel | undefined {\r\n const oldLevel = Logger.getLevel(inLoggerCategory);\r\n Logger.logInfo(loggerCategory, `Setting log level`, () => ({ loggerCategory: inLoggerCategory, oldLevel, newLevel }));\r\n Logger.setLevel(inLoggerCategory, newLevel);\r\n IModelHost.platform.clearLogLevelCache();\r\n return oldLevel;\r\n }\r\n\r\n /** Obtains the backend application and iTwin.js Core versions */\r\n public static versions() {\r\n return {\r\n application: IModelHost.applicationVersion,\r\n iTwinJs: require(\"../../package.json\").version, // eslint-disable-line @typescript-eslint/no-var-requires\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DevTools.js","sourceRoot":"","sources":["../../src/DevTools.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,yBAAyB;AACzB,mCAAmC;AACnC,sDAAuD;AACvD,mEAAgE;AAChE,6CAA0C;AAG1C,0BAA0B;AAE1B,MAAM,cAAc,GAAW,6CAAqB,CAAC,QAAQ,CAAC;AAwC9D;;GAEG;AACH,MAAa,sBAAsB;IAmBjC,0GAA0G;IACnG,MAAM,CAAC,eAAe,CAAC,KAAU;QACtC,8FAA8F;QAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAEzE,2BAA2B;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;;AAzBuB,qCAAc,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACrF,oCAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AACnE,gCAAS,GAAG,CAAC,OAAO,CAAC,CAAC;AACtB,oCAAa,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEnD,wEAAwE;AACzD,gCAAS,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;IACrD,IAAI,sBAAsB,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;QACrD,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;IACjC,IAAI,sBAAsB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QACpD,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC;IAC/B,IAAI,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChD,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IACnC,IAAI,sBAAsB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QACpD,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IACnC,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAjBS,wDAAsB;AA6BnC;;;GAGG;AACH,MAAa,QAAQ;IAEnB,uCAAuC;IAChC,MAAM,CAAC,IAAI;QAChB,qBAAM,CAAC,OAAO,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,MAAW;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAChD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,KAAa;QAC3C,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3C,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC7B,MAAM,cAAc,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEtC,oCAAoC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG;YAC3B,CAAC;QAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,+BAA+B;QACzE,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC;QAE/F,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,YAAY;QACzB,iBAAiB;QACjB,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,KAAK,CAAa,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,KAAK,MAAM,MAAM,IAAI,OAAO;YAC1B,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAE7B,oCAAoC;QACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAc,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;YACrG,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAoC,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;aAC7B;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,mBAAmB;QAChC,iBAAiB;QACjB,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,EAAwB,CAAC;QACpE,MAAM,WAAW,GAAI,QAA+C,CAAC;QACrE,sCAAsC;QACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC3C,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9D;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,oBAAoB;QACjC,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACxB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE;SAChB,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,eAAe;QAC5B,OAAO;YACL,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;YACvB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;YACvB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC9C,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;YACnB,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;YACzB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;SACf,CAAC;IACvB,CAAC;IAED,kDAAkD;IAC3C,MAAM,CAAC,KAAK;QACjB,IAAI;YACF,MAAM,KAAK,GAAG;gBACZ,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE;gBAC1B,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE;aACpB,CAAC;YACnB,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,KAAK,EAAE;YACd,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAED,uEAAuE;IAChE,MAAM,CAAC,WAAW,CAAC,gBAAwB,EAAE,QAAkB;QACpE,MAAM,QAAQ,GAAG,qBAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACnD,qBAAM,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtH,qBAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC5C,uBAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iEAAiE;IAC1D,MAAM,CAAC,KAAK,CAAC,QAAQ;QAC1B,MAAM,aAAa,GAA4B,EAAE,CAAC;QAClD,OAAO;YACL,WAAW,EAAE,uBAAU,CAAC,kBAAkB;YAC1C,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO;YAC9C,aAAa,EAAE,4BAA4B;SAC5C,CAAC;IACJ,CAAC;CACF;AA3HD,4BA2HC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as os from \"os\";\r\nimport * as process from \"process\";\r\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { RpcInterfaceEndpoints } from \"@itwin/core-common\";\r\n\r\n// cspell:ignore ppid elap\r\n\r\nconst loggerCategory: string = BackendLoggerCategory.DevTools;\r\n\r\ninterface StringIndexedObject<T> {\r\n [index: string]: T;\r\n}\r\n\r\n/**\r\n * Performance and Memory statistics of backend\r\n * @internal\r\n */\r\nexport interface DevToolsStats {\r\n os: DevToolsOsStats;\r\n process: DevToolsProcessStats;\r\n}\r\n\r\n/**\r\n * OS stats of backend\r\n * @internal\r\n */\r\nexport interface DevToolsOsStats {\r\n platform: NodeJS.Platform;\r\n hostname: string;\r\n totalmem: number;\r\n freemem: number;\r\n uptime: number;\r\n cpus: os.CpuInfo[];\r\n cpuUsage: number;\r\n}\r\n\r\n/**\r\n * Process stats of backend\r\n * @internal\r\n */\r\nexport interface DevToolsProcessStats {\r\n uptime: number;\r\n pid: number;\r\n ppid: number;\r\n memoryUsage: NodeJS.MemoryUsage;\r\n}\r\n\r\n/** Utility to format the JSON created by DevTools.stats() to include the appropriate units\r\n * @internal\r\n */\r\nexport class DevToolsStatsFormatter {\r\n private static readonly _megaByteProps = [\"totalmem\", \"freemem\", \"rss\", \"heapTotal\", \"heapUsed\", \"external\"];\r\n private static readonly _percentProps = [\"user\", \"nice\", \"sys\", \"idle\", \"irq\", \"cpuUsage\"];\r\n private static readonly _mHzProps = [\"speed\"];\r\n private static readonly _secondsProps = [\"uptime\"];\r\n\r\n /** Replacer that includes units - can be used with JSON.stringify() */\r\n private static _replacer = (key: string, value: any) => {\r\n if (DevToolsStatsFormatter._megaByteProps.includes(key))\r\n return `${value.toFixed()} MB`;\r\n if (DevToolsStatsFormatter._percentProps.includes(key))\r\n return `${value.toFixed()}%`;\r\n if (DevToolsStatsFormatter._mHzProps.includes(key))\r\n return `${value.toString()} MHz`;\r\n if (DevToolsStatsFormatter._secondsProps.includes(key))\r\n return `${value.toFixed()} secs`;\r\n return value;\r\n };\r\n\r\n /** Converts the input stats to another JSON object with the appropriate units setup for various fields */\r\n public static toFormattedJson(stats: any) {\r\n // Serialize the stats to a string with a replacer that sets up units during the serialization\r\n const statsStr = JSON.stringify(stats, DevToolsStatsFormatter._replacer);\r\n\r\n // Deserialize back to JSON\r\n return JSON.parse(statsStr);\r\n }\r\n}\r\n\r\n/**\r\n * Internal diagnostic utility\r\n * @internal\r\n */\r\nexport class DevTools {\r\n\r\n /** Receives a ping and returns true */\r\n public static ping(): boolean {\r\n Logger.logInfo(loggerCategory, \"Received ping at backend\");\r\n return true;\r\n }\r\n\r\n private static hrtimeToMS(hrtime: any) {\r\n return hrtime[0] * 1000 + hrtime[1] / 1000000;\r\n }\r\n\r\n private static bytesToMegaBytes(bytes: number): number {\r\n const megaBytes = bytes / Math.pow(1024, 2);\r\n return Math.round(megaBytes * 100) / 100;\r\n }\r\n\r\n private static evaluateCpuUsage(): number {\r\n const NUMBER_OF_CPUS = os.cpus().length;\r\n const startTime = process.hrtime();\r\n const startUsage = process.cpuUsage();\r\n\r\n // spin the CPU for 500 milliseconds\r\n const now = Date.now();\r\n while (Date.now() - now < 500)\r\n ;\r\n\r\n const elapTime = process.hrtime(startTime);\r\n const elapUsage = process.cpuUsage(startUsage);\r\n\r\n const elapTimeMS = this.hrtimeToMS(elapTime);\r\n\r\n const elapUserMS = elapUsage.user / 1000; // microseconds to milliseconds\r\n const elapSystMS = elapUsage.system / 1000;\r\n const cpuPercent = Math.round((100 * (elapUserMS + elapSystMS) / elapTimeMS / NUMBER_OF_CPUS));\r\n\r\n return cpuPercent;\r\n }\r\n\r\n private static evaluateCpus(): os.CpuInfo[] {\r\n // Create a clone\r\n const srcCpus = os.cpus();\r\n const cpus = new Array<os.CpuInfo>(srcCpus.length);\r\n let ii = 0;\r\n for (const srcCpu of srcCpus)\r\n cpus[ii++] = { ...srcCpu };\r\n\r\n // Evaluate cpu usage as percentages\r\n for (const cpu of Object.values(cpus)) {\r\n const total = Object.values(cpu.times).reduce((_total: number, currValue) => _total += currValue, 0);\r\n const cpuTimes = cpu.times as StringIndexedObject<number>;\r\n for (const type of Object.keys(cpuTimes)) {\r\n const cpuPercent = Math.round(100 * cpuTimes[type] / total);\r\n cpuTimes[type] = cpuPercent;\r\n }\r\n }\r\n return cpus;\r\n }\r\n\r\n private static evaluateMemoryUsage() {\r\n // Create a clone\r\n const memUsage = { ...process.memoryUsage() } as NodeJS.MemoryUsage;\r\n const memUsageObj = (memUsage as any) as StringIndexedObject<number>;\r\n // Evaluate memory usage as mega bytes\r\n for (const type of Object.keys(memUsageObj)) {\r\n memUsageObj[type] = this.bytesToMegaBytes(memUsageObj[type]);\r\n }\r\n return memUsage;\r\n }\r\n\r\n private static evaluateProcessStats(): DevToolsProcessStats {\r\n return {\r\n uptime: process.uptime(),\r\n pid: process.pid,\r\n ppid: process.ppid,\r\n memoryUsage: this.evaluateMemoryUsage(),\r\n } as DevToolsProcessStats;\r\n }\r\n\r\n private static evaluateOsStats(): DevToolsOsStats {\r\n return {\r\n platform: os.platform(),\r\n hostname: os.hostname(),\r\n totalmem: this.bytesToMegaBytes(os.totalmem()),\r\n freemem: this.bytesToMegaBytes(os.freemem()),\r\n uptime: os.uptime(),\r\n cpus: this.evaluateCpus(),\r\n cpuUsage: this.evaluateCpuUsage(),\r\n } as DevToolsOsStats;\r\n }\r\n\r\n /** Returns JSON object with backend statistics */\r\n public static stats(): DevToolsStats {\r\n try {\r\n const stats = {\r\n os: this.evaluateOsStats(),\r\n process: this.evaluateProcessStats(),\r\n } as DevToolsStats;\r\n return stats;\r\n } catch (error) {\r\n Logger.logError(loggerCategory, \"Could not fetch stats at backend\");\r\n throw error;\r\n }\r\n }\r\n\r\n /** Sets up a log level at the backend and returns the old log level */\r\n public static setLogLevel(inLoggerCategory: string, newLevel: LogLevel): LogLevel | undefined {\r\n const oldLevel = Logger.getLevel(inLoggerCategory);\r\n Logger.logInfo(loggerCategory, `Setting log level`, () => ({ loggerCategory: inLoggerCategory, oldLevel, newLevel }));\r\n Logger.setLevel(inLoggerCategory, newLevel);\r\n IModelHost.platform.clearLogLevelCache();\r\n return oldLevel;\r\n }\r\n\r\n /** Obtains the backend application and iTwin.js Core versions */\r\n public static async versions() {\r\n const availableRpcs: RpcInterfaceEndpoints[] = [];\r\n return {\r\n application: IModelHost.applicationVersion,\r\n iTwinJs: require(\"../../package.json\").version, // eslint-disable-line @typescript-eslint/no-var-requires\r\n availableRpcs, // filled in on the frontend\r\n };\r\n }\r\n}\r\n"]}