Problem bei dynamischer "dict"-Generierung
Verfasst: Mittwoch 1. Juni 2016, 09:40
Hallo zusammen,
ich bräuchte eure Unterstützung bei einem Problem das ich habe.
Hier geht es um ein Codeschnipsel der aus einem "Gesamtwerk".
Hintergrund:
Ich möchte mit einem Script diverse URLs abfragen ob diese Erreichbar sind und mir Werte aus dem Output der URLs zusammen sammeln. Mittels Threading erfolgt das gleichzeitig. Wir sprechen hier von ca. 300 URLs / Rückgabewerten.
Dieser Teil funktioniert bereits.
Die URLs Teilen sich auf in unterschiedliche Umgebungen. Dabei gibt es Anwendungen die in allen, aber auch nur in teilweise dieser Umgebungen auftauchen.
Je nach Umgebungen kommt es also zu unterschiedlichen Antwortzeiten und auch unterschiedlichen Ergebnissen.
Mein Problem besteht nun die Werte sortierfähig zurück zu Ordnen.
Dazu habe ich mir eine Funktion geschrieben die das "in etwa" so hinbekommt wie ich das möchte:
Aufgerufen wird diese dann per:
Der Output sieht dann wie folgt aus:
Soweit so gut.
Das Problem ist nun, das ich über "temp" stolpere.
Jede App hat mehrere Clone, also muss ich das irgendwie zwischenspeichern.
Aber: sobald die gleiche "app" in einer anderen Umgebungen vorkommt, wird für jede Umgebung/App aus allen Zusammengefasst und bei allen gespeichert.
Das sieht dann so aus (Aufruf):
Output:
Ich hoffe das war verständlich ;o)
Hat hier jemand einen Tipp für mich?
Viele Grüße,
Blackbenji
ich bräuchte eure Unterstützung bei einem Problem das ich habe.
Hier geht es um ein Codeschnipsel der aus einem "Gesamtwerk".
Hintergrund:
Ich möchte mit einem Script diverse URLs abfragen ob diese Erreichbar sind und mir Werte aus dem Output der URLs zusammen sammeln. Mittels Threading erfolgt das gleichzeitig. Wir sprechen hier von ca. 300 URLs / Rückgabewerten.
Dieser Teil funktioniert bereits.
Die URLs Teilen sich auf in unterschiedliche Umgebungen. Dabei gibt es Anwendungen die in allen, aber auch nur in teilweise dieser Umgebungen auftauchen.
Je nach Umgebungen kommt es also zu unterschiedlichen Antwortzeiten und auch unterschiedlichen Ergebnissen.
Mein Problem besteht nun die Werte sortierfähig zurück zu Ordnen.
Dazu habe ich mir eine Funktion geschrieben die das "in etwa" so hinbekommt wie ich das möchte:
Code: Alles auswählen
arr = {}
temp = {}
def add(env, app, value):
if not temp:
temp.setdefault(app, [])
else:
for key in temp.keys():
if key is not app:
temp.setdefault(app, [])
temp[app].append(value)
if not arr:
arr.setdefault(env, [])
else:
for key in arr.keys():
if key is not env:
arr.setdefault(env, [])
if arr[env]:
print "hier"
if app in arr[env][0]:
del arr[env][0][app]
arr[env][0].append({app: temp[app]})
else:
print "nein hier"
arr[env].append({app: temp[app]})
Code: Alles auswählen
add("live", "app1", {"clone": "0", "status": "up", "version": "1.35"})
add("prelive", "app2", {"clone": "1", "status": "down", "version": "1.22"})
add("tui", "app3", {"clone": "1", "status": "failed", "version": "1.22"})
Code: Alles auswählen
{
'tui': [
{
'app3': [
{
'status': 'failed',
'clone': '1',
'version': '1.22'
}
]
}
],
'live': [
{
'app1': [
{
'status': 'up',
'clone': '0',
'version': '1.35'
}
]
}
],
'prelive': [
{
'app2': [
{
'status': 'down',
'clone': '1',
'version': '1.22'
}
]
}
]
}
Das Problem ist nun, das ich über "temp" stolpere.
Jede App hat mehrere Clone, also muss ich das irgendwie zwischenspeichern.
Aber: sobald die gleiche "app" in einer anderen Umgebungen vorkommt, wird für jede Umgebung/App aus allen Zusammengefasst und bei allen gespeichert.
Das sieht dann so aus (Aufruf):
Code: Alles auswählen
add("live", "app1", {"clone": "0", "status": "up", "version": "1.35"})
add("live", "app1", {"clone": "1", "status": "up", "version": "1.35"})
add("prelive", "app1", {"clone": "1", "status": "down", "version": "1.22"})
add("tui", "app3", {"clone": "1", "status": "failed", "version": "1.22"})
Code: Alles auswählen
{
'tui': [
{
'app3': [
{
'status': 'failed',
'clone': '1',
'version': '1.22'
}
]
}
],
'live': [
{},
{
'app1': [
{
'status': 'up',
'clone': '0',
'version': '1.35'
},
{
'status': 'up',
'clone': '1',
'version': '1.35'
},
{
'status': 'down',
'clone': '1',
'version': '1.22'
}
]
}
],
'prelive': [
{
'app1': [
{
'status': 'up',
'clone': '0',
'version': '1.35'
},
{
'status': 'up',
'clone': '1',
'version': '1.35'
},
{
'status': 'down',
'clone': '1',
'version': '1.22'
}
]
}
]
}
Hat hier jemand einen Tipp für mich?
Viele Grüße,
Blackbenji