Advertisement
Guest User

Untitled

a guest
Feb 28th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. JiraIncUtils = (function(){
  2.     var jiraDomain = gs.getProperty('x_116151_jira_inci.jira_service_desk'),
  3.         jiraUser = JSON.parse(gs.getProperty('x_116151_jira_inci.jira_sd_integration_user')),
  4.         jiraUsername = jiraUser.name,
  5.         jiraUserPassword = jiraUser.password,
  6.         jiraRelativeUpdatePath = gs.getProperty('x_116151_jira_inci.jira_update_endpoint'),
  7.         jiraRelativeCreatePath = gs.getProperty('x_116151_jira_inci.jira_create_endpoint'),
  8.         jiraUpdatePath = jiraDomain + jiraRelativeUpdatePath,
  9.         jiraCreatePath = jiraDomain + jiraRelativeCreatePath,
  10.         incomingRequestTable = 'x_116151_jira_inci_jira_requests',
  11.         outgoingRequestTable = 'x_116151_jira_inci_outgoing_jira_rest_messages',
  12.         transformJSONsTable = 'x_116151_jira_inci_jira_integration_transform_jsons',
  13.         incidentTable = 'incident',
  14.         incomingRequestStates = {
  15.             NOT_YET_PROCESSED: '0',
  16.             SUCCESS: '1',
  17.             ERROR: '2'
  18.         },
  19.         outgoingRequestMethods = {
  20.             CREATE: 0,
  21.             UPDATE: 1
  22.         };
  23.    
  24.     var currentIncomingTransformMap = (function() {
  25.         var transformRec = new GlideRecord(transformJSONsTable);
  26.         transformRec.get('is_current_incoming', true);
  27.        
  28.         return JSON.parse(transformRec.transform_json.toString());
  29.     })();
  30.    
  31.     var currentOutgoingTransformMap = (function() {
  32.         var transformRec = new GlideRecord(transformJSONsTable);
  33.         transformRec.get('is_current_outgoing', true);
  34.        
  35.         return JSON.parse(transformRec.transform_json.toString());
  36.     })();
  37.    
  38.     var getNumFromQuery = function(request) {
  39.         return request.queryParams.number[0];
  40.     };
  41.    
  42.     var transform = function(transformMap, sourceRec, targetRec) {
  43.         for(var param in transformMap) {
  44.             targetRec[transformMap[param]] = sourceRec[param] ? sourceRec[param] : targetRec[transformMap[param]];
  45.         }
  46.     };
  47.    
  48.     var brUniqueIncomingMap = function(transformRec) {
  49.         var transformRecords = new GlideRecord(transformJSONsTable);
  50.         transformRecords.addQuery('is_current_incoming', true);
  51.         transformRecords.addQuery('sys_id', '!=', transformRec.sys_id);
  52.         transformRecords.query();
  53.        
  54.         while(transformRecords.next()) {
  55.             transformRecords.is_current_incoming = false;
  56.             transformRecords.update();
  57.         }
  58.     };
  59.    
  60.     var brUniqueOutgoingMap = function(transformRec) {
  61.         var transformRecords = new GlideRecord(transformJSONsTable);
  62.         transformRecords.addQuery('is_current_outgoing', true);
  63.         transformRecords.addQuery('sys_id', '!=', transformRec.sys_id);
  64.         transformRecords.query();
  65.        
  66.         while(transformRecords.next()) {
  67.             transformRecords.is_current_outgoing = false;
  68.             transformRecords.update();
  69.         }
  70.     };
  71.    
  72.     var processRESTRequest = function(request) {
  73.         try {
  74.             var requestRec = new GlideRecord(incomingRequestTable);
  75.             requestRec.initialize();
  76.    
  77.             requestRec.request_body = JSON.stringify(request.body.data);
  78.             requestRec.incident_number = getNumFromQuery(request); //query param properties come as arrays
  79.        
  80.             requestRec.insert();
  81.         }
  82.         catch(err) {
  83.             var requestRec = new GlideRecord(incomingRequestTable);
  84.             requestRec.initialize();
  85.    
  86.             requestRec.message = err;
  87.             requestRec.incident_number = getNumFromQuery(request); //query param properties come as arrays
  88.             requestRec.state = incomingRequestStates.ERROR;
  89.        
  90.             requestRec.insert();
  91.         }  
  92.     };
  93.    
  94.     var brUpdateIncidentIncoming = function(incomingRec) {
  95.         try {
  96.             var incidentRec = new GlideRecord(incidentTable);
  97.             if(incidentRec.get('number', incomingRec.incident_number)) {
  98.                 var request = JSON.parse(incomingRec.request_body);
  99.                
  100.                 transform(currentIncomingTransformMap, request, incidentRec);
  101.                 incidentRec.update();
  102.                
  103.                 incomingRec.state = incomingRequestStates.SUCCESS;
  104.                 incomingRec.message = 'Successfully updated ' + incomingRec.incident_number;
  105.             }
  106.             else {
  107.                 incomingRec.state = incomingRequestStates.ERROR;
  108.                 incomingRec.message = incomingRec.incident_number + ' does not exist';
  109.             }
  110.             incomingRec.update();
  111.         }
  112.         catch(err) {
  113.             incomingRec.state = incomingRequestStates.ERROR;
  114.             incomingRec.message = err;
  115.             incomingRec.update();
  116.         }
  117.     };
  118.    
  119.     var sendJiraRESTMsg = function(incidentRec, method) {
  120.         try {
  121.             var outgoingRec = new GlideRecord(outgoingRequestTable);
  122.             outgoingRec.initialize();
  123.        
  124.             var endPoint = method == outgoingRequestMethods.CREATE ? jiraCreatePath : jiraUpdatePath + incidentRec.number;
  125.        
  126.             var request = new sn_ws.RESTMessageV2();
  127.             request.setEndpoint(endPoint);
  128.             request.setHttpMethod('POST');
  129.  
  130.             request.setBasicAuth(jiraUsername, jiraUserPassword);
  131.             request.setRequestHeader("Accept","application/json");
  132.             request.setRequestHeader('Content-Type','application/json');
  133.        
  134.             outgoingRec.request_body = request.getRequestBody();
  135.             var response = request.execute();
  136.        
  137.        
  138.             outgoingRec.response_body = response.getBody();
  139.             outgoingRec.http_status_code = response.getStatusCode();
  140.             outgoingRec.message = response.haveError() ? response.getErrorMessage() : 'Successfully updated ' + incidentRec.number + ' in Jira SD. See the response body for additional information';
  141.             outgoingRec.incident_number = incidentRec.number;
  142.             outgoingRec.method = method;
  143.             outgoingRec.insert();
  144.         }
  145.         catch(err) {
  146.             var outgoingRec = new GlideRecord(outgoingRequestTable);
  147.             outgoingRec.initialize();
  148.            
  149.             outgoingRec.message = err;
  150.             outgoingRec.incident_number = incidentRec.number;
  151.             outgoingRec.insert();
  152.         }
  153.     };
  154.    
  155.     var brSendJiraIncUpdate = function(incidentRec) {
  156.         sendJiraRESTMsg(incidentRec, outgoingRequestMethods.UPDATE);
  157.     };
  158.    
  159.     var brSendJiraIncCreate = function(incidentRec) {
  160.         sendJiraRESTMsg(incidentRec, outgoingRequestMethods.CREATE);
  161.     };
  162.    
  163.     return {
  164.         processRESTRequest: processRESTRequest,
  165.         brUpdateIncidentIncoming: brUpdateIncidentIncoming,
  166.         brSendJiraIncUpdate: brSendJiraIncUpdate,
  167.         brSendJiraIncCreate: brSendJiraIncCreate,
  168.         brUniqueIncomingMap: brUniqueIncomingMap,
  169.         brUniqueOutgoingMap: brUniqueOutgoingMap
  170.     };
  171. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement