@sonisoft/now-sdk-ext-core 2.2.1 → 2.5.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.
- package/dist/comm/http/RequestHandler.js +7 -11
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/TableAPIRequest.js +3 -10
- package/dist/comm/http/TableAPIRequest.js.map +1 -1
- package/dist/index.d.ts +28 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -1
- package/dist/sn/BackgroundScriptExecutor.d.ts +34 -0
- package/dist/sn/BackgroundScriptExecutor.js +96 -0
- package/dist/sn/BackgroundScriptExecutor.js.map +1 -1
- package/dist/sn/aggregate/AggregateModels.d.ts +89 -0
- package/dist/sn/aggregate/AggregateModels.js +5 -0
- package/dist/sn/aggregate/AggregateModels.js.map +1 -0
- package/dist/sn/aggregate/AggregateQuery.d.ts +50 -0
- package/dist/sn/aggregate/AggregateQuery.js +144 -0
- package/dist/sn/aggregate/AggregateQuery.js.map +1 -0
- package/dist/sn/application/ApplicationManager.d.ts +58 -1
- package/dist/sn/application/ApplicationManager.js +202 -11
- package/dist/sn/application/ApplicationManager.js.map +1 -1
- package/dist/sn/application/StoreApplicationModels.d.ts +99 -0
- package/dist/sn/application/StoreApplicationModels.js +2 -0
- package/dist/sn/application/StoreApplicationModels.js.map +1 -0
- package/dist/sn/attachment/AttachmentManager.d.ts +32 -0
- package/dist/sn/attachment/AttachmentManager.js +87 -0
- package/dist/sn/attachment/AttachmentManager.js.map +1 -0
- package/dist/sn/attachment/AttachmentModels.d.ts +28 -0
- package/dist/sn/attachment/AttachmentModels.js +2 -0
- package/dist/sn/attachment/AttachmentModels.js.map +1 -0
- package/dist/sn/batch/BatchModels.d.ts +90 -0
- package/dist/sn/batch/BatchModels.js +5 -0
- package/dist/sn/batch/BatchModels.js.map +1 -0
- package/dist/sn/batch/BatchOperations.d.ts +40 -0
- package/dist/sn/batch/BatchOperations.js +169 -0
- package/dist/sn/batch/BatchOperations.js.map +1 -0
- package/dist/sn/batch/QueryBatchModels.d.ts +93 -0
- package/dist/sn/batch/QueryBatchModels.js +5 -0
- package/dist/sn/batch/QueryBatchModels.js.map +1 -0
- package/dist/sn/batch/QueryBatchOperations.d.ts +41 -0
- package/dist/sn/batch/QueryBatchOperations.js +195 -0
- package/dist/sn/batch/QueryBatchOperations.js.map +1 -0
- package/dist/sn/cmdb/CMDBModels.d.ts +141 -0
- package/dist/sn/cmdb/CMDBModels.js +5 -0
- package/dist/sn/cmdb/CMDBModels.js.map +1 -0
- package/dist/sn/cmdb/CMDBRelationships.d.ts +60 -0
- package/dist/sn/cmdb/CMDBRelationships.js +286 -0
- package/dist/sn/cmdb/CMDBRelationships.js.map +1 -0
- package/dist/sn/discovery/DiscoveryModels.d.ts +160 -0
- package/dist/sn/discovery/DiscoveryModels.js +5 -0
- package/dist/sn/discovery/DiscoveryModels.js.map +1 -0
- package/dist/sn/discovery/InstanceDiscovery.d.ts +45 -0
- package/dist/sn/discovery/InstanceDiscovery.js +163 -0
- package/dist/sn/discovery/InstanceDiscovery.js.map +1 -0
- package/dist/sn/health/HealthModels.d.ts +124 -0
- package/dist/sn/health/HealthModels.js +5 -0
- package/dist/sn/health/HealthModels.js.map +1 -0
- package/dist/sn/health/InstanceHealth.d.ts +58 -0
- package/dist/sn/health/InstanceHealth.js +221 -0
- package/dist/sn/health/InstanceHealth.js.map +1 -0
- package/dist/sn/schema/SchemaDiscovery.d.ts +68 -0
- package/dist/sn/schema/SchemaDiscovery.js +346 -0
- package/dist/sn/schema/SchemaDiscovery.js.map +1 -0
- package/dist/sn/schema/SchemaModels.d.ts +277 -0
- package/dist/sn/schema/SchemaModels.js +5 -0
- package/dist/sn/schema/SchemaModels.js.map +1 -0
- package/dist/sn/scope/ScopeManager.d.ts +51 -0
- package/dist/sn/scope/ScopeManager.js +182 -0
- package/dist/sn/scope/ScopeManager.js.map +1 -0
- package/dist/sn/scope/ScopeModels.d.ts +72 -0
- package/dist/sn/scope/ScopeModels.js +5 -0
- package/dist/sn/scope/ScopeModels.js.map +1 -0
- package/dist/sn/scriptsync/ScriptSync.d.ts +38 -0
- package/dist/sn/scriptsync/ScriptSync.js +266 -0
- package/dist/sn/scriptsync/ScriptSync.js.map +1 -0
- package/dist/sn/scriptsync/ScriptSyncModels.d.ts +55 -0
- package/dist/sn/scriptsync/ScriptSyncModels.js +8 -0
- package/dist/sn/scriptsync/ScriptSyncModels.js.map +1 -0
- package/dist/sn/scriptsync/ScriptWatcher.d.ts +30 -0
- package/dist/sn/scriptsync/ScriptWatcher.js +74 -0
- package/dist/sn/scriptsync/ScriptWatcher.js.map +1 -0
- package/dist/sn/task/TaskModels.d.ts +85 -0
- package/dist/sn/task/TaskModels.js +5 -0
- package/dist/sn/task/TaskModels.js.map +1 -0
- package/dist/sn/task/TaskOperations.d.ts +63 -0
- package/dist/sn/task/TaskOperations.js +195 -0
- package/dist/sn/task/TaskOperations.js.map +1 -0
- package/dist/sn/updateset/UpdateSetManager.d.ts +78 -0
- package/dist/sn/updateset/UpdateSetManager.js +396 -0
- package/dist/sn/updateset/UpdateSetManager.js.map +1 -0
- package/dist/sn/updateset/UpdateSetModels.d.ts +188 -0
- package/dist/sn/updateset/UpdateSetModels.js +5 -0
- package/dist/sn/updateset/UpdateSetModels.js.map +1 -0
- package/dist/sn/workflow/WorkflowManager.d.ts +81 -0
- package/dist/sn/workflow/WorkflowManager.js +388 -0
- package/dist/sn/workflow/WorkflowManager.js.map +1 -0
- package/dist/sn/workflow/WorkflowModels.d.ts +242 -0
- package/dist/sn/workflow/WorkflowModels.js +5 -0
- package/dist/sn/workflow/WorkflowModels.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceDiscovery.js","sourceRoot":"","sources":["../../../src/sn/discovery/InstanceDiscovery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAiBlE;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAClB,MAAM,CAAU,mBAAmB,GAAG,eAAe,CAAC;IACtD,MAAM,CAAU,aAAa,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAU,mBAAmB,GAAG,eAAe,CAAC;IACtD,MAAM,CAAU,cAAc,GAAG,UAAU,CAAC;IAE5C,OAAO,GAAW,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAClD,SAAS,CAAkB;IAC3B,SAAS,CAAqB;IAEtC,YAAmB,QAA4B;QAC3C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,UAA6B,EAAE;QACnD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,GAA2C,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAC7E,iBAAiB,CAAC,mBAAmB,EACrC,KAAK,CACR,CAAC;QAEF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;YACvE,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc,CAAC,UAAiC,EAAE;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAqC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CACvE,iBAAiB,CAAC,aAAa,EAC/B,KAAK,CACR,CAAC;QAEF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC;YACpF,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACpG,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CAAC,UAAgC,EAAE;QACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAoC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CACtE,iBAAiB,CAAC,mBAAmB,EACrC,KAAK,CACR,CAAC;QAEF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,qBAAqB,CAAC,CAAC;YACnF,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACnG,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,UAA8B,EAAE;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAErC,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAkC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CACpE,iBAAiB,CAAC,cAAc,EAChC,KAAK,CACR,CAAC;QAEF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,UAAU,CAAC,CAAC;YACxE,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACxF,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for the health check.
|
|
3
|
+
*/
|
|
4
|
+
export interface HealthCheckOptions {
|
|
5
|
+
/** Include instance version info from sys_properties. Defaults to true. */
|
|
6
|
+
includeVersion?: boolean;
|
|
7
|
+
/** Include cluster node status from sys_cluster_state. Defaults to true. */
|
|
8
|
+
includeCluster?: boolean;
|
|
9
|
+
/** Include stuck job detection from sys_trigger. Defaults to true. */
|
|
10
|
+
includeStuckJobs?: boolean;
|
|
11
|
+
/** Include active semaphore count from sys_semaphore. Defaults to true. */
|
|
12
|
+
includeSemaphores?: boolean;
|
|
13
|
+
/** Include operational counts (incidents, changes, problems). Defaults to true. */
|
|
14
|
+
includeOperationalCounts?: boolean;
|
|
15
|
+
/** Threshold in minutes for a job to be considered "stuck". Defaults to 30. */
|
|
16
|
+
stuckJobThresholdMinutes?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Instance version information.
|
|
20
|
+
*/
|
|
21
|
+
export interface InstanceVersionInfo {
|
|
22
|
+
/** The WAR version (glide.war) */
|
|
23
|
+
version?: string | null;
|
|
24
|
+
/** Build date (glide.build.date) */
|
|
25
|
+
buildDate?: string | null;
|
|
26
|
+
/** Build tag (glide.build.tag) */
|
|
27
|
+
buildTag?: string | null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A cluster node status record.
|
|
31
|
+
*/
|
|
32
|
+
export interface ClusterNodeStatus {
|
|
33
|
+
/** The system ID */
|
|
34
|
+
sys_id: string;
|
|
35
|
+
/** The node ID */
|
|
36
|
+
node_id?: string;
|
|
37
|
+
/** The node status */
|
|
38
|
+
status?: string;
|
|
39
|
+
/** System updated on */
|
|
40
|
+
sys_updated_on?: string;
|
|
41
|
+
/** Additional fields */
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A stuck job (sys_trigger) record.
|
|
46
|
+
*/
|
|
47
|
+
export interface StuckJobRecord {
|
|
48
|
+
/** The system ID */
|
|
49
|
+
sys_id: string;
|
|
50
|
+
/** Name of the trigger */
|
|
51
|
+
name?: string;
|
|
52
|
+
/** The next scheduled action time */
|
|
53
|
+
next_action?: string;
|
|
54
|
+
/** The state of the trigger */
|
|
55
|
+
state?: string;
|
|
56
|
+
/** Additional fields */
|
|
57
|
+
[key: string]: unknown;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Operational record counts.
|
|
61
|
+
*/
|
|
62
|
+
export interface OperationalCounts {
|
|
63
|
+
/** Number of open incidents */
|
|
64
|
+
openIncidents?: number | null;
|
|
65
|
+
/** Number of open change requests */
|
|
66
|
+
openChanges?: number | null;
|
|
67
|
+
/** Number of open problems */
|
|
68
|
+
openProblems?: number | null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Consolidated health check result.
|
|
72
|
+
*/
|
|
73
|
+
export interface HealthCheckResult {
|
|
74
|
+
/** Timestamp of the health check */
|
|
75
|
+
timestamp: string;
|
|
76
|
+
/** Instance version information (null if check failed or was skipped) */
|
|
77
|
+
version: InstanceVersionInfo | null;
|
|
78
|
+
/** Cluster node statuses (null if check failed or was skipped) */
|
|
79
|
+
clusterNodes: ClusterNodeStatus[] | null;
|
|
80
|
+
/** Stuck jobs (null if check failed or was skipped) */
|
|
81
|
+
stuckJobs: StuckJobRecord[] | null;
|
|
82
|
+
/** Number of active semaphores (null if check failed or was skipped) */
|
|
83
|
+
activeSemaphoreCount: number | null;
|
|
84
|
+
/** Operational counts (null if check failed or was skipped) */
|
|
85
|
+
operationalCounts: OperationalCounts | null;
|
|
86
|
+
/** Summary string describing overall health */
|
|
87
|
+
summary: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A sys_properties record.
|
|
91
|
+
*/
|
|
92
|
+
export interface SysPropertyRecord {
|
|
93
|
+
sys_id: string;
|
|
94
|
+
name?: string;
|
|
95
|
+
value?: string;
|
|
96
|
+
[key: string]: unknown;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Response from sys_properties query.
|
|
100
|
+
*/
|
|
101
|
+
export interface SysPropertyResponse {
|
|
102
|
+
result: SysPropertyRecord[];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Response from sys_cluster_state query.
|
|
106
|
+
*/
|
|
107
|
+
export interface ClusterStateResponse {
|
|
108
|
+
result: ClusterNodeStatus[];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Response from sys_trigger query.
|
|
112
|
+
*/
|
|
113
|
+
export interface SysTriggerResponse {
|
|
114
|
+
result: StuckJobRecord[];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Response from sys_semaphore query.
|
|
118
|
+
*/
|
|
119
|
+
export interface SysSemaphoreResponse {
|
|
120
|
+
result: Array<{
|
|
121
|
+
sys_id: string;
|
|
122
|
+
[key: string]: unknown;
|
|
123
|
+
}>;
|
|
124
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HealthModels.js","sourceRoot":"","sources":["../../../src/sn/health/HealthModels.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gBAAgB;AAChB,+DAA+D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ServiceNowInstance } from "../ServiceNowInstance.js";
|
|
2
|
+
import { AggregateQuery } from "../aggregate/AggregateQuery.js";
|
|
3
|
+
import { HealthCheckOptions, HealthCheckResult } from './HealthModels.js';
|
|
4
|
+
/**
|
|
5
|
+
* InstanceHealth provides a consolidated health check for a ServiceNow instance.
|
|
6
|
+
* Checks version info, cluster status, stuck jobs, semaphores, and operational counts.
|
|
7
|
+
* Each sub-check is isolated — a failure in one does not affect others.
|
|
8
|
+
*/
|
|
9
|
+
export declare class InstanceHealth {
|
|
10
|
+
private static readonly SYS_PROPERTIES_TABLE;
|
|
11
|
+
private static readonly SYS_CLUSTER_STATE_TABLE;
|
|
12
|
+
private static readonly SYS_TRIGGER_TABLE;
|
|
13
|
+
private static readonly SYS_SEMAPHORE_TABLE;
|
|
14
|
+
private _logger;
|
|
15
|
+
private _tableAPI;
|
|
16
|
+
private _aggregateQuery;
|
|
17
|
+
private _instance;
|
|
18
|
+
constructor(instance: ServiceNowInstance, aggregateQuery?: AggregateQuery);
|
|
19
|
+
/**
|
|
20
|
+
* Run a consolidated health check on the instance.
|
|
21
|
+
* Each sub-check is wrapped in try/catch — failures return null for that check
|
|
22
|
+
* without affecting the overall result.
|
|
23
|
+
*
|
|
24
|
+
* @param options Options to control which checks are run
|
|
25
|
+
* @returns HealthCheckResult with all collected information and a summary
|
|
26
|
+
*/
|
|
27
|
+
checkHealth(options?: HealthCheckOptions): Promise<HealthCheckResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Get instance version information from sys_properties.
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
private _getVersionInfo;
|
|
33
|
+
/**
|
|
34
|
+
* Get cluster node status from sys_cluster_state.
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
37
|
+
private _getClusterStatus;
|
|
38
|
+
/**
|
|
39
|
+
* Get stuck jobs from sys_trigger (state=0 and next_action overdue).
|
|
40
|
+
* @private
|
|
41
|
+
*/
|
|
42
|
+
private _getStuckJobs;
|
|
43
|
+
/**
|
|
44
|
+
* Get count of active semaphores from sys_semaphore.
|
|
45
|
+
* @private
|
|
46
|
+
*/
|
|
47
|
+
private _getActiveSemaphores;
|
|
48
|
+
/**
|
|
49
|
+
* Get operational counts using AggregateQuery.
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
private _getOperationalCounts;
|
|
53
|
+
/**
|
|
54
|
+
* Build a human-readable summary string from the health check results.
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
private _buildSummary;
|
|
58
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { Logger } from "../../util/Logger.js";
|
|
2
|
+
import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
|
|
3
|
+
import { AggregateQuery } from "../aggregate/AggregateQuery.js";
|
|
4
|
+
/**
|
|
5
|
+
* InstanceHealth provides a consolidated health check for a ServiceNow instance.
|
|
6
|
+
* Checks version info, cluster status, stuck jobs, semaphores, and operational counts.
|
|
7
|
+
* Each sub-check is isolated — a failure in one does not affect others.
|
|
8
|
+
*/
|
|
9
|
+
export class InstanceHealth {
|
|
10
|
+
static SYS_PROPERTIES_TABLE = 'sys_properties';
|
|
11
|
+
static SYS_CLUSTER_STATE_TABLE = 'sys_cluster_state';
|
|
12
|
+
static SYS_TRIGGER_TABLE = 'sys_trigger';
|
|
13
|
+
static SYS_SEMAPHORE_TABLE = 'sys_semaphore';
|
|
14
|
+
_logger = new Logger("InstanceHealth");
|
|
15
|
+
_tableAPI;
|
|
16
|
+
_aggregateQuery;
|
|
17
|
+
_instance;
|
|
18
|
+
constructor(instance, aggregateQuery) {
|
|
19
|
+
this._instance = instance;
|
|
20
|
+
this._tableAPI = new TableAPIRequest(instance);
|
|
21
|
+
this._aggregateQuery = aggregateQuery || new AggregateQuery(instance);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Run a consolidated health check on the instance.
|
|
25
|
+
* Each sub-check is wrapped in try/catch — failures return null for that check
|
|
26
|
+
* without affecting the overall result.
|
|
27
|
+
*
|
|
28
|
+
* @param options Options to control which checks are run
|
|
29
|
+
* @returns HealthCheckResult with all collected information and a summary
|
|
30
|
+
*/
|
|
31
|
+
async checkHealth(options = {}) {
|
|
32
|
+
const includeVersion = options.includeVersion !== false;
|
|
33
|
+
const includeCluster = options.includeCluster !== false;
|
|
34
|
+
const includeStuckJobs = options.includeStuckJobs !== false;
|
|
35
|
+
const includeSemaphores = options.includeSemaphores !== false;
|
|
36
|
+
const includeOperationalCounts = options.includeOperationalCounts !== false;
|
|
37
|
+
const stuckJobThreshold = options.stuckJobThresholdMinutes ?? 30;
|
|
38
|
+
this._logger.info('Running instance health check');
|
|
39
|
+
const version = includeVersion ? await this._getVersionInfo() : null;
|
|
40
|
+
const clusterNodes = includeCluster ? await this._getClusterStatus() : null;
|
|
41
|
+
const stuckJobs = includeStuckJobs ? await this._getStuckJobs(stuckJobThreshold) : null;
|
|
42
|
+
const activeSemaphoreCount = includeSemaphores ? await this._getActiveSemaphores() : null;
|
|
43
|
+
const operationalCounts = includeOperationalCounts ? await this._getOperationalCounts() : null;
|
|
44
|
+
const summary = this._buildSummary(version, clusterNodes, stuckJobs, activeSemaphoreCount, operationalCounts);
|
|
45
|
+
this._logger.info(`Health check complete: ${summary}`);
|
|
46
|
+
return {
|
|
47
|
+
timestamp: new Date().toISOString(),
|
|
48
|
+
version,
|
|
49
|
+
clusterNodes,
|
|
50
|
+
stuckJobs,
|
|
51
|
+
activeSemaphoreCount,
|
|
52
|
+
operationalCounts,
|
|
53
|
+
summary
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get instance version information from sys_properties.
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
async _getVersionInfo() {
|
|
61
|
+
try {
|
|
62
|
+
const query = {
|
|
63
|
+
sysparm_query: 'nameINglide.war,glide.build.date,glide.build.tag',
|
|
64
|
+
sysparm_limit: 10
|
|
65
|
+
};
|
|
66
|
+
const response = await this._tableAPI.get(InstanceHealth.SYS_PROPERTIES_TABLE, query);
|
|
67
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
68
|
+
const props = response.bodyObject.result;
|
|
69
|
+
const versionInfo = {};
|
|
70
|
+
for (const prop of props) {
|
|
71
|
+
switch (prop.name) {
|
|
72
|
+
case 'glide.war':
|
|
73
|
+
versionInfo.version = prop.value || null;
|
|
74
|
+
break;
|
|
75
|
+
case 'glide.build.date':
|
|
76
|
+
versionInfo.buildDate = prop.value || null;
|
|
77
|
+
break;
|
|
78
|
+
case 'glide.build.tag':
|
|
79
|
+
versionInfo.buildTag = prop.value || null;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return versionInfo;
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
this._logger.error(`Failed to get version info: ${err}`);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get cluster node status from sys_cluster_state.
|
|
94
|
+
* @private
|
|
95
|
+
*/
|
|
96
|
+
async _getClusterStatus() {
|
|
97
|
+
try {
|
|
98
|
+
const query = {
|
|
99
|
+
sysparm_limit: 100
|
|
100
|
+
};
|
|
101
|
+
const response = await this._tableAPI.get(InstanceHealth.SYS_CLUSTER_STATE_TABLE, query);
|
|
102
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
103
|
+
return response.bodyObject.result;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
this._logger.error(`Failed to get cluster status: ${err}`);
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get stuck jobs from sys_trigger (state=0 and next_action overdue).
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
async _getStuckJobs(thresholdMinutes) {
|
|
117
|
+
try {
|
|
118
|
+
const query = {
|
|
119
|
+
sysparm_query: `state=0^next_action<javascript:gs.minutesAgoStart(${thresholdMinutes})`,
|
|
120
|
+
sysparm_limit: 100
|
|
121
|
+
};
|
|
122
|
+
const response = await this._tableAPI.get(InstanceHealth.SYS_TRIGGER_TABLE, query);
|
|
123
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
124
|
+
return response.bodyObject.result;
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
this._logger.error(`Failed to get stuck jobs: ${err}`);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get count of active semaphores from sys_semaphore.
|
|
135
|
+
* @private
|
|
136
|
+
*/
|
|
137
|
+
async _getActiveSemaphores() {
|
|
138
|
+
try {
|
|
139
|
+
const query = {
|
|
140
|
+
sysparm_limit: 1000
|
|
141
|
+
};
|
|
142
|
+
const response = await this._tableAPI.get(InstanceHealth.SYS_SEMAPHORE_TABLE, query);
|
|
143
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
144
|
+
return response.bodyObject.result.length;
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
this._logger.error(`Failed to get active semaphores: ${err}`);
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get operational counts using AggregateQuery.
|
|
155
|
+
* @private
|
|
156
|
+
*/
|
|
157
|
+
async _getOperationalCounts() {
|
|
158
|
+
try {
|
|
159
|
+
const counts = {};
|
|
160
|
+
try {
|
|
161
|
+
counts.openIncidents = await this._aggregateQuery.count({ table: 'incident', query: 'active=true' });
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
counts.openIncidents = null;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
counts.openChanges = await this._aggregateQuery.count({ table: 'change_request', query: 'active=true' });
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
counts.openChanges = null;
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
counts.openProblems = await this._aggregateQuery.count({ table: 'problem', query: 'active=true' });
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
counts.openProblems = null;
|
|
177
|
+
}
|
|
178
|
+
return counts;
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
this._logger.error(`Failed to get operational counts: ${err}`);
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Build a human-readable summary string from the health check results.
|
|
187
|
+
* @private
|
|
188
|
+
*/
|
|
189
|
+
_buildSummary(version, clusterNodes, stuckJobs, activeSemaphoreCount, operationalCounts) {
|
|
190
|
+
const parts = [];
|
|
191
|
+
if (version) {
|
|
192
|
+
parts.push(`Version: ${version.version || 'unknown'}${version.buildTag ? ` (${version.buildTag})` : ''}`);
|
|
193
|
+
}
|
|
194
|
+
if (clusterNodes !== null) {
|
|
195
|
+
parts.push(`Cluster: ${clusterNodes.length} node(s)`);
|
|
196
|
+
}
|
|
197
|
+
if (stuckJobs !== null) {
|
|
198
|
+
parts.push(`Stuck jobs: ${stuckJobs.length}`);
|
|
199
|
+
}
|
|
200
|
+
if (activeSemaphoreCount !== null) {
|
|
201
|
+
parts.push(`Active semaphores: ${activeSemaphoreCount}`);
|
|
202
|
+
}
|
|
203
|
+
if (operationalCounts) {
|
|
204
|
+
const countParts = [];
|
|
205
|
+
if (operationalCounts.openIncidents !== null && operationalCounts.openIncidents !== undefined) {
|
|
206
|
+
countParts.push(`${operationalCounts.openIncidents} incidents`);
|
|
207
|
+
}
|
|
208
|
+
if (operationalCounts.openChanges !== null && operationalCounts.openChanges !== undefined) {
|
|
209
|
+
countParts.push(`${operationalCounts.openChanges} changes`);
|
|
210
|
+
}
|
|
211
|
+
if (operationalCounts.openProblems !== null && operationalCounts.openProblems !== undefined) {
|
|
212
|
+
countParts.push(`${operationalCounts.openProblems} problems`);
|
|
213
|
+
}
|
|
214
|
+
if (countParts.length > 0) {
|
|
215
|
+
parts.push(`Open: ${countParts.join(', ')}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return parts.length > 0 ? parts.join(' | ') : 'Health check completed (no data collected)';
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=InstanceHealth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceHealth.js","sourceRoot":"","sources":["../../../src/sn/health/InstanceHealth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ServiceNowInstance } from "../ServiceNowInstance.js";
|
|
2
|
+
import { TableSchemaOptions, TableSchema, FieldExplanation, CatalogValidationResult } from './SchemaModels.js';
|
|
3
|
+
/**
|
|
4
|
+
* SchemaDiscovery provides operations for discovering ServiceNow table schemas,
|
|
5
|
+
* explaining fields, and validating catalog configurations.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SchemaDiscovery {
|
|
8
|
+
private static readonly SYS_DB_OBJECT_TABLE;
|
|
9
|
+
private static readonly SYS_DICTIONARY_TABLE;
|
|
10
|
+
private static readonly SYS_CHOICE_TABLE;
|
|
11
|
+
private static readonly ITEM_OPTION_NEW_TABLE;
|
|
12
|
+
private static readonly CATALOG_UI_POLICY_TABLE;
|
|
13
|
+
private _logger;
|
|
14
|
+
private _req;
|
|
15
|
+
private _tableAPI;
|
|
16
|
+
private _instance;
|
|
17
|
+
constructor(instance: ServiceNowInstance);
|
|
18
|
+
/**
|
|
19
|
+
* Discover the schema for a ServiceNow table.
|
|
20
|
+
* Queries sys_db_object for table info and sys_dictionary for field definitions.
|
|
21
|
+
* Optionally includes choice tables, relationships, UI policies, and business rules.
|
|
22
|
+
*
|
|
23
|
+
* @param tableName The name of the table to discover
|
|
24
|
+
* @param options Optional flags to include additional information
|
|
25
|
+
* @returns TableSchema with all discovered information
|
|
26
|
+
* @throws Error if tableName is empty or the table is not found
|
|
27
|
+
*/
|
|
28
|
+
discoverTableSchema(tableName: string, options?: TableSchemaOptions): Promise<TableSchema>;
|
|
29
|
+
/**
|
|
30
|
+
* Explain a specific field on a table.
|
|
31
|
+
* Queries sys_dictionary for the field definition and sys_choice for available choices.
|
|
32
|
+
*
|
|
33
|
+
* @param tableName The table containing the field
|
|
34
|
+
* @param fieldName The field name to explain
|
|
35
|
+
* @returns Detailed FieldExplanation
|
|
36
|
+
* @throws Error if tableName or fieldName is empty, or the field is not found
|
|
37
|
+
*/
|
|
38
|
+
explainField(tableName: string, fieldName: string): Promise<FieldExplanation>;
|
|
39
|
+
/**
|
|
40
|
+
* Validate a catalog item configuration.
|
|
41
|
+
* Checks variables (item_option_new) and UI policies (catalog_ui_policy) for integrity issues.
|
|
42
|
+
*
|
|
43
|
+
* @param catalogItemSysId The sys_id of the catalog item to validate
|
|
44
|
+
* @returns Validation result with issues, warnings, and errors
|
|
45
|
+
* @throws Error if catalogItemSysId is empty
|
|
46
|
+
*/
|
|
47
|
+
validateCatalogConfiguration(catalogItemSysId: string): Promise<CatalogValidationResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Get choice values for all fields on a table.
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
private _getChoicesForTable;
|
|
53
|
+
/**
|
|
54
|
+
* Extract relationship information from field schemas (reference fields).
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
private _extractRelationships;
|
|
58
|
+
/**
|
|
59
|
+
* Get UI policies for a table.
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
private _getUIPoliciesForTable;
|
|
63
|
+
/**
|
|
64
|
+
* Get business rules for a table.
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
private _getBusinessRulesForTable;
|
|
68
|
+
}
|