Name
sn_grc.ItemGenerationV2ActionQueueProcessor
Description
No description available
Script
var ItemGenerationV2ActionQueueProcessor = Class.create();
ItemGenerationV2ActionQueueProcessor.prototype = {
type: 'ItemGenerationV2ActionQueueProcessor'
};
var DEFAULT_MAX_RECORDS = 5000;
ItemGenerationV2ActionQueueProcessor.insertAction = function(actionParms) {
if (!actionParms || !actionParms.action || !actionParms.source || !actionParms.table) {
return;
}
if (actionParms.groupId) {
this.generateBulkActionRecords(actionParms);
} else {
return this.generateActionRecord(actionParms);
}
},
ItemGenerationV2ActionQueueProcessor.generateActionRecord = function(actionParms, batchProcessingIds) {
var action = new GlideRecord('sn_grc_item_generation_action_event_queue');
action.setValue('action', actionParms.action);
action.setValue('state', 'ready');
action.setValue('source', actionParms.source);
action.setValue('table', actionParms.table);
if (actionParms.name) {
action.setValue('name', actionParms.name);
}
if (actionParms.contentId) {
action.setValue('content_id', actionParms.contentId);
}
if (actionParms.entityTypeId) {
action.setValue('entity_type_id', actionParms.entityTypeId);
}
if (actionParms.documentId) {
action.setValue('document_id', actionParms.documentId);
}
if (actionParms.processingActivityId) {
action.setValue('processing_activity_id', actionParms.processingActivityId);
}
if (actionParms.entityId) {
action.setValue('entity_id', actionParms.entityId);
}
if (actionParms.itemId) {
action.setValue('item_id', actionParms.itemId);
}
if (batchProcessingIds) {
action.setValue('batch_processing_ids', batchProcessingIds.toString());
action.setValue('group_id', actionParms.groupId);
}
return action.insert();
},
ItemGenerationV2ActionQueueProcessor.generateBulkActionRecords = function(actionParms) {
// Get Downstream Records
var downstreamRecords = new GlideRecord(actionParms.batchProcessingIdTable);
downstreamRecords.addEncodedQuery(actionParms.batchProcessingIdQuery);
downstreamRecords.query();
batchProcessingIds = [];
var maxRecords = gs.getProperty('sn_grc.item_generation_max_records', DEFAULT_MAX_RECORDS);
while (downstreamRecords.next()) {
for (i = 0; i < maxRecords && downstreamRecords.hasNext(); i++) {
if (!downstreamRecords.hasNext() || i + 1 == maxRecords) {
batchProcessingIds.push(downstreamRecords.getValue(actionParms.batchProcessingIdField));
} else {
batchProcessingIds.push(downstreamRecords.getValue(actionParms.batchProcessingIdField));
downstreamRecords.next();
}
}
if (i == maxRecords || !downstreamRecords.hasNext()) {
if (i != maxRecords) {
//Catches a single remaining record
batchProcessingIds.push(downstreamRecords.getValue(actionParms.batchProcessingIdField));
}
this.generateActionRecord(actionParms, batchProcessingIds);
batchProcessingIds = [];
i = 0;
}
}
return 'group_id=' + actionParms.groupId;
};
ItemGenerationV2ActionQueueProcessor.updateActionState = function(action, expectedState) {
action.setValue('state', expectedState);
action.update();
},
ItemGenerationV2ActionQueueProcessor.updateActionErrorTrace = function(action, err) {
action.setValue('error_trace', err);
action.update();
},
ItemGenerationV2ActionQueueProcessor.updateActionProcessedTime = function(action) {
action.setValue('processed', new GlideDateTime());
action.update();
},
ItemGenerationV2ActionQueueProcessor.updateActionProcessingDuration = function(action) {
var processedTime = new GlideDateTime(action.processed).getNumericValue();
var now = new GlideDateTime().getNumericValue();
action.setValue('processing_duration', now - processedTime);
action.update();
},
ItemGenerationV2ActionQueueProcessor.isActionProcessingInQueue = function() {
var action = new GlideAggregate('sn_grc_item_generation_action_event_queue');
action.addQuery('state', 'running');
action.addAggregate('COUNT');
action.query();
action.next();
return action.getAggregate('COUNT') > 0;
};
ItemGenerationV2ActionQueueProcessor.getOldestReadyActionFromQueue = function() {
// Check if previous processed action was part of a group. If so, search for next in the group and process
var action = '';
var checkAction = new GlideRecord('sn_grc_item_generation_action_event_queue');
checkAction.orderByDesc('processed');
checkAction.addQuery('state', 'processed');
checkAction.addNotNullQuery('group_id');
checkAction.setLimit(1);
checkAction.query();
if (checkAction.next()) {
action = new GlideRecord('sn_grc_item_generation_action_event_queue');
action.orderBy('sys_created_on');
action.addQuery('state', 'ready');
action.addQuery('group_id', checkAction.getValue('group_id'));
action.query();
if (action.next()) {
return action;
} else {
action = this.getNextActionFromQueue();
}
} else {
action = this.getNextActionFromQueue();
}
if (action) {
return action;
}
return null;
},
ItemGenerationV2ActionQueueProcessor.getNextActionFromQueue = function() {
action = new GlideRecord('sn_grc_item_generation_action_event_queue');
action.orderBy('sys_created_on');
action.addQuery('state', 'ready');
action.setLimit(1);
action.query();
if (action.next()) {
return action;
}
return null;
};
Sys ID
40970d6307922010bbc77f04a9d30070