mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Multiple fixes to partial reload
This commit is contained in:
@@ -1013,16 +1013,16 @@ def refreshShapersUpdateOnly():
|
|||||||
|
|
||||||
|
|
||||||
def getClassIDofParentNodes(data, classIDOfParentNodes):
|
def getClassIDofParentNodes(data, classIDOfParentNodes):
|
||||||
|
revisedClassIDOfParentNodes = classIDOfParentNodes
|
||||||
for node in data:
|
for node in data:
|
||||||
if isinstance(node, str):
|
if isinstance(node, str):
|
||||||
if (isinstance(data[node], dict)) and (node != 'children'):
|
if (isinstance(data[node], dict)) and (node != 'children'):
|
||||||
thisParentNode = node
|
thisParentNode = node
|
||||||
classIDOfParentNodes[thisParentNode] = data[node]['classid']
|
classIDOfParentNodes[thisParentNode] = data[node]['classid']
|
||||||
if 'children' in data[node]:
|
if 'children' in data[node]:
|
||||||
for child in data[node]['children']:
|
result = getClassIDofParentNodes(data[node]['children'], revisedClassIDOfParentNodes)
|
||||||
result = getClassIDofParentNodes(data[node]['children'], classIDOfParentNodes)
|
revisedClassIDOfParentNodes.update(result)
|
||||||
classIDOfParentNodes.update(result)
|
return revisedClassIDOfParentNodes
|
||||||
return classIDOfParentNodes
|
|
||||||
classIDOfParentNodes = getClassIDofParentNodes(network, {})
|
classIDOfParentNodes = getClassIDofParentNodes(network, {})
|
||||||
|
|
||||||
|
|
||||||
@@ -1036,28 +1036,27 @@ def refreshShapersUpdateOnly():
|
|||||||
if circuit['circuitID'] not in allCircuitIDs:
|
if circuit['circuitID'] not in allCircuitIDs:
|
||||||
allCircuitIDs.append(circuit['circuitID'])
|
allCircuitIDs.append(circuit['circuitID'])
|
||||||
if 'children' in data[node]:
|
if 'children' in data[node]:
|
||||||
for child in data[node]['children']:
|
result = getAllCircuitIDs(data[node]['children'], allCircuitIDs)
|
||||||
result = getAllCircuitIDs(data[node]['children'], allCircuitIDs)
|
for entry in result:
|
||||||
for entry in result:
|
if entry not in allCircuitIDs:
|
||||||
if entry not in allCircuitIDs:
|
allCircuitIDs.append(result)
|
||||||
allCircuitIDs.append(result)
|
|
||||||
return allCircuitIDs
|
return allCircuitIDs
|
||||||
allCircuitIDs = getAllCircuitIDs(network, [])
|
allCircuitIDs = getAllCircuitIDs(network, [])
|
||||||
|
|
||||||
|
|
||||||
def getClassIDofExistingCircuitID(data, classIDofExistingCircuitID):
|
def getClassIDofExistingCircuitID(data, classIDofExistingCircuitID):
|
||||||
|
revisedClassIDofExistingCircuitID = classIDofExistingCircuitID
|
||||||
for node in data:
|
for node in data:
|
||||||
if isinstance(node, str):
|
if isinstance(node, str):
|
||||||
if (isinstance(data[node], dict)) and (node != 'children'):
|
if (isinstance(data[node], dict)) and (node != 'children'):
|
||||||
thisParentNode = node
|
thisParentNode = node
|
||||||
if 'circuits' in data[node]:
|
if 'circuits' in data[node]:
|
||||||
for circuit in data[node]['circuits']:
|
for circuit in data[node]['circuits']:
|
||||||
classIDofExistingCircuitID[circuit['circuitID']] = circuit['classid']
|
revisedClassIDofExistingCircuitID[circuit['circuitID']] = circuit['classid']
|
||||||
if 'children' in data[node]:
|
if 'children' in data[node]:
|
||||||
for child in data[node]['children']:
|
result = getClassIDofExistingCircuitID(data[node]['children'], revisedClassIDofExistingCircuitID)
|
||||||
result = getClassIDofExistingCircuitID(data[node]['children'], classIDofExistingCircuitID)
|
revisedClassIDofExistingCircuitID.update(result)
|
||||||
classIDofExistingCircuitID.update(result)
|
return revisedClassIDofExistingCircuitID
|
||||||
return classIDofExistingCircuitID
|
|
||||||
classIDofExistingCircuitID = getClassIDofExistingCircuitID(network, {})
|
classIDofExistingCircuitID = getClassIDofExistingCircuitID(network, {})
|
||||||
|
|
||||||
|
|
||||||
@@ -1070,24 +1069,23 @@ def refreshShapersUpdateOnly():
|
|||||||
for circuit in data[node]['circuits']:
|
for circuit in data[node]['circuits']:
|
||||||
parentNodeOfCircuitID[circuit['circuitID']] = thisParentNode
|
parentNodeOfCircuitID[circuit['circuitID']] = thisParentNode
|
||||||
if 'children' in data[node]:
|
if 'children' in data[node]:
|
||||||
for child in data[node]['children']:
|
result = getParentNodeOfCircuitID(data[node]['children'], parentNodeOfCircuitID, allCircuitIDs)
|
||||||
result = getParentNodeOfCircuitID(data[node]['children'], parentNodeOfCircuitID, allCircuitIDs)
|
parentNodeOfCircuitID.update(result)
|
||||||
parentNodeOfCircuitID.update(result)
|
|
||||||
return parentNodeOfCircuitID
|
return parentNodeOfCircuitID
|
||||||
parentNodeOfCircuitID = getParentNodeOfCircuitID(network, {}, allCircuitIDs)
|
parentNodeOfCircuitID = getParentNodeOfCircuitID(network, {}, allCircuitIDs)
|
||||||
|
|
||||||
|
|
||||||
def getCPUnumOfParentNodes(data, cpuNumOfParentNode):
|
def getCPUnumOfParentNodes(data, cpuNumOfParentNode):
|
||||||
|
revisedCpuNumOfParentNode = cpuNumOfParentNode
|
||||||
for node in data:
|
for node in data:
|
||||||
if isinstance(node, str):
|
if isinstance(node, str):
|
||||||
if (isinstance(data[node], dict)) and (node != 'children'):
|
if (isinstance(data[node], dict)) and (node != 'children'):
|
||||||
thisParentNode = node
|
thisParentNode = node
|
||||||
cpuNumOfParentNode[thisParentNode] = data[node]['cpuNum']
|
revisedCpuNumOfParentNode[thisParentNode] = data[node]['cpuNum']
|
||||||
if 'children' in data[node]:
|
if 'children' in data[node]:
|
||||||
for child in data[node]['children']:
|
result = getCPUnumOfParentNodes(data[node]['children'], revisedCpuNumOfParentNode)
|
||||||
result = getCPUnumOfParentNodes(data[node]['children'], cpuNumOfParentNode)
|
revisedCpuNumOfParentNode.update(result)
|
||||||
cpuNumOfParentNode.update(result)
|
return revisedCpuNumOfParentNode
|
||||||
return cpuNumOfParentNode
|
|
||||||
|
|
||||||
cpuNumOfParentNodeHex = getCPUnumOfParentNodes(network, {})
|
cpuNumOfParentNodeHex = getCPUnumOfParentNodes(network, {})
|
||||||
cpuNumOfParentNodeInt = {}
|
cpuNumOfParentNodeInt = {}
|
||||||
@@ -1199,6 +1197,7 @@ def refreshShapersUpdateOnly():
|
|||||||
if generatedPNcounter > len(generatedPNs):
|
if generatedPNcounter > len(generatedPNs):
|
||||||
generatedPNcounter = 1
|
generatedPNcounter = 1
|
||||||
cpuNumHex = cpuNumOfParentNodeHex[circuit['ParentNode']]
|
cpuNumHex = cpuNumOfParentNodeHex[circuit['ParentNode']]
|
||||||
|
|
||||||
cpuNumInt = cpuNumOfParentNodeInt[circuit['ParentNode']]
|
cpuNumInt = cpuNumOfParentNodeInt[circuit['ParentNode']]
|
||||||
parentNodeClassID = classIDOfParentNodes[circuit['ParentNode']]
|
parentNodeClassID = classIDOfParentNodes[circuit['ParentNode']]
|
||||||
classID = parentNodeClassID.split(':')[0] + ':' + hex(lastUsedClassIDCounterByCPU[str(cpuNumInt)])
|
classID = parentNodeClassID.split(':')[0] + ':' + hex(lastUsedClassIDCounterByCPU[str(cpuNumInt)])
|
||||||
@@ -1206,7 +1205,7 @@ def refreshShapersUpdateOnly():
|
|||||||
circuit['classid'] = classID
|
circuit['classid'] = classID
|
||||||
# Add HTB class, qdisc
|
# Add HTB class, qdisc
|
||||||
addCircuitHTBandQdisc(circuit, parentNodeClassID)
|
addCircuitHTBandQdisc(circuit, parentNodeClassID)
|
||||||
addDeviceIPsToFilter(circuit, cpuNumHex)
|
addDeviceIPsToFilter(circuit, cpuNumHex, parentNodeClassID)
|
||||||
if circuit['ParentNode'] in circuitsToAddByParentNode:
|
if circuit['ParentNode'] in circuitsToAddByParentNode:
|
||||||
temp = circuitsToAddByParentNode[circuit['ParentNode']]
|
temp = circuitsToAddByParentNode[circuit['ParentNode']]
|
||||||
temp.append(circuit)
|
temp.append(circuit)
|
||||||
@@ -1221,33 +1220,38 @@ def refreshShapersUpdateOnly():
|
|||||||
itemsToChange = (circuitsIDsToRemove, circuitsToUpdateByID, circuitsToAddByParentNode)
|
itemsToChange = (circuitsIDsToRemove, circuitsToUpdateByID, circuitsToAddByParentNode)
|
||||||
def updateNetworkStructure(data, depth, itemsToChange):
|
def updateNetworkStructure(data, depth, itemsToChange):
|
||||||
circuitsIDsToRemove, circuitsToUpdateByID, circuitsToAddByParentNode = itemsToChange
|
circuitsIDsToRemove, circuitsToUpdateByID, circuitsToAddByParentNode = itemsToChange
|
||||||
for node in data:
|
parentNodesToAddCircuitsTo = []
|
||||||
|
for thing in circuitsToAddByParentNode:
|
||||||
|
parentNodesToAddCircuitsTo.append(thing)
|
||||||
|
revisedData = data
|
||||||
|
for node in revisedData:
|
||||||
if isinstance(node, str):
|
if isinstance(node, str):
|
||||||
if (isinstance(data[node], dict)) and (node != 'children'):
|
if (isinstance(revisedData[node], dict)) and (node != 'children'):
|
||||||
thisParentNode = node
|
thisParentNode = node
|
||||||
if 'circuits' in data[node]:
|
if 'circuits' in revisedData[node]:
|
||||||
for circuit in data[node]['circuits']:
|
for circuit in revisedData[node]['circuits']:
|
||||||
if circuit['circuitID'] in circuitsToUpdateByID:
|
if circuit['circuitID'] in circuitsToUpdateByID:
|
||||||
circuit = circuitsToUpdateByID[circuit['circuitID']]
|
circuit = circuitsToUpdateByID[circuit['circuitID']]
|
||||||
print('updated')
|
print('updated')
|
||||||
if circuit['circuitID'] in circuitsIDsToRemove:
|
if circuit['circuitID'] in circuitsIDsToRemove:
|
||||||
data[node]['circuits'].remove(circuit)
|
revisedData[node]['circuits'].remove(circuit)
|
||||||
if thisParentNode in circuitsToAddByParentNode:
|
if thisParentNode in parentNodesToAddCircuitsTo:
|
||||||
if 'circuits' in data[node]:
|
if 'circuits' in revisedData[node]:
|
||||||
temp = data[node]['circuits']
|
temp = revisedData[node]['circuits']
|
||||||
for circuit in circuitsToAddByParentNode[thisParentNode]:
|
for circuit in circuitsToAddByParentNode[thisParentNode]:
|
||||||
temp.append(circuit)
|
temp.append(circuit)
|
||||||
data[node]['circuits'] = temp
|
print('added ')
|
||||||
|
print(circuit)
|
||||||
|
revisedData[node]['circuits'] = temp
|
||||||
else:
|
else:
|
||||||
temp = []
|
temp = []
|
||||||
for circuit in circuitsToAddByParentNode[thisParentNode]:
|
for circuit in circuitsToAddByParentNode[thisParentNode]:
|
||||||
temp.append(circuit)
|
temp.append(circuit)
|
||||||
data[node]['circuits'] = temp
|
revisedData[node]['circuits'] = temp
|
||||||
if 'children' in data[node]:
|
if 'children' in revisedData[node]:
|
||||||
for child in data[node]['children']:
|
result = updateNetworkStructure(revisedData[node]['children'], depth+1, itemsToChange)
|
||||||
result = updateNetworkStructure(data[node]['children'][child], depth+1, itemsToChange)
|
revisedData[node]['children'] = result
|
||||||
data[node]['children'][child] = result
|
return revisedData
|
||||||
return data
|
|
||||||
network = updateNetworkStructure(network, 0 , itemsToChange)
|
network = updateNetworkStructure(network, 0 , itemsToChange)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user