my $resMap = {
	"raidLdev" => {
		"folder" => "LDEVEachOfCU_dat",
		"signature" => '^([0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}).*',   # Resource Sign should be in 1st paranthesis so it can be fetched using $1
		"signatureArgs" => 1,
		"aggRes" => "raidPG",
		"aggSignature" => '^[0-9:A-Z#]+\(([A-Z0-9]+-[0-9A-Z]+)\)',
		"aggSignatureArgs" => 1,
		
		"metrics" => [ 	{ "backTrans" => { "readFrom" => "LDEV_BackTrans",},
				},		
				{ "chToDrTransfer" => { "readFrom" => "LDEV_C2D_Trans",},
				},
				{ "cfwReadHit" => { "readFrom" => "LDEV_CFW_Read_Hit",},		
				},
				{ "cfwReadIOPS" => { "readFrom" => "LDEV_CFW_Read_IOPS",},		
				},
				{ "cfwWriteHit" => { "readFrom" => "LDEV_CFW_Write_Hit",},		
				},
				{ "cfwWriteIOPS" => { "readFrom" => "LDEV_CFW_Write_IOPS",},
				},		
				{ "randomDrToChTransfer" => { "readFrom" => "LDEV_D2CR_Trans",},
				},		
				{ "seqDrToChTransfer" => { "readFrom" => "LDEV_D2CS_Trans",},
				},		
				{ "totalIOPS" => { "readFrom" => "LDEV_IOPS",
						   "customAggr" => "true",
						   "preserveForAggr" => "true",
						},
				},		
				{ "readHit" => { "readFrom" => "LDEV_Read_Hit",},		
				},
				{ "readIOPS" => { "readFrom" => "LDEV_Read_IOPS",  
						  "customAggr" => "true",
						  "preserveForAggr" => "true",
				},		
				},
				{ "readResponseTime" => { "readFrom" => "LDEV_Read_Response",
							  "preserveForAggr" => "true", # this attr tells which metrics are to be held for aggr using multiple resources
				},
				},		
				{ "readTransRate" => { "readFrom" => "LDEV_Read_TransRate", 
						       "customAggr" => "true",
				},
				},
				{ "responseTime" => { "readFrom" => "LDEV_Response",
						      "preserveForAggr" => "true", # this attr tells which metrics are to be held for aggr using multiple resources
				},
				},		
				{ "randomReadHit" => { "readFrom" => "LDEV_Rnd_Read_Hit",
						        "customAggr" => "true",
				},
				},
				{ "randomReadIOPS" => { "readFrom" => "LDEV_Rnd_Read_IOPS", 
						        "customAggr" => "true",
				},
				},
				{ "randomWriteHit" => { "readFrom" => "LDEV_Rnd_Write_Hit", 
						        "customAggr" => "true",
				},
				},
				{ "randomWriteIOPS" => { "readFrom" => "LDEV_Rnd_Write_IOPS", 
						        "customAggr" => "true",
				},
				},
				{ "seqReadHit" => { "readFrom" => "LDEV_Seq_Read_Hit",},		
				},
				{ "seqReadIOPS" => { "readFrom" => "LDEV_Seq_Read_IOPS", 
						     "customAggr" => "true",
						},
				},
				{ "seqWriteHit" => { "readFrom" => "LDEV_Seq_Write_Hit",},		
						},
				{ "seqWriteIOPS" => { "readFrom" => "LDEV_Seq_Write_IOPS", 
						      "customAggr" => "true",
						},
				},
				{ "transferRate" => { "readFrom" => "LDEV_TransRate", 
						      "customAggr" => "true",
						},
						},
				{ "writeHit" => { "readFrom" => "LDEV_Write_Hit",},		
				},
				{ "writeIOPS" => { "readFrom" => "LDEV_Write_IOPS", 
						   "customAggr" => "true",
						   "preserveForAggr" => "true",
				},
						},
				{ "writeResponseTime" => { "readFrom" => "LDEV_Write_Response",
							   "preserveForAggr" => "true", # this attr tells which metrics are to be held for aggr using multiple resources
						},
				},
				{ "writeTransRate" => { "readFrom" => "LDEV_Write_TransRate", 
						        "customAggr" => "true",
						},
				},
				{ "utilization" => { "readFrom" => "PHY_Short_LDEV(?!_SI)",
						      "folder" => "PhyLDEV_dat",
						},	
						},	
				# Commenting as they aren't being used currently - reducing memory overhead
				# { "percentReadIOPS" => { 
						# "subRef" => sub {
							# my $randomReadIOPS = shift;
							# my $seqReadIOPS = shift;
							# my $randomWriteIOPS = shift;
							# my $seqWriteIOPS = shift;
										
							# my $val = 0;
							# unless ($randomReadIOPS == 0 && $randomWriteIOPS == 0 && seqReadIOPS == 0 && seqWriteIOPS == 0) {
								# $val = (($randomReadIOPS + $seqReadIOPS)*100)/($randomReadIOPS+$randomWriteIOPS+$seqReadIOPS+$seqWriteIOPS);
							# }
										
							# return $val;
						# },
						# "args" => "randomReadIOPS,seqReadIOPS,randomWriteIOPS,seqWriteIOPS",  # these are actual metrics not file patterns
						# },
				# },
				# { "readMiss" => { 
						# "subRef" => sub {
							# my $readHit = shift;
										
							# my $val = 0;
							# unless ($readHit == 0 ) {
								# $val = 100 - $readHit;
							# }
										
							# return $val;
						# },
						# "args" => "readHit",  # these are actual metrics not file patterns
						# },
				# },
				# { "writeMiss" => { 
						# "subRef" => sub {
							# my $writeHit = shift;
										
							# my $val = 0;
							# unless ($writeHit == 0 ) {
								# $val = 100 - $writeHit;
							# }
										
							# return $val;
						# },
						# "args" => "writeHit",  # these are actual metrics not file patterns
						# },
				# },
				{ "RollupTo" => { 
					# Commenting as they aren't being used currently - reducing memory overhead
					# "TotalIOPSAggr" =>  {
						# "metric" => "totalIOPS",
						# },
					# "AvgPercentReadIOPSAggr" => {
						# "transformUsing" => "avg", 
						# "metric" => "percentReadIOPS",
					# },
					
					# Commenting these, as now dumping these custom metrics while dumping LDEVs individual metric
					# "totalIOPS" => {
						# "customAggr" => "true",   # custom aggr true = these attributes must be aggregated to a relation read from a file shared by conf
						# "metric" => "totalIOPS",
						# },	
					# "readIOPS" => {
						# "customAggr" => "true",
						# "metric" => "readIOPS",
						# },	
					"readResponseTime" => {
						"customAggr" => "true",
						"metric" => "readResponseTime",
						"weightedAvgMetric" => "readIOPS",
						},	
					# "readTransRate" => {
						# "customAggr" => "true",
						# "metric" => "readTransRate",
						# },	
					"responseTime" => {
						"customAggr" => "true",
						"metric" => "responseTime",
						"weightedAvgMetric" => "totalIOPS",
						},	
					# "randomReadIOPS" => {
						# "customAggr" => "true",
						# "metric" => "randomReadIOPS",
						# },	
					# "randomWriteIOPS" => {
						# "customAggr" => "true",
						# "metric" => "randomWriteIOPS",
						# },	
					# "seqReadIOPS" => {
						# "customAggr" => "true",
						# "metric" => "seqReadIOPS",
						# },	
					# "seqWriteIOPS" => {
						# "customAggr" => "true",
						# "metric" => "seqWriteIOPS",
						# },	
					# "transferRate" => {
						# "customAggr" => "true",
						# "metric" => "transferRate",
						# },	
					# "writeIOPS" => {
						# "customAggr" => "true",
						# "metric" => "writeIOPS",
						# },	
					"writeResponseTime" => {
						"customAggr" => "true",
						"metric" => "writeResponseTime",
						"weightedAvgMetric" => "writeIOPS",
						},	
					# "writeTransRate" => {
						# "customAggr" => "true",
						# "metric" => "writeTransRate",
						# },	
					# "utilization" => {
						# "customAggr" => "true",
						# "metric" => "utilization",
						# },	
							
					},
				},
			],
					
	},
	"raidPG" => {
		"folder" => "PG_dat",
		"signature" => "(.*)",   # Resource Sign should be in 1st paranthesis so it can be fetched using $1
		"signatureArgs" => 1,
		"writeToConf" => "true",  # only for USPV, check added in svpRawPerfDataProcessor.pl
		
		"metrics" => [	{ "backTrans" => { "readFrom" => "PG_BackTrans",},		
				},
				{ "chToDrTransfer" => { "readFrom" => "PG_C2D_Trans",},		
				},
				{ "cfwReadHit" => { "readFrom" => "PG_CFW_Read_Hit",},		
				},
				{ "cfwReadIOPS" => { "readFrom" => "PG_CFW_Read_IOPS",},
				},
				{ "cfwWriteHit" => { "readFrom" => "PG_CFW_Write_Hit",},		
				},
				{ "cfwWriteIOPS" => { "readFrom" => "PG_CFW_Write_IOPS",},		
				},
				{ "randomDrToChTransfer" => { "readFrom" => "PG_D2CR_Trans",},		
				},
				{ "seqDrToChTransfer" => { "readFrom" => "PG_D2CS_Trans",},
				},
				{ "totalIOPS" => { "readFrom" => "PG_IOPS",},		
				},
				{ "readHit" => { "readFrom" => "PG_Read_Hit",},		
				},
				{ "readIOPS" => { "readFrom" => "PG_Read_IOPS",},		
				},
				{ "readResponseTime" => { "readFrom" => "PG_Read_Response",},
				},
				{ "readTransRate" => { "readFrom" => "PG_Read_TransRate",},		
				},
				{ "responseTime" => { "readFrom" => "PG_Response",},
				},		
				{ "randomReadHit" => { "readFrom" => "PG_Rnd_Read_Hit",},
				},		
				{ "randomReadIOPS" => { "readFrom" => "PG_Rnd_Read_IOPS",},
				},
				{ "randomWriteHit" => { "readFrom" => "PG_Rnd_Write_Hit",},
				},
				{ "randomWriteIOPS" => { "readFrom" => "PG_Rnd_Write_IOPS",},
				},
				{ "seqReadHit" => { "readFrom" => "PG_Seq_Read_Hit",},
				},
				{ "seqReadIOPS" => { "readFrom" => "PG_Seq_Read_IOPS",},
				},
				{ "seqWriteHit" => { "readFrom" => "PG_Seq_Write_Hit",},
				},
				{ "seqWriteIOPS" => { "readFrom" => "PG_Seq_Write_IOPS",},
				},
				{ "transferRate" => { "readFrom" => "PG_TransRate",},
				},
				{ "writeHit" => { "readFrom" => "PG_Write_Hit",},
				},
				{ "writeIOPS" => { "readFrom" => "PG_Write_IOPS",},
				},
				{ "writeResponseTime" => { "readFrom" => "PG_Write_Response",},
				},
				{ "writeTransRate" => { "readFrom" => "PG_Write_TransRate",},
				},
				{ "utilization" => { "readFrom" => "PHY_Short_PG",
							"folder" => "PhyPG_dat",
						},
				},	
		],
	},
	"raidLU" => {
		"folder" => "LU_dat",
		"signature" => '^([0-9a-zA-Z-]+)\.[0]*([0-9A-Z]+)[0-9A-Za-z ~`!@$%^&()_+-={}\[\]\'.]+\.[0]*([0-9A-Z]+)',   # Resource Sign should be in 1st paranthesis so it can be fetched using $1
		"signatureArgs" => 3,  					 # use all three i.e. $1, $2, $3
		
		"metrics" => [	{ "chToDrTransfer" => { "readFrom" => "LU_C2D_Trans",
							"preserveForAggr" => "true",
						      },	
				},		
				{ "randomDrToChTransfer" => { "readFrom" => "LU_D2CR_Trans",
							      "preserveForAggr" => "true",
				},		
				},		
				{ "seqDrToChTransfer" => { "readFrom" => "LU_D2CS_Trans",
							   "preserveForAggr" => "true",
						      },
				},
				{ "totalIOPS" => { "readFrom" => "LU_IOPS",},
				},		
				{ "readResponseTime" => { "readFrom" => "LU_Read_Response",},
				},
				{ "readTransRate" => { "readFrom" => "LU_Read_TransRate",},
				},		
				{ "responseTime" => { "readFrom" => "LU_Response",},
				},		
				{ "randomReadHit" => { "readFrom" => "LU_Rnd_Read_Hit",
						       "preserveForAggr" => "true",
						    },
				},
				{ "randomReadIOPS" => { "readFrom" => "LU_Rnd_Read_IOPS",},
				},		
				{ "randomWriteHit" => { "readFrom" => "LU_Rnd_Write_Hit",
							"preserveForAggr" => "true",
						     },
				},		
				{ "randomWriteIOPS" => { "readFrom" => "LU_Rnd_Write_IOPS",},
				},		
				{ "seqReadHit" => { "readFrom" => "LU_Seq_Read_Hit",
						    "preserveForAggr" => "true",
						 },				
				},		
				{ "seqReadIOPS" => { "readFrom" => "LU_Seq_Read_IOPS",},
				},		
				{ "seqWriteHit" => { "readFrom" => "LU_Seq_Write_Hit",
						     "preserveForAggr" => "true",
						  },				
				},		
				{ "seqWriteIOPS" => { "readFrom" => "LU_Seq_Write_IOPS",},
				},		
				{ "transferRate" => { "readFrom" => "LU_TransRate",},
				},		
				{ "writeResponseTime" => { "readFrom" => "LU_Write_Response",},
				},		
				{ "writeTransRate" => { "readFrom" => "LU_Write_TransRate",},
				},
				{ "readHit" => { 
						"subRef" => sub {
							my $seqReadHit = shift;
							my $randomReadHit = shift;
										
							my $val = $seqReadHit + $randomReadHit;
							return $val;
						},
						"args" => "seqReadHit,randomReadHit",  # these are actual metrics not file patterns
						},
				},
				{ "writeHit" => { 
						"subRef" => sub {
							my $seqWriteHit = shift;
							my $randomWriteHit = shift;
										
							my $val = $seqWriteHit + $randomWriteHit;
							return $val;
						},
						"args" => "seqWriteHit,randomWriteHit",  # these are actual metrics not file patterns
						},
				},
				{ "backTrans" => { 
						"subRef" => sub {
							my $chToDrTransfer = shift;
							my $randomDrToChTransfer = shift;
							my $seqDrToChTransfer = shift;
										
							my $val = $chToDrTransfer + $randomDrToChTransfer + $seqDrToChTransfer;
							return $val;
						},
						"args" => "chToDrTransfer,randomDrToChTransfer,seqDrToChTransfer",  # these are actual metrics not file patterns
						},
				},
		],			
				
	},
	"raidPort" => {
		"folder" => "Port_dat",
		"signature" => "(.*)",   # Resource Sign is in 1st paranthesis so it can be fetched using signatureArgs = $1
		"signatureArgs" => 1,
		
		"metrics" => [	{ "totalIOPS" => { "readFrom" => "Port_.*IOPS",},	# it's a pattern used to match required files among total list of files in dir
				},		
				{ "transferRate" => { "readFrom" => "Port_.*KBPS",},
				},		
				{ "responseTime" => { "readFrom" => "Port_.*Response",},
				},
				# MF Port Support
				{ "totalIOPS" => { "readFrom" => "MF_Port_IOPS.csv",
						      "folder" => "MFPort_dat",
						},
				},
				{ "transferRate" => { "readFrom" => "MF_Port_Read_Write_KBPS.csv",
						      "folder" => "MFPort_dat",
						},
				},
				{ "readTransRate" => { "readFrom" => "MF_Port_Read_KBPS.csv",
						      "folder" => "MFPort_dat",
						},
				},
				{ "writeTransRate" => { "readFrom" => "MF_Port_Write_KBPS.csv",
						      "folder" => "MFPort_dat",
						},
				},
				{ "responseTime" => { "readFrom" => "MF_Port_Response.csv",
						      "folder" => "MFPort_dat",
						},
				},
				
		],
		
	},
	"raidPortWWN" => {
		"folder" => "PortWWN_dat",
		"signature" => "^([0-9A-Z]+).*",   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 1,

		"metrics" => [	{ "totalIOPS" => { "readFrom" => "PortWWN_.*_IOPS",},	# it's a pattern used to match required files among total list of files in dir
				},		
				{ "transferRate" => { "readFrom" => "PortWWN_.*_KBPS",},
				},		
				{ "responseTime" => { "readFrom" => "PortWWN_.*_Response",},
				},
		],
	},
	"raidURJnl" => {
		"folder" => "URJNL_dat",
		"signature" => "(.*)",   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 1,
		"writeToConf" => "true",

		"metrics" => [	{ "writeTransRate" => { "readFrom" => "URJNL_Write_Transfer",	},
				},		
				{ "primaryJNLAsyncCopyTransfer" => { "readFrom" => "URJNL_M-JNL_Asynchronous_Copy_Transfer",},
				},		
				{ "secondaryJNLAsyncCopyTransfer" => { "readFrom" => "URJNL_R-JNL_Asynchronous_Copy_Transfer",},
				},
				{ "primaryJNLAsyncJournal" => { "readFrom" => "URJNL_M-JNL_Asynchronous_Journal",},
				},
				{ "secondaryJNLAsyncJournal" => { "readFrom" => "URJNL_R-JNL_Asynchronous_Journal",},
				},
				{ "masterJNLDataUsedRate" => { "readFrom" => "URJNL_M-JNL_Data_Used_Rate",},
				},
				{ "restoreJNLDataUsedRate" => { "readFrom" => "URJNL_R-JNL_Data_Used_Rate",},
				},
		],	
		
	},
	"raidMP" => {
		"folder" => "PhyProc_dat",
		"signature" => '^[A-Z0-9-]+\.(.*)$',   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 1,
		"writeToConf" => "true",

		"metrics" => [	{ "utilization" => { "readFrom" => "PHY_Short_MP",},
				},
		],	
	},
	"raidCHP" => {
		"folder" => "PhyProc_dat",
		"signature" => '(.*)',   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 1,
		"writeToConf" => "true",

		"metrics" => [	{ "utilization" => { "readFrom" => "PHY_Short_CHP",},
				},
		],	
	},
	"raidDKP" => {
		"folder" => "PhyProc_dat",
		"signature" => '(.*)',   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 1,
		"writeToConf" => "true",

		"metrics" => [	{ "utilization" => { "readFrom" => "PHY_Short_DKP",},
				},
		],	
	},
	"raidMpbClpr" => {
		"folder" => "PhyESW_dat",
		"signature" => '^([0-9]+).*$',  
		"signatureArgs" => 1,
		"writeToConf" => "true",

		"metrics" => [	{ "utilization" => { "readFrom" => "PHY_Short_Cache_Usage_Rate_",},
				},
				{ "writePendingRate" => { "readFrom" => "PHY_Short_Write_Pending_Rate_",},
				},
				{ "utilization" => { "readFrom" => "PHY_Short_Cache_Usage_Rate_", # writing repeated entry for same metric so that if phyEsw is not found, read from phyMainPK (HUS-VM)
						"folder" => "PhyMainPK_dat",
						},
				},		
				{ "writePendingRate" => { "readFrom" => "PHY_Short_Write_Pending_Rate_",
						"folder" => "PhyMainPK_dat",
						},
				},			
				{ "utilization" => { 
						# writing repeated entry for same metric so that if phyEsw/phyMainPK is not found, read from PhyCMPK_dat (Raid800)
						"readFrom" => "PHY_Short_Cache_Usage_Rate_", 
						"folder" => "PhyCMPK_dat",
						},
				},		
				{ "writePendingRate" => { 
						# writing repeated entry for same metric so that if phyEsw/phyMainPK is not found, read from PhyCMPK_dat (Raid800)
						"readFrom" => "PHY_Short_Write_Pending_Rate_", 
						"folder" => "PhyCMPK_dat",
						},
				},			
		],	
	},
	"raidStorage" => {
		"folder" => "PhyESW_dat",
		"signature" => '',   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 0,
		
		"metrics" => [	{ "utilization" => { "readFrom" => 'PHY_Short_Cache_Usage_Rate.csv',},
				},		
				{ "writePendingRate" => { "readFrom" => 'PHY_Short_Write_Pending_Rate.csv',},
				},
				{ "utilization" => { "readFrom" => 'PHY_Short_Cache_Usage_Rate.csv',
						"folder" => "PhyMainPK_dat",
						},
				},		
				{ "writePendingRate" => { "readFrom" => 'PHY_Short_Write_Pending_Rate.csv',
						"folder" => "PhyMainPK_dat",
						},
				},
				{ "utilization" => { 
						# writing repeated entry for same metric so that if phyEsw/phyMainPK is not found, read from PhyCMPK_dat (Raid800)
						"readFrom" => 'PHY_Short_Cache_Usage_Rate.csv', 
						"folder" => "PhyCMPK_dat",
						},
				},		
				{ "writePendingRate" => { 
						# writing repeated entry for same metric so that if phyEsw/phyMainPK is not found, read from PhyCMPK_dat (Raid800)
						"readFrom" => 'PHY_Short_Write_Pending_Rate.csv',
						"folder" => "PhyCMPK_dat",
						},
				},
		],	
	},
	"raidStoragePath" => {
		"folder" => "PhyESW_dat",
		"signature" => '(.*)',   # Resource Sign is in 1st n 2nd paranthesis so it can be fetched using signatureArgs = $1 and $2
		"signatureArgs" => 1,
		"writeToConf" => "true",
		
		"metrics" => [	{ "utilization" => { "readFrom" => "PHY_Short_ESW_Cache",},
				},
				{ "utilization" => { "readFrom" => "PHY_Short_ESW_Cache",
						"folder" => "PhyMainPK_dat",
						},
				},
				{ "utilization" => { "readFrom" => "PHY_Short_CSW_CMA",   # repeated entry of this counter to add suppoort for USPV as folder name is different
						"folder" => "PhyCSW_dat",
						},
				},			
				{ "utilization" => { 
						# repeated entry of this counter to add suppoort for Raid800 as folder name is different
						"readFrom" => "PHY_Short_CSW_CMA",   
						"folder" => "PhyCMPK_dat",
						},
				},			
		],	
	},

};
