Skip to content

Commit

Permalink
fixes to generation of resources
Browse files Browse the repository at this point in the history
  • Loading branch information
JoeyVanhalstSLC committed Sep 8, 2023
1 parent 25ed3bd commit 6aaf546
Showing 1 changed file with 61 additions and 63 deletions.
124 changes: 61 additions & 63 deletions MO.VSG.EvsNeuron_1/MO.VSG.EvsNeuron_1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ public class Script
{ "16", "D4" },
};

private readonly Dictionary<string, VideoPathData> videoPaths = new Dictionary<string, VideoPathData>();

private IEngine engine;
private IDms dms;
private DomHelper flowHelper;
Expand All @@ -160,22 +162,22 @@ public void Run(IEngine engine)

foreach (var element in dms.GetElements().Where(e => e.Protocol.Name == ProtocolName && e.Protocol.Version == "Production"))
{
var inputVirtualSignalGroups = GenerateSdiVirtualSignalGroupsAndFlows(element);
var outputVirtualSignalGroups = GenerateIpVirtualSignalGroupsAndFlows(element);
GenerateSdiVirtualSignalGroupsAndFlows(element);
GenerateIpVirtualSignalGroupsAndFlows(element);

GenerateResources(element, inputVirtualSignalGroups, outputVirtualSignalGroups);
GenerateResources(element);
}
}

private List<VideoPathData> GenerateSdiVirtualSignalGroupsAndFlows(IDmsElement element)
private void GenerateSdiVirtualSignalGroupsAndFlows(IDmsElement element)
{
var sdiFlowInstances = GenerateSdiFlowInstances(element);
numberOfGeneratedSdiFlows = sdiFlowInstances.Count;

return GenerateSdiVirtualSignalGroups(element, sdiFlowInstances);
GenerateSdiVirtualSignalGroups(element, sdiFlowInstances);
}

private List<VideoPathData> GenerateIpVirtualSignalGroupsAndFlows(IDmsElement element)
private void GenerateIpVirtualSignalGroupsAndFlows(IDmsElement element)
{
var macSettingsTable = element.GetTable(MacSettingsTableId);
var macSettingsTableRows = macSettingsTable.GetData().Values.ToArray();
Expand All @@ -188,41 +190,40 @@ private List<VideoPathData> GenerateIpVirtualSignalGroupsAndFlows(IDmsElement el
var secondaryStreamSourceIp = secondMacSettingsRow[2].ToString();
var secondMacDcfInterfaceId = GetDcfInterfaceId(element, MacSettingsTableDcfParameterGroupId, secondMacSettingsRow[0].ToString());

Dictionary<string, DomInstance> ipAudioPrimaryFlowInstances = new Dictionary<string, DomInstance>();
Dictionary<string, DomInstance> ipAudioSecondaryFlowInstances = new Dictionary<string, DomInstance>();
Dictionary<string, DomInstance> ipVideoPrimaryFlowInstances = new Dictionary<string, DomInstance>();
Dictionary<string, DomInstance> ipVideoSecondaryFlowInstances = new Dictionary<string, DomInstance>();

var ipVideoOutputStreamsTable = element.GetTable(IpVideoOutputStreamsTableId);
foreach (var row in ipVideoOutputStreamsTable.GetData().Values)
{
var flowInstance = GenerateIpFlowFromMainStreamIpVideoOutputStreamsTable(element, row, mainStreamSourceIp, firstMacDcfInterfaceId);
flowHelper.DomInstances.Create(flowInstance.Value);
var mainFlowInstance = GenerateIpFlowFromMainStreamIpVideoOutputStreamsTable(element, row, mainStreamSourceIp, firstMacDcfInterfaceId);
flowHelper.DomInstances.Create(mainFlowInstance.Value);

ipVideoPrimaryFlowInstances.Add(flowInstance.Key, flowInstance.Value);
ipVideoPrimaryFlowInstances.Add(mainFlowInstance.Key, mainFlowInstance.Value);

flowInstance = GenerateIpFlowFromSecondaryStreamIpVideoOutputStreamsTable(element, row, secondaryStreamSourceIp, secondMacDcfInterfaceId);
flowHelper.DomInstances.Create(flowInstance.Value);
var secondaryFlowInstance = GenerateIpFlowFromSecondaryStreamIpVideoOutputStreamsTable(element, row, secondaryStreamSourceIp, secondMacDcfInterfaceId);
flowHelper.DomInstances.Create(secondaryFlowInstance.Value);

ipVideoSecondaryFlowInstances.Add(flowInstance.Key, flowInstance.Value);
ipVideoSecondaryFlowInstances.Add(secondaryFlowInstance.Key, secondaryFlowInstance.Value);
}

Dictionary<string, DomInstance> ipAudioPrimaryFlowInstances = new Dictionary<string, DomInstance>();
Dictionary<string, DomInstance> ipAudioSecondaryFlowInstances = new Dictionary<string, DomInstance>();

var ipAudioOutputStreamsTable = element.GetTable(IpAudioOutputStreamsTableId);
foreach (var row in ipAudioOutputStreamsTable.GetData().Values)
{
var flowInstance = GenerateIpFlowFromMainStreamIpAudioOutputStreamsTable(element, row, mainStreamSourceIp, firstMacDcfInterfaceId);
flowHelper.DomInstances.Create(flowInstance.Value);
var mainFlowInstance = GenerateIpFlowFromMainStreamIpAudioOutputStreamsTable(element, row, mainStreamSourceIp, firstMacDcfInterfaceId);
flowHelper.DomInstances.Create(mainFlowInstance.Value);

ipAudioPrimaryFlowInstances.Add(flowInstance.Key, flowInstance.Value);
ipAudioPrimaryFlowInstances.Add(mainFlowInstance.Key, mainFlowInstance.Value);

flowInstance = GenerateIpFlowFromSecondaryStreamIpAudioOutputStreamsTable(element, row, secondaryStreamSourceIp, secondMacDcfInterfaceId);
flowHelper.DomInstances.Create(flowInstance.Value);
var secondaryFlowInstance = GenerateIpFlowFromSecondaryStreamIpAudioOutputStreamsTable(element, row, secondaryStreamSourceIp, secondMacDcfInterfaceId);
flowHelper.DomInstances.Create(secondaryFlowInstance.Value);

ipAudioSecondaryFlowInstances.Add(flowInstance.Key, flowInstance.Value);
ipAudioSecondaryFlowInstances.Add(secondaryFlowInstance.Key, secondaryFlowInstance.Value);
}

var generatedVirtualSignalGroups = new List<VideoPathData>();

var videoPathsTable = element.GetTable(VideoPathsTableId);
foreach (var row in videoPathsTable.GetData().Values)
{
Expand All @@ -242,22 +243,19 @@ private List<VideoPathData> GenerateIpVirtualSignalGroupsAndFlows(IDmsElement el
flowInstance = ipAudioSecondaryFlowInstances[primaryKey];
AssignFlowToVirtualSignalGroup(virtualSignalGroupInstance, flowInstance, Level.Audio1, false);

var videoPathData = new VideoPathData
{
Index = row[0].ToString(),
IsSource = true,
GeneratedVirtualSignalGroup = virtualSignalGroupInstance,
};
virtualSignalGroupInstance = vsGroupHelper.DomInstances.Create(virtualSignalGroupInstance);

generatedVirtualSignalGroups.Add(videoPathData);
if (!videoPaths.TryGetValue(primaryKey, out var videoPath))
{
videoPath = new VideoPathData { Path = primaryKey };
videoPaths[primaryKey] = videoPath;
}

vsGroupHelper.DomInstances.Create(virtualSignalGroupInstance);
videoPath.GeneratedOutputVirtualSignalGroup = virtualSignalGroupInstance;
}

return generatedVirtualSignalGroups;
}

private void GenerateResources(IDmsElement element, List<VideoPathData> inputVirtualSignalGroups, List<VideoPathData> outputVirtualSignalGroups)
private void GenerateResources(IDmsElement element)
{
var resourceManagerHelper = new ResourceManagerHelper(engine.SendSLNetSingleResponseMessage);

Expand Down Expand Up @@ -291,9 +289,13 @@ private void GenerateResources(IDmsElement element, List<VideoPathData> inputVir
var resources = new List<Resource>();

var videoPathsTable = element.GetTable(VideoPathsTableId);
foreach (var rowData in videoPathsTable.GetData().Values)
foreach (var row in videoPathsTable.GetData().Values)
{
var index = Convert.ToString(rowData[0]);
var index = Convert.ToString(row[0]);
if (!videoPaths.TryGetValue(index, out var videoPath))
{
continue;
}

var resourceId = Guid.NewGuid();

Expand All @@ -302,6 +304,7 @@ private void GenerateResources(IDmsElement element, List<VideoPathData> inputVir
ID = resourceId,
GUID = resourceId,
Name = $"{element.Name} {index}",
DmaID = element.DmsElementId.AgentId,
ElementID = element.DmsElementId.ElementId,
Mode = ResourceMode.Available,
MaxConcurrency = 1000,
Expand All @@ -316,12 +319,12 @@ private void GenerateResources(IDmsElement element, List<VideoPathData> inputVir
new ResourceManagerProperty
{
Name = "input VSGs",
Value = String.Join(";", inputVirtualSignalGroups.Select(vsg => vsg.GeneratedVirtualSignalGroup.ID.Id)),
Value = videoPath.GeneratedInputVirtualSignalGroup?.ID?.Id.ToString(),
},
new ResourceManagerProperty
{
Name = "output VSGs",
Value = String.Join(";", outputVirtualSignalGroups.Select(vsg => vsg.GeneratedVirtualSignalGroup.ID.Id)),
Value = videoPath.GeneratedOutputVirtualSignalGroup?.ID?.Id.ToString(),
},
},
Capabilities = new List<Skyline.DataMiner.Net.SRM.Capabilities.ResourceCapability>
Expand All @@ -330,7 +333,7 @@ private void GenerateResources(IDmsElement element, List<VideoPathData> inputVir
{
CapabilityProfileID = profileParameter.ID,
IsTimeDynamic = true,
Value = null,
Value = new CapabilityParameterValue()
},
},
};
Expand Down Expand Up @@ -404,15 +407,13 @@ private Dictionary<string, DomInstance> GenerateSdiFlowInstancesFromSdiBiDirecti
return sdiFlowInstances;
}

private List<VideoPathData> GenerateSdiVirtualSignalGroups(IDmsElement element, Dictionary<string, DomInstance> sdiFlowInstances)
private void GenerateSdiVirtualSignalGroups(IDmsElement element, Dictionary<string, DomInstance> sdiFlowInstances)
{
var generatedVirtualSignalGroups = new List<VideoPathData>();

var tableVideoPaths = element.GetTable(VideoPathsTableId);
var rows = tableVideoPaths.GetData().Values;

foreach (var row in rows)
foreach (var row in tableVideoPaths.GetData().Values)
{
var primaryKey = row[0].ToString();

var virtualSignalGroupInstance = GenerateVirtualSignalGroupForSdiInput(element, row);

var flowsAssigned = false;
Expand Down Expand Up @@ -445,18 +446,15 @@ private List<VideoPathData> GenerateSdiVirtualSignalGroups(IDmsElement element,
{
virtualSignalGroupInstance = vsGroupHelper.DomInstances.Create(virtualSignalGroupInstance);

var videoPathData = new VideoPathData
if (!videoPaths.TryGetValue(primaryKey, out var videoPath))
{
Index = row[0].ToString(),
IsSource = false,
GeneratedVirtualSignalGroup = virtualSignalGroupInstance,
};
videoPath = new VideoPathData { Path = primaryKey };
videoPaths[primaryKey] = videoPath;
}

generatedVirtualSignalGroups.Add(videoPathData);
videoPath.GeneratedInputVirtualSignalGroup = virtualSignalGroupInstance;
}
}

return generatedVirtualSignalGroups;
}

private DomInstance GenerateVirtualSignalGroupForSdiInput(IDmsElement element, object[] row)
Expand All @@ -471,7 +469,7 @@ private DomInstance GenerateVirtualSignalGroupForSdiInput(IDmsElement element, o
virtualSignalGroupInstance.AddOrUpdateFieldValue(
VirtualSignalGroup.Sections.Info.Definition,
VirtualSignalGroup.Sections.Info.Name,
$"{element.Name} {index}");
$"{element.Name} {index} Input");
virtualSignalGroupInstance.AddOrUpdateFieldValue(
VirtualSignalGroup.Sections.Info.Definition,
VirtualSignalGroup.Sections.Info.Role,
Expand Down Expand Up @@ -528,7 +526,7 @@ private DomInstance GenerateVirtualSignalGroupForIpInput(IDmsElement element, ob
virtualSignalGroupInstance.AddOrUpdateFieldValue(
VirtualSignalGroup.Sections.Info.Definition,
VirtualSignalGroup.Sections.Info.Name,
element.Name + index);
$"{element.Name} {index} Output");
virtualSignalGroupInstance.AddOrUpdateFieldValue(
VirtualSignalGroup.Sections.Info.Definition,
VirtualSignalGroup.Sections.Info.Role,
Expand Down Expand Up @@ -739,11 +737,11 @@ private KeyValuePair<string, DomInstance> GenerateIpFlowFromMainStreamIpAudioOut
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowInfo.Definition, Flows.Sections.FlowInfo.AdministrativeState, (int)AdministrativeState.Up);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowInfo.Definition, Flows.Sections.FlowInfo.TransportType, (int)TransportType.St2110_30);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.Element, element.DmsElementId.Value);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.SubInterface, rowData[0].ToString());
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.SubInterface, primaryKey);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.Interface, dcfInterface);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.PathOrder, 0L);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationPort, Convert.ToInt64(rowData[5].ToString()));
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationIp, rowData[6].ToString());
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationPort, Convert.ToInt64(rowData[3].ToString()));
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationIp, rowData[4].ToString());
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.SourceIp, sourceIp);

return new KeyValuePair<string, DomInstance>(pathSelection, flowInstance);
Expand All @@ -765,11 +763,11 @@ private KeyValuePair<string, DomInstance> GenerateIpFlowFromSecondaryStreamIpAud
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowInfo.Definition, Flows.Sections.FlowInfo.AdministrativeState, (int)AdministrativeState.Up);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowInfo.Definition, Flows.Sections.FlowInfo.TransportType, (int)TransportType.St2110_30);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.Element, element.DmsElementId.Value);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.SubInterface, rowData[0].ToString());
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.SubInterface, primaryKey);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.Interface, dcfInterface);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowPath.Definition, Flows.Sections.FlowPath.PathOrder, 0L);
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationPort, Convert.ToInt64(rowData[13].ToString()));
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationIp, rowData[14].ToString());
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationPort, Convert.ToInt64(rowData[11].ToString()));
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.DestinationIp, rowData[12].ToString());
flowInstance.AddOrUpdateFieldValue(Flows.Sections.FlowTransport.Definition, Flows.Sections.FlowTransport.SourceIp, sourceIp);

return new KeyValuePair<string, DomInstance>(pathSelection, flowInstance);
Expand Down Expand Up @@ -802,10 +800,10 @@ private string GetDcfInterfaceId(IDmsElement element, int parameterGroupId, stri

public class VideoPathData
{
public string Index { get; set; }
public string Path { get; set; }

public DomInstance GeneratedVirtualSignalGroup { get; set; }
public DomInstance GeneratedInputVirtualSignalGroup { get; set; }

public bool IsSource { get; set; }
public DomInstance GeneratedOutputVirtualSignalGroup { get; set; }
}
}

0 comments on commit 6aaf546

Please sign in to comment.