in Services/DataX.Config/DataX.Config/ConfigGeneration/Processor/S500_ResolveOutputs.cs [96:195]
private async Task<FlowOutputSpec[]> ProcessOutputs(string inputMode, FlowGuiOutput[] uiOutputs, RulesCode rulesCode, string configName)
{
var outputList = uiOutputs.Select(o => o.Id).ToList();
var outputsFiltered = rulesCode.Outputs.Where(o => outputList.Contains(o.Item2)).ToList();
var flattenedOutputs = new Dictionary<string, List<string>>();
foreach (var o in outputsFiltered)
{
var outputNames = o.Item1.Split(new char[] { ',' });
foreach (string outputName in outputNames)
{
var name = outputName.Trim();
if (flattenedOutputs.TryGetValue(name, out List<string> val))
{
val.Add(o.Item2);
}
else
{
flattenedOutputs[name] = new List<string>() { o.Item2 };
}
}
}
List<FlowOutputSpec> fOutputList = new List<FlowOutputSpec>();
foreach (var fOut in flattenedOutputs)
{
FlowOutputSpec flowOutput = new FlowOutputSpec() { Name = fOut.Key };
foreach (var item in fOut.Value)
{
var output = uiOutputs.SingleOrDefault(o => o.Id.Equals(item));
switch (output.Type.ToLower())
{
case "cosmosdb":
{
var cosmosDbOutput = ProcessOutputCosmosDb(output);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.CosmosDbOutput, "Multiple target cosmosDB output for same dataset not supported.");
flowOutput.CosmosDbOutput = cosmosDbOutput;
break;
}
case "eventhub":
{
var eventhubOutput = ProcessOutputEventHub(output);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.EventHubOutput, "Multiple target eventHub/metric output for same dataset not supported.");
flowOutput.EventHubOutput = eventhubOutput;
break;
}
case "metric":
{
if (LocalUtility.IsLocalEnabled(Configuration))
{
if (Configuration.TryGet(Constants.ConfigSettingName_LocalMetricsHttpEndpoint, out string localMetricsEndpoint))
{
var httpOutput = ProcessLocalOutputMetric(configName, localMetricsEndpoint);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.HttpOutput, "Multiple target httpost/metric output for same dataset not supported.");
flowOutput.HttpOutput = httpOutput;
}
break;
}
else
{
var eventhubOutput = ProcessOutputMetric(output);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.EventHubOutput, "Multiple target eventHub/metric output for same dataset not supported.");
flowOutput.EventHubOutput = eventhubOutput;
break;
}
}
case "blob":
{
var blobOutput = await ProcessOutputBlob(inputMode, configName, output);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.BlobOutput, "Multiple target blob output for same dataset not supported.");
flowOutput.BlobOutput = blobOutput;
break;
}
case "local":
{
var blobOutput = ProcessOutputLocal(configName, output);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.BlobOutput, "Multiple target blob output for same dataset not supported.");
flowOutput.BlobOutput = blobOutput;
break;
}
case "sqlserver":
{
var sqlOutput = await ProcessOutputSql(configName, output).ConfigureAwait(false);
Ensure.EnsureNullElseThrowNotSupported(flowOutput.SqlOutput, "Multiple target Sql output for same dataset not supported.");
flowOutput.SqlOutput = sqlOutput;
break;
}
default:
throw new NotSupportedException($"{output.Type} output type not supported");
}
}
fOutputList.Add(flowOutput);
}
return fOutputList.ToArray();
}