@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.1

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 (444) hide show
  1. package/bin/BinObjects.js +17 -0
  2. package/bin/cliOperations.js +157 -0
  3. package/bin/copyDb.ts +280 -0
  4. package/bin/harper.js +156 -0
  5. package/bin/install.js +15 -0
  6. package/bin/lite.js +5 -0
  7. package/bin/restart.js +201 -0
  8. package/bin/run.js +409 -0
  9. package/bin/status.js +65 -0
  10. package/bin/stop.js +22 -0
  11. package/bin/upgrade.js +134 -0
  12. package/components/Application.ts +646 -0
  13. package/components/ApplicationScope.ts +49 -0
  14. package/components/Component.ts +53 -0
  15. package/components/ComponentV1.ts +342 -0
  16. package/components/DEFAULT_CONFIG.ts +18 -0
  17. package/components/EntryHandler.ts +227 -0
  18. package/components/Logger.ts +14 -0
  19. package/components/OptionsWatcher.ts +354 -0
  20. package/components/PluginModule.ts +6 -0
  21. package/components/Scope.ts +329 -0
  22. package/components/componentLoader.ts +529 -0
  23. package/components/deriveCommonPatternBase.ts +31 -0
  24. package/components/deriveGlobOptions.ts +44 -0
  25. package/components/deriveURLPath.ts +57 -0
  26. package/components/operations.js +658 -0
  27. package/components/operationsValidation.js +246 -0
  28. package/components/packageComponent.ts +39 -0
  29. package/components/requestRestart.ts +26 -0
  30. package/components/resolveBaseURLPath.ts +38 -0
  31. package/components/status/ComponentStatus.ts +110 -0
  32. package/components/status/ComponentStatusRegistry.ts +251 -0
  33. package/components/status/api.ts +153 -0
  34. package/components/status/crossThread.ts +405 -0
  35. package/components/status/errors.ts +152 -0
  36. package/components/status/index.ts +44 -0
  37. package/components/status/internal.ts +65 -0
  38. package/components/status/registry.ts +12 -0
  39. package/components/status/types.ts +96 -0
  40. package/config/RootConfigWatcher.ts +59 -0
  41. package/config/configHelpers.ts +11 -0
  42. package/config/configUtils.js +967 -0
  43. package/config/harperConfigEnvVars.ts +641 -0
  44. package/dataLayer/CreateAttributeObject.js +25 -0
  45. package/dataLayer/CreateTableObject.js +11 -0
  46. package/dataLayer/DataLayerObjects.js +43 -0
  47. package/dataLayer/DeleteBeforeObject.js +22 -0
  48. package/dataLayer/DeleteObject.js +25 -0
  49. package/dataLayer/DropAttributeObject.js +11 -0
  50. package/dataLayer/GetBackupObject.js +22 -0
  51. package/dataLayer/InsertObject.js +24 -0
  52. package/dataLayer/ReadAuditLogObject.js +24 -0
  53. package/dataLayer/SQLSearch.js +1335 -0
  54. package/dataLayer/SearchByConditionsObject.js +61 -0
  55. package/dataLayer/SearchByHashObject.js +21 -0
  56. package/dataLayer/SearchObject.js +45 -0
  57. package/dataLayer/SqlSearchObject.js +14 -0
  58. package/dataLayer/UpdateObject.js +23 -0
  59. package/dataLayer/UpsertObject.js +23 -0
  60. package/dataLayer/bulkLoad.js +813 -0
  61. package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
  62. package/dataLayer/dataObjects/UpsertObject.js +23 -0
  63. package/dataLayer/delete.js +164 -0
  64. package/dataLayer/export.js +381 -0
  65. package/dataLayer/getBackup.js +40 -0
  66. package/dataLayer/harperBridge/BridgeMethods.js +81 -0
  67. package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
  68. package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
  69. package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
  70. package/dataLayer/harperBridge/harperBridge.js +21 -0
  71. package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
  72. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
  73. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
  74. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
  75. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
  76. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
  77. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
  78. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
  79. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
  80. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
  81. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
  82. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
  83. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
  84. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
  85. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
  86. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
  87. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
  88. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
  89. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
  90. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
  91. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
  92. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
  93. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
  94. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
  95. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
  96. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
  97. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
  98. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
  99. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
  100. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
  101. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
  102. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
  103. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
  104. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
  105. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
  106. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
  107. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
  108. package/dataLayer/hdbInfoController.js +254 -0
  109. package/dataLayer/insert.js +266 -0
  110. package/dataLayer/readAuditLog.js +59 -0
  111. package/dataLayer/schema.js +366 -0
  112. package/dataLayer/schemaDescribe.js +289 -0
  113. package/dataLayer/search.js +60 -0
  114. package/dataLayer/transaction.js +17 -0
  115. package/dataLayer/update.js +124 -0
  116. package/dist/components/Logger.d.ts +12 -0
  117. package/dist/components/Logger.js +3 -0
  118. package/dist/components/Logger.js.map +1 -0
  119. package/dist/components/Scope.d.ts +14 -4
  120. package/dist/components/Scope.js +18 -10
  121. package/dist/components/Scope.js.map +1 -1
  122. package/dist/components/componentLoader.js +16 -9
  123. package/dist/components/componentLoader.js.map +1 -1
  124. package/dist/components/operations.js +2 -2
  125. package/dist/components/operations.js.map +1 -1
  126. package/dist/config/configUtils.d.ts +1 -1
  127. package/dist/config/configUtils.js +1 -1
  128. package/dist/config/configUtils.js.map +1 -1
  129. package/dist/dataLayer/CreateTableObject.d.ts +2 -2
  130. package/dist/dataLayer/CreateTableObject.js +2 -2
  131. package/dist/dataLayer/CreateTableObject.js.map +1 -1
  132. package/dist/dataLayer/delete.d.ts +1 -1
  133. package/dist/dataLayer/schema.js +6 -5
  134. package/dist/dataLayer/schema.js.map +1 -1
  135. package/dist/dataLayer/schemaDescribe.js +1 -1
  136. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.js +2 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/resources/DatabaseTransaction.d.ts +1 -1
  141. package/dist/resources/IterableEventQueue.d.ts +1 -1
  142. package/dist/resources/LMDBTransaction.d.ts +5 -1
  143. package/dist/resources/Resource.d.ts +1 -1
  144. package/dist/resources/RocksIndexStore.d.ts +3 -3
  145. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  146. package/dist/resources/Table.d.ts +15 -6
  147. package/dist/resources/Table.js +4 -1
  148. package/dist/resources/Table.js.map +1 -1
  149. package/dist/resources/analytics/read.js +32 -22
  150. package/dist/resources/analytics/read.js.map +1 -1
  151. package/dist/resources/analytics/write.js +3 -6
  152. package/dist/resources/analytics/write.js.map +1 -1
  153. package/dist/resources/auditStore.d.ts +3 -3
  154. package/dist/resources/blob.d.ts +25 -2
  155. package/dist/resources/databases.d.ts +12 -2
  156. package/dist/resources/databases.js +22 -19
  157. package/dist/resources/databases.js.map +1 -1
  158. package/dist/resources/search.js +11 -5
  159. package/dist/resources/search.js.map +1 -1
  160. package/dist/resources/transaction.d.ts +2 -1
  161. package/dist/security/auth.js +1 -1
  162. package/dist/security/auth.js.map +1 -1
  163. package/dist/security/cryptoHash.d.ts +2 -2
  164. package/dist/security/jsLoader.js +243 -66
  165. package/dist/security/jsLoader.js.map +1 -1
  166. package/dist/security/keys.js +4 -5
  167. package/dist/security/keys.js.map +1 -1
  168. package/dist/security/user.js +3 -3
  169. package/dist/security/user.js.map +1 -1
  170. package/dist/server/REST.js +16 -2
  171. package/dist/server/REST.js.map +1 -1
  172. package/dist/server/Server.d.ts +2 -1
  173. package/dist/server/Server.js.map +1 -1
  174. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  175. package/dist/server/fastifyRoutes.js +2 -0
  176. package/dist/server/fastifyRoutes.js.map +1 -1
  177. package/dist/server/http.js +12 -6
  178. package/dist/server/http.js.map +1 -1
  179. package/dist/server/jobs/JobObject.d.ts +3 -3
  180. package/dist/server/loadRootComponents.js +1 -0
  181. package/dist/server/loadRootComponents.js.map +1 -1
  182. package/dist/server/operationsServer.js +3 -1
  183. package/dist/server/operationsServer.js.map +1 -1
  184. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  185. package/dist/server/serverHelpers/Request.d.ts +5 -5
  186. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  187. package/dist/server/threads/manageThreads.d.ts +2 -2
  188. package/dist/server/threads/manageThreads.js +50 -35
  189. package/dist/server/threads/manageThreads.js.map +1 -1
  190. package/dist/server/threads/socketRouter.d.ts +1 -1
  191. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  192. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  193. package/dist/utility/common_utils.d.ts +3 -3
  194. package/dist/utility/environment/systemInformation.d.ts +1 -0
  195. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  196. package/dist/utility/globalSchema.d.ts +1 -1
  197. package/dist/utility/hdbTerms.d.ts +3 -0
  198. package/dist/utility/hdbTerms.js +3 -0
  199. package/dist/utility/hdbTerms.js.map +1 -1
  200. package/dist/utility/installation.d.ts +2 -4
  201. package/dist/utility/installation.js.map +1 -1
  202. package/dist/utility/lmdb/commonUtility.d.ts +1 -0
  203. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  204. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  205. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  206. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  207. package/dist/utility/logging/harper_logger.d.ts +6 -6
  208. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  209. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  210. package/dist/validation/common_validators.d.ts +4 -3
  211. package/dist/validation/configValidator.d.ts +3 -2
  212. package/index.d.ts +56 -0
  213. package/index.js +41 -0
  214. package/json/systemSchema.json +373 -0
  215. package/launchServiceScripts/launchHarperDB.js +3 -0
  216. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  217. package/package.json +21 -3
  218. package/resources/DatabaseTransaction.ts +378 -0
  219. package/resources/ErrorResource.ts +57 -0
  220. package/resources/IterableEventQueue.ts +94 -0
  221. package/resources/LMDBTransaction.ts +349 -0
  222. package/resources/RecordEncoder.ts +702 -0
  223. package/resources/RequestTarget.ts +134 -0
  224. package/resources/Resource.ts +789 -0
  225. package/resources/ResourceInterface.ts +221 -0
  226. package/resources/ResourceInterfaceV2.ts +53 -0
  227. package/resources/ResourceV2.ts +67 -0
  228. package/resources/Resources.ts +162 -0
  229. package/resources/RocksIndexStore.ts +70 -0
  230. package/resources/RocksTransactionLogStore.ts +352 -0
  231. package/resources/Table.ts +4527 -0
  232. package/resources/analytics/hostnames.ts +72 -0
  233. package/resources/analytics/metadata.ts +10 -0
  234. package/resources/analytics/read.ts +252 -0
  235. package/resources/analytics/write.ts +803 -0
  236. package/resources/auditStore.ts +556 -0
  237. package/resources/blob.ts +1268 -0
  238. package/resources/crdt.ts +125 -0
  239. package/resources/dataLoader.ts +527 -0
  240. package/resources/databases.ts +1290 -0
  241. package/resources/graphql.ts +221 -0
  242. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  243. package/resources/indexes/customIndexes.ts +7 -0
  244. package/resources/indexes/vector.ts +38 -0
  245. package/resources/jsResource.ts +86 -0
  246. package/resources/loadEnv.ts +22 -0
  247. package/resources/login.ts +18 -0
  248. package/resources/openApi.ts +409 -0
  249. package/resources/registrationDeprecated.ts +8 -0
  250. package/resources/replayLogs.ts +136 -0
  251. package/resources/roles.ts +98 -0
  252. package/resources/search.ts +1301 -0
  253. package/resources/tracked.ts +584 -0
  254. package/resources/transaction.ts +89 -0
  255. package/resources/transactionBroadcast.ts +258 -0
  256. package/security/auth.ts +376 -0
  257. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  258. package/security/certificateVerification/configValidation.ts +107 -0
  259. package/security/certificateVerification/crlVerification.ts +623 -0
  260. package/security/certificateVerification/index.ts +121 -0
  261. package/security/certificateVerification/ocspVerification.ts +148 -0
  262. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  263. package/security/certificateVerification/types.ts +128 -0
  264. package/security/certificateVerification/verificationConfig.ts +138 -0
  265. package/security/certificateVerification/verificationUtils.ts +447 -0
  266. package/security/cryptoHash.js +42 -0
  267. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  268. package/security/data_objects/PermissionResponseObject.js +115 -0
  269. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  270. package/security/fastifyAuth.js +169 -0
  271. package/security/impersonation.ts +160 -0
  272. package/security/jsLoader.ts +716 -0
  273. package/security/keys.js +948 -0
  274. package/security/permissionsTranslator.js +300 -0
  275. package/security/role.js +218 -0
  276. package/security/tokenAuthentication.ts +228 -0
  277. package/security/user.ts +449 -0
  278. package/server/DurableSubscriptionsSession.ts +503 -0
  279. package/server/REST.ts +407 -0
  280. package/server/Server.ts +89 -0
  281. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  282. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  283. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  284. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  285. package/server/fastifyRoutes.ts +205 -0
  286. package/server/graphqlQuerying.ts +700 -0
  287. package/server/http.ts +640 -0
  288. package/server/itc/serverHandlers.js +161 -0
  289. package/server/itc/utility/ITCEventObject.js +10 -0
  290. package/server/jobs/JobObject.js +24 -0
  291. package/server/jobs/jobProcess.js +69 -0
  292. package/server/jobs/jobRunner.js +162 -0
  293. package/server/jobs/jobs.js +304 -0
  294. package/server/loadRootComponents.js +44 -0
  295. package/server/mqtt.ts +485 -0
  296. package/server/nodeName.ts +75 -0
  297. package/server/operationsServer.ts +313 -0
  298. package/server/serverHelpers/Headers.ts +108 -0
  299. package/server/serverHelpers/JSONStream.ts +269 -0
  300. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  301. package/server/serverHelpers/Request.ts +158 -0
  302. package/server/serverHelpers/contentTypes.ts +637 -0
  303. package/server/serverHelpers/requestTimePlugin.js +57 -0
  304. package/server/serverHelpers/serverHandlers.js +148 -0
  305. package/server/serverHelpers/serverUtilities.ts +473 -0
  306. package/server/serverRegistry.ts +8 -0
  307. package/server/static.ts +187 -0
  308. package/server/status/definitions.ts +37 -0
  309. package/server/status/index.ts +125 -0
  310. package/server/storageReclamation.ts +93 -0
  311. package/server/threads/itc.js +89 -0
  312. package/server/threads/manageThreads.js +594 -0
  313. package/server/threads/socketRouter.ts +360 -0
  314. package/server/threads/threadServer.js +279 -0
  315. package/server/throttle.ts +73 -0
  316. package/sqlTranslator/SelectValidator.js +330 -0
  317. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  318. package/sqlTranslator/deleteTranslator.js +67 -0
  319. package/sqlTranslator/index.js +242 -0
  320. package/sqlTranslator/sql_statement_bucket.js +472 -0
  321. package/static/defaultConfig.yaml +3 -0
  322. package/studio/web/HDBDogOnly.svg +78 -0
  323. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  324. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  326. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  327. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  328. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  329. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  330. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  331. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  332. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  333. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  334. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  335. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  336. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  337. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  338. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  339. package/studio/web/assets/index-BTgXJX9d.js +235 -0
  340. package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
  341. package/studio/web/assets/index-C-GXfcup.js +37 -0
  342. package/studio/web/assets/index-C-GXfcup.js.map +1 -0
  343. package/studio/web/assets/index-PFlNdimM.js +2 -0
  344. package/studio/web/assets/index-PFlNdimM.js.map +1 -0
  345. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  346. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  347. package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
  348. package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
  349. package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
  350. package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
  351. package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
  352. package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
  353. package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
  354. package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
  355. package/studio/web/fabric-signup-background.webp +0 -0
  356. package/studio/web/fabric-signup-text.png +0 -0
  357. package/studio/web/favicon_purple.png +0 -0
  358. package/studio/web/github-icon.svg +15 -0
  359. package/studio/web/harper-fabric_black.png +0 -0
  360. package/studio/web/harper-fabric_white.png +0 -0
  361. package/studio/web/harper-studio_white.png +0 -0
  362. package/studio/web/index.html +16 -0
  363. package/studio/web/running.css +148 -0
  364. package/studio/web/running.html +147 -0
  365. package/studio/web/running.js +111 -0
  366. package/upgrade/UpgradeObjects.js +13 -0
  367. package/upgrade/directives/directivesController.js +90 -0
  368. package/upgrade/directivesManager.js +139 -0
  369. package/upgrade/upgradePrompt.js +124 -0
  370. package/upgrade/upgradeUtilities.js +28 -0
  371. package/utility/AWS/AWSConnector.js +29 -0
  372. package/utility/OperationFunctionCaller.js +63 -0
  373. package/utility/assignCmdEnvVariables.js +62 -0
  374. package/utility/common_utils.js +867 -0
  375. package/utility/environment/environmentManager.js +208 -0
  376. package/utility/environment/systemInformation.js +355 -0
  377. package/utility/errors/commonErrors.js +267 -0
  378. package/utility/errors/hdbError.js +146 -0
  379. package/utility/functions/date/dateFunctions.js +65 -0
  380. package/utility/functions/geo.js +355 -0
  381. package/utility/functions/sql/alaSQLExtension.js +104 -0
  382. package/utility/globalSchema.js +35 -0
  383. package/utility/hdbTerms.ts +819 -0
  384. package/utility/install/checkJWTTokensExist.js +62 -0
  385. package/utility/install/harperdb.conf +15 -0
  386. package/utility/install/harperdb.service +14 -0
  387. package/utility/install/installer.js +635 -0
  388. package/utility/installation.ts +30 -0
  389. package/utility/lmdb/DBIDefinition.js +20 -0
  390. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  391. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  392. package/utility/lmdb/OpenDBIObject.js +31 -0
  393. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  394. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  395. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  396. package/utility/lmdb/cleanLMDBMap.js +65 -0
  397. package/utility/lmdb/commonUtility.js +119 -0
  398. package/utility/lmdb/deleteUtility.js +128 -0
  399. package/utility/lmdb/environmentUtility.js +477 -0
  400. package/utility/lmdb/searchCursorFunctions.js +187 -0
  401. package/utility/lmdb/searchUtility.js +918 -0
  402. package/utility/lmdb/terms.js +57 -0
  403. package/utility/lmdb/writeUtility.js +407 -0
  404. package/utility/logging/harper_logger.js +876 -0
  405. package/utility/logging/logRotator.js +157 -0
  406. package/utility/logging/logger.ts +24 -0
  407. package/utility/logging/readLog.js +355 -0
  408. package/utility/logging/transactionLog.js +57 -0
  409. package/utility/mount_hdb.js +59 -0
  410. package/utility/npmUtilities.js +102 -0
  411. package/utility/operationPermissions.ts +112 -0
  412. package/utility/operation_authorization.js +836 -0
  413. package/utility/packageUtils.js +55 -0
  414. package/utility/password.ts +99 -0
  415. package/utility/processManagement/processManagement.js +187 -0
  416. package/utility/processManagement/servicesConfig.js +56 -0
  417. package/utility/scripts/restartHdb.js +24 -0
  418. package/utility/scripts/user_data.sh +13 -0
  419. package/utility/signalling.js +36 -0
  420. package/utility/terms/certificates.js +81 -0
  421. package/utility/when.ts +20 -0
  422. package/v1.d.ts +39 -0
  423. package/v1.js +41 -0
  424. package/v2.d.ts +39 -0
  425. package/v2.js +41 -0
  426. package/validation/bulkDeleteValidator.js +24 -0
  427. package/validation/check_permissions.js +19 -0
  428. package/validation/common_validators.js +95 -0
  429. package/validation/configValidator.js +331 -0
  430. package/validation/deleteValidator.js +15 -0
  431. package/validation/fileLoadValidator.js +153 -0
  432. package/validation/insertValidator.js +40 -0
  433. package/validation/installValidator.js +37 -0
  434. package/validation/readLogValidator.js +64 -0
  435. package/validation/role_validation.js +320 -0
  436. package/validation/schemaMetadataValidator.js +42 -0
  437. package/validation/searchValidator.js +166 -0
  438. package/validation/statusValidator.ts +66 -0
  439. package/validation/transactionLogValidator.js +33 -0
  440. package/validation/user_validation.js +55 -0
  441. package/validation/validationWrapper.js +105 -0
  442. package/dist/resources/analytics/profile.d.ts +0 -2
  443. package/dist/resources/analytics/profile.js +0 -144
  444. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,208 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+ const os = require('os');
6
+ const PropertiesReader = require('properties-reader');
7
+ const log = require('../logging/harper_logger.js');
8
+ const commonUtils = require('../common_utils.js');
9
+ const hdbTerms = require('../hdbTerms.ts');
10
+ const configUtils = require('../../config/configUtils.js');
11
+ const { mkdirSync } = require('node:fs');
12
+
13
+ const INIT_ERR = 'Error initializing environment manager';
14
+ const BOOT_PROPS_FILE_PATH = 'BOOT_PROPS_FILE_PATH';
15
+
16
+ let propFileExists = false;
17
+
18
+ const installPropsToSave = {
19
+ [hdbTerms.HDB_SETTINGS_NAMES.INSTALL_USER]: true,
20
+ [hdbTerms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]: true,
21
+ [hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]: true,
22
+ BOOT_PROPS_FILE_PATH: true,
23
+ };
24
+ let installProps = {};
25
+ Object.assign(
26
+ exports,
27
+ (module.exports = {
28
+ BOOT_PROPS_FILE_PATH,
29
+ getHdbBasePath,
30
+ setHdbBasePath,
31
+ get,
32
+ initSync,
33
+ setProperty,
34
+ initTestEnvironment,
35
+ })
36
+ );
37
+
38
+ /**
39
+ * The base path of the HDB install is often referenced, but is referenced as a const variable at the top of many
40
+ * modules. This is a problem during install, as the path may not yet be defined. We offer a function to get the
41
+ * currently known base path here to help with this case.
42
+ */
43
+ function getHdbBasePath() {
44
+ return installProps[hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY];
45
+ }
46
+
47
+ /**
48
+ * Sets the HDB base path in the install props object that this module maintains.
49
+ * This is mainly used by install during a stage where the config file doesn't exist.
50
+ * @param hdbPath
51
+ */
52
+ function setHdbBasePath(hdbPath) {
53
+ installProps[hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY] = hdbPath;
54
+ }
55
+
56
+ /**
57
+ * Gets a Harper configuration value.
58
+ * @param propName
59
+ * @returns {*}
60
+ */
61
+ function get(propName) {
62
+ const value = configUtils.getConfigValue(propName);
63
+ if (value === undefined) {
64
+ return installProps[propName];
65
+ }
66
+
67
+ return value;
68
+ }
69
+
70
+ /**
71
+ * Will update install props if provided prop is part of that object.
72
+ * Will also update the config object configUtils maintains.
73
+ * Note - this function will NOT update the config file. If you want to update the file
74
+ * use the updateConfigValue method in configUtils.
75
+ *
76
+ * This function should only be used by the installer and unit tests.
77
+ * @param propName
78
+ * @param value
79
+ */
80
+ function setProperty(propName, value) {
81
+ if (installPropsToSave[propName]) {
82
+ installProps[propName] = value;
83
+ }
84
+
85
+ configUtils.updateConfigObject(propName, value);
86
+ }
87
+
88
+ /**
89
+ * Checks to see if the Harper boot props file exists.
90
+ * If it does, it grabs the install user and settings path for future reference.
91
+ * @returns {boolean}
92
+ */
93
+ function doesPropFileExist() {
94
+ let bootPropPath;
95
+ try {
96
+ bootPropPath = commonUtils.getPropsFilePath();
97
+ fs.accessSync(bootPropPath, fs.constants.F_OK | fs.constants.R_OK);
98
+ propFileExists = true;
99
+ const hdbPropsFile = PropertiesReader(bootPropPath);
100
+
101
+ installProps[hdbTerms.HDB_SETTINGS_NAMES.INSTALL_USER] = hdbPropsFile.get(hdbTerms.HDB_SETTINGS_NAMES.INSTALL_USER);
102
+ installProps[hdbTerms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY] = hdbPropsFile.get(
103
+ hdbTerms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY
104
+ );
105
+ installProps[BOOT_PROPS_FILE_PATH] = bootPropPath;
106
+
107
+ return true;
108
+ } catch {
109
+ log.trace(`Environment manager found no properties file at ${bootPropPath}`);
110
+ return false;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Synchronously initializes our config environment.
116
+ * @param force
117
+ */
118
+ function initSync(force = false) {
119
+ try {
120
+ if (propFileExists || doesPropFileExist() || commonUtils.noBootFile() || force) {
121
+ configUtils.initConfig(force);
122
+ const configHdbRoot = configUtils.getConfigValue(hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY);
123
+ // Only overwrite if we actually got a value from config
124
+ if (configHdbRoot !== undefined) {
125
+ installProps[hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY] = configHdbRoot;
126
+ }
127
+ }
128
+ } catch (err) {
129
+ log.error(INIT_ERR);
130
+ log.error(err);
131
+ console.error(err);
132
+ process.exit(1);
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Initializes a test environment.
138
+ * Most of this is legacy code from before the yaml config refactor.
139
+ * @param testConfigObj
140
+ */
141
+ function initTestEnvironment(testConfigObj = {}) {
142
+ try {
143
+ const {
144
+ keep_alive_timeout,
145
+ headers_timeout,
146
+ server_timeout,
147
+ https_enabled,
148
+ cors_enabled,
149
+ cors_accesslist,
150
+ local_studio_on,
151
+ } = testConfigObj;
152
+ // __dirname is dist/utility/environment when running tests, so go up 3 levels to reach project root
153
+ const propsPath = path.join(__dirname, '../../../', 'unitTests');
154
+ installProps[BOOT_PROPS_FILE_PATH] = path.join(propsPath, 'hdb_boot_properties.file');
155
+ try {
156
+ mkdirSync(path.join(propsPath, 'envDir'));
157
+ } catch {}
158
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY, path.join(propsPath, 'settings.test'));
159
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.INSTALL_USER, os.userInfo() ? os.userInfo().username : undefined);
160
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY, `debug`);
161
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_PATH_KEY, path.join(propsPath, 'envDir', 'log'));
162
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY, false);
163
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY, path.join(propsPath, 'envDir'));
164
+ setProperty(hdbTerms.CONFIG_PARAMS.STORAGE_PATH, path.join(propsPath, 'envDir'));
165
+ if (https_enabled) {
166
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_SECUREPORT, get(hdbTerms.CONFIG_PARAMS.HTTP_PORT));
167
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_PORT, null);
168
+ }
169
+ setProperty(hdbTerms.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS, Boolean(https_enabled));
170
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_PORT, 9926);
171
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.SERVER_PORT_KEY, 9925);
172
+ setProperty(hdbTerms.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT, 9925);
173
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY, commonUtils.isEmpty(cors_enabled) ? false : cors_enabled);
174
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_CORS, commonUtils.isEmpty(cors_enabled) ? false : cors_enabled);
175
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES, 2);
176
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES, 4);
177
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY, 9926);
178
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY, true);
179
+ setProperty(
180
+ hdbTerms.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,
181
+ path.join(propsPath, 'server/fastifyRoutes/custom_functions')
182
+ );
183
+ setProperty(
184
+ hdbTerms.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,
185
+ commonUtils.isEmpty(local_studio_on) ? false : local_studio_on
186
+ );
187
+ if (cors_accesslist) {
188
+ setProperty('CORS_ACCESSLIST', cors_accesslist);
189
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_CORSACCESSLIST, cors_accesslist);
190
+ }
191
+ if (server_timeout) {
192
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY, server_timeout);
193
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_TIMEOUT, server_timeout);
194
+ }
195
+ if (keep_alive_timeout) {
196
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY, keep_alive_timeout);
197
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT, keep_alive_timeout);
198
+ }
199
+ if (headers_timeout) {
200
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY, headers_timeout);
201
+ setProperty(hdbTerms.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT, headers_timeout);
202
+ }
203
+ } catch (err) {
204
+ let msg = `Error reading in HDB environment variables from path ${BOOT_PROPS_FILE_PATH}. Please check your boot props and settings files`;
205
+ log.fatal(msg);
206
+ log.error(err);
207
+ }
208
+ }
@@ -0,0 +1,355 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+ const si = require('systeminformation');
6
+ const log = require('../logging/harper_logger.js');
7
+ const terms = require('../hdbTerms.ts');
8
+ const lmdbGetTableSize = require('../../dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js');
9
+ const schemaDescribe = require('../../dataLayer/schemaDescribe.js');
10
+ const { getThreadInfo } = require('../../server/threads/manageThreads.js');
11
+ const env = require('./environmentManager.js');
12
+ env.initSync();
13
+ const { databases } = require('../../resources/databases.ts');
14
+
15
+ //this will hold the system_information which is static to improve performance
16
+ let systemInformationCache = undefined;
17
+
18
+ class SystemInformationRequest {
19
+ constructor(attributes) {
20
+ this.operator = terms.OPERATIONS_ENUM.SYSTEM_INFORMATION;
21
+ this.attributes = attributes;
22
+ }
23
+ }
24
+
25
+ class SystemInformationResponse {
26
+ constructor(system, time, cpu, memory, disk, network, harperdbProcesses) {
27
+ this.system = system;
28
+ this.time = time;
29
+ this.cpu = cpu;
30
+ this.memory = memory;
31
+ this.disk = disk;
32
+ this.network = network;
33
+ this.harperdb_processes = harperdbProcesses;
34
+ }
35
+ }
36
+
37
+ module.exports = {
38
+ getHDBProcessInfo,
39
+ getNetworkInfo,
40
+ getDiskInfo,
41
+ getMemoryInfo,
42
+ getCPUInfo,
43
+ getTimeInfo,
44
+ getSystemInformation,
45
+ systemInformation,
46
+ getTableSize,
47
+ getMetrics,
48
+ SystemInformationRequest,
49
+ };
50
+
51
+ /**
52
+ * executes the time function to return the time info for the system
53
+ * @returns {si.Systeminformation.TimeData}
54
+ */
55
+ function getTimeInfo() {
56
+ return si.time();
57
+ }
58
+
59
+ /**
60
+ * executes cpu related functions
61
+ * @returns {Promise<{}|Pick<si.Systeminformation.CpuData, "manufacturer" | "brand" | "vendor" | "speed" | "cores" | "physicalCores" | "processors">>}
62
+ */
63
+ async function getCPUInfo() {
64
+ try {
65
+ // eslint-disable-next-line no-unused-vars
66
+ let { family, model, stepping, revision, voltage, speedmin, speedmax, governor, socket, cache, ...cpuInfo } =
67
+ await si.cpu();
68
+ cpuInfo.cpu_speed = await si.cpuCurrentSpeed();
69
+
70
+ let {
71
+ // eslint-disable-next-line no-unused-vars
72
+ rawCurrentload,
73
+ cpus,
74
+ ...cpuCurrentLoad
75
+ } = await si.currentLoad();
76
+ cpuCurrentLoad.cpus = [];
77
+ cpus.forEach((cpuData) => {
78
+ // eslint-disable-next-line no-unused-vars
79
+ let { rawLoad, rawLoadIdle, rawLoadIrq, rawLoadNice, rawLoadSystem, rawLoadUser, ...cpuLoad } = cpuData;
80
+ cpuCurrentLoad.cpus.push(cpuLoad);
81
+ });
82
+ cpuInfo.current_load = cpuCurrentLoad;
83
+ return cpuInfo;
84
+ } catch (e) {
85
+ log.error(`error in getCPUInfo: ${e}`);
86
+ return {};
87
+ }
88
+ }
89
+
90
+ /**
91
+ * fetches information related memory
92
+ * @returns {Promise<{}|Pick<si.Systeminformation.MemData, "total" | "free" | "used" | "active" | "available" | "swaptotal" | "swapused" | "swapfree">>}
93
+ */
94
+ async function getMemoryInfo() {
95
+ try {
96
+ // eslint-disable-next-line no-unused-vars
97
+ let { buffers, cached, slab, buffcache, ...memInfo } = await si.mem();
98
+ return Object.assign(memInfo, process.memoryUsage());
99
+ } catch (e) {
100
+ log.error(`error in getMemoryInfo: ${e}`);
101
+ return {};
102
+ }
103
+ }
104
+
105
+ /**
106
+ * searches for & returns the processes for hdb core
107
+ * @returns {Promise<{core: []}>}
108
+ */
109
+ async function getHDBProcessInfo() {
110
+ let harperdbProcesses = {
111
+ core: [],
112
+ };
113
+ try {
114
+ let processes = await si.processes();
115
+
116
+ let hdbPid;
117
+ try {
118
+ hdbPid = Number.parseInt(
119
+ await fs.readFile(path.join(env.get(terms.CONFIG_PARAMS.ROOTPATH), terms.HDB_PID_FILE), 'utf8')
120
+ );
121
+ } catch (err) {
122
+ if (err.code === terms.NODE_ERROR_CODES.ENOENT) {
123
+ log.warn(
124
+ `Unable to locate 'hdb.pid' file, try stopping and starting Harper. This could be because Harper is not running.`
125
+ );
126
+ } else {
127
+ throw err;
128
+ }
129
+ }
130
+
131
+ processes.list.forEach((p) => {
132
+ if (p.pid === hdbPid) {
133
+ harperdbProcesses.core.push(p);
134
+ }
135
+ });
136
+
137
+ for (const hdbP of harperdbProcesses.core) {
138
+ for (const p of processes.list) {
139
+ if (p.pid === hdbP.parentPid && (p.name === 'PM2' || p.command === 'PM2')) {
140
+ hdbP.parent = 'PM2';
141
+ }
142
+ }
143
+ }
144
+
145
+ return harperdbProcesses;
146
+ } catch (e) {
147
+ log.error(`error in getHDBProcessInfo: ${e}`);
148
+ return harperdbProcesses;
149
+ }
150
+ }
151
+
152
+ /**
153
+ * gets disk related info & stats
154
+ * @returns {Promise<{}>}
155
+ */
156
+ async function getDiskInfo() {
157
+ let disk = {};
158
+ try {
159
+ if (!env.get(terms.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK)) return disk;
160
+ // eslint-disable-next-line no-unused-vars
161
+ let { rIO_sec, wIO_sec, tIO_sec, ms, ...diskIo } = await si.disksIO();
162
+ disk.io = diskIo;
163
+
164
+ // eslint-disable-next-line no-unused-vars
165
+ let { rxSec, txSec, wxSec, ...fsStats } = await si.fsStats();
166
+ disk.read_write = fsStats;
167
+
168
+ disk.size = await si.fsSize();
169
+
170
+ return disk;
171
+ } catch (e) {
172
+ log.error(`error in getDiskInfo: ${e}`);
173
+ return disk;
174
+ }
175
+ }
176
+
177
+ /**
178
+ * gets networking & connection information & stats
179
+ * @returns {Promise<{interfaces: [], default_interface: null, stats: [], latency: {}, connections: []}>}
180
+ */
181
+ async function getNetworkInfo() {
182
+ let network = {
183
+ default_interface: null,
184
+ latency: {},
185
+ interfaces: [],
186
+ stats: [],
187
+ connections: [],
188
+ };
189
+ try {
190
+ if (!env.get(terms.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)) return network;
191
+ network.default_interface = await si.networkInterfaceDefault();
192
+
193
+ network.latency = await si.inetChecksite('google.com');
194
+
195
+ let nInterfaces = await si.networkInterfaces();
196
+ nInterfaces.forEach((_interface) => {
197
+ // eslint-disable-next-line no-unused-vars
198
+ let { internal, virtual, mtu, dhcp, dnsSuffix, ieee8021xAuth, ieee8021xState, carrierChanges, ...networkInt } =
199
+ _interface;
200
+ network.interfaces.push(networkInt);
201
+ });
202
+
203
+ let stats = await si.networkStats();
204
+ stats.forEach((nStat) => {
205
+ // eslint-disable-next-line no-unused-vars
206
+ let { rxSec, txSec, ms, ...stat } = nStat;
207
+ network.stats.push(stat);
208
+ });
209
+
210
+ return network;
211
+ } catch (e) {
212
+ log.error(`error in getNetworkInfo: ${e}`);
213
+ return network;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * gets system information
219
+ * @returns {Promise<Pick<si.Systeminformation.OsData, "platform" | "distro" | "release" | "codename" | "kernel" | "arch" | "hostname">|{}>}
220
+ */
221
+ async function getSystemInformation() {
222
+ if (systemInformationCache !== undefined) {
223
+ return systemInformationCache;
224
+ }
225
+
226
+ let system_info = {};
227
+ try {
228
+ // eslint-disable-next-line no-unused-vars
229
+ let { codepage, logofile, serial, build, servicepack, uefi, ...sysInfo } = await si.osInfo();
230
+ system_info = sysInfo;
231
+ let versions = await si.versions('node, npm');
232
+ system_info.node_version = versions.node;
233
+ system_info.npm_version = versions.npm;
234
+
235
+ systemInformationCache = system_info;
236
+ return systemInformationCache;
237
+ } catch (e) {
238
+ log.error(`error in getSystemInformation: ${e}`);
239
+ return system_info;
240
+ }
241
+ }
242
+
243
+ async function getTableSize() {
244
+ //get details for all tables
245
+ let tableSizes = [];
246
+ let allSchemas = await schemaDescribe.describeAll();
247
+ for (const tables of Object.values(allSchemas)) {
248
+ for (const tableData of Object.values(tables)) {
249
+ tableSizes.push(await lmdbGetTableSize(tableData));
250
+ }
251
+ }
252
+
253
+ return tableSizes;
254
+ }
255
+ async function getMetrics() {
256
+ let schemaStats = {};
257
+ for (let schemaName in databases) {
258
+ let dbStats = (schemaStats[schemaName] = {});
259
+ let tableStats = (dbStats.tables = {});
260
+ for (let tableName in databases[schemaName]) {
261
+ try {
262
+ let table = databases[schemaName][tableName];
263
+ if (!dbStats.readers) {
264
+ Object.assign(dbStats, table.primaryStore.rootStore.getStats());
265
+ delete dbStats.root;
266
+ dbStats.readers = table.primaryStore.rootStore
267
+ .readerList()
268
+ .split(/\n\s+/)
269
+ .slice(1)
270
+ .map((line) => {
271
+ const [pid, thread, txnid] = line.trim().split(' ');
272
+ return { pid, thread, txnid };
273
+ });
274
+ if (table.auditStore) {
275
+ const { treeDepth, treeBranchPageCount, treeLeafPageCount, entryCount, overflowPages } =
276
+ table.auditStore.getStats();
277
+ dbStats.audit = { treeDepth, treeBranchPageCount, treeLeafPageCount, entryCount, overflowPages };
278
+ }
279
+ }
280
+ let tableFullStats = table.primaryStore.getStats();
281
+ let tablePrunedStats = {};
282
+ for (let storeKey of ['treeDepth', 'treeBranchPageCount', 'treeLeafPageCount', 'entryCount', 'overflowPages']) {
283
+ tablePrunedStats[storeKey] = tableFullStats[storeKey];
284
+ }
285
+ tableStats[tableName] = tablePrunedStats;
286
+ } catch (error) {
287
+ // if a schema no longer exists, don't want to throw an error
288
+ log.notify(`Error getting stats for table ${tableName}: ${error}`);
289
+ }
290
+ }
291
+ }
292
+ return schemaStats;
293
+ }
294
+
295
+ /**
296
+ *
297
+ * @param {SystemInformationRequest} systemInfoReq
298
+ * @returns {Promise<SystemInformationResponse>}
299
+ */
300
+ async function systemInformation(systemInfoReq) {
301
+ let response = new SystemInformationResponse();
302
+ if (!Array.isArray(systemInfoReq.attributes) || systemInfoReq.attributes.length === 0) {
303
+ response.system = await getSystemInformation();
304
+ response.time = getTimeInfo();
305
+ response.cpu = await getCPUInfo();
306
+ response.memory = await getMemoryInfo();
307
+ response.disk = await getDiskInfo();
308
+ response.network = await getNetworkInfo();
309
+ response.harperdb_processes = await getHDBProcessInfo();
310
+ response.table_size = await getTableSize();
311
+ response.metrics = await getMetrics();
312
+ response.threads = await getThreadInfo();
313
+ return response;
314
+ }
315
+
316
+ for (let attr of systemInfoReq.attributes) {
317
+ switch (attr) {
318
+ case 'system':
319
+ response.system = await getSystemInformation();
320
+ break;
321
+ case 'time':
322
+ response.time = getTimeInfo();
323
+ break;
324
+ case 'cpu':
325
+ response.cpu = await getCPUInfo();
326
+ break;
327
+ case 'memory':
328
+ response.memory = await getMemoryInfo();
329
+ break;
330
+ case 'disk':
331
+ response.disk = await getDiskInfo();
332
+ break;
333
+ case 'network':
334
+ response.network = await getNetworkInfo();
335
+ break;
336
+ case 'harperdb_processes':
337
+ response.harperdb_processes = await getHDBProcessInfo();
338
+ break;
339
+ case 'table_size':
340
+ response.table_size = await getTableSize();
341
+ break;
342
+ case 'database_metrics':
343
+ case 'metrics':
344
+ response.metrics = await getMetrics();
345
+ break;
346
+ case 'threads':
347
+ response.threads = await getThreadInfo();
348
+ break;
349
+ default:
350
+ break;
351
+ }
352
+ }
353
+
354
+ return response;
355
+ }