Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2018
199
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.         maximumOutgoingRetryCount = gs.getProperty('x_116151_jira_inci.outgoing_rest_retry_count_limit'),
  15.         incomingRequestStates = {
  16.             NOT_YET_PROCESSED: '0',
  17.             SUCCESS: '1',
  18.             ERROR: '2'
  19.         },
  20.         outgoingRequestMethods = {
  21.             CREATE: '0',
  22.             UPDATE: '1'
  23.         };
  24.    
  25.     var currentIncomingTransformMap = (function() {
  26.         var transformRec = new GlideRecord(transformJSONsTable);
  27.         transformRec.get('is_current_incoming', true);
  28.        
  29.         return {
  30.             sys_id: transformRec.sys_id.toString(),
  31.             map: JSON.parse(transformRec.transform_json.toString())
  32.         };
  33.     })();
  34.    
  35.     var currentOutgoingTransformMap = (function() {
  36.         var transformRec = new GlideRecord(transformJSONsTable);
  37.         transformRec.get('is_current_outgoing', true);
  38.        
  39.         return {
  40.             sys_id: transformRec.sys_id.toString(),
  41.             map: JSON.parse(transformRec.transform_json.toString())
  42.         };
  43.     })();
  44.    
  45.     var getNumFromQuery = function(request) {
  46.         return request.queryParams.number[0];
  47.     };
  48.    
  49.     var transform = function(transformMap, sourceRec, targetRec) {
  50.         for(var param in transformMap) {
  51.             if(sourceRec[param] == undefined) {
  52.                 continue;
  53.             }
  54.            
  55.             targetRec[transformMap[param]] = sourceRec[param].toString();
  56.         }
  57.     };
  58.    
  59.     var brUniqueIncomingMap = function(transformRec) {
  60.         var transformRecords = new GlideRecord(transformJSONsTable);
  61.         transformRecords.addQuery('is_current_incoming', true);
  62.         transformRecords.addQuery('sys_id', '!=', transformRec.sys_id);
  63.         transformRecords.query();
  64.        
  65.         while(transformRecords.next()) {
  66.             transformRecords.is_current_incoming = false;
  67.             transformRecords.update();
  68.         }
  69.     };
  70.    
  71.     var brUniqueOutgoingMap = function(transformRec) {
  72.         var transformRecords = new GlideRecord(transformJSONsTable);
  73.         transformRecords.addQuery('is_current_outgoing', true);
  74.         transformRecords.addQuery('sys_id', '!=', transformRec.sys_id);
  75.         transformRecords.query();
  76.        
  77.         while(transformRecords.next()) {
  78.             transformRecords.is_current_outgoing = false;
  79.             transformRecords.update();
  80.         }
  81.     };
  82.    
  83.     var processRESTRequest = function(request) {
  84.         try {
  85.             var requestRec = new GlideRecord(incomingRequestTable);
  86.             requestRec.initialize();
  87.    
  88.             requestRec.request_body = JSON.stringify(request.body.data);
  89.             requestRec.incident_number = getNumFromQuery(request); //query param properties come as arrays
  90.        
  91.             requestRec.insert();
  92.         }
  93.         catch(err) {
  94.             var requestRec = new GlideRecord(incomingRequestTable);
  95.             requestRec.initialize();
  96.    
  97.             requestRec.message = err;
  98.             requestRec.incident_number = getNumFromQuery(request); //query param properties come as arrays
  99.             requestRec.state = incomingRequestStates.ERROR;
  100.        
  101.             requestRec.insert();
  102.         }  
  103.     };
  104.    
  105.     var brUpdateIncidentIncoming = function(incomingRec) {
  106.         try {
  107.             var incidentRec = new GlideRecord(incidentTable);
  108.             if(incidentRec.get('number', incomingRec.incident_number)) {
  109.                 var request = JSON.parse(incomingRec.request_body);
  110.                
  111.                 transform(currentIncomingTransformMap.map, request, incidentRec);
  112.                 incidentRec.update();
  113.                
  114.                 incomingRec.transform_json = currentIncomingTransformMap.sys_id;
  115.                 incomingRec.state = incomingRequestStates.SUCCESS;
  116.                 incomingRec.message = 'Successfully updated ' + incomingRec.incident_number;
  117.             }
  118.             else {
  119.                 incomingRec.state = incomingRequestStates.ERROR;
  120.                 incomingRec.message = incomingRec.incident_number + ' does not exist';
  121.             }
  122.             incomingRec.update();
  123.         }
  124.         catch(err) {
  125.             incomingRec.state = incomingRequestStates.ERROR;
  126.             incomingRec.message = err;
  127.             incomingRec.update();
  128.         }
  129.     };
  130.    
  131.     var sendJiraRESTMsg = function(incidentRec, method) {
  132.         try {
  133.             var outgoingRec = new GlideRecord(outgoingRequestTable);
  134.             outgoingRec.initialize();
  135.            
  136.             var updatePath = jiraUpdatePath.replace('{sys_id}', incidentRec.sys_id),
  137.                 endPoint = method == outgoingRequestMethods.CREATE ? jiraCreatePath : updatePath,
  138.                 reqBody = {},
  139.                 httpMethod = method == outgoingRequestMethods.CREATE ? 'POST' : 'PATCH';
  140.             transform(currentOutgoingTransformMap.map, incidentRec, reqBody);
  141.            
  142.             var request = new sn_ws.RESTMessageV2();
  143.             request.setEndpoint(endPoint);
  144.             request.setHttpMethod(httpMethod);
  145.             request.setBasicAuth(jiraUsername, jiraUserPassword);
  146.             request.setRequestHeader('Accept', 'application/json');
  147.             request.setRequestHeader('Content-Type','application/json');
  148.             request.setRequestBody(JSON.stringify(reqBody));
  149.            
  150.             var response = request.execute();
  151.            
  152.             outgoingRec.request_body = request.getRequestBody();
  153.             outgoingRec.transform_json = currentOutgoingTransformMap.sys_id;
  154.             outgoingRec.response_body = JSON.stringify(response.getBody());
  155.             outgoingRec.http_status_code = response.getStatusCode();
  156.             outgoingRec.incident_number = incidentRec.number;
  157.             outgoingRec.method = method;
  158.             outgoingRec.insert();
  159.         }
  160.         catch(err) {
  161.             var outgoingRec = new GlideRecord(outgoingRequestTable);
  162.             outgoingRec.initialize();
  163.            
  164.             outgoingRec.message = err;
  165.             outgoingRec.incident_number = incidentRec.number;
  166.             outgoingRec.insert();
  167.         }
  168.     };
  169.    
  170.     var brSendJiraIncUpdate = function(incidentRec) {
  171.         sendJiraRESTMsg(incidentRec, outgoingRequestMethods.UPDATE);
  172.     };
  173.    
  174.     var brSendJiraIncCreate = function(incidentRec) {
  175.         sendJiraRESTMsg(incidentRec, outgoingRequestMethods.CREATE);
  176.     };
  177.    
  178.     return {
  179.         processRESTRequest: processRESTRequest,
  180.         brUpdateIncidentIncoming: brUpdateIncidentIncoming,
  181.         brSendJiraIncUpdate: brSendJiraIncUpdate,
  182.         brSendJiraIncCreate: brSendJiraIncCreate,
  183.         brUniqueIncomingMap: brUniqueIncomingMap,
  184.         brUniqueOutgoingMap: brUniqueOutgoingMap
  185.     };
  186. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement