monitor.js 6.08 KB
var servicenow = require('servicenow');
var config=require('config');
var JiraApi = require('jira').JiraApi;
var jiraNexus=require('../modules/jira.js');
var snNexus=require('../modules/sn.js');
module.exports={
	info:{
		summary:"tool di monitoraggio 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 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 = this.list.operations;
				for(i in operations){
					if(operations[i].name===op){
							switch(op){
								case "monitoraggioSn":
									var minutes = 1;
									var the_interval = minutes * 60 * 1000;
									setInterval(function() {
									 	this.monitoraggioSn(0);
									}, the_interval);
								break;
								case "test":
									console.log("testest");
									break;
								default:
									console.log("default case");
							}

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

	/**
		 * [monitoraggioSn description]
		 * @param  {[type]} tent [description]
		 * @return {[type]}      [description]
		 */
		monitoraggioSn:function(tent){
				if(tent<config.get('servicenowConfig.maxAttemptNumber')){
				var _tent=tent+1;
				console.log("tentativo : "+tent);
				client.getRecords("task_list","assignment_group="+config.get('servicenowConfig.nexusgroupId')+"^state=2^ORstate=1^assigned_to=",function(errorsn,result){
					if(!errorsn) {
						console.log("record trovati "+result.records.length);
						if(result.records.length > 0){
								console.log("\007");
								for(i in result.records){
										titolo=result.records[i].short_description;
										descrizione=result.records[i].description;
										console.log("*****************************************************");
										console.log("TITOLO  : "+titolo);
										console.log("TIPOLOGIA : "+result.records[i].sys_class_name.toUpperCase());
										console.log("DESCRIZIONE  : "+descrizione);
										console.log("*****************************************************");
										console.log("");
										var titoloJira=result.records[i].number.toUpperCase()+" - "+titolo;
										var taskId=result.records[i].number;
										var taskType=result.records[i].sys_class_name;
										
										//	creare un inctask legandolo all'incident in questione tramite la funzione createIncTask
										//	creare un task su jira (tramite creaTaskJira) assegnandolo allo stesso user a cui viene assegnato l'inctask e con i campi settati in maniera opportuna
										
										//recupero la priorità dell'incident 
										var priorityJira=snNexus.getPriorityBySNPriority(result.records[i].priority);

										//recupero il componente Jira in base al configuration item
										var componentobj=snNexus.getComponentIdBySNChannel(result.records[i].cmdb_ci);

										//recupero l'assegnee SN tramite il component
										var assegneeSn= componentobj.assegneeSn;

										//stato da impostare su SN
										var state_="2";//inlavorazione 

										var inputobj = {
											"state": state_,
											"assigned_to": assegneeSn
										}
										
										console.log("aggiorno  "+taskId+" to "+assegneeSn+" state "+state_);
										client.update("task","number="+taskId+"",inputobj,function(errorUpdate,resultupdate) {
											if(!errorUpdate){ 		
												
													console.log(JSON.stringify(resultupdate));
													// call succeded 
													//	modificare l'assignee  tramite la funzione assigns_us
												
													//verifico se si tratta di un task o di un incident
													if(taskType==="Incidente"){

														jiraNexus.creaIncidentJira(titoloJira,descrizione,componentobj.componentId,priorityJira,function(errorJira,responseJira){
															if(!errorJira){
																//è andato a buon fine
															}else{
																//la creazione su jira non è andata a buon fine quindi faccio qualcosa
															}
														});

													}else if(taskType==="Attività catalogo"){
														console.log("provo a creare taskjira :");
														console.log("titoloJira : "+titoloJira);
														console.log("componentId : "+componentobj.componentId);
														console.log("assegneeJira : "+componentobj.assegneeJira);
														console.log("priorityJira : "+priorityJira);
														jiraNexus.creaTaskJira(titoloJira,descrizione,componentobj.componentId,priorityJira,function(errorJira,responseJira){
															if(!errorJira){
																//è andato a buon fine
															}else{
																//la creazione su jira non è andata a buon fine quindi faccio qualcosa
															}
														});
													}				
											}else{
												console.log("errore durante update dello stato per il task : "+taskId+" - errore : "+JSON.stringify(errorUpdate)+" - resultupdate : "+JSON.stringify(resultupdate));
											}
										});
			
								}
						}else{
							console.log("non ci sono attivita da assegnare");
						}
					}else{
							console.log("nuovo tentativo di connessione");
					       	snNexus.monitoraggioSn(_tent);
							
					}
				});		
			}else{
				console.log("numero tentativi di connessione superato");
			}
		},
			list:{operations:[{
					name:"monitoraggioSn",
					summary:"effettua il monitoraggio sugli incident ServiceNow assegnati a nexus",
					state:"1"
				},{
					name:"test",
					summary:"test",
					state:"1"
				}
				]
		}
}