工作上需要测试n台服务器部署后的配置信息是否正确,用既有的工具进行测试,工具的执行需要一个xml参数文件,当机器数目少的时候,手工去编写这个xml文件就可以了,出错的几率也不会很大,但是当机器数目达到几十、几百甚至更多的时候,就有必要用程序生成了,这样高效而准确。
思路如下:
准备输入的源xml文件和输出的xml文件模板;
从原文件中抽取服务器类型和机器名存入List中;
根据服务器类型拼出对应的xml节点,对输出的xml文件模板的部分内容作替换;
代码如下:
代码
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
namespace CreateXMLsForMPAP
{
class Program
{
private const string machinelist_mp = " Machinelist_MP.xml " ;
private const string machinelist_ap = " Machinelist_AP.xml " ;
private const string template = " VerificationTemplate.xml " ;
private const string config_value_AP = @" output\config_value_AP.xml " ;
private const string config_value_MP = @" output\config_value_MP.xml " ;
static void Main( string [] args)
{
CreateXml(PilotType.MP);
CreateXml(PilotType.AP);
}
public static void CreateXml(PilotType pilotType)
{
string path = string .Empty;
// Path.Combine(Directory.GetCurrentDirectory(), config_value_MP);
if (pilotType == PilotType.MP) path = config_value_MP;
else path = config_value_AP;
File.Copy(template, path, true );
StringBuilder sb = new StringBuilder();
string sourcepath = string .Empty;
if (pilotType == PilotType.MP)
{
sourcepath = " \\D$\\IDSS\\AC\\Data\\DeliveryEngine\\ " ;
SetVerificationNodeForMP(sb, sourcepath);
}
else
{
sourcepath = " \\D$\\Data\\DeliveryEngine\\ " ;
SetVerificationNodeForAP(sb, sourcepath);
}
#region replace
StreamReader sr = new StreamReader(path);
string str;
str = sr.ReadToEnd();
sr.Close();
str = str.Replace( " $verifications$ " , sb.ToString());
StreamWriter sw = new StreamWriter(path);
sw.Write(str);
sw.Flush();
sw.Close();
#endregion
}
private static void SetVerificationNodeForMP(StringBuilder sb, string sourcepath)
{
List < string > machineList;
machineList = getMachineList(ServiceType.Keyword, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/TimeoutThreshold " , " 1000 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyStops " , " 999 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyBucketTolerances " , " 10000,9999 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/GetWordbagsfromQRDT " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/AsyncQRDTLegacyOn " , " 0 " );
}
machineList = getMachineList(ServiceType.Listing, PilotType.MP);
foreach ( string machine in machineList)
{
// can ignore this
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/ListingLADTMessageType " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/LADTPartitionKeyType " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/MaxCrawlBatch " , " 768 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToQRDTStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToLADTStore " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToSearchStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToCrawlStore " , " 1 " );
// Listing-OLS-OLSConfig.xml(static) there are lots of <datastore> node
// setVerificationNode(sb, machine, sourcepath + "Config\\Static\\Listing\\OlsConfig.xml", "/OLSConfiguration/DataStores/DataStore", "");
}
machineList = getMachineList(ServiceType.QRDT, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/IgnoreDCVIPMismatch " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ReturnBeforeSearch " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ContactSQM " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/UpdateAllReplicas " , " 0 " );
// need to change
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/IncludeExternalMachines " , " false " );
}
machineList = getMachineList(ServiceType.LADT, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 12 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/Enabled " , " false " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/BlockSize " , " 4096 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CompressionLevel " , " 5 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CacheSizePercent " , " 15 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/NumberThreads " , " 7 " );
}
machineList = getMachineList(ServiceType.CQM, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/ListingLADTMessageType " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/LADTPartitionKeyType " , " 0 " );
// CQM-OLS-OLSConfig.xml(static) there are lots of <datastore> node
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 12 " );
}
}
private static void SetVerificationNodeForAP(StringBuilder sb, string sourcepath)
{
List < string > machineList;
machineList = getMachineList(ServiceType.Keyword, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/TimeoutThreshold " , " 20 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyStops " , " 19 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyBucketTolerances " , " 10000,10000 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/GetWordbagsfromQRDT " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/AsyncQRDTLegacyOn " , " 0 " );
}
machineList = getMachineList(ServiceType.Listing, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/ListingLADTMessageType " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/LADTPartitionKeyType " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/MaxCrawlBatch " , " 2048 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToQRDTStore " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToLADTStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToSearchStore " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToCrawlStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/MaxPagesToCrawl " , " 2 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/PrioritizePageCrawl " , " 1 " );
// Listing-OLS-OLSConfig.xml(static) there are lots of <datastore> node
// setVerificationNode(sb, machine, sourcepath + "Config\\Static\\Listing\\OlsConfig.xml", "/OLSConfiguration/DataStores/DataStore", "");
}
machineList = getMachineList(ServiceType.QRDT, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/IgnoreDCVIPMismatch " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ReturnBeforeSearch " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ContactSQM " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/UpdateAllReplicas " , " 1 " );
// need to change
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Flags/ReplicationModel " , " SyncOnRestart " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/IncludeExternalMachines " , " true " );
}
machineList = getMachineList(ServiceType.LADT, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Persistence/LoadAllRecords " , " true " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashCampaignIDABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 16 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Flags/ReplicationModel " , " SyncOnRestart " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Flags/UserDefinedPartition " , " true " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/Enabled " , " true " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/BlockSize " , " 24576 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CompressionLevel " , " 9 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CacheSizePercent " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/NumberThreads " , " 7 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CompressionBufferSize " , " 50 " );
}
machineList = getMachineList(ServiceType.CQM, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/ListingLADTMessageType " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/LADTPartitionKeyType " , " 1 " );
// CQM-OLS-OLSConfig.xml(static) there are lots of <datastore> node
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashCampaignIDABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 16 " );
}
}
private static StringBuilder setVerificationNode(StringBuilder sb, string machine, string sourcefile, string nodepath, string value)
{
sb.Append( " <Verification Type=\ " ConfigurationValueVerification\ " Mode=\ " IgnoreCase\ " Severity=\ " Error\ " Description=\ " \ " > " );
sb.Append( " <SourceFile> " );
sb.Append( " \\\\ " ).Append(machine).Append(sourcefile);
sb.Append( " </SourceFile> " );
sb.Append( " <NodePath> " );
sb.Append(nodepath);
sb.Append( " </NodePath> " );
sb.Append( " <Value> " );
sb.Append(value);
sb.Append( " </Value> " );
sb.Append( " </Verification> " );
return sb;
}
#region get machine list on ORV
/// <summary>
/// get machinelist according to service type
/// </summary>
/// <param name="serviceType"></param>
/// <param name="pilotType"></param>
/// <returns></returns>
public static List < string > getMachineList(ServiceType serviceType, PilotType pilotType)
{
List < string > machineList = new List < string > ();
List < string > machines = new List < string > ();
machineList = getMachineList(pilotType);
foreach ( string item in machineList)
{
if (item.StartsWith(serviceType.ToString()))
machines.Add(item.Split( ' , ' )[ 1 ]);
}
return machines;
}
/// <summary>
/// get all machinelist(service,machinename)
/// </summary>
/// <param name="pilotType"></param>
/// <returns></returns>
public static List < string > getMachineList(PilotType pilotType)
{
List < string > machineList = new List < string > ();
string machinelistxml = string .Empty;
XmlDocument xml = new XmlDocument();
if (pilotType == PilotType.MP)
machinelistxml = machinelist_mp;
else
machinelistxml = machinelist_ap;
xml.Load(machinelistxml);
XmlNodeList node = xml.SelectNodes( " //MachineList/Environment/Engine " );
bool exist = false ;
foreach (XmlNode item in node)
{
if (item.Attributes[ " Type " ].Value == " PaidSearch " )
{
XmlNodeList clusterList = item.SelectNodes( " Cluster/Service " );
foreach (XmlNode itemService in clusterList)
{
XmlNodeList machinesList = itemService.SelectNodes( " MachineGroup/Machine " );
foreach (XmlNode itemMachine in machinesList)
{
foreach (XmlAttribute attri in itemMachine.Attributes) // exclude type=reference
{
if (attri.Name == " Type " ) exist = true ;
}
if ( ! exist)
{
XmlNodeList machines = itemMachine.SelectNodes( " Name " );
foreach (XmlNode itemMachineName in machines)
{
machineList.Add(itemService.Attributes[ " Name " ].Value + " , " + itemMachineName.InnerText);
}
}
exist = false ;
}
}
}
}
return machineList;
}
#endregion
}
#region Define two enum for Service and Pilot type
/// <summary>
/// Service type on ORV, including Keyword,Listing,QRDT,LADT,CQM
/// </summary>
public enum ServiceType
{
Keyword = 0 ,
Listing = 1 ,
QRDT = 2 ,
LADT = 3 ,
CQM = 4
};
/// <summary>
/// Pilot type, including Manual Pilot(MP) and Aotomatic Pilot(AP)
/// </summary>
public enum PilotType
{
MP = 0 ,
AP = 1
};
#endregion
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
namespace CreateXMLsForMPAP
{
class Program
{
private const string machinelist_mp = " Machinelist_MP.xml " ;
private const string machinelist_ap = " Machinelist_AP.xml " ;
private const string template = " VerificationTemplate.xml " ;
private const string config_value_AP = @" output\config_value_AP.xml " ;
private const string config_value_MP = @" output\config_value_MP.xml " ;
static void Main( string [] args)
{
CreateXml(PilotType.MP);
CreateXml(PilotType.AP);
}
public static void CreateXml(PilotType pilotType)
{
string path = string .Empty;
// Path.Combine(Directory.GetCurrentDirectory(), config_value_MP);
if (pilotType == PilotType.MP) path = config_value_MP;
else path = config_value_AP;
File.Copy(template, path, true );
StringBuilder sb = new StringBuilder();
string sourcepath = string .Empty;
if (pilotType == PilotType.MP)
{
sourcepath = " \\D$\\IDSS\\AC\\Data\\DeliveryEngine\\ " ;
SetVerificationNodeForMP(sb, sourcepath);
}
else
{
sourcepath = " \\D$\\Data\\DeliveryEngine\\ " ;
SetVerificationNodeForAP(sb, sourcepath);
}
#region replace
StreamReader sr = new StreamReader(path);
string str;
str = sr.ReadToEnd();
sr.Close();
str = str.Replace( " $verifications$ " , sb.ToString());
StreamWriter sw = new StreamWriter(path);
sw.Write(str);
sw.Flush();
sw.Close();
#endregion
}
private static void SetVerificationNodeForMP(StringBuilder sb, string sourcepath)
{
List < string > machineList;
machineList = getMachineList(ServiceType.Keyword, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/TimeoutThreshold " , " 1000 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyStops " , " 999 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyBucketTolerances " , " 10000,9999 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/GetWordbagsfromQRDT " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/AsyncQRDTLegacyOn " , " 0 " );
}
machineList = getMachineList(ServiceType.Listing, PilotType.MP);
foreach ( string machine in machineList)
{
// can ignore this
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/ListingLADTMessageType " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/LADTPartitionKeyType " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/MaxCrawlBatch " , " 768 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToQRDTStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToLADTStore " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToSearchStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToCrawlStore " , " 1 " );
// Listing-OLS-OLSConfig.xml(static) there are lots of <datastore> node
// setVerificationNode(sb, machine, sourcepath + "Config\\Static\\Listing\\OlsConfig.xml", "/OLSConfiguration/DataStores/DataStore", "");
}
machineList = getMachineList(ServiceType.QRDT, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/IgnoreDCVIPMismatch " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ReturnBeforeSearch " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ContactSQM " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/UpdateAllReplicas " , " 0 " );
// need to change
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/IncludeExternalMachines " , " false " );
}
machineList = getMachineList(ServiceType.LADT, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 12 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/Enabled " , " false " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/BlockSize " , " 4096 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CompressionLevel " , " 5 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CacheSizePercent " , " 15 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/NumberThreads " , " 7 " );
}
machineList = getMachineList(ServiceType.CQM, PilotType.MP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/ListingLADTMessageType " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/LADTPartitionKeyType " , " 0 " );
// CQM-OLS-OLSConfig.xml(static) there are lots of <datastore> node
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 12 " );
}
}
private static void SetVerificationNodeForAP(StringBuilder sb, string sourcepath)
{
List < string > machineList;
machineList = getMachineList(ServiceType.Keyword, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/TimeoutThreshold " , " 20 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyStops " , " 19 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Keyword\\KWConfig.xml " , " /KWEngine/KWEtoQRDT/LatencyBucketTolerances " , " 10000,10000 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/GetWordbagsfromQRDT " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Keyword\\KWDynamicConfig.xml " , " /KWEngineDynamicConfig/KWEtoQRDT/AsyncQRDTLegacyOn " , " 0 " );
}
machineList = getMachineList(ServiceType.Listing, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/ListingLADTMessageType " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\Listing\\ListingConfig.xml " , " /ListingEngine/OnlineRV/LADTPartitionKeyType " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/MaxCrawlBatch " , " 2048 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToQRDTStore " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToLADTStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToSearchStore " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/ConnectToCrawlStore " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/MaxPagesToCrawl " , " 2 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Dynamic\\Listing\\ListingDynamicConfig.xml " , " /ListingDynamicConfig/OnlineRV/PrioritizePageCrawl " , " 1 " );
// Listing-OLS-OLSConfig.xml(static) there are lots of <datastore> node
// setVerificationNode(sb, machine, sourcepath + "Config\\Static\\Listing\\OlsConfig.xml", "/OLSConfiguration/DataStores/DataStore", "");
}
machineList = getMachineList(ServiceType.QRDT, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/IgnoreDCVIPMismatch " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ReturnBeforeSearch " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/ContactSQM " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\QRDTConfig.xml " , " /QRDTConfig/UpdateAllReplicas " , " 1 " );
// need to change
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Flags/ReplicationModel " , " SyncOnRestart " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\QRDT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/IncludeExternalMachines " , " true " );
}
machineList = getMachineList(ServiceType.LADT, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Persistence/LoadAllRecords " , " true " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashCampaignIDABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 16 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Flags/ReplicationModel " , " SyncOnRestart " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Flags/UserDefinedPartition " , " true " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/Enabled " , " true " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/BlockSize " , " 24576 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CompressionLevel " , " 9 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CacheSizePercent " , " 0 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/NumberThreads " , " 7 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\LADT\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/PhysicalStore/Compression/CompressionBufferSize " , " 50 " );
}
machineList = getMachineList(ServiceType.CQM, PilotType.AP);
foreach ( string machine in machineList)
{
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/ListingLADTMessageType " , " 1 " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\QueueManagerConfig.xml " , " /OLSQueueManagerConfig/LADTPartitionKeyType " , " 1 " );
// CQM-OLS-OLSConfig.xml(static) there are lots of <datastore> node
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Name " , " URLHashCampaignIDABTestID " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Type " , " Binary " );
setVerificationNode(sb, machine, sourcepath + " Config\\Static\\CrawlQueue\\OlsConfig.xml " , " /OLSConfiguration/DataStores/DataStore/Key/Size " , " 16 " );
}
}
private static StringBuilder setVerificationNode(StringBuilder sb, string machine, string sourcefile, string nodepath, string value)
{
sb.Append( " <Verification Type=\ " ConfigurationValueVerification\ " Mode=\ " IgnoreCase\ " Severity=\ " Error\ " Description=\ " \ " > " );
sb.Append( " <SourceFile> " );
sb.Append( " \\\\ " ).Append(machine).Append(sourcefile);
sb.Append( " </SourceFile> " );
sb.Append( " <NodePath> " );
sb.Append(nodepath);
sb.Append( " </NodePath> " );
sb.Append( " <Value> " );
sb.Append(value);
sb.Append( " </Value> " );
sb.Append( " </Verification> " );
return sb;
}
#region get machine list on ORV
/// <summary>
/// get machinelist according to service type
/// </summary>
/// <param name="serviceType"></param>
/// <param name="pilotType"></param>
/// <returns></returns>
public static List < string > getMachineList(ServiceType serviceType, PilotType pilotType)
{
List < string > machineList = new List < string > ();
List < string > machines = new List < string > ();
machineList = getMachineList(pilotType);
foreach ( string item in machineList)
{
if (item.StartsWith(serviceType.ToString()))
machines.Add(item.Split( ' , ' )[ 1 ]);
}
return machines;
}
/// <summary>
/// get all machinelist(service,machinename)
/// </summary>
/// <param name="pilotType"></param>
/// <returns></returns>
public static List < string > getMachineList(PilotType pilotType)
{
List < string > machineList = new List < string > ();
string machinelistxml = string .Empty;
XmlDocument xml = new XmlDocument();
if (pilotType == PilotType.MP)
machinelistxml = machinelist_mp;
else
machinelistxml = machinelist_ap;
xml.Load(machinelistxml);
XmlNodeList node = xml.SelectNodes( " //MachineList/Environment/Engine " );
bool exist = false ;
foreach (XmlNode item in node)
{
if (item.Attributes[ " Type " ].Value == " PaidSearch " )
{
XmlNodeList clusterList = item.SelectNodes( " Cluster/Service " );
foreach (XmlNode itemService in clusterList)
{
XmlNodeList machinesList = itemService.SelectNodes( " MachineGroup/Machine " );
foreach (XmlNode itemMachine in machinesList)
{
foreach (XmlAttribute attri in itemMachine.Attributes) // exclude type=reference
{
if (attri.Name == " Type " ) exist = true ;
}
if ( ! exist)
{
XmlNodeList machines = itemMachine.SelectNodes( " Name " );
foreach (XmlNode itemMachineName in machines)
{
machineList.Add(itemService.Attributes[ " Name " ].Value + " , " + itemMachineName.InnerText);
}
}
exist = false ;
}
}
}
}
return machineList;
}
#endregion
}
#region Define two enum for Service and Pilot type
/// <summary>
/// Service type on ORV, including Keyword,Listing,QRDT,LADT,CQM
/// </summary>
public enum ServiceType
{
Keyword = 0 ,
Listing = 1 ,
QRDT = 2 ,
LADT = 3 ,
CQM = 4
};
/// <summary>
/// Pilot type, including Manual Pilot(MP) and Aotomatic Pilot(AP)
/// </summary>
public enum PilotType
{
MP = 0 ,
AP = 1
};
#endregion
}
最后,将所需要的输入文件输出到输出目录,这里的输出目录是bin/debug目录,具体操作如下:
右击项目名称,点击“Properties”,选择“Build Events”,点击“Edit Post-build...”,在commandline中键入
md $(TargetDir)output
copy $(ProjectDir)*.xml $(TargetDir)
当然也可以点击“Macros”进行选择。
类似于$(TargetDir)的意义,可以参见http://msdn.microsoft.com/en-us/library/42x5kfw4(VS.80).aspx
本文介绍了一种高效准确的方法,用于批量生成XML配置验证文件,适用于数十至数百台服务器的配置信息测试。通过程序自动生成XML参数文件,避免了手动操作的繁琐与错误风险。

1957

被折叠的 条评论
为什么被折叠?



