sn.js 12.3 KB
var servicenow = require('servicenow');
var config=require('config');
var JiraApi = require('jira').JiraApi;
var jiraNexus=require('./jira.js');
module.exports={
	info:{
		summary:"tools per servicenow",
		state:"ok".red
		},
	execute:function(process,tool){
		var configSN = {
		    password: config.get('servicenowConfig.password'), 
		    sessionID: config.get('servicenowConfig.sessionID'),
		};
		var jira = new JiraApi(config.get('jira4servicenow.protocolJira'), config.get('jira4servicenow.urlJira'),config.get('jira4servicenow.portJira'), config.get('jira4servicenow.userJira'), config.get('jira4servicenow.passwordJira'), config.get('jira4servicenow.jiraApiVersion'),true);
		var client = new servicenow.Client(configSN);
		var sn=this;
		var env = "operations";
		var op = process.argv[3];
		var incId = process.argv[4];
		var assignee = process.argv[5];
		var prioritySn=["1"]
		if(env!=null && op!=null){
			//console.log("finding server "+name.red+" on "+env.red);
			var operations;
			if(env==="operations") operations = sn.list.operations;
				for(i in operations){
					if(operations[i].name===op){
							switch(op){
							case "assigns_us":
								sn.assignsUsAndWorkInProgress(incId,"2","TIZIANO LAMBIASE");
								break;	
							case "assign_to":
								sn.assignToAndWorkInProgress(incId,assignee);
								break;		
							case "createTask":
								sn.createTask(incId,assignee);
								break;	
							case "createIncTask":
								sn.createIncTask(0,incId);
								break;	
							case "getIncidentID":
								sn.getIncidentID(incId);
								break;
							case "getAllIncidentOpenNexus":
								sn.getAllIncidentOpenNexus();
								break;
							case "getAllIncidentOpenNexusJson":
								sn.getAllIncidentOpenNexusJson();
							case "findIssueJira":
									jiraNexus.findIssueJira(incId,function(error,response){				
											console.log("response "+JSON.stringify(response)+" error: "+JSON.stringify(error));
									});
									break;
							default:
								console.log("default case");
							}

							
					}
				}	
		}	

		if(op==null){
			console.log("\n--------------------"+"OPERAZIONI PER SERVICENOW".red+"----------------------------");
			tool.task(sn.list.operations);
		}
	},
	/**
		 * [createTask description]
		 * @param  {[type]} incId    [description]
		 * @param  {[type]} assignee [description]
		 * @return {[type]}          [description]
		 */
		createTask:function(incId,assignee){
				client.getKeys("incident","number="+incId+"",function(error,result) {
				var incId;
				if(!error) {
					console.log(result.records[0]);
					incId=result.records[0];
					var inp = {
						"assignment_group":config.get('servicenowConfig.assignment_group'),
						"assigned_to":assignee,
						"parent":incId
					}
					client.insert("u_incident_task",inp,function(error,result) {
						if(!error) {
							console.log("risultato inserimento: "+JSON.stringify(result));
						}else{
							console.log("errore inserimento "+error);
						}
					});
				}else{
					console.log("record non trovato");
					incId="";
				}
			});
		},

		/**
		 * [getIncidentID description]
		 * @param  {[type]} incId [description]
		 * @return {[type]}       [description]
		 */
		getIncidentID:function(incId){
			client.getKeys("task","number="+incId+"",function(error,result) {
				if(!error) {
					console.log(JSON.stringify(result.records[0]));
				}else{
					console.log("record non trovato");
				}
			});
		},
								

		/**
		 * [assignToAndWorkInProgress description]
		 * @param  {[type]} incId    [description]
		 * @param  {[type]} assignee [description]
		 * @return {[type]}          [description]
		 */
		assignToAndWorkInProgress:function(incId,assignee){
			var o = {
			"state": "2",
			"assigned_to":assignee
			}
			client.update("incident","number="+incId+"",o,function(error,result) {
				if(!error) { 		
					if(!error) {
						console.log(result);
					}else{
						console.log("ERRORE: Qualcosa non è andato a buon fine !!");
					}	
				}
			});
		},

		/**
		 * [assigns_us_and_workInProgress assegna un task e lo mette in lavorazione]
		 * @param  {[type]} incId [identificativo task es.INC0158435 oppure TASK0098678]
		 * @return {[type]}       [scrive un log in console]
		 */
		assignsUsAndWorkInProgress:function(incId_,state_,assegnee_){
				var o = {
					"state": state_,
					"assigned_to": assegnee_
				}
				
				console.log("assigns_us "+incId_+" to "+assegnee_+" state "+state_);
				client.update("task","number="+incId_+"",o,function(error,result) {
					if(!error) { 		
						if(!error) {
							console.log(result);
										// call succeded 
									}else{
										console.log("ERRORE: Qualcosa non è andato a buon fine !!");
									}	
								}else{
									console.log("errore "+error+" - "+result);
								}
							});
		},


		/**
		 * [getAllIncidentOpenNexusJson rileva  l'insieme degli incident aperti e non ancora gestiti per nexus]
		 * @return {[array]} [json contenente un array di incident]
		 */
		getAllIncidentOpenNexusJson:function(){
			client.getRecords("task_list","assignment_group="+config.get('servicenowConfig.nexusgroupId')+"^state=2^ORstate=1^assigned_to=",function(error,result) {
				if(!error) {
					console.log(JSON.stringify(result));
					return result.records[0];
				}else{
					console.log("errore durante la lettura degli incident : "+JSON.stringify(error));
				}
			});

		},


		/**
		 * [getAllIncidentOpenNexus stampa a video titolo e descrizione degli incident aperti e non ancora gestiti per nexus]
		 * @return {array} [array di incident]
		 */
		getAllIncidentOpenNexus:function(){
			client.getRecords("task_list","assignment_group="+config.get('servicenowConfig.nexusgroupId')+"^state=2^ORstate=1^assigned_to=",function(error,result) {
						if(!error) {
							console.log("record trovati "+result.records.length);
							if(result.records.length > 0){
								for(i in result.records){
										titolo=result.records[i].short_description;
										descrizione=result.records[i].description;
										console.log("*****************************************************");
										console.log("TITOLO INCIDENT : "+titolo);
										console.log("DESCRIZIONE INCIDENT : "+descrizione);
										console.log("*****************************************************");
										console.log("");
										
								}
							}
						}else{
							console.log("errore durante la lettura degli incident : "+JSON.stringify(error));
						}
					});
		},

		/**
		 * [createIncTask crea un Incident Task legandolo all'incident <INCXXX> passato in input e lo assegna a <vedi configurazione (servicenowConfig.default_assignee_incTask)>]
		 * @param  {[type]} tent   [inizializzazione del tentativo di connessione (impostare sempre a zero)]
		 * @param  {[type]} _incId [incident Id (es:INC0159870)]
		 * @return {[null]}        []
		 */
		createIncTask:function(tent,_incId){
			if(tent<config.get('servicenowConfig.maxAttemptNumber')){
				var _tent=tent+1;
				console.log("tentativo : "+tent);
				client.getKeys("incident","number="+_incId+"",function(error,result) {
					if(!error) {
						console.log("trovato "+result.records[0]);

						var input = {
							"assigned_to":config.get('servicenowConfig.default_assignee_incTask'),
							"parent":result.records[0]
						}
						client.insert("u_incident_task",input,function(error,result) {
							if(!error) {
								console.log("risultato inserimento: "+JSON.stringify(result));
							}else{
								console.log("errore inserimento "+error);
							}
						});
					}else{
							console.log("record non trovato");
					       	sn.createIncTask(_tent,_incId);
							
					}
				});

				
			}else{
				console.log("numero tentativi superato");
			}
		},
		

		/**
		 * [findIssueJira effettua la ricerca di un issue jira ]
		 * @param  {[type]} issueId [issudeId (es:MOB-6822)]
		 * @return {[boolean]}         [ritorna true se la trova e stampa a video]
		 */
		findIssueJira:function(issueId,callback){
			jira.findIssue(issueId, function(error, issue) {
				callback(error,issue);
				return;
			});
		},

		

		/**
		 * [getComponentIdBySNChannel description]
		 * @param  {[type]} channelin [description]
		 * @return {[type]}           [description]
		 */
		getComponentIdBySNChannel:function(channelin){
			var channel=channelin.toLowerCase();

			var mapComponent=config.get('jira4servicenow.mapComponent');

			var gstComponent= {"assegneeJira":config.get('jira4servicenow.default_assignee_incident'),"assegneeSn":config.get('servicenowConfig.default_assignee_incTask'),"codComponentJira":config.get('jira4servicenow.default_component_jira')};
			
			var codComponentJira=0;

			if(channel.match(/mobile banking/g)){
				
				//############# MOBILE BANKING #########
				
				if (channel.match(/mobile banking - android/g)) 
				{
					//title="AppFull.Android  - Applicazione Banca Full x Android" value="12725"
					codComponentJira = "12725";
				}else if (channel.match(/mobile banking - ios/g)) 
				{
					//title="AppFull.iOS  - Applicazione Banca Full x iOS" value="12726"
					codComponentJira = "12726";
				}else if (channel.match(/android/g)) 
				{
					//title="Android " value="14503"
					codComponentJira = "14503";
				}else{
					//mobile
					codComponentJira = "13210";
				}

			}else if(channel.match(/banca su tablet/g)){

				//############# BANCA SU TABLET ########
				if (channel.match(/ios/g)) 
				{
					//AppBST.iOS  - Applicazione Banca su Tablet x iOS
					codComponentJira = "12728";
				}else if (channel.match(/android/g)) 
				{
					//title="AppBST.Android " value="17802"
					codComponentJira = "17802";
				}
			}else if (channel.match(/wallet/g)) 
			{
				//############# WALLET ########
				
				if (channel.match(/android/g)) 
				{
					//title="AppWallet.Android  - Applicazione Wallet x Android" value="12729"
					codComponentJira = "12729";
				}else if (channel.match(/ios/g)) 
				{
					//title="AppWallet.iOS " value="15300"
					codComponentJira = "15300";
				}else{
					//mobile
					codComponentJira = "13210";
				}
			}else if (channel.match(/windows/g) || channel.match(/wp/g) || channel.match(/wphone/g)) 
			{
				//title="AppFull.WP  - Applicazione Banca Full x Window Mobile" value="12727"
				codComponentJira = "12727"
			}else if (channel.match(/hce/g)) 
			{
				//title="HCE " value="15301"
				codComponentJira = "15301"
			}else if (channel.match(/smart tv/g)) 
			{
				//title="SmartTV " value="13317"
				codComponentJira = "13317"
			}else if (channel.match(/p2p/g)) 
			{
				//title="P2P " value="13005"
				codComponentJira = "13005"
			}else if (channel.match(/family/g)) 
			{
				//title="appFB " value="18100"
				codComponentJira = "18100"
			}else if (channel.match(/project/g) || channel.match(/customer/g) || channel.match(/portale/g) || channel.match(/rete/g) || channel.match(/vendita/g) || channel.match(/bmedNet/g) || channel.match(/copernico/g) ) 
			{
				//title="NAC " value="13700"
				codComponentJira = "13700"
			}
			return mapComponent[codComponentJira];
		},

		/**
		 * [getPriorityBysSNPriority ritorna la priorità formato servicenow]
		 * @param  {[string]} prioritySn [priorita formati DISPLAY ServiceNow]
		 * @return {[string]}            [priorita per jira]
		 */
		getPriorityBySNPriority:function(prioritySn){
			//console.log("in getPriorityBySN "+prioritySn);
			var priorities = config.get('jira4servicenow.mapPriority');
			var priorityJira = priorities[prioritySn];
			//console.log("priorityJira "+priorityJira);
			return priorityJira;
		},
	list:{operations:[{
					name:"assigns_us",
					summary:"presa in carico dell'inc <par1> (assegnato a (vedi configurazione <servicenowConfig.assignee_us>))",
					state:"1"
				},
				{
					name:"assign_to",
					summary:"assegnazione dell'inc <par1>  allo user <par2>",
					state:"1"
				},
				{
					name:"createIncTask",
					summary:"crea un Incident Task legandolo all'incident <par1> passato in input e lo assegna a : vedi configurazione <servicenowConfig.default_assignee_incTask>",
					state:"1"
				},
				{
					name:"getIncidentID",
					summary:"ritorna l'ID di sistema dell'incident <par1> passato in input",
					state:"1"
				},
				{
					name:"getAllIncidentOpenNexus",
					summary:"rileva l'insieme degli incident aperti e non ancora gestiti per nexus",
					state:"1"
				},
				{
					name:"getAllIncidentOpenNexusJson",
					summary:"rileva l'insieme degli incident aperti e non ancora gestiti per nexus e li stampa come json",
					state:"1"
				}
				]
		}
}