sn.js 9.04 KB
var servicenow = require('servicenow');
var config=require('config');
var JiraApi = require('jira').JiraApi;
module.exports={
	info:{
		summary:"tools per servicenow",
		state:"ok".red
		},
	execute:function(process,tool){
		var configSN = {
		    instance: config.get('servicenowConfig.serviceNowUrl'),
		    username: config.get('servicenowConfig.username'), 
		    password: config.get('servicenowConfig.password'), 
		    sessionID: config.get('servicenowConfig.sessionID'),
		};

		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];
		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":
								var o = {
									"state": "2",
									"assigned_to": config.get('servicenowConfig.assignee_us')
								}
								console.log("assigns_us "+incId+" to "+config.get('servicenowConfig.assignee_us'));
								client.update("incident","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);
												}
											});
								break;	
							
							case "assign_to":
								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 !!");
										}	
									}
								});
								break;	
							
							case "createTask":
								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="";
									}
								});

								break;	
							
							case "createIncTask":
								createIncTask(0,incId);
								

								/*
								client.getKeys("incident","number="+incId,function(error,result) {
									if(!error) {
										var inp = {
											"assigned_to":assignee,
											"parent":result.records[0]
										}
										console.log("in createIncTask inp: "+JSON.stringify(inp));
										
										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("incident non trovato");
									}
								});

								*/

								/*
								var o = {
								"sys_id":"9d8b2754dbcd22009855d5dcaf961987"
								}
								client.deleteRecord("incident",o,function(error,result) {
								if(!error) {
								console.log("risultato delete: "+result);
								}else{
								console.log("errore delete "+error);
								}
								});

								*/


								//console.log("incid ritornato :"+incIdd);
								//test();
								/*
								function waitFor(testFx, onReady, timeOutMillis) {
								var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3000, //< Default Max Timout is 3s
								start = new Date().getTime(),
								condition = false,
								interval = setInterval(function() {
								if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
								// If not time-out yet and condition not yet fulfilled
								condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
								} else {
								if(!condition) {
								// If condition still not fulfilled (timeout but condition is 'false')
								console.log("'waitFor()' timeout");
								phantom.exit(1);
								} else {
								// Condition fulfilled (timeout and/or condition is 'true')
								console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
								typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
								clearInterval(interval); //< Stop this interval
								}
								}
								}, 250); //< repeat check every 250ms
								};


								var page = require('webpage').create();
								page.open('https://bancamediolanum.service-now.com/navpage.do', function() {
								waitFor(function() {
								// Check in the page if a specific element is now visible
								return page.evaluate(function() {
								return $("#ctl00_ContentPlaceHolder1_SubmitButton").is(":visible");
								});
								}, function() {
								var foo = page.evaluate(function() {
								return $("#ctl00_ContentPlaceHolder1_SubmitButton").text;
								});
								// ...
								phantom.exit();
								});   
								});
								*/										

								break;	
							
							case "getIncidentID":
								/*
								var minutes = 0.1, the_interval = minutes * 60 * 1000;
								setInterval(function() {
								  console.log("I am doing my 5 minutes check");
								  
								  // do your stuff here
								}, the_interval);
								*/
								
								client.getKeys("incident","number="+incId+"",function(error,result) {
									if(!error) {
										console.log(result.records[0]);
									}else{
										console.log("record non trovato");
									}
								});

								break;
							case "jiratest":
							var rootdir =mainDir.replace(/\\/g,"\\\\");
							console.log("dir settings "+rootdir);
							console.log("directory "+__dirname);
							console.log("filename "+__filename);
							//C:\Users\Tiziano.Lambiase\AppData\Roaming\npm\node_modules\nexus\modules
							/*
								JiraApi = require('jira').JiraApi;
							
								var jira = new JiraApi('https', 'nexusat.atlassian.net','443', 'tiziano.lambiase', 'Tizigigionexus1', '2',true);
							*/	
								/*
								jira.findIssue('MOB-6822', function(error, issue) {
								console.log('Status: ' + JSON.stringify(issue)+" error: "+error);
								});
								*/
								/*
								var dataissue={"fields": {
									"assignee": {"name": "tiziano.lambiase"},
							      	"project": {"id": "10003"},
							      	"summary": "test automatico 4 da nodejs.",
							      	"description": "test da nodejs REST API",
							      	"issuetype": {"id": "3"},
							      	"customfield_10602":4,
							      	"watches": {"isWatching":false}
							  		}
							  	}
							  	console.log("test jira");
								jira.addNewIssue(dataissue,function(error) {
									console.log('error'+JSON.stringify(error));
								});
								*/
								break;
							default:
								console.log("default case");
							}

							
					}
				}	
		}	

		if(op==null){
			console.log("\n--------------------"+"OPERAZIONI PER SERVICENOW".red+"(operations)----------------------------");
			tool.task(sn.list.operations);
		}


		function createIncTask(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.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");
							       	createIncTask(_tent,_incId);
									
							}
						});

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

	},
	list:{operations:[{
					name:"assigns_us",
					summary:"presa in carico dell'inc <par1> (assegnato a Scipioni)",
					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 <par2>",
					state:"1"
				},
				{
					name:"getIncidentID",
					summary:"ritorna l'ID di sistema dell'incident <par1> passato in input",
					state:"1"
				},
				{
					name:"jiratest",
					summary:"test per jira",
					state:"1"
				}]
		}
}