De bedoeling was om bepaalde informatie uit een tekstbestand te halen.
Zo ziet het tekstbestand er ongeveer uit:
metadataIngester: now executing performAction with token: 9188147351
metadataIngester: result of performAction with token:9188147351
metadataIngester: runtime (ms) for token 9188147351: 9953
inferencer: now executing performAction with token:9188147351
inferencer: result of performAction with token:9188147351
inferencer: runtime (ms) for token 9188147351: 10903
transcoder: now executing performAction with token:9188147351
transcoder: result of performAction with token:9188147351
transcoder: runtime (ms) for token 9188147351: 65456
transcoder: now executing performAction with token:9188147351
transcoder: result of performAction with token:9188147351
transcoder: runtime (ms) for token 9188147351: 83128
streamingServerTransfer: now executing performAction with token:9188147351
streamingServerTransfer: result of performAction with token:9188147351
streamingServerTransfer: runtime (ms) for token 9188147351: 12187
middleware: now executing performAction with token:9188147351
middleware: result of performAction with token:9188147351
middleware: runtime (ms) for token 9188147351: 28148
Nu, er zijn meerdere delen zoals dit met andere tokenID's & runtimes.
Ik neem hier de runtime voor elke stap (in dit voorbeeld zal het 9953 + 10903 + 65456 + 83128 + 12187 + 28148 = 209775 (ms) zijn) en in totaal is het dan 209775 voor dat bepaalde tokenID.
Het weergeeft nu ook het tokenID + de totale tijd per token.
Dit werkt ook allemaal en is maar een korte uitleg over wat ik juist wil.
Hieronder het probleem:
Ik zou elke fase waar hij doorloopt (metadataIngester, inferencer etc.) ook willen weergeven MAAR er mag maar 1 runtime per fase zijn (in dit voorbeeld zijn het er meerdere).
<?php
function parseTXT($data){
// Inlezen van tekstbestand & elke lijn apart in een array stoppen.
$file = "performance_100.txt";
$fh = fopen($file, "r");
$data = fread($fh,filesize($file));
fclose($fh);
$d_array = explode("\n", $data);
foreach ($d_array as $val){
// Filteren op deze bepaalde lijn (omdat ik de tijden nodig heb die hierachter komen)
if (strstr($val, "runtime (ms) for token")){
$tmp_array = explode(" ", $val);
$token = str_replace(":", "", $tmp_array[10]);
$token_array[$token][] = $tmp_array[11];
}
}
// Alle tussentijden moeten opgeteld worden tot één totale tijd.
foreach ($token_array as $key=>$val2){
$token_array[$key]['total'] = 0;
foreach ($val2 as $val3){
$token_array[$key]['total'] += $val3;
}
}
return $token_array;
}
// Weergave
foreach (parseTXT("some_file.txt") as $key=>$val){
echo "<h2>Token $key: </h2>";
echo "<table border=\"0\"><tr><th>MS to Complete each substep</th></tr>";
foreach ($val as $key2=>$val2){
if (is_int($key2)){
echo "<tr><td>$val2</td></tr>";
}
else{
echo "</table><h2><strong>Total time for $key: $val2 (ms)</strong</h2><br />";
}
}
}
?>
Edit: Dit is de uitvoer die ik nu krijg. En het probleem is dat er maar 5 substeps zijn namelijk:
metadataIngester
inferencer
transcoder
streamingServerTransfer
middleware
En ik krijg 7 tijden voor de substeps.
Token 9148825717:
MS to Complete each substep
7348
10715
11162
6334
40840
15477
37840
Total time for 9148825717: 129716 (ms)