@sonisoft/now-sdk-ext-core 2.4.0 → 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/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/index.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/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/scope/ScopeManager.d.ts +7 -7
- package/dist/sn/scope/ScopeManager.js +19 -14
- package/dist/sn/scope/ScopeManager.js.map +1 -1
- package/dist/sn/scope/ScopeModels.d.ts +9 -3
- package/dist/sn/updateset/UpdateSetManager.d.ts +3 -3
- package/dist/sn/updateset/UpdateSetManager.js +12 -7
- package/dist/sn/updateset/UpdateSetManager.js.map +1 -1
- package/dist/sn/updateset/UpdateSetModels.d.ts +11 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceDiscovery.js","sourceRoot":"","sources":["../../../src/sn/discovery/InstanceDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
|
@@ -7,8 +7,8 @@ import { ApplicationRecord, SetCurrentApplicationResult, ListApplicationsOptions
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class ScopeManager {
|
|
9
9
|
private static readonly UI_APP_PATH;
|
|
10
|
-
private static readonly
|
|
11
|
-
private static readonly
|
|
10
|
+
private static readonly UI_CONCOURSEPICKER_CURRENT_PATH;
|
|
11
|
+
private static readonly SYS_SCOPE_TABLE;
|
|
12
12
|
private _logger;
|
|
13
13
|
private _req;
|
|
14
14
|
private _tableAPI;
|
|
@@ -25,15 +25,15 @@ export declare class ScopeManager {
|
|
|
25
25
|
*/
|
|
26
26
|
setCurrentApplication(appSysId: string): Promise<SetCurrentApplicationResult>;
|
|
27
27
|
/**
|
|
28
|
-
* Get the current application
|
|
29
|
-
* Uses GET /api/now/ui/
|
|
28
|
+
* Get the current application scope.
|
|
29
|
+
* Uses GET /api/now/ui/concoursepicker/current
|
|
30
30
|
*
|
|
31
31
|
* @returns The current ApplicationRecord or null
|
|
32
32
|
*/
|
|
33
33
|
getCurrentApplication(): Promise<ApplicationRecord | null>;
|
|
34
34
|
/**
|
|
35
|
-
* List applications from the
|
|
36
|
-
* Uses Table API GET on
|
|
35
|
+
* List applications from the sys_scope table.
|
|
36
|
+
* Uses Table API GET on sys_scope.
|
|
37
37
|
*
|
|
38
38
|
* @param options Optional query and limit options
|
|
39
39
|
* @returns Array of ApplicationRecord
|
|
@@ -41,7 +41,7 @@ export declare class ScopeManager {
|
|
|
41
41
|
listApplications(options?: ListApplicationsOptions): Promise<ApplicationRecord[]>;
|
|
42
42
|
/**
|
|
43
43
|
* Get a specific application by sys_id.
|
|
44
|
-
* Uses Table API GET on
|
|
44
|
+
* Uses Table API GET on sys_scope with sys_id filter.
|
|
45
45
|
*
|
|
46
46
|
* @param sysId The sys_id of the application to retrieve
|
|
47
47
|
* @returns The ApplicationRecord or null if not found
|
|
@@ -8,8 +8,8 @@ import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export class ScopeManager {
|
|
10
10
|
static UI_APP_PATH = '/api/now/ui/concoursepicker/application';
|
|
11
|
-
static
|
|
12
|
-
static
|
|
11
|
+
static UI_CONCOURSEPICKER_CURRENT_PATH = '/api/now/ui/concoursepicker/current';
|
|
12
|
+
static SYS_SCOPE_TABLE = 'sys_scope';
|
|
13
13
|
_logger = new Logger("ScopeManager");
|
|
14
14
|
_req;
|
|
15
15
|
_tableAPI;
|
|
@@ -44,7 +44,7 @@ export class ScopeManager {
|
|
|
44
44
|
sysparm_query: `sys_id=${appSysId}`,
|
|
45
45
|
sysparm_limit: 1
|
|
46
46
|
};
|
|
47
|
-
const appResp = await this._tableAPI.get(ScopeManager.
|
|
47
|
+
const appResp = await this._tableAPI.get(ScopeManager.SYS_SCOPE_TABLE, appQuery);
|
|
48
48
|
if (!appResp || appResp.status !== 200 || !appResp.bodyObject?.result || appResp.bodyObject.result.length === 0) {
|
|
49
49
|
throw new Error(`Application '${appSysId}' not found`);
|
|
50
50
|
}
|
|
@@ -102,8 +102,8 @@ export class ScopeManager {
|
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
/**
|
|
105
|
-
* Get the current application
|
|
106
|
-
* Uses GET /api/now/ui/
|
|
105
|
+
* Get the current application scope.
|
|
106
|
+
* Uses GET /api/now/ui/concoursepicker/current
|
|
107
107
|
*
|
|
108
108
|
* @returns The current ApplicationRecord or null
|
|
109
109
|
*/
|
|
@@ -111,21 +111,26 @@ export class ScopeManager {
|
|
|
111
111
|
this._logger.info('Getting current application');
|
|
112
112
|
const request = {
|
|
113
113
|
method: 'GET',
|
|
114
|
-
path: ScopeManager.
|
|
114
|
+
path: ScopeManager.UI_CONCOURSEPICKER_CURRENT_PATH,
|
|
115
115
|
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
|
|
116
116
|
query: null,
|
|
117
117
|
body: null
|
|
118
118
|
};
|
|
119
119
|
const resp = await this._req.get(request);
|
|
120
|
-
if (resp.status === 200 && resp.bodyObject?.result) {
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
if (resp.status === 200 && resp.bodyObject?.result?.currentApplication) {
|
|
121
|
+
const current = resp.bodyObject.result.currentApplication;
|
|
122
|
+
this._logger.info(`Current application: ${current.name}`);
|
|
123
|
+
return {
|
|
124
|
+
sys_id: current.sysId,
|
|
125
|
+
name: current.name,
|
|
126
|
+
scope: current.scopeName
|
|
127
|
+
};
|
|
123
128
|
}
|
|
124
129
|
throw new Error(`Failed to get current application. Status: ${resp.status}`);
|
|
125
130
|
}
|
|
126
131
|
/**
|
|
127
|
-
* List applications from the
|
|
128
|
-
* Uses Table API GET on
|
|
132
|
+
* List applications from the sys_scope table.
|
|
133
|
+
* Uses Table API GET on sys_scope.
|
|
129
134
|
*
|
|
130
135
|
* @param options Optional query and limit options
|
|
131
136
|
* @returns Array of ApplicationRecord
|
|
@@ -139,7 +144,7 @@ export class ScopeManager {
|
|
|
139
144
|
if (encodedQuery) {
|
|
140
145
|
query.sysparm_query = encodedQuery;
|
|
141
146
|
}
|
|
142
|
-
const response = await this._tableAPI.get(ScopeManager.
|
|
147
|
+
const response = await this._tableAPI.get(ScopeManager.SYS_SCOPE_TABLE, query);
|
|
143
148
|
if (response.status === 200 && response.bodyObject?.result) {
|
|
144
149
|
this._logger.info(`Retrieved ${response.bodyObject.result.length} applications`);
|
|
145
150
|
return response.bodyObject.result;
|
|
@@ -148,7 +153,7 @@ export class ScopeManager {
|
|
|
148
153
|
}
|
|
149
154
|
/**
|
|
150
155
|
* Get a specific application by sys_id.
|
|
151
|
-
* Uses Table API GET on
|
|
156
|
+
* Uses Table API GET on sys_scope with sys_id filter.
|
|
152
157
|
*
|
|
153
158
|
* @param sysId The sys_id of the application to retrieve
|
|
154
159
|
* @returns The ApplicationRecord or null if not found
|
|
@@ -163,7 +168,7 @@ export class ScopeManager {
|
|
|
163
168
|
sysparm_query: `sys_id=${sysId}`,
|
|
164
169
|
sysparm_limit: 1
|
|
165
170
|
};
|
|
166
|
-
const response = await this._tableAPI.get(ScopeManager.
|
|
171
|
+
const response = await this._tableAPI.get(ScopeManager.SYS_SCOPE_TABLE, query);
|
|
167
172
|
if (response.status === 200 && response.bodyObject?.result) {
|
|
168
173
|
if (response.bodyObject.result.length > 0) {
|
|
169
174
|
this._logger.info(`Found application: ${response.bodyObject.result[0].name}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScopeManager.js","sourceRoot":"","sources":["../../../src/sn/scope/ScopeManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAYlE;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACb,MAAM,CAAU,WAAW,GAAG,yCAAyC,CAAC;IACxE,MAAM,CAAU,
|
|
1
|
+
{"version":3,"file":"ScopeManager.js","sourceRoot":"","sources":["../../../src/sn/scope/ScopeManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A record from the
|
|
2
|
+
* A record from the sys_scope table.
|
|
3
3
|
*/
|
|
4
4
|
export interface ApplicationRecord {
|
|
5
5
|
/** System ID */
|
|
@@ -59,8 +59,14 @@ export interface ApplicationSingleResponse {
|
|
|
59
59
|
result: ApplicationRecord;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Response from
|
|
62
|
+
* Response from GET /api/now/ui/concoursepicker/current for the current application.
|
|
63
63
|
*/
|
|
64
64
|
export interface CurrentApplicationResponse {
|
|
65
|
-
result:
|
|
65
|
+
result: {
|
|
66
|
+
currentApplication: {
|
|
67
|
+
name: string;
|
|
68
|
+
scopeName: string;
|
|
69
|
+
sysId: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
66
72
|
}
|
|
@@ -7,7 +7,7 @@ import { SetUpdateSetOptions, ListUpdateSetsOptions, CreateUpdateSetOptions, Mov
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class UpdateSetManager {
|
|
9
9
|
private static readonly UI_UPDATESET_PATH;
|
|
10
|
-
private static readonly
|
|
10
|
+
private static readonly UI_CONCOURSEPICKER_CURRENT_PATH;
|
|
11
11
|
private static readonly UPDATE_SET_TABLE;
|
|
12
12
|
private static readonly UPDATE_XML_TABLE;
|
|
13
13
|
private _logger;
|
|
@@ -24,8 +24,8 @@ export declare class UpdateSetManager {
|
|
|
24
24
|
*/
|
|
25
25
|
setCurrentUpdateSet(options: SetUpdateSetOptions): Promise<void>;
|
|
26
26
|
/**
|
|
27
|
-
* Get the current update set
|
|
28
|
-
* Uses GET /api/now/ui/
|
|
27
|
+
* Get the current update set.
|
|
28
|
+
* Uses GET /api/now/ui/concoursepicker/current
|
|
29
29
|
*
|
|
30
30
|
* @returns The current update set record or null if not set
|
|
31
31
|
*/
|