@sonde/packs 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-test.log +53 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/CHANGELOG.md +19 -0
  5. package/dist/index.d.ts +16 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +40 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/integrations/citrix.d.ts +13 -0
  10. package/dist/integrations/citrix.d.ts.map +1 -0
  11. package/dist/integrations/citrix.js +415 -0
  12. package/dist/integrations/citrix.js.map +1 -0
  13. package/dist/integrations/citrix.test.d.ts +2 -0
  14. package/dist/integrations/citrix.test.d.ts.map +1 -0
  15. package/dist/integrations/citrix.test.js +464 -0
  16. package/dist/integrations/citrix.test.js.map +1 -0
  17. package/dist/integrations/graph.d.ts +9 -0
  18. package/dist/integrations/graph.d.ts.map +1 -0
  19. package/dist/integrations/graph.js +285 -0
  20. package/dist/integrations/graph.js.map +1 -0
  21. package/dist/integrations/graph.test.d.ts +2 -0
  22. package/dist/integrations/graph.test.d.ts.map +1 -0
  23. package/dist/integrations/graph.test.js +356 -0
  24. package/dist/integrations/graph.test.js.map +1 -0
  25. package/dist/integrations/httpbin.d.ts +3 -0
  26. package/dist/integrations/httpbin.d.ts.map +1 -0
  27. package/dist/integrations/httpbin.js +65 -0
  28. package/dist/integrations/httpbin.js.map +1 -0
  29. package/dist/integrations/nutanix.d.ts +18 -0
  30. package/dist/integrations/nutanix.d.ts.map +1 -0
  31. package/dist/integrations/nutanix.js +1116 -0
  32. package/dist/integrations/nutanix.js.map +1 -0
  33. package/dist/integrations/nutanix.test.d.ts +2 -0
  34. package/dist/integrations/nutanix.test.d.ts.map +1 -0
  35. package/dist/integrations/nutanix.test.js +978 -0
  36. package/dist/integrations/nutanix.test.js.map +1 -0
  37. package/dist/integrations/proxmox.d.ts +12 -0
  38. package/dist/integrations/proxmox.d.ts.map +1 -0
  39. package/dist/integrations/proxmox.js +728 -0
  40. package/dist/integrations/proxmox.js.map +1 -0
  41. package/dist/integrations/proxmox.test.d.ts +2 -0
  42. package/dist/integrations/proxmox.test.d.ts.map +1 -0
  43. package/dist/integrations/proxmox.test.js +697 -0
  44. package/dist/integrations/proxmox.test.js.map +1 -0
  45. package/dist/integrations/servicenow.d.ts +3 -0
  46. package/dist/integrations/servicenow.d.ts.map +1 -0
  47. package/dist/integrations/servicenow.js +251 -0
  48. package/dist/integrations/servicenow.js.map +1 -0
  49. package/dist/integrations/servicenow.test.d.ts +2 -0
  50. package/dist/integrations/servicenow.test.d.ts.map +1 -0
  51. package/dist/integrations/servicenow.test.js +217 -0
  52. package/dist/integrations/servicenow.test.js.map +1 -0
  53. package/dist/integrations/splunk.d.ts +9 -0
  54. package/dist/integrations/splunk.d.ts.map +1 -0
  55. package/dist/integrations/splunk.js +237 -0
  56. package/dist/integrations/splunk.js.map +1 -0
  57. package/dist/integrations/splunk.test.d.ts +2 -0
  58. package/dist/integrations/splunk.test.d.ts.map +1 -0
  59. package/dist/integrations/splunk.test.js +323 -0
  60. package/dist/integrations/splunk.test.js.map +1 -0
  61. package/dist/mysql/index.d.ts +3 -0
  62. package/dist/mysql/index.d.ts.map +1 -0
  63. package/dist/mysql/index.js +13 -0
  64. package/dist/mysql/index.js.map +1 -0
  65. package/dist/mysql/manifest.d.ts +3 -0
  66. package/dist/mysql/manifest.d.ts.map +1 -0
  67. package/dist/mysql/manifest.js +69 -0
  68. package/dist/mysql/manifest.js.map +1 -0
  69. package/dist/mysql/probes/databases-list.d.ts +13 -0
  70. package/dist/mysql/probes/databases-list.d.ts.map +1 -0
  71. package/dist/mysql/probes/databases-list.js +31 -0
  72. package/dist/mysql/probes/databases-list.js.map +1 -0
  73. package/dist/mysql/probes/databases-list.test.d.ts +2 -0
  74. package/dist/mysql/probes/databases-list.test.d.ts.map +1 -0
  75. package/dist/mysql/probes/databases-list.test.js +54 -0
  76. package/dist/mysql/probes/databases-list.test.js.map +1 -0
  77. package/dist/mysql/probes/processlist.d.ts +18 -0
  78. package/dist/mysql/probes/processlist.d.ts.map +1 -0
  79. package/dist/mysql/probes/processlist.js +36 -0
  80. package/dist/mysql/probes/processlist.js.map +1 -0
  81. package/dist/mysql/probes/processlist.test.d.ts +2 -0
  82. package/dist/mysql/probes/processlist.test.d.ts.map +1 -0
  83. package/dist/mysql/probes/processlist.test.js +41 -0
  84. package/dist/mysql/probes/processlist.test.js.map +1 -0
  85. package/dist/mysql/probes/status.d.ts +14 -0
  86. package/dist/mysql/probes/status.d.ts.map +1 -0
  87. package/dist/mysql/probes/status.js +40 -0
  88. package/dist/mysql/probes/status.js.map +1 -0
  89. package/dist/mysql/probes/status.test.d.ts +2 -0
  90. package/dist/mysql/probes/status.test.d.ts.map +1 -0
  91. package/dist/mysql/probes/status.test.js +43 -0
  92. package/dist/mysql/probes/status.test.js.map +1 -0
  93. package/dist/nginx/index.d.ts +3 -0
  94. package/dist/nginx/index.d.ts.map +1 -0
  95. package/dist/nginx/index.js +13 -0
  96. package/dist/nginx/index.js.map +1 -0
  97. package/dist/nginx/manifest.d.ts +3 -0
  98. package/dist/nginx/manifest.d.ts.map +1 -0
  99. package/dist/nginx/manifest.js +68 -0
  100. package/dist/nginx/manifest.js.map +1 -0
  101. package/dist/nginx/probes/access-log-tail.d.ts +9 -0
  102. package/dist/nginx/probes/access-log-tail.d.ts.map +1 -0
  103. package/dist/nginx/probes/access-log-tail.js +14 -0
  104. package/dist/nginx/probes/access-log-tail.js.map +1 -0
  105. package/dist/nginx/probes/access-log-tail.test.d.ts +2 -0
  106. package/dist/nginx/probes/access-log-tail.test.d.ts.map +1 -0
  107. package/dist/nginx/probes/access-log-tail.test.js +40 -0
  108. package/dist/nginx/probes/access-log-tail.test.js.map +1 -0
  109. package/dist/nginx/probes/config-test.d.ts +8 -0
  110. package/dist/nginx/probes/config-test.d.ts.map +1 -0
  111. package/dist/nginx/probes/config-test.js +18 -0
  112. package/dist/nginx/probes/config-test.js.map +1 -0
  113. package/dist/nginx/probes/config-test.test.d.ts +2 -0
  114. package/dist/nginx/probes/config-test.test.d.ts.map +1 -0
  115. package/dist/nginx/probes/config-test.test.js +35 -0
  116. package/dist/nginx/probes/config-test.test.js.map +1 -0
  117. package/dist/nginx/probes/error-log-tail.d.ts +9 -0
  118. package/dist/nginx/probes/error-log-tail.d.ts.map +1 -0
  119. package/dist/nginx/probes/error-log-tail.js +14 -0
  120. package/dist/nginx/probes/error-log-tail.js.map +1 -0
  121. package/dist/nginx/probes/error-log-tail.test.d.ts +2 -0
  122. package/dist/nginx/probes/error-log-tail.test.d.ts.map +1 -0
  123. package/dist/nginx/probes/error-log-tail.test.js +34 -0
  124. package/dist/nginx/probes/error-log-tail.test.js.map +1 -0
  125. package/dist/postgres/index.d.ts +3 -0
  126. package/dist/postgres/index.d.ts.map +1 -0
  127. package/dist/postgres/index.js +13 -0
  128. package/dist/postgres/index.js.map +1 -0
  129. package/dist/postgres/manifest.d.ts +3 -0
  130. package/dist/postgres/manifest.d.ts.map +1 -0
  131. package/dist/postgres/manifest.js +90 -0
  132. package/dist/postgres/manifest.js.map +1 -0
  133. package/dist/postgres/probes/connections-active.d.ts +17 -0
  134. package/dist/postgres/probes/connections-active.d.ts.map +1 -0
  135. package/dist/postgres/probes/connections-active.js +37 -0
  136. package/dist/postgres/probes/connections-active.js.map +1 -0
  137. package/dist/postgres/probes/connections-active.test.d.ts +2 -0
  138. package/dist/postgres/probes/connections-active.test.d.ts.map +1 -0
  139. package/dist/postgres/probes/connections-active.test.js +36 -0
  140. package/dist/postgres/probes/connections-active.test.js.map +1 -0
  141. package/dist/postgres/probes/databases-list.d.ts +14 -0
  142. package/dist/postgres/probes/databases-list.d.ts.map +1 -0
  143. package/dist/postgres/probes/databases-list.js +34 -0
  144. package/dist/postgres/probes/databases-list.js.map +1 -0
  145. package/dist/postgres/probes/databases-list.test.d.ts +2 -0
  146. package/dist/postgres/probes/databases-list.test.d.ts.map +1 -0
  147. package/dist/postgres/probes/databases-list.test.js +49 -0
  148. package/dist/postgres/probes/databases-list.test.js.map +1 -0
  149. package/dist/postgres/probes/query-slow.d.ts +17 -0
  150. package/dist/postgres/probes/query-slow.d.ts.map +1 -0
  151. package/dist/postgres/probes/query-slow.js +37 -0
  152. package/dist/postgres/probes/query-slow.js.map +1 -0
  153. package/dist/postgres/probes/query-slow.test.d.ts +2 -0
  154. package/dist/postgres/probes/query-slow.test.d.ts.map +1 -0
  155. package/dist/postgres/probes/query-slow.test.js +30 -0
  156. package/dist/postgres/probes/query-slow.test.js.map +1 -0
  157. package/dist/proxmox/index.d.ts +3 -0
  158. package/dist/proxmox/index.d.ts.map +1 -0
  159. package/dist/proxmox/index.js +23 -0
  160. package/dist/proxmox/index.js.map +1 -0
  161. package/dist/proxmox/manifest.d.ts +3 -0
  162. package/dist/proxmox/manifest.d.ts.map +1 -0
  163. package/dist/proxmox/manifest.js +75 -0
  164. package/dist/proxmox/manifest.js.map +1 -0
  165. package/dist/proxmox/probes/ceph-status.d.ts +36 -0
  166. package/dist/proxmox/probes/ceph-status.d.ts.map +1 -0
  167. package/dist/proxmox/probes/ceph-status.js +71 -0
  168. package/dist/proxmox/probes/ceph-status.js.map +1 -0
  169. package/dist/proxmox/probes/ceph-status.test.d.ts +2 -0
  170. package/dist/proxmox/probes/ceph-status.test.d.ts.map +1 -0
  171. package/dist/proxmox/probes/ceph-status.test.js +115 -0
  172. package/dist/proxmox/probes/ceph-status.test.js.map +1 -0
  173. package/dist/proxmox/probes/cluster-config.d.ts +31 -0
  174. package/dist/proxmox/probes/cluster-config.d.ts.map +1 -0
  175. package/dist/proxmox/probes/cluster-config.js +72 -0
  176. package/dist/proxmox/probes/cluster-config.js.map +1 -0
  177. package/dist/proxmox/probes/cluster-config.test.d.ts +2 -0
  178. package/dist/proxmox/probes/cluster-config.test.d.ts.map +1 -0
  179. package/dist/proxmox/probes/cluster-config.test.js +107 -0
  180. package/dist/proxmox/probes/cluster-config.test.js.map +1 -0
  181. package/dist/proxmox/probes/ha-status.d.ts +18 -0
  182. package/dist/proxmox/probes/ha-status.d.ts.map +1 -0
  183. package/dist/proxmox/probes/ha-status.js +38 -0
  184. package/dist/proxmox/probes/ha-status.js.map +1 -0
  185. package/dist/proxmox/probes/ha-status.test.d.ts +2 -0
  186. package/dist/proxmox/probes/ha-status.test.d.ts.map +1 -0
  187. package/dist/proxmox/probes/ha-status.test.js +66 -0
  188. package/dist/proxmox/probes/ha-status.test.js.map +1 -0
  189. package/dist/proxmox/probes/lvm.d.ts +35 -0
  190. package/dist/proxmox/probes/lvm.d.ts.map +1 -0
  191. package/dist/proxmox/probes/lvm.js +75 -0
  192. package/dist/proxmox/probes/lvm.js.map +1 -0
  193. package/dist/proxmox/probes/lvm.test.d.ts +2 -0
  194. package/dist/proxmox/probes/lvm.test.d.ts.map +1 -0
  195. package/dist/proxmox/probes/lvm.test.js +128 -0
  196. package/dist/proxmox/probes/lvm.test.js.map +1 -0
  197. package/dist/proxmox/probes/lxc-config.d.ts +29 -0
  198. package/dist/proxmox/probes/lxc-config.d.ts.map +1 -0
  199. package/dist/proxmox/probes/lxc-config.js +67 -0
  200. package/dist/proxmox/probes/lxc-config.js.map +1 -0
  201. package/dist/proxmox/probes/lxc-config.test.d.ts +2 -0
  202. package/dist/proxmox/probes/lxc-config.test.d.ts.map +1 -0
  203. package/dist/proxmox/probes/lxc-config.test.js +77 -0
  204. package/dist/proxmox/probes/lxc-config.test.js.map +1 -0
  205. package/dist/proxmox/probes/lxc-list.d.ts +20 -0
  206. package/dist/proxmox/probes/lxc-list.d.ts.map +1 -0
  207. package/dist/proxmox/probes/lxc-list.js +49 -0
  208. package/dist/proxmox/probes/lxc-list.js.map +1 -0
  209. package/dist/proxmox/probes/lxc-list.test.d.ts +2 -0
  210. package/dist/proxmox/probes/lxc-list.test.d.ts.map +1 -0
  211. package/dist/proxmox/probes/lxc-list.test.js +51 -0
  212. package/dist/proxmox/probes/lxc-list.test.js.map +1 -0
  213. package/dist/proxmox/probes/vm-config.d.ts +21 -0
  214. package/dist/proxmox/probes/vm-config.d.ts.map +1 -0
  215. package/dist/proxmox/probes/vm-config.js +58 -0
  216. package/dist/proxmox/probes/vm-config.js.map +1 -0
  217. package/dist/proxmox/probes/vm-config.test.d.ts +2 -0
  218. package/dist/proxmox/probes/vm-config.test.d.ts.map +1 -0
  219. package/dist/proxmox/probes/vm-config.test.js +80 -0
  220. package/dist/proxmox/probes/vm-config.test.js.map +1 -0
  221. package/dist/proxmox/probes/vm-locks.d.ts +16 -0
  222. package/dist/proxmox/probes/vm-locks.d.ts.map +1 -0
  223. package/dist/proxmox/probes/vm-locks.js +35 -0
  224. package/dist/proxmox/probes/vm-locks.js.map +1 -0
  225. package/dist/proxmox/probes/vm-locks.test.d.ts +2 -0
  226. package/dist/proxmox/probes/vm-locks.test.d.ts.map +1 -0
  227. package/dist/proxmox/probes/vm-locks.test.js +54 -0
  228. package/dist/proxmox/probes/vm-locks.test.js.map +1 -0
  229. package/dist/redis/index.d.ts +3 -0
  230. package/dist/redis/index.d.ts.map +1 -0
  231. package/dist/redis/index.js +13 -0
  232. package/dist/redis/index.js.map +1 -0
  233. package/dist/redis/manifest.d.ts +3 -0
  234. package/dist/redis/manifest.d.ts.map +1 -0
  235. package/dist/redis/manifest.js +51 -0
  236. package/dist/redis/manifest.js.map +1 -0
  237. package/dist/redis/probes/info.d.ts +15 -0
  238. package/dist/redis/probes/info.d.ts.map +1 -0
  239. package/dist/redis/probes/info.js +32 -0
  240. package/dist/redis/probes/info.js.map +1 -0
  241. package/dist/redis/probes/info.test.d.ts +2 -0
  242. package/dist/redis/probes/info.test.d.ts.map +1 -0
  243. package/dist/redis/probes/info.test.js +64 -0
  244. package/dist/redis/probes/info.test.js.map +1 -0
  245. package/dist/redis/probes/keys-count.d.ts +13 -0
  246. package/dist/redis/probes/keys-count.d.ts.map +1 -0
  247. package/dist/redis/probes/keys-count.js +24 -0
  248. package/dist/redis/probes/keys-count.js.map +1 -0
  249. package/dist/redis/probes/keys-count.test.d.ts +2 -0
  250. package/dist/redis/probes/keys-count.test.d.ts.map +1 -0
  251. package/dist/redis/probes/keys-count.test.js +37 -0
  252. package/dist/redis/probes/keys-count.test.js.map +1 -0
  253. package/dist/redis/probes/memory-usage.d.ts +16 -0
  254. package/dist/redis/probes/memory-usage.d.ts.map +1 -0
  255. package/dist/redis/probes/memory-usage.js +31 -0
  256. package/dist/redis/probes/memory-usage.js.map +1 -0
  257. package/dist/redis/probes/memory-usage.test.d.ts +2 -0
  258. package/dist/redis/probes/memory-usage.test.d.ts.map +1 -0
  259. package/dist/redis/probes/memory-usage.test.js +48 -0
  260. package/dist/redis/probes/memory-usage.test.js.map +1 -0
  261. package/dist/runbooks/nutanix.d.ts +3 -0
  262. package/dist/runbooks/nutanix.d.ts.map +1 -0
  263. package/dist/runbooks/nutanix.js +619 -0
  264. package/dist/runbooks/nutanix.js.map +1 -0
  265. package/dist/runbooks/nutanix.test.d.ts +2 -0
  266. package/dist/runbooks/nutanix.test.d.ts.map +1 -0
  267. package/dist/runbooks/nutanix.test.js +971 -0
  268. package/dist/runbooks/nutanix.test.js.map +1 -0
  269. package/dist/runbooks/proxmox.d.ts +3 -0
  270. package/dist/runbooks/proxmox.d.ts.map +1 -0
  271. package/dist/runbooks/proxmox.js +451 -0
  272. package/dist/runbooks/proxmox.js.map +1 -0
  273. package/dist/runbooks/proxmox.test.d.ts +2 -0
  274. package/dist/runbooks/proxmox.test.d.ts.map +1 -0
  275. package/dist/runbooks/proxmox.test.js +700 -0
  276. package/dist/runbooks/proxmox.test.js.map +1 -0
  277. package/dist/signatures.d.ts +2 -0
  278. package/dist/signatures.d.ts.map +1 -0
  279. package/dist/signatures.js +2 -0
  280. package/dist/signatures.js.map +1 -0
  281. package/dist/system/index.d.ts.map +1 -1
  282. package/dist/system/index.js +2 -0
  283. package/dist/system/index.js.map +1 -1
  284. package/dist/system/manifest.d.ts.map +1 -1
  285. package/dist/system/manifest.js +19 -1
  286. package/dist/system/manifest.js.map +1 -1
  287. package/dist/system/probes/ping.d.ts +20 -0
  288. package/dist/system/probes/ping.d.ts.map +1 -0
  289. package/dist/system/probes/ping.js +54 -0
  290. package/dist/system/probes/ping.js.map +1 -0
  291. package/dist/system/probes/ping.test.d.ts +2 -0
  292. package/dist/system/probes/ping.test.d.ts.map +1 -0
  293. package/dist/system/probes/ping.test.js +127 -0
  294. package/dist/system/probes/ping.test.js.map +1 -0
  295. package/dist/types.d.ts +53 -0
  296. package/dist/types.d.ts.map +1 -1
  297. package/dist/validation.d.ts +6 -1
  298. package/dist/validation.d.ts.map +1 -1
  299. package/dist/validation.js +10 -1
  300. package/dist/validation.js.map +1 -1
  301. package/package.json +1 -1
  302. package/src/index.ts +60 -6
  303. package/src/integrations/citrix.test.ts +592 -0
  304. package/src/integrations/citrix.ts +553 -0
  305. package/src/integrations/graph.test.ts +478 -0
  306. package/src/integrations/graph.ts +409 -0
  307. package/src/integrations/httpbin.ts +68 -0
  308. package/src/integrations/nutanix.test.ts +1508 -0
  309. package/src/integrations/nutanix.ts +1456 -0
  310. package/src/integrations/proxmox.test.ts +1020 -0
  311. package/src/integrations/proxmox.ts +985 -0
  312. package/src/integrations/servicenow.test.ts +314 -0
  313. package/src/integrations/servicenow.ts +280 -0
  314. package/src/integrations/splunk.test.ts +440 -0
  315. package/src/integrations/splunk.ts +352 -0
  316. package/src/mysql/index.ts +14 -0
  317. package/src/mysql/manifest.ts +70 -0
  318. package/src/mysql/probes/databases-list.test.ts +62 -0
  319. package/src/mysql/probes/databases-list.ts +45 -0
  320. package/src/mysql/probes/processlist.test.ts +47 -0
  321. package/src/mysql/probes/processlist.ts +55 -0
  322. package/src/mysql/probes/status.test.ts +50 -0
  323. package/src/mysql/probes/status.ts +56 -0
  324. package/src/nginx/index.ts +14 -0
  325. package/src/nginx/manifest.ts +69 -0
  326. package/src/nginx/probes/access-log-tail.test.ts +51 -0
  327. package/src/nginx/probes/access-log-tail.ts +23 -0
  328. package/src/nginx/probes/config-test.test.ts +47 -0
  329. package/src/nginx/probes/config-test.ts +24 -0
  330. package/src/nginx/probes/error-log-tail.test.ts +44 -0
  331. package/src/nginx/probes/error-log-tail.ts +23 -0
  332. package/src/postgres/index.ts +14 -0
  333. package/src/postgres/manifest.ts +91 -0
  334. package/src/postgres/probes/connections-active.test.ts +42 -0
  335. package/src/postgres/probes/connections-active.ts +55 -0
  336. package/src/postgres/probes/databases-list.test.ts +57 -0
  337. package/src/postgres/probes/databases-list.ts +49 -0
  338. package/src/postgres/probes/query-slow.test.ts +37 -0
  339. package/src/postgres/probes/query-slow.ts +55 -0
  340. package/src/proxmox/index.ts +24 -0
  341. package/src/proxmox/manifest.ts +76 -0
  342. package/src/proxmox/probes/ceph-status.test.ts +126 -0
  343. package/src/proxmox/probes/ceph-status.ts +116 -0
  344. package/src/proxmox/probes/cluster-config.test.ts +118 -0
  345. package/src/proxmox/probes/cluster-config.ts +97 -0
  346. package/src/proxmox/probes/ha-status.test.ts +76 -0
  347. package/src/proxmox/probes/ha-status.ts +56 -0
  348. package/src/proxmox/probes/lvm.test.ts +140 -0
  349. package/src/proxmox/probes/lvm.ts +121 -0
  350. package/src/proxmox/probes/lxc-config.test.ts +89 -0
  351. package/src/proxmox/probes/lxc-config.ts +90 -0
  352. package/src/proxmox/probes/lxc-list.test.ts +60 -0
  353. package/src/proxmox/probes/lxc-list.ts +67 -0
  354. package/src/proxmox/probes/vm-config.test.ts +93 -0
  355. package/src/proxmox/probes/vm-config.ts +77 -0
  356. package/src/proxmox/probes/vm-locks.test.ts +63 -0
  357. package/src/proxmox/probes/vm-locks.ts +49 -0
  358. package/src/redis/index.ts +14 -0
  359. package/src/redis/manifest.ts +52 -0
  360. package/src/redis/probes/info.test.ts +73 -0
  361. package/src/redis/probes/info.ts +46 -0
  362. package/src/redis/probes/keys-count.test.ts +44 -0
  363. package/src/redis/probes/keys-count.ts +38 -0
  364. package/src/redis/probes/memory-usage.test.ts +54 -0
  365. package/src/redis/probes/memory-usage.ts +46 -0
  366. package/src/runbooks/nutanix.test.ts +1138 -0
  367. package/src/runbooks/nutanix.ts +941 -0
  368. package/src/runbooks/proxmox.test.ts +838 -0
  369. package/src/runbooks/proxmox.ts +626 -0
  370. package/src/signatures.ts +1 -0
  371. package/src/system/index.ts +2 -0
  372. package/src/system/manifest.ts +21 -1
  373. package/src/system/probes/ping.test.ts +163 -0
  374. package/src/system/probes/ping.ts +89 -0
  375. package/src/types.ts +62 -0
  376. package/src/validation.ts +21 -1
  377. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,4 @@
1
+
2
+ > @sonde/packs@0.1.1 build
3
+ > tsc
4
+
@@ -0,0 +1,53 @@
1
+
2
+ > @sonde/packs@0.1.1 test
3
+ > vitest run
4
+
5
+
6
+ RUN v2.1.9 /Users/joshowen/Library/CloudStorage/ProtonDrive-joshowen@protonmail.com-folder/AI/ClaudeCode/sonde/packages/packs
7
+
8
+ ✓ src/integrations/proxmox.test.ts (50 tests) 15ms
9
+ ✓ src/integrations/graph.test.ts (27 tests) 20ms
10
+ ✓ src/runbooks/proxmox.test.ts (30 tests) 9ms
11
+ ✓ src/integrations/servicenow.test.ts (22 tests) 16ms
12
+ ✓ src/integrations/nutanix.test.ts (73 tests) 30ms
13
+ ✓ src/proxmox/probes/lxc-config.test.ts (9 tests) 3ms
14
+ ✓ src/proxmox/probes/ceph-status.test.ts (5 tests) 4ms
15
+ ✓ src/proxmox/probes/cluster-config.test.ts (8 tests) 5ms
16
+ ✓ src/proxmox/probes/lvm.test.ts (5 tests) 3ms
17
+ ✓ src/integrations/splunk.test.ts (24 tests) 15ms
18
+ ✓ src/integrations/citrix.test.ts (27 tests) 17ms
19
+ ✓ src/runbooks/nutanix.test.ts (45 tests) 9ms
20
+ ✓ src/system/probes/ping.test.ts (9 tests) 4ms
21
+ ✓ src/system/probes/disk-usage.test.ts (5 tests) 3ms
22
+ ✓ src/proxmox/probes/vm-config.test.ts (8 tests) 14ms
23
+ ✓ src/proxmox/probes/vm-locks.test.ts (6 tests) 3ms
24
+ ✓ src/proxmox/probes/ha-status.test.ts (7 tests) 3ms
25
+ ✓ src/systemd/probes/journal-query.test.ts (4 tests) 2ms
26
+ ✓ src/postgres/probes/databases-list.test.ts (4 tests) 2ms
27
+ ✓ src/redis/probes/info.test.ts (5 tests) 5ms
28
+ ✓ src/docker/probes/containers-list.test.ts (3 tests) 2ms
29
+ ✓ src/docker/probes/images-list.test.ts (3 tests) 3ms
30
+ ✓ src/system/probes/memory-usage.test.ts (4 tests) 13ms
31
+ ✓ src/mysql/probes/databases-list.test.ts (4 tests) 2ms
32
+ ✓ src/systemd/probes/services-list.test.ts (3 tests) 5ms
33
+ ✓ src/redis/probes/memory-usage.test.ts (3 tests) 3ms
34
+ ✓ src/proxmox/probes/lxc-list.test.ts (6 tests) 30ms
35
+ ✓ src/validation.test.ts (6 tests) 3ms
36
+ ✓ src/nginx/probes/access-log-tail.test.ts (4 tests) 2ms
37
+ ✓ src/nginx/probes/config-test.test.ts (4 tests) 2ms
38
+ ✓ src/docker/probes/logs-tail.test.ts (4 tests) 3ms
39
+ ✓ src/system/probes/cpu-usage.test.ts (4 tests) 2ms
40
+ ✓ src/systemd/probes/service-status.test.ts (3 tests) 2ms
41
+ ✓ src/nginx/probes/error-log-tail.test.ts (3 tests) 2ms
42
+ ✓ src/mysql/probes/processlist.test.ts (3 tests) 2ms
43
+ ✓ src/postgres/probes/connections-active.test.ts (3 tests) 2ms
44
+ ✓ src/redis/probes/keys-count.test.ts (4 tests) 2ms
45
+ ✓ src/mysql/probes/status.test.ts (4 tests) 2ms
46
+ ✓ src/postgres/probes/query-slow.test.ts (3 tests) 2ms
47
+ ✓ src/docker/probes/daemon-info.test.ts (2 tests) 5ms
48
+
49
+ Test Files 40 passed (40)
50
+ Tests 446 passed (446)
51
+ Start at 15:54:24
52
+ Duration 2.73s (transform 2.85s, setup 0ms, collect 5.76s, tests 268ms, environment 4ms, prepare 10.34s)
53
+
@@ -0,0 +1,4 @@
1
+
2
+ > @sonde/packs@0.1.0 typecheck
3
+ > tsc --noEmit
4
+
package/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # @sonde/packs
2
+
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - updates
8
+
9
+ - Updated dependencies []:
10
+ - @sonde/shared@0.1.2
11
+
12
+ ## 0.1.1
13
+
14
+ ### Patch Changes
15
+
16
+ - latest updates
17
+
18
+ - Updated dependencies []:
19
+ - @sonde/shared@0.1.1
package/dist/index.d.ts CHANGED
@@ -1,9 +1,24 @@
1
1
  import type { Pack } from './types.js';
2
- export type { ExecFn, Pack, ProbeHandler } from './types.js';
2
+ export type { DiagnosticFinding, DiagnosticRunbookDefinition, DiagnosticRunbookHandler, DiagnosticRunbookResult, ExecFn, Pack, ProbeHandler, RunbookContext, RunbookProbeResult, RunProbe, } from './types.js';
3
+ export type { PackRegistryOptions } from './validation.js';
3
4
  export { systemPack } from './system/index.js';
4
5
  export { dockerPack } from './docker/index.js';
5
6
  export { systemdPack } from './systemd/index.js';
7
+ export { nginxPack } from './nginx/index.js';
8
+ export { postgresPack } from './postgres/index.js';
9
+ export { redisPack } from './redis/index.js';
10
+ export { mysqlPack } from './mysql/index.js';
11
+ export { proxmoxAgentPack } from './proxmox/index.js';
6
12
  export { createPackRegistry, PackValidationError, validatePack } from './validation.js';
13
+ export { httpbinPack } from './integrations/httpbin.js';
14
+ export { servicenowPack } from './integrations/servicenow.js';
15
+ export { citrixPack } from './integrations/citrix.js';
16
+ export { graphPack } from './integrations/graph.js';
17
+ export { splunkPack } from './integrations/splunk.js';
18
+ export { proxmoxPack } from './integrations/proxmox.js';
19
+ export { nutanixPack } from './integrations/nutanix.js';
20
+ export { proxmoxDiagnosticRunbooks } from './runbooks/proxmox.js';
21
+ export { nutanixDiagnosticRunbooks } from './runbooks/nutanix.js';
7
22
  /** Registry of all built-in packs, keyed by pack name */
8
23
  export declare const packRegistry: ReadonlyMap<string, Pack>;
9
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExF,yDAAyD;AACzD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAIjD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,YAAY,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,uBAAuB,EACvB,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAgBlE,yDAAyD;AACzD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAYlD,CAAC"}
package/dist/index.js CHANGED
@@ -1,15 +1,53 @@
1
1
  import { dockerPack } from './docker/index.js';
2
+ import { mysqlPack } from './mysql/index.js';
3
+ import { nginxPack } from './nginx/index.js';
4
+ import { postgresPack } from './postgres/index.js';
5
+ import { proxmoxAgentPack } from './proxmox/index.js';
6
+ import { redisPack } from './redis/index.js';
7
+ import { PACK_SIGNATURES } from './signatures.js';
2
8
  import { systemPack } from './system/index.js';
3
9
  import { systemdPack } from './systemd/index.js';
4
10
  import { createPackRegistry } from './validation.js';
5
11
  export { systemPack } from './system/index.js';
6
12
  export { dockerPack } from './docker/index.js';
7
13
  export { systemdPack } from './systemd/index.js';
14
+ export { nginxPack } from './nginx/index.js';
15
+ export { postgresPack } from './postgres/index.js';
16
+ export { redisPack } from './redis/index.js';
17
+ export { mysqlPack } from './mysql/index.js';
18
+ export { proxmoxAgentPack } from './proxmox/index.js';
8
19
  export { createPackRegistry, PackValidationError, validatePack } from './validation.js';
20
+ export { httpbinPack } from './integrations/httpbin.js';
21
+ export { servicenowPack } from './integrations/servicenow.js';
22
+ export { citrixPack } from './integrations/citrix.js';
23
+ export { graphPack } from './integrations/graph.js';
24
+ export { splunkPack } from './integrations/splunk.js';
25
+ export { proxmoxPack } from './integrations/proxmox.js';
26
+ export { nutanixPack } from './integrations/nutanix.js';
27
+ export { proxmoxDiagnosticRunbooks } from './runbooks/proxmox.js';
28
+ export { nutanixDiagnosticRunbooks } from './runbooks/nutanix.js';
29
+ /** Inject stored signatures into pack manifests */
30
+ function injectSignatures(packs) {
31
+ return packs.map((pack) => {
32
+ const sig = PACK_SIGNATURES[pack.manifest.name];
33
+ if (sig) {
34
+ return {
35
+ ...pack,
36
+ manifest: { ...pack.manifest, signature: sig },
37
+ };
38
+ }
39
+ return pack;
40
+ });
41
+ }
9
42
  /** Registry of all built-in packs, keyed by pack name */
10
- export const packRegistry = createPackRegistry([
43
+ export const packRegistry = createPackRegistry(injectSignatures([
11
44
  systemPack,
12
45
  dockerPack,
13
46
  systemdPack,
14
- ]);
47
+ nginxPack,
48
+ postgresPack,
49
+ redisPack,
50
+ mysqlPack,
51
+ proxmoxAgentPack,
52
+ ]), { allowUnsignedPacks: true });
15
53
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExF,yDAAyD;AACzD,MAAM,CAAC,MAAM,YAAY,GAA8B,kBAAkB,CAAC;IACxE,UAAU;IACV,UAAU;IACV,WAAW;CACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAerD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,mDAAmD;AACnD,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;aAC/C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,YAAY,GAA8B,kBAAkB,CACvE,gBAAgB,CAAC;IACf,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS;IACT,YAAY;IACZ,SAAS;IACT,SAAS;IACT,gBAAgB;CACjB,CAAC,EACF,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAC7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { FetchFn, IntegrationCredentials, IntegrationPack } from '@sonde/shared';
2
+ /** Acquire or reuse a Citrix Cloud OAuth2 token via client_credentials grant */
3
+ export declare function ensureAccessToken(credentials: IntegrationCredentials, fetchFn: FetchFn): Promise<string>;
4
+ /** Clear the cached token (used for testing) */
5
+ export declare function clearTokenCache(): void;
6
+ /** Build auth headers: Basic for on-prem (api_key), CWSAuth for cloud (oauth2) */
7
+ export declare function buildAuthHeaders(credentials: IntegrationCredentials, cloudToken?: string): Record<string, string>;
8
+ /** Build OData URL: on-prem appends /Citrix/Monitor/OData/v4/Data, cloud uses endpoint directly */
9
+ export declare function buildODataUrl(endpoint: string, authMethod: string, entity: string): string;
10
+ /** Fetch all pages of an OData response, following @odata.nextLink */
11
+ export declare function fetchAllPages(url: string, headers: Record<string, string>, fetchFn: FetchFn, maxPages?: number): Promise<unknown[]>;
12
+ export declare const citrixPack: IntegrationPack;
13
+ //# sourceMappingURL=citrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"citrix.d.ts","sourceRoot":"","sources":["../../src/integrations/citrix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,sBAAsB,EACtB,eAAe,EAEhB,MAAM,eAAe,CAAC;AA2DvB,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,sBAAsB,EACnC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,gDAAgD;AAChD,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAID,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,sBAAsB,EACnC,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAED,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAO1F;AASD,sEAAsE;AACtE,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,OAAO,EAChB,QAAQ,SAAK,GACZ,OAAO,CAAC,OAAO,EAAE,CAAC,CAepB;AA0RD,eAAO,MAAM,UAAU,EAAE,eAoGxB,CAAC"}
@@ -0,0 +1,415 @@
1
+ // --- Enum mappings (Citrix OData uses integer keys) ---
2
+ const CONNECTION_STATE = {
3
+ 0: 'Unknown',
4
+ 1: 'Connected',
5
+ 2: 'Disconnected',
6
+ 3: 'Disconnected',
7
+ 4: 'Preparing',
8
+ 5: 'Active',
9
+ };
10
+ const REGISTRATION_STATE = {
11
+ 0: 'Unregistered',
12
+ 1: 'Registered',
13
+ 2: 'AgentError',
14
+ };
15
+ const POWER_STATE = {
16
+ 0: 'Unmanaged',
17
+ 1: 'Unknown',
18
+ 2: 'Unavailable',
19
+ 3: 'Off',
20
+ 4: 'On',
21
+ 5: 'Suspended',
22
+ 6: 'TurningOn',
23
+ 7: 'TurningOff',
24
+ };
25
+ const FAULT_STATE = {
26
+ 0: 'None',
27
+ 1: 'FailedToStart',
28
+ 2: 'StuckOnBoot',
29
+ 3: 'Unregistered',
30
+ 4: 'MaxCapacity',
31
+ };
32
+ const FAILURE_CATEGORY = {
33
+ 0: 'None',
34
+ 1: 'ClientConnectionFailure',
35
+ 2: 'ClientError',
36
+ 3: 'CommunicationError',
37
+ 4: 'ConnectionTimeout',
38
+ 5: 'LicensingFailure',
39
+ 6: 'TicketingFailure',
40
+ 7: 'Other',
41
+ 8: 'Unknown',
42
+ };
43
+ let tokenCache = null;
44
+ /** Acquire or reuse a Citrix Cloud OAuth2 token via client_credentials grant */
45
+ export async function ensureAccessToken(credentials, fetchFn) {
46
+ if (tokenCache && Date.now() < tokenCache.expiresAt - 30_000) {
47
+ return tokenCache.accessToken;
48
+ }
49
+ const customerId = credentials.credentials.customerId ?? '';
50
+ const clientId = credentials.credentials.clientId ?? '';
51
+ const clientSecret = credentials.credentials.clientSecret ?? '';
52
+ const tokenUrl = `https://api.cloud.com/cctrustoauth2/${customerId}/tokens/clients`;
53
+ const body = new URLSearchParams({
54
+ grant_type: 'client_credentials',
55
+ client_id: clientId,
56
+ client_secret: clientSecret,
57
+ });
58
+ const res = await fetchFn(tokenUrl, {
59
+ method: 'POST',
60
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
61
+ body: body.toString(),
62
+ });
63
+ if (!res.ok) {
64
+ throw new Error(`Citrix Cloud token request failed: ${res.status} ${res.statusText}`);
65
+ }
66
+ const data = (await res.json());
67
+ tokenCache = {
68
+ accessToken: data.access_token,
69
+ expiresAt: Date.now() + data.expires_in * 1000,
70
+ };
71
+ return tokenCache.accessToken;
72
+ }
73
+ /** Clear the cached token (used for testing) */
74
+ export function clearTokenCache() {
75
+ tokenCache = null;
76
+ }
77
+ // --- Auth & URL helpers ---
78
+ /** Build auth headers: Basic for on-prem (api_key), CWSAuth for cloud (oauth2) */
79
+ export function buildAuthHeaders(credentials, cloudToken) {
80
+ if (credentials.authMethod === 'oauth2') {
81
+ const headers = {
82
+ Authorization: `CWSAuth bearer=${cloudToken ?? ''}`,
83
+ 'Citrix-CustomerId': credentials.credentials.customerId ?? '',
84
+ };
85
+ return headers;
86
+ }
87
+ // api_key = on-prem Director with DOMAIN\username:password Basic auth
88
+ const { domain, username, password } = credentials.credentials;
89
+ const user = domain ? `${domain}\\${username}` : username;
90
+ if (user && password) {
91
+ return { Authorization: `Basic ${Buffer.from(`${user}:${password}`).toString('base64')}` };
92
+ }
93
+ return {};
94
+ }
95
+ /** Build OData URL: on-prem appends /Citrix/Monitor/OData/v4/Data, cloud uses endpoint directly */
96
+ export function buildODataUrl(endpoint, authMethod, entity) {
97
+ if (authMethod === 'oauth2') {
98
+ // Cloud: endpoint is e.g. https://api.cloud.com/monitorodata
99
+ return `${endpoint.replace(/\/$/, '')}/${entity}`;
100
+ }
101
+ // On-prem: append OData path
102
+ return `${endpoint.replace(/\/$/, '')}/Citrix/Monitor/OData/v4/Data/${entity}`;
103
+ }
104
+ /** Fetch all pages of an OData response, following @odata.nextLink */
105
+ export async function fetchAllPages(url, headers, fetchFn, maxPages = 10) {
106
+ const results = [];
107
+ let nextUrl = url;
108
+ let page = 0;
109
+ while (nextUrl && page < maxPages) {
110
+ const res = await fetchFn(nextUrl, { headers: { Accept: 'application/json', ...headers } });
111
+ if (!res.ok)
112
+ throw new Error(`Citrix OData API returned ${res.status}: ${res.statusText}`);
113
+ const data = (await res.json());
114
+ results.push(...(data.value ?? []));
115
+ nextUrl = data['@odata.nextLink'];
116
+ page++;
117
+ }
118
+ return results;
119
+ }
120
+ // --- Combined fetch helper ---
121
+ async function citrixFetch(entity, odataParams, config, credentials, fetchFn, maxPages = 10) {
122
+ let cloudToken;
123
+ if (credentials.authMethod === 'oauth2') {
124
+ cloudToken = await ensureAccessToken(credentials, fetchFn);
125
+ }
126
+ const baseUrl = buildODataUrl(config.endpoint, credentials.authMethod, entity);
127
+ const url = new URL(baseUrl);
128
+ for (const [key, value] of Object.entries(odataParams)) {
129
+ url.searchParams.set(key, value);
130
+ }
131
+ const headers = {
132
+ ...buildAuthHeaders(credentials, cloudToken),
133
+ ...config.headers,
134
+ };
135
+ return fetchAllPages(url.toString(), headers, fetchFn, maxPages);
136
+ }
137
+ // --- Helpers ---
138
+ /** Calculate duration in ms from timestamp pair, or use existing duration field */
139
+ function calcDuration(item, durationKey, startKey, endKey) {
140
+ const dur = item[durationKey];
141
+ if (typeof dur === 'number' && dur > 0)
142
+ return dur;
143
+ const start = item[startKey];
144
+ const end = item[endKey];
145
+ if (typeof start === 'string' && typeof end === 'string') {
146
+ const diff = new Date(end).getTime() - new Date(start).getTime();
147
+ return diff >= 0 ? diff : null;
148
+ }
149
+ return null;
150
+ }
151
+ function mapEnum(value, mapping) {
152
+ if (typeof value === 'number')
153
+ return mapping[value] ?? `Unknown(${value})`;
154
+ return String(value ?? 'Unknown');
155
+ }
156
+ // --- Probe handlers ---
157
+ const sessionsActive = async (params, config, credentials, fetchFn) => {
158
+ const items = (await citrixFetch('Sessions', { $filter: 'EndDate eq null', $expand: 'Machine,DesktopGroup' }, config, credentials, fetchFn));
159
+ // Group by delivery group
160
+ const groups = {};
161
+ for (const s of items) {
162
+ const dg = s.DesktopGroup?.Name ?? 'Unknown';
163
+ const dgName = String(dg);
164
+ if (!groups[dgName])
165
+ groups[dgName] = { active: 0, disconnected: 0, total: 0 };
166
+ const state = s.ConnectionState;
167
+ if (state === 5)
168
+ groups[dgName].active++;
169
+ else if (state === 3)
170
+ groups[dgName].disconnected++;
171
+ groups[dgName].total++;
172
+ }
173
+ return {
174
+ totalSessions: items.length,
175
+ byDeliveryGroup: Object.entries(groups).map(([name, counts]) => ({
176
+ deliveryGroup: name,
177
+ ...counts,
178
+ })),
179
+ };
180
+ };
181
+ const sessionsFailures = async (params, config, credentials, fetchFn) => {
182
+ const hours = params?.hours || 24;
183
+ const cutoff = new Date(Date.now() - hours * 60 * 60 * 1000).toISOString();
184
+ const items = (await citrixFetch('Connections', {
185
+ $filter: `FailureDate ne null and LogOnStartDate ge datetime'${cutoff}'`,
186
+ }, config, credentials, fetchFn));
187
+ // Count by FailureCategory
188
+ const byCategory = {};
189
+ const affectedUsers = new Set();
190
+ const affectedMachines = new Set();
191
+ for (const c of items) {
192
+ const cat = mapEnum(c.FailureCategory, FAILURE_CATEGORY);
193
+ byCategory[cat] = (byCategory[cat] ?? 0) + 1;
194
+ if (c.UserName)
195
+ affectedUsers.add(String(c.UserName));
196
+ if (c.MachineName)
197
+ affectedMachines.add(String(c.MachineName));
198
+ }
199
+ return {
200
+ totalFailures: items.length,
201
+ periodHours: hours,
202
+ byCategory,
203
+ affectedUsers: [...affectedUsers],
204
+ affectedMachines: [...affectedMachines],
205
+ };
206
+ };
207
+ const logonPerformance = async (params, config, credentials, fetchFn) => {
208
+ const hours = params?.hours || 24;
209
+ const cutoff = new Date(Date.now() - hours * 60 * 60 * 1000).toISOString();
210
+ const items = (await citrixFetch('Sessions', {
211
+ $filter: `LogOnDuration ne null and StartDate ge datetime'${cutoff}'`,
212
+ $expand: 'DesktopGroup',
213
+ }, config, credentials, fetchFn));
214
+ // Aggregate by delivery group
215
+ const groups = {};
216
+ for (const s of items) {
217
+ const dgName = String(s.DesktopGroup?.Name ?? 'Unknown');
218
+ if (!groups[dgName]) {
219
+ groups[dgName] = { count: 0, totalLogon: 0, totalBrokering: 0, totalVM: 0 };
220
+ }
221
+ const g = groups[dgName];
222
+ g.count++;
223
+ const logon = calcDuration(s, 'LogOnDuration', 'LogOnStartDate', 'LogOnEndDate');
224
+ const brokering = calcDuration(s, 'BrokeringDuration', 'BrokeringDate', 'BrokeringDateEndDate');
225
+ const vm = calcDuration(s, 'VMStartStartDate', 'VMStartStartDate', 'VMStartEndDate');
226
+ if (logon !== null)
227
+ g.totalLogon += logon;
228
+ if (brokering !== null)
229
+ g.totalBrokering += brokering;
230
+ if (vm !== null)
231
+ g.totalVM += vm;
232
+ }
233
+ return {
234
+ periodHours: hours,
235
+ totalSessions: items.length,
236
+ byDeliveryGroup: Object.entries(groups).map(([name, g]) => ({
237
+ deliveryGroup: name,
238
+ sessionCount: g.count,
239
+ avgLogonDurationMs: g.count > 0 ? Math.round(g.totalLogon / g.count) : 0,
240
+ avgBrokeringDurationMs: g.count > 0 ? Math.round(g.totalBrokering / g.count) : 0,
241
+ avgVMStartDurationMs: g.count > 0 ? Math.round(g.totalVM / g.count) : 0,
242
+ })),
243
+ };
244
+ };
245
+ const machinesStatus = async (_params, config, credentials, fetchFn) => {
246
+ const items = (await citrixFetch('Machines', { $filter: 'LifecycleState eq 0' }, config, credentials, fetchFn));
247
+ return items.map((m) => ({
248
+ name: m.DnsName ?? m.Name,
249
+ registrationState: mapEnum(m.CurrentRegistrationState, REGISTRATION_STATE),
250
+ powerState: mapEnum(m.CurrentPowerState, POWER_STATE),
251
+ faultState: mapEnum(m.FaultState, FAULT_STATE),
252
+ inMaintenanceMode: m.IsInMaintenanceMode ?? false,
253
+ currentLoadIndex: m.CurrentLoadIndex ?? null,
254
+ osType: m.OSType ?? null,
255
+ agentVersion: m.AgentVersion ?? null,
256
+ ipAddress: m.IPAddress ?? null,
257
+ }));
258
+ };
259
+ const machinesLoad = async (_params, config, credentials, fetchFn) => {
260
+ const items = (await citrixFetch('Machines', { $filter: 'LifecycleState eq 0 and CurrentRegistrationState eq 1' }, config, credentials, fetchFn));
261
+ // Sort by load index descending
262
+ // CurrentLoadIndex: 0-10000 scale (10000 = fully loaded). Divide by 100 for percentage.
263
+ const sorted = items
264
+ .map((m) => {
265
+ const loadIndex = m.CurrentLoadIndex ?? 0;
266
+ return {
267
+ name: m.DnsName ?? m.Name,
268
+ currentLoadIndex: loadIndex,
269
+ capacityPct: Math.round(loadIndex / 100),
270
+ activeSessions: m.CurrentSessionCount ?? 0,
271
+ inMaintenanceMode: m.IsInMaintenanceMode ?? false,
272
+ };
273
+ })
274
+ .sort((a, b) => b.currentLoadIndex - a.currentLoadIndex);
275
+ return {
276
+ totalRegistered: items.length,
277
+ machines: sorted,
278
+ };
279
+ };
280
+ const deliverygroupsHealth = async (_params, config, credentials, fetchFn) => {
281
+ // Three parallel queries: DesktopGroups, Machines, Sessions (active)
282
+ const [desktopGroups, machines, sessions] = await Promise.all([
283
+ citrixFetch('DesktopGroups', {}, config, credentials, fetchFn),
284
+ citrixFetch('Machines', { $filter: 'LifecycleState eq 0' }, config, credentials, fetchFn),
285
+ citrixFetch('Sessions', { $filter: 'EndDate eq null' }, config, credentials, fetchFn),
286
+ ]);
287
+ const dgList = desktopGroups;
288
+ const machineList = machines;
289
+ const sessionList = sessions;
290
+ // Index machines and sessions by DesktopGroupId
291
+ const machinesByDg = {};
292
+ for (const m of machineList) {
293
+ const dgId = String(m.DesktopGroupId ?? '');
294
+ if (!machinesByDg[dgId])
295
+ machinesByDg[dgId] = [];
296
+ machinesByDg[dgId].push(m);
297
+ }
298
+ const sessionsByDg = {};
299
+ for (const s of sessionList) {
300
+ const dgId = String(s.DesktopGroupId ?? '');
301
+ sessionsByDg[dgId] = (sessionsByDg[dgId] ?? 0) + 1;
302
+ }
303
+ return dgList.map((dg) => {
304
+ const dgId = String(dg.Id ?? '');
305
+ const dgMachines = machinesByDg[dgId] ?? [];
306
+ const registered = dgMachines.filter((m) => m.CurrentRegistrationState === 1).length;
307
+ const maintenance = dgMachines.filter((m) => m.IsInMaintenanceMode === true).length;
308
+ return {
309
+ name: dg.Name,
310
+ totalMachines: dgMachines.length,
311
+ registeredMachines: registered,
312
+ unregisteredMachines: dgMachines.length - registered,
313
+ maintenanceMode: maintenance,
314
+ activeSessions: sessionsByDg[dgId] ?? 0,
315
+ enabled: dg.Enabled ?? true,
316
+ };
317
+ });
318
+ };
319
+ // --- Pack definition ---
320
+ export const citrixPack = {
321
+ manifest: {
322
+ name: 'citrix',
323
+ type: 'integration',
324
+ version: '0.1.0',
325
+ description: 'Citrix Monitor OData — sessions, logon performance, machine status, and delivery group health',
326
+ requires: { groups: [], files: [], commands: [] },
327
+ probes: [
328
+ {
329
+ name: 'sessions.active',
330
+ description: 'Active and disconnected sessions grouped by delivery group',
331
+ capability: 'observe',
332
+ params: {},
333
+ timeout: 30000,
334
+ },
335
+ {
336
+ name: 'sessions.failures',
337
+ description: 'Session connection failures with affected users and machines',
338
+ capability: 'observe',
339
+ params: {
340
+ hours: {
341
+ type: 'number',
342
+ description: 'Lookback period in hours (default: 24)',
343
+ required: false,
344
+ },
345
+ },
346
+ timeout: 30000,
347
+ },
348
+ {
349
+ name: 'logon.performance',
350
+ description: 'Average logon duration breakdown per delivery group',
351
+ capability: 'observe',
352
+ params: {
353
+ hours: {
354
+ type: 'number',
355
+ description: 'Lookback period in hours (default: 24)',
356
+ required: false,
357
+ },
358
+ },
359
+ timeout: 30000,
360
+ },
361
+ {
362
+ name: 'machines.status',
363
+ description: 'Machine registration, power, and fault state with human-readable names',
364
+ capability: 'observe',
365
+ params: {},
366
+ timeout: 30000,
367
+ },
368
+ {
369
+ name: 'machines.load',
370
+ description: 'Registered machines sorted by load index with capacity percentage',
371
+ capability: 'observe',
372
+ params: {},
373
+ timeout: 30000,
374
+ },
375
+ {
376
+ name: 'deliverygroups.health',
377
+ description: 'Per-delivery-group health: machines, registration, maintenance, sessions',
378
+ capability: 'observe',
379
+ params: {},
380
+ timeout: 30000,
381
+ },
382
+ ],
383
+ runbook: {
384
+ category: 'citrix',
385
+ probes: ['sessions.active', 'machines.status', 'deliverygroups.health'],
386
+ parallel: true,
387
+ },
388
+ },
389
+ handlers: {
390
+ 'sessions.active': sessionsActive,
391
+ 'sessions.failures': sessionsFailures,
392
+ 'logon.performance': logonPerformance,
393
+ 'machines.status': machinesStatus,
394
+ 'machines.load': machinesLoad,
395
+ 'deliverygroups.health': deliverygroupsHealth,
396
+ },
397
+ testConnection: async (config, credentials, fetchFn) => {
398
+ let cloudToken;
399
+ if (credentials.authMethod === 'oauth2') {
400
+ cloudToken = await ensureAccessToken(credentials, fetchFn);
401
+ }
402
+ const url = buildODataUrl(config.endpoint, credentials.authMethod, 'Machines');
403
+ const parsed = new URL(url);
404
+ parsed.searchParams.set('$top', '1');
405
+ parsed.searchParams.set('$select', 'Id');
406
+ const headers = {
407
+ Accept: 'application/json',
408
+ ...buildAuthHeaders(credentials, cloudToken),
409
+ ...config.headers,
410
+ };
411
+ const res = await fetchFn(parsed.toString(), { headers });
412
+ return res.ok;
413
+ },
414
+ };
415
+ //# sourceMappingURL=citrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"citrix.js","sourceRoot":"","sources":["../../src/integrations/citrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=citrix.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"citrix.test.d.ts","sourceRoot":"","sources":["../../src/integrations/citrix.test.ts"],"names":[],"mappings":""}