diff --git a/tools/analysis/VisualFAIL/CONFIGURATION.php b/tools/analysis/VisualFAIL/CONFIGURATION.php index 6282fb84766e5c2d64e56cb9f8f7acfdefc43f61..60a7156887094049c41ff2fdf14a8fb7c660bc4a 100644 --- a/tools/analysis/VisualFAIL/CONFIGURATION.php +++ b/tools/analysis/VisualFAIL/CONFIGURATION.php @@ -1,10 +1,10 @@ -<?php -//Datenbank -$host = "localhost"; -$username = ""; -$password = ""; -$database = ""; - -// Name der result-Tabelle -$result_table = "result"; -?> +<?php +//Datenbank +$host = "localhost"; +$username = ""; +$password = ""; +$database = ""; + +// Name der result-Tabelle +$result_table = "result"; +?> diff --git a/tools/analysis/VisualFAIL/core.php b/tools/analysis/VisualFAIL/core.php index 5c84d6a40b51026d7c194163f83ed180f540691c..198a7b5c8ef3e9fc0547ba57050af524e66da6ed 100644 --- a/tools/analysis/VisualFAIL/core.php +++ b/tools/analysis/VisualFAIL/core.php @@ -1,475 +1,475 @@ -<?php -require('CONFIGURATION.php'); -//Datenbankverbindung aufbauen -$verbindung = mysql_connect ($host,$username, $password) - or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch"); - -mysql_select_db($database) or die ("Die Datenbank existiert nicht."); - -//Kommande lesen -switch ($_GET['kommando']) -{ - case "dbTest" : dbTest();break; - case "getAsmCode" : getAsmCode();break; - case "asmToSourceFile" : asmToSourceFile();break; - case "getBinarys" : getBinarys();break; - case "getVariants" : getVariants();break; - case "getSourceFiles" : getSourceFiles();break; - case "getResultTypes" : getResulttypesOUT();break; - case "getHighlevelCode" : getHighlevelCode();break; - case "resultsDB" : resultsDB();break; - case "dechex" : echo json_encode(dechex($_GET['dec']));break; -} - -function dbTest() -{ - - $check = true; - - $abfrage = "SELECT 1 FROM objdump;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle objdump nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM fulltrace;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle fulltrace nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM dbg_filename;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle dbg_filename nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM dbg_mapping;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle dbg_mapping nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM dbg_methods;"; - - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle dbg_methods nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM dbg_source;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle dbg_source nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM dbg_stacktrace;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle dbg_stacktrace nicht gefunden <br>'); - return; - } - - $abfrage = "SELECT 1 FROM dbg_variables;"; - - $ergebnis = mysql_query($abfrage); - - if(!$ergebnis) { - echo json_encode('Tabelle dbg_variables nicht gefunden <br>'); - return; - } -} - -function getBinarys() -{ - $binarys = array(); - - $abfrage = "SELECT benchmark FROM variant;"; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - - while($row = mysql_fetch_object($ergebnis)) - { - array_push($binarys, $row->benchmark); - } - - $result = array_unique($binarys); - - echo json_encode($result); -} - -function getVariants() -{ - $variants = array(); - - $abfrage = "SELECT id, variant FROM variant WHERE benchmark = '" . $_GET['datei'] ."';"; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - - while($row = mysql_fetch_object($ergebnis)) - { - $variants[$row->id] = $row->variant; - } - - echo json_encode($variants); -} - -function getSourceFiles() -{ - $sourceFiles = array(); - - $abfrage = "SELECT file_id, path FROM dbg_filename WHERE variant_id = '" . $_GET['variant']. "';"; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - - while($row = mysql_fetch_object($ergebnis)) - { - $sourceFiles[$row->file_id] = $row->path; - } - - echo json_encode($sourceFiles); -} - -function asmCode() -{ - $content = ""; - - $abfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id'] ."' ORDER BY instr_address;"; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - $content = $content; - while($row = mysql_fetch_object($ergebnis)) - { - $content = $content . '<span id="' . dechex($row->instr_address) . '">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; - } - echo json_encode($content); -} - -function getAsmCode() -{ - $content = ""; - $resulttypes = array(); - - $asmAbfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id'] ."' ORDER BY instr_address;"; - - $asmcode = mysql_query($asmAbfrage); - - getResulttypes($resulttypes); - - $fehlerdaten = resultsDB($_GET['variant_id'], $_GET['version'], $resulttypes); - //$fehlerdaten = askDBFehler($_GET['variant_id'], $resulttypes, $_GET['version']); - - //print_r($fehlerdaten); - $content = '<div id="maxFehler" '; - foreach ($resulttypes as $value) { - $temp = $value . '="' . $fehlerdaten[max][$value] . '" '; - $content = $content . $temp; - } - $content = $content .' >'; - while($row = mysql_fetch_object($asmcode)) - { - if (array_key_exists($row->instr_address,$fehlerdaten[Daten])) { - $content = $content . '<span id="' . dechex($row->instr_address) . '" class="hasFehler" '; - - foreach ($resulttypes as $value) { - $temp = $value . '="' . $fehlerdaten[Daten][$row->instr_address][$value] . '" '; - $content = $content . $temp; - } - - $content = $content . ' cursor: pointer;>' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; - } else { - $content = $content . '<span id="' . dechex($row->instr_address) . '">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; - } - } - - $content = $content . ' </div>'; - - echo json_encode($content); -} - -function getHighlevelCode() -{ - $content = ""; - $resulttypes = array(); - - getResulttypes($resulttypes); - - $kleinsteAdresseAbfrage = "SELECT instr_address FROM objdump WHERE variant_id = '" . $_GET['variant_id']. "' ORDER BY instr_address LIMIT 1;"; - $kleinsteAdresseErgebnis = mysql_query($kleinsteAdresseAbfrage); - $kleinsteAdresse = mysql_fetch_object($kleinsteAdresseErgebnis); - - $highlevelCodeAbfrage = "SELECT linenumber, line FROM dbg_source WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id']. "' ORDER BY linenumber;"; - $mappingAbfrage = "SELECT instr_absolute, linenumber FROM dbg_mapping WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id'] . "' AND instr_absolute >= '" . $kleinsteAdresse->instr_address . "' ORDER BY instr_absolute;"; - - $highlevelCode = mysql_query($highlevelCodeAbfrage); - $mappingInfo = mysql_query($mappingAbfrage); - - $fehlerdaten = resultsDB($_GET['variant_id'], $_GET['version'], $resulttypes); - - $mappingRanges = array(); - $numEntrysMapping = mysql_num_rows($mappingInfo); - - $row = mysql_fetch_object($mappingInfo); - - for ($i = 0; $i < $numEntrysMapping-1; $i++) - { - if(!is_array($mappingRanges[$row->linenumber])) { - $mappingRanges[$row->linenumber] = array(); - } - $oldLineNumber = $row->linenumber; - $firstAddr = $row->instr_absolute; - $row = mysql_fetch_object($mappingInfo); - array_push($mappingRanges[$oldLineNumber], array($firstAddr, $row->instr_absolute)); - } - - $mapping = array(); - $maxFehlerMapping = array(); - - foreach ($mappingRanges as $lineNumber => $value) { - $maxFehler = array(); - foreach ($resulttypes as $val) { - $maxFehler[$val] = 0; - } - foreach ($value as $index => $ranges) { - $InstrMappingAbfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id']. "' AND instr_address > '" . $ranges[0] . "' AND instr_address < '" . $ranges[1] . "' ORDER BY instr_address;"; - $mappingErgebnis = mysql_query($InstrMappingAbfrage); - //Leerzeile - $mapping[$lineNumber] [] = '<br>'; - while($row = mysql_fetch_object($mappingErgebnis)) { - - if (array_key_exists($row->instr_address,$fehlerdaten[Daten])) { - $newline = $newline . '<span id="' . dechex($row->instr_address) . '" class="hasFehler" '; - - foreach ($resulttypes as $value) { - $temp = $value . '="' . $fehlerdaten[Daten][$row->instr_address][$value] . '" '; - $newline = $newline . $temp; - $maxFehler[$value] = $maxFehler[$value] + $fehlerdaten[Daten][$row->instr_address][$value]; - } - - $newline = $newline . ' cursor: pointer;>' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; - } else { - $newline = '<span id="' . dechex($row->instr_address) . '">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; - } - $mapping[$lineNumber] [] = $newline; - } - - //Leerzeile - $mapping[$lineNumber] [] = '<br>'; - } - foreach ($resulttypes as $value) { - $maxFehlerMapping[$lineNumber][$value] = $maxFehler[$value]; - } - } - - while($row = mysql_fetch_object($highlevelCode)) - { - $content = $content . '<span id="' . $row->linenumber . '">' . $row->linenumber . ' : ' . $row->line . '</span><br>'; - if(array_key_exists($row->linenumber, $mapping)) { - $content = $content . '<div id="mapping">'; - foreach ($mapping[$row->linenumber] as $index => $span) { - $content = $content . $span; - } - $content = $content . '</div>'; - $content = $content .'<div class="maxFehlerMapping"'; - foreach ($resulttypes as $value) { - $content = $content . $value . '="' . $maxFehlerMapping[$row->linenumber][$value] . '" '; - } - $content = $content .'> </div>'; - } - } - - mysql_close($verbindung); - - echo json_encode($content); -} - -function getResulttypes(&$resulttypes) -{ - $abfrage = "SELECT resulttype FROM " . $GLOBALS['result_table'] . " GROUP BY resulttype;"; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - - while ($row = mysql_fetch_object($ergebnis)) { - //echo $row->resulttype; - array_push($resulttypes, $row->resulttype); - } -} - -function getResulttypesOUT() -{ - $resulttypes = array(); - - $abfrage = "SELECT resulttype FROM " . $GLOBALS['result_table'] . " GROUP BY resulttype;"; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - - while ($row = mysql_fetch_object($ergebnis)) { - //echo $row->resulttype; - array_push($resulttypes, $row->resulttype); - } - - echo json_encode($resulttypes); -} - -function askDBFehler($variant_id, $resulttypes, $version) -{ - if($version == 'onlyRightEdge') { - $abfrage = "SELECT ft.instr, ft.instr_absolute "; - foreach ( $resulttypes as $value) { - $temp = ", SUM(IF(r.resulttype = '" . $value . "', 1, 0)*(t.time2-t.time1+1)) AS " . $value; - $abfrage = $abfrage . $temp; - } - $abfrage = $abfrage . " FROM fulltrace ft - LEFT JOIN trace t - ON ft.variant_id = '" . $variant_id . "' - AND t.variant_id = '" . $variant_id . "' - AND ft.instr = t.instr2 - AND t.accesstype = 'R' - JOIN fsppilot p - ON t.variant_id = '" . $variant_id . "' - AND p.variant_id = '" . $variant_id . "' - AND t.data_address = p.data_address - AND p.instr2 = t.instr2 - JOIN " . $GLOBALS['result_table'] . " r - ON p.id = r.pilot_id - GROUP BY ft.instr_absolute;"; - } else if ($version == 'latestip') { - $abfrage = "SELECT r.latest_ip "; - foreach ( $resulttypes as $value) { - $temp = ", SUM(IF(r.resulttype = '" . $value . "', 1, 0)*(t.time2-t.time1+1)) AS " . $value; - $abfrage = $abfrage . $temp; - } - $abfrage = $abfrage . " FROM trace t - JOIN fsppilot p - ON t.variant_id = p.variant_id - AND t.data_address = p.data_address - AND p.instr2 = t.instr2 - JOIN " . $GLOBALS['result_table'] . " r - ON p.id = r.pilot_id - WHERE t.variant_id = '" . $variant_id . "' AND t.accesstype = 'R' - GROUP BY r.latest_ip;"; - } else { - $abfrage = "SELECT ft.instr, ft.instr_absolute "; - foreach ( $resulttypes as $value) { - $temp = ", SUM(IF(r.resulttype = '" . $value . "', 1, 0)*(t.time2-t.time1+1)) AS " . $value; - $abfrage = $abfrage . $temp; - } - $abfrage = $abfrage . " FROM fulltrace ft - LEFT JOIN trace t - ON ft.variant_id = '" . $variant_id . "' - AND t.variant_id = '" . $variant_id . "' - AND ft.instr BETWEEN t.instr1 AND t.instr2 - AND t.accesstype = 'R' - JOIN fsppilot p - ON t.variant_id = '" . $variant_id . "' - AND p.variant_id = '" . $variant_id . "' - AND t.data_address = p.data_address - AND p.instr2 = t.instr2 - JOIN " . $GLOBALS['result_table'] . " r - ON p.id = r.pilot_id - GROUP BY ft.instr_absolute;"; - } - - //echo $abfrage; - - $ergebnis = mysql_query($abfrage); - - mysql_close($verbindung); - - return $ergebnis; -} - -function resultsDB($variant_id, $version, $resulttypes) -{ - - getResulttypes($resulttypes); - - //print_r($resulttypes); - - $ergebnis = askDBFehler($variant_id, $resulttypes, $version); - - //print_r($ergebnis); - - $results = array(); - - // We find the fields number - $numfields=mysql_num_fields($ergebnis); - - for($i=0;$i<$numfields;$i++){ - $fieldname[$i]=mysql_field_name($ergebnis, $i); - } - - for($i=2;$i<$numfields;$i++){ - $results["max"][$fieldname[$i]] = 0; - } - - $maxFehler = 0; - while($row = mysql_fetch_object($ergebnis)) - { - if($version != 'latestip'){ - if($row->instr_absolute != NULL) - { - $results["Daten"][$row->instr_absolute] = array(); - for ($i = 1 ; $i < $numfields ; $i++) - { - $results["Daten"][$row->instr_absolute][$fieldname[$i]] = $row->$fieldname[$i]; - - if($row->$fieldname[$i] > $results["max"][$fieldname[$i]]) - { - $results["max"][$fieldname[$i]] = $row->$fieldname[$i]; - } - } - } - } else { - if($row->latest_ip != NULL) - { - $results["Daten"][$row->latest_ip] = array(); - for ($i = 0 ; $i < $numfields ; $i++) - { - $results["Daten"][$row->latest_ip][$fieldname[$i]] = $row->$fieldname[$i]; - - if($row->$fieldname[$i] > $results["max"][$fieldname[$i]]) - { - $results["max"][$fieldname[$i]] = $row->$fieldname[$i]; - } - } - } - } - } - - return $results; -} - -?> +<?php +require('CONFIGURATION.php'); +//Datenbankverbindung aufbauen +$verbindung = mysql_connect ($host,$username, $password) + or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch"); + +mysql_select_db($database) or die ("Die Datenbank existiert nicht."); + +//Kommande lesen +switch ($_GET['kommando']) +{ + case "dbTest" : dbTest();break; + case "getAsmCode" : getAsmCode();break; + case "asmToSourceFile" : asmToSourceFile();break; + case "getBinarys" : getBinarys();break; + case "getVariants" : getVariants();break; + case "getSourceFiles" : getSourceFiles();break; + case "getResultTypes" : getResulttypesOUT();break; + case "getHighlevelCode" : getHighlevelCode();break; + case "resultsDB" : resultsDB();break; + case "dechex" : echo json_encode(dechex($_GET['dec']));break; +} + +function dbTest() +{ + + $check = true; + + $abfrage = "SELECT 1 FROM objdump;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle objdump nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM fulltrace;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle fulltrace nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM dbg_filename;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle dbg_filename nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM dbg_mapping;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle dbg_mapping nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM dbg_methods;"; + + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle dbg_methods nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM dbg_source;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle dbg_source nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM dbg_stacktrace;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle dbg_stacktrace nicht gefunden <br>'); + return; + } + + $abfrage = "SELECT 1 FROM dbg_variables;"; + + $ergebnis = mysql_query($abfrage); + + if(!$ergebnis) { + echo json_encode('Tabelle dbg_variables nicht gefunden <br>'); + return; + } +} + +function getBinarys() +{ + $binarys = array(); + + $abfrage = "SELECT benchmark FROM variant;"; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + + while($row = mysql_fetch_object($ergebnis)) + { + array_push($binarys, $row->benchmark); + } + + $result = array_unique($binarys); + + echo json_encode($result); +} + +function getVariants() +{ + $variants = array(); + + $abfrage = "SELECT id, variant FROM variant WHERE benchmark = '" . $_GET['datei'] ."';"; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + + while($row = mysql_fetch_object($ergebnis)) + { + $variants[$row->id] = $row->variant; + } + + echo json_encode($variants); +} + +function getSourceFiles() +{ + $sourceFiles = array(); + + $abfrage = "SELECT file_id, path FROM dbg_filename WHERE variant_id = '" . $_GET['variant']. "';"; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + + while($row = mysql_fetch_object($ergebnis)) + { + $sourceFiles[$row->file_id] = $row->path; + } + + echo json_encode($sourceFiles); +} + +function asmCode() +{ + $content = ""; + + $abfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id'] ."' ORDER BY instr_address;"; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + $content = $content; + while($row = mysql_fetch_object($ergebnis)) + { + $content = $content . '<span id="' . dechex($row->instr_address) . '">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; + } + echo json_encode($content); +} + +function getAsmCode() +{ + $content = ""; + $resulttypes = array(); + + $asmAbfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id'] ."' ORDER BY instr_address;"; + + $asmcode = mysql_query($asmAbfrage); + + getResulttypes($resulttypes); + + $fehlerdaten = resultsDB($_GET['variant_id'], $_GET['version'], $resulttypes); + //$fehlerdaten = askDBFehler($_GET['variant_id'], $resulttypes, $_GET['version']); + + //print_r($fehlerdaten); + $content = '<div id="maxFehler" '; + foreach ($resulttypes as $value) { + $temp = $value . '="' . $fehlerdaten[max][$value] . '" '; + $content = $content . $temp; + } + $content = $content .' >'; + while($row = mysql_fetch_object($asmcode)) + { + if (array_key_exists($row->instr_address,$fehlerdaten[Daten])) { + $content = $content . '<span id="' . dechex($row->instr_address) . '" class="hasFehler" '; + + foreach ($resulttypes as $value) { + $temp = $value . '="' . $fehlerdaten[Daten][$row->instr_address][$value] . '" '; + $content = $content . $temp; + } + + $content = $content . ' cursor: pointer;>' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; + } else { + $content = $content . '<span id="' . dechex($row->instr_address) . '">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; + } + } + + $content = $content . ' </div>'; + + echo json_encode($content); +} + +function getHighlevelCode() +{ + $content = ""; + $resulttypes = array(); + + getResulttypes($resulttypes); + + $kleinsteAdresseAbfrage = "SELECT instr_address FROM objdump WHERE variant_id = '" . $_GET['variant_id']. "' ORDER BY instr_address LIMIT 1;"; + $kleinsteAdresseErgebnis = mysql_query($kleinsteAdresseAbfrage); + $kleinsteAdresse = mysql_fetch_object($kleinsteAdresseErgebnis); + + $highlevelCodeAbfrage = "SELECT linenumber, line FROM dbg_source WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id']. "' ORDER BY linenumber;"; + $mappingAbfrage = "SELECT instr_absolute, linenumber FROM dbg_mapping WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id'] . "' AND instr_absolute >= '" . $kleinsteAdresse->instr_address . "' ORDER BY instr_absolute;"; + + $highlevelCode = mysql_query($highlevelCodeAbfrage); + $mappingInfo = mysql_query($mappingAbfrage); + + $fehlerdaten = resultsDB($_GET['variant_id'], $_GET['version'], $resulttypes); + + $mappingRanges = array(); + $numEntrysMapping = mysql_num_rows($mappingInfo); + + $row = mysql_fetch_object($mappingInfo); + + for ($i = 0; $i < $numEntrysMapping-1; $i++) + { + if(!is_array($mappingRanges[$row->linenumber])) { + $mappingRanges[$row->linenumber] = array(); + } + $oldLineNumber = $row->linenumber; + $firstAddr = $row->instr_absolute; + $row = mysql_fetch_object($mappingInfo); + array_push($mappingRanges[$oldLineNumber], array($firstAddr, $row->instr_absolute)); + } + + $mapping = array(); + $maxFehlerMapping = array(); + + foreach ($mappingRanges as $lineNumber => $value) { + $maxFehler = array(); + foreach ($resulttypes as $val) { + $maxFehler[$val] = 0; + } + foreach ($value as $index => $ranges) { + $InstrMappingAbfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id']. "' AND instr_address > '" . $ranges[0] . "' AND instr_address < '" . $ranges[1] . "' ORDER BY instr_address;"; + $mappingErgebnis = mysql_query($InstrMappingAbfrage); + //Leerzeile + $mapping[$lineNumber] [] = '<br>'; + while($row = mysql_fetch_object($mappingErgebnis)) { + + if (array_key_exists($row->instr_address,$fehlerdaten[Daten])) { + $newline = $newline . '<span id="' . dechex($row->instr_address) . '" class="hasFehler" '; + + foreach ($resulttypes as $value) { + $temp = $value . '="' . $fehlerdaten[Daten][$row->instr_address][$value] . '" '; + $newline = $newline . $temp; + $maxFehler[$value] = $maxFehler[$value] + $fehlerdaten[Daten][$row->instr_address][$value]; + } + + $newline = $newline . ' cursor: pointer;>' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; + } else { + $newline = '<span id="' . dechex($row->instr_address) . '">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span><br>'; + } + $mapping[$lineNumber] [] = $newline; + } + + //Leerzeile + $mapping[$lineNumber] [] = '<br>'; + } + foreach ($resulttypes as $value) { + $maxFehlerMapping[$lineNumber][$value] = $maxFehler[$value]; + } + } + + while($row = mysql_fetch_object($highlevelCode)) + { + $content = $content . '<span id="' . $row->linenumber . '">' . $row->linenumber . ' : ' . $row->line . '</span><br>'; + if(array_key_exists($row->linenumber, $mapping)) { + $content = $content . '<div id="mapping">'; + foreach ($mapping[$row->linenumber] as $index => $span) { + $content = $content . $span; + } + $content = $content . '</div>'; + $content = $content .'<div class="maxFehlerMapping"'; + foreach ($resulttypes as $value) { + $content = $content . $value . '="' . $maxFehlerMapping[$row->linenumber][$value] . '" '; + } + $content = $content .'> </div>'; + } + } + + mysql_close($verbindung); + + echo json_encode($content); +} + +function getResulttypes(&$resulttypes) +{ + $abfrage = "SELECT resulttype FROM " . $GLOBALS['result_table'] . " GROUP BY resulttype;"; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + + while ($row = mysql_fetch_object($ergebnis)) { + //echo $row->resulttype; + array_push($resulttypes, $row->resulttype); + } +} + +function getResulttypesOUT() +{ + $resulttypes = array(); + + $abfrage = "SELECT resulttype FROM " . $GLOBALS['result_table'] . " GROUP BY resulttype;"; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + + while ($row = mysql_fetch_object($ergebnis)) { + //echo $row->resulttype; + array_push($resulttypes, $row->resulttype); + } + + echo json_encode($resulttypes); +} + +function askDBFehler($variant_id, $resulttypes, $version) +{ + if($version == 'onlyRightEdge') { + $abfrage = "SELECT ft.instr, ft.instr_absolute "; + foreach ( $resulttypes as $value) { + $temp = ", SUM(IF(r.resulttype = '" . $value . "', 1, 0)*(t.time2-t.time1+1)) AS " . $value; + $abfrage = $abfrage . $temp; + } + $abfrage = $abfrage . " FROM fulltrace ft + LEFT JOIN trace t + ON ft.variant_id = '" . $variant_id . "' + AND t.variant_id = '" . $variant_id . "' + AND ft.instr = t.instr2 + AND t.accesstype = 'R' + JOIN fsppilot p + ON t.variant_id = '" . $variant_id . "' + AND p.variant_id = '" . $variant_id . "' + AND t.data_address = p.data_address + AND p.instr2 = t.instr2 + JOIN " . $GLOBALS['result_table'] . " r + ON p.id = r.pilot_id + GROUP BY ft.instr_absolute;"; + } else if ($version == 'latestip') { + $abfrage = "SELECT r.latest_ip "; + foreach ( $resulttypes as $value) { + $temp = ", SUM(IF(r.resulttype = '" . $value . "', 1, 0)*(t.time2-t.time1+1)) AS " . $value; + $abfrage = $abfrage . $temp; + } + $abfrage = $abfrage . " FROM trace t + JOIN fsppilot p + ON t.variant_id = p.variant_id + AND t.data_address = p.data_address + AND p.instr2 = t.instr2 + JOIN " . $GLOBALS['result_table'] . " r + ON p.id = r.pilot_id + WHERE t.variant_id = '" . $variant_id . "' AND t.accesstype = 'R' + GROUP BY r.latest_ip;"; + } else { + $abfrage = "SELECT ft.instr, ft.instr_absolute "; + foreach ( $resulttypes as $value) { + $temp = ", SUM(IF(r.resulttype = '" . $value . "', 1, 0)*(t.time2-t.time1+1)) AS " . $value; + $abfrage = $abfrage . $temp; + } + $abfrage = $abfrage . " FROM fulltrace ft + LEFT JOIN trace t + ON ft.variant_id = '" . $variant_id . "' + AND t.variant_id = '" . $variant_id . "' + AND ft.instr BETWEEN t.instr1 AND t.instr2 + AND t.accesstype = 'R' + JOIN fsppilot p + ON t.variant_id = '" . $variant_id . "' + AND p.variant_id = '" . $variant_id . "' + AND t.data_address = p.data_address + AND p.instr2 = t.instr2 + JOIN " . $GLOBALS['result_table'] . " r + ON p.id = r.pilot_id + GROUP BY ft.instr_absolute;"; + } + + //echo $abfrage; + + $ergebnis = mysql_query($abfrage); + + mysql_close($verbindung); + + return $ergebnis; +} + +function resultsDB($variant_id, $version, $resulttypes) +{ + + getResulttypes($resulttypes); + + //print_r($resulttypes); + + $ergebnis = askDBFehler($variant_id, $resulttypes, $version); + + //print_r($ergebnis); + + $results = array(); + + // We find the fields number + $numfields=mysql_num_fields($ergebnis); + + for($i=0;$i<$numfields;$i++){ + $fieldname[$i]=mysql_field_name($ergebnis, $i); + } + + for($i=2;$i<$numfields;$i++){ + $results["max"][$fieldname[$i]] = 0; + } + + $maxFehler = 0; + while($row = mysql_fetch_object($ergebnis)) + { + if($version != 'latestip'){ + if($row->instr_absolute != NULL) + { + $results["Daten"][$row->instr_absolute] = array(); + for ($i = 1 ; $i < $numfields ; $i++) + { + $results["Daten"][$row->instr_absolute][$fieldname[$i]] = $row->$fieldname[$i]; + + if($row->$fieldname[$i] > $results["max"][$fieldname[$i]]) + { + $results["max"][$fieldname[$i]] = $row->$fieldname[$i]; + } + } + } + } else { + if($row->latest_ip != NULL) + { + $results["Daten"][$row->latest_ip] = array(); + for ($i = 0 ; $i < $numfields ; $i++) + { + $results["Daten"][$row->latest_ip][$fieldname[$i]] = $row->$fieldname[$i]; + + if($row->$fieldname[$i] > $results["max"][$fieldname[$i]]) + { + $results["max"][$fieldname[$i]] = $row->$fieldname[$i]; + } + } + } + } + } + + return $results; +} + +?> diff --git a/tools/analysis/VisualFAIL/css/myStyle.css b/tools/analysis/VisualFAIL/css/myStyle.css index 7ed2b0eed7156b78070f8401f859bb232b1c2890..5f6292a1d9f88b28a63179a3a0be0bae7d488c5e 100644 --- a/tools/analysis/VisualFAIL/css/myStyle.css +++ b/tools/analysis/VisualFAIL/css/myStyle.css @@ -1,19 +1,19 @@ -body { - min-height: 2000px; - padding-top: 70px; -} - -/* Custom container */ -.container-full { - margin: 0 auto; - padding: 0 15px; - width: 100%; -} - -.logo { - padding: 0 0 0 30px; -} - -#analyse { - margin: 20px 0 0 0; +body { + min-height: 2000px; + padding-top: 70px; +} + +/* Custom container */ +.container-full { + margin: 0 auto; + padding: 0 15px; + width: 100%; +} + +.logo { + padding: 0 0 0 30px; +} + +#analyse { + margin: 20px 0 0 0; } \ No newline at end of file diff --git a/tools/analysis/VisualFAIL/index.php b/tools/analysis/VisualFAIL/index.php index 46485ace7f36ca35d32190a19429b2d6cd86400e..325c849f96b03b12a073f63feb36a8ca17ac1f41 100644 --- a/tools/analysis/VisualFAIL/index.php +++ b/tools/analysis/VisualFAIL/index.php @@ -1,129 +1,129 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> - - <title>Visual FAIL*</title> - - <!-- Bootstrap core CSS --> - <link href="css/bootstrap.css" rel="stylesheet"> - - <!-- Custom styles for this template --> - <link href="css/myStyle.css" rel="stylesheet"> - - <!-- Just for debugging purposes. Don't actually copy this line! --> - <!--[if lt IE 9]><script src="../../docs-assets/js/ie8-responsive-file-warning.js"></script><![endif]--> - - <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> - <!--[if lt IE 9]> - <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> - <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> - <![endif]--> - </head> - - <body> - - <!-- Fixed navbar --> - <div class="container-full"> - <div class="navbar navbar-default navbar-fixed-top" role="navigation"> - <div class="navbar-header"> - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> - <span class="sr-only">Toggle navigation</span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <!--<div class="container"> --> - <!--<a class="navbar-brand" href="#">Visual FAIL*</a>--> - <img class="navbar-brand logo" src="images/logos/visualfaillogo_klein.png" alt="Visual Fail* logo" /> - <!--</div>--> - </div> - <div class="container"> - <div class="navbar-collapse collapse"> - <ul class="nav navbar-nav"> - <li class="active"><a href="#">Rückabbildung</a></li> - <li><a href="#about">Aggregation</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Tools <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="adminer-3.7.1.php" target="_blank">Adminer</a></li> - </ul> - </li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - - <div class="row"> - <div class="col-md-2"> - <!-- Main component for a primary marketing message or call to action --> - <div class="panel panel-default"> - <div class="panel-heading">Färbung</div> - <div class="panel-body"> - <select class="form-control" id="faerbung"> - <option value="onlyRightEdge">Rechter Rand(trace.instr2)</option> - <option value="latestip">Letzte Instruktion(result.latest_ip)</option> - <option value="normal">Äquivalenzklassen</option> - </select> - </div> - </div> - - <div class="panel panel-default"> - <div class="panel-heading">Benchmark</div> - <div class="panel-body"> - <select class="form-control" id="binary"> - <option></option> - </select> - </div> - </div> - - <div class="panel panel-default"> - <div class="panel-heading">Variante</div> - <div class="panel-body"> - <select class="form-control" id="variant"> - <option></option> - </select> - <div class="text-center"> - <button type="button" class="btn btn-default btn-lg" id="analyse">Analyse</button> - </div> - </div> - </div> - </div> - - <div class="col-md-10"> - <div class="panel-body"> - <div class="row"> - <div class="col-md-6"> - <div class="btn-group" id="fehlertypenset" data-toggle="buttons"> - </div> - </div> - <div class="col-md-6"> - <select class="form-control" id="sourceFiles"> - <option></option> - </select> - </div> - </div> - </div> - <div class="row"> - <pre class="container col-md-6" id="asm"> - </pre> - <pre class="container col-md-6" id="hcode"> - </pre> - </div> - </div> - </div> - </div> <!-- /container-full --> - - <!-- Bootstrap core JavaScript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> - <script src="js/bootstrap.min.js"></script> - <script src="js/myscript.js"></script> - </body> -</html> +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + + <title>Visual FAIL*</title> + + <!-- Bootstrap core CSS --> + <link href="css/bootstrap.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="css/myStyle.css" rel="stylesheet"> + + <!-- Just for debugging purposes. Don't actually copy this line! --> + <!--[if lt IE 9]><script src="../../docs-assets/js/ie8-responsive-file-warning.js"></script><![endif]--> + + <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> + <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> + <![endif]--> + </head> + + <body> + + <!-- Fixed navbar --> + <div class="container-full"> + <div class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <!--<div class="container"> --> + <!--<a class="navbar-brand" href="#">Visual FAIL*</a>--> + <img class="navbar-brand logo" src="images/logos/visualfaillogo_klein.png" alt="Visual Fail* logo" /> + <!--</div>--> + </div> + <div class="container"> + <div class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Rückabbildung</a></li> + <li><a href="#about">Aggregation</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Tools <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="adminer-3.7.1.php" target="_blank">Adminer</a></li> + </ul> + </li> + </ul> + </div><!--/.nav-collapse --> + </div> + </div> + + <div class="row"> + <div class="col-md-2"> + <!-- Main component for a primary marketing message or call to action --> + <div class="panel panel-default"> + <div class="panel-heading">Färbung</div> + <div class="panel-body"> + <select class="form-control" id="faerbung"> + <option value="onlyRightEdge">Rechter Rand(trace.instr2)</option> + <option value="latestip">Letzte Instruktion(result.latest_ip)</option> + <option value="normal">Äquivalenzklassen</option> + </select> + </div> + </div> + + <div class="panel panel-default"> + <div class="panel-heading">Benchmark</div> + <div class="panel-body"> + <select class="form-control" id="binary"> + <option></option> + </select> + </div> + </div> + + <div class="panel panel-default"> + <div class="panel-heading">Variante</div> + <div class="panel-body"> + <select class="form-control" id="variant"> + <option></option> + </select> + <div class="text-center"> + <button type="button" class="btn btn-default btn-lg" id="analyse">Analyse</button> + </div> + </div> + </div> + </div> + + <div class="col-md-10"> + <div class="panel-body"> + <div class="row"> + <div class="col-md-6"> + <div class="btn-group" id="fehlertypenset" data-toggle="buttons"> + </div> + </div> + <div class="col-md-6"> + <select class="form-control" id="sourceFiles"> + <option></option> + </select> + </div> + </div> + </div> + <div class="row"> + <pre class="container col-md-6" id="asm"> + </pre> + <pre class="container col-md-6" id="hcode"> + </pre> + </div> + </div> + </div> + </div> <!-- /container-full --> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> + <script src="js/bootstrap.min.js"></script> + <script src="js/myscript.js"></script> + </body> +</html> diff --git a/tools/analysis/VisualFAIL/js/myscript.js b/tools/analysis/VisualFAIL/js/myscript.js index 3b02dd59d5d331f74957b9fb72869c7c5e2a77c6..5495139dd23fbe94b5e8b3736cdc5925f893471f 100644 --- a/tools/analysis/VisualFAIL/js/myscript.js +++ b/tools/analysis/VisualFAIL/js/myscript.js @@ -1,210 +1,210 @@ -$.ajaxSetup({ -async: false -}); - - -//Umwandlung von dezimal zu hexadezimal -function dec2hex(dec) { - var hex = ""; - - if (dec < 0) { - dec = 0xFFFFFFFF + dec + 1; - } - - hex = parseInt(dec, 10).toString(16); - - return hex; -} - -//Berechne den Farbwert (z.B.: #FFFFFF) fuer gegebene Fehlerwerte -function calcColor(fehler, maxFehler) { - //console.log("Farbe Fehler: " + fehler + " Max: " + maxFehler); - - var part = 0; - - if (fehler != 0) { - var x = 255/Math.log(maxFehler); - part = x*Math.log(fehler); - } - - //console.log("Farbe Fehler: " + fehler + " Max: " + maxFehler + " Part: " + part); - - var hex = dec2hex(255-part); - - //console.log("Farbe Fehler: " + fehler + " Max: " + maxFehler + " Part: " + part + " Farbcode: " + ("#FF" + hex + hex)); - - if (hex >= 0 && hex <= 9 ) { - return "#FF" + hex + hex + hex + hex; - } else { - return "#FF" + hex + hex; - } -} - -//Tooltip für Instruktionszeilen mit Fehler -$('body').popover({ - selector: ".hasFehler", - html: true, - title: function() { return $(this).attr("id"); }, - content: function() { - var ausgabe = ''; - var caller = $(this); - - $.getJSON("core.php", {kommando: 'getResultTypes'}, function(data) { - $.each(data, function(key, val) { - ausgabe = ausgabe + val +': ' + caller.attr(val) + '<br>'; - }); - }); - return ausgabe; - } -}); - -//Einblenden des Modal "Loading" fuer Ajax Requests -/*$(document).ajaxStart(function(){ - //console.log("ajaxstart"); - $("body").addClass("loading"); -}).ajaxStop(function(){ - //console.log("ajaxstop"); - $("body").removeClass("loading"); -});*/ - -//User-Interaktionen nachdem das DOM geladen ist -$(document).ready(function() { - - //DB check - $.getJSON("core.php", {kommando: 'dbTest'}, function(data) { - - if(data != "ok") { - $('html').html(data); - } - }); - - //Holen der Binarys, die in der DB in der Tabelle Variant vorkommen - $.getJSON("core.php", {kommando: 'getBinarys'}, function(data) { - $.each(data, function(key, val) { - $('#binary').append('<option value="' + val + '">' + val + '</option>'); - }); - }); - - //Auswahl eines Eintrages aus den Source-Files für die Darstellung des Hochsprachencode - $('#sourceFiles').change(function() { - if($(this).val() != 'none') { - $.getJSON("core.php", {kommando: 'getHighlevelCode', variant_id: $('#variant').val(), file_id: $(this).val(), version: $('#faerbung').val()}, function(data) { - - $('#hcode').html(data); - - $('.maxFehlerMapping').on( "calcColor", function( event, newMaxFehler, activeFehlertypes) { - var newFehler = 0; - var actualRow = $(this); - - $.each(activeFehlertypes, function(key, val) { - newFehler = newFehler + parseInt(actualRow.attr(val)); - }); - - console.log("jepp" + newMaxFehler + " " + newFehler); - - $(this).prev().prev().prev().css("background-color", calcColor(newFehler, newMaxFehler)) - .css('cursor', 'pointer'); - }); - - $('.hasFehler').on( "calcColor", function( event, newMaxFehler, activeFehlertypes) { - var newFehler = 0; - var actualRow = $(this); - - $.each(activeFehlertypes, function(key, val) { - newFehler = newFehler + parseInt(actualRow.attr(val)); - }); - - $(this).css("background-color", calcColor(newFehler, newMaxFehler)) - .css('cursor', 'pointer'); - }); - }); - - - setTimeout(function(){ - var activeFehlertypes = new Array(); - var newMaxFehler = 0; - - $('#fehlertypenset > .active').each(function(){ - activeFehlertypes.push($(this).attr("id")); - //console.log("Hinzugefuegt: " + $(this).attr("id")); - }); - - - $.each(activeFehlertypes,function(key, name){ - - //Neuen MaxFehler berechnen - newMaxFehler = newMaxFehler + parseInt($('#maxFehler').attr(name)); - }); - $('.hasFehler').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); - $('.maxFehlerMapping').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); - },100); - } - }); - - //Auswahl eines Eintrages aus den Binarys für die Darstellung des Assembler-Code - $('#binary').change(function() { - if($(this).val() != 'none') { - $('#variant').html('<option value="none" selected="selected"></option>'); - $.getJSON("core.php", {kommando: 'getVariants', datei: $(this).val()}, function(data) { - $.each(data, function(key, val) { - $('#variant').append('<option value="' + key + '">' + val + '</option>'); - }); - }); - } - }); - - //Analyse Button wird gedrueckt - $('#analyse').button().click( function () { - - $.getJSON("core.php", {kommando: 'getAsmCode', variant_id: $('#variant').val(), version: $('#faerbung').val()}, function(data) { - $('#asm').html(data); - }); - - $.getJSON("core.php", {kommando: 'getSourceFiles', variant: $('#variant').val()}, function(data) { - $.each(data, function(key, val) { - $('#sourceFiles').append('<option value="' + key + '">' + val + '</option>'); - }); - }); - - $.getJSON("core.php", {kommando: 'getResultTypes'}, function(data) { - - $('#fehlertypenset').html(''); - $.each(data, function(key, val) { - $('#fehlertypenset').append('<label class="btn btn-default" id="' + val + '"><input type="checkbox" id="' + val + '">' + val + '</label>'); - //$('#'+ val +'.btn').button('toggle'); - }); - - $('.hasFehler').on( "calcColor", function( event, newMaxFehler, activeFehlertypes) { - var newFehler = 0; - var actualRow = $(this); - - $.each(activeFehlertypes, function(key, val) { - newFehler = newFehler + parseInt(actualRow.attr(val)); - }); - - $(this).css("background-color", calcColor(newFehler, newMaxFehler)) - .css('cursor', 'pointer'); - }); - - //Auf Änderungen bzgl. des Fehler-Buttonset horchen - $('#fehlertypenset input[type=checkbox]').change(function() {setTimeout(function(){ - //console.log("aenderung!"); - var activeFehlertypes = new Array(); - var newMaxFehler = 0; - - $('#fehlertypenset > .active').each(function(){ - activeFehlertypes.push($(this).attr("id")); - }); - - - $.each(activeFehlertypes,function(key, name){ - //Neuen MaxFehler berechnen - newMaxFehler = newMaxFehler + parseInt($('#maxFehler').attr(name)); - }); - - $('.hasFehler').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); - $('.maxFehlerMapping').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); - },100)}); - }); - }); -}); +$.ajaxSetup({ +async: false +}); + + +//Umwandlung von dezimal zu hexadezimal +function dec2hex(dec) { + var hex = ""; + + if (dec < 0) { + dec = 0xFFFFFFFF + dec + 1; + } + + hex = parseInt(dec, 10).toString(16); + + return hex; +} + +//Berechne den Farbwert (z.B.: #FFFFFF) fuer gegebene Fehlerwerte +function calcColor(fehler, maxFehler) { + //console.log("Farbe Fehler: " + fehler + " Max: " + maxFehler); + + var part = 0; + + if (fehler != 0) { + var x = 255/Math.log(maxFehler); + part = x*Math.log(fehler); + } + + //console.log("Farbe Fehler: " + fehler + " Max: " + maxFehler + " Part: " + part); + + var hex = dec2hex(255-part); + + //console.log("Farbe Fehler: " + fehler + " Max: " + maxFehler + " Part: " + part + " Farbcode: " + ("#FF" + hex + hex)); + + if (hex >= 0 && hex <= 9 ) { + return "#FF" + hex + hex + hex + hex; + } else { + return "#FF" + hex + hex; + } +} + +//Tooltip für Instruktionszeilen mit Fehler +$('body').popover({ + selector: ".hasFehler", + html: true, + title: function() { return $(this).attr("id"); }, + content: function() { + var ausgabe = ''; + var caller = $(this); + + $.getJSON("core.php", {kommando: 'getResultTypes'}, function(data) { + $.each(data, function(key, val) { + ausgabe = ausgabe + val +': ' + caller.attr(val) + '<br>'; + }); + }); + return ausgabe; + } +}); + +//Einblenden des Modal "Loading" fuer Ajax Requests +/*$(document).ajaxStart(function(){ + //console.log("ajaxstart"); + $("body").addClass("loading"); +}).ajaxStop(function(){ + //console.log("ajaxstop"); + $("body").removeClass("loading"); +});*/ + +//User-Interaktionen nachdem das DOM geladen ist +$(document).ready(function() { + + //DB check + $.getJSON("core.php", {kommando: 'dbTest'}, function(data) { + + if(data != "ok") { + $('html').html(data); + } + }); + + //Holen der Binarys, die in der DB in der Tabelle Variant vorkommen + $.getJSON("core.php", {kommando: 'getBinarys'}, function(data) { + $.each(data, function(key, val) { + $('#binary').append('<option value="' + val + '">' + val + '</option>'); + }); + }); + + //Auswahl eines Eintrages aus den Source-Files für die Darstellung des Hochsprachencode + $('#sourceFiles').change(function() { + if($(this).val() != 'none') { + $.getJSON("core.php", {kommando: 'getHighlevelCode', variant_id: $('#variant').val(), file_id: $(this).val(), version: $('#faerbung').val()}, function(data) { + + $('#hcode').html(data); + + $('.maxFehlerMapping').on( "calcColor", function( event, newMaxFehler, activeFehlertypes) { + var newFehler = 0; + var actualRow = $(this); + + $.each(activeFehlertypes, function(key, val) { + newFehler = newFehler + parseInt(actualRow.attr(val)); + }); + + console.log("jepp" + newMaxFehler + " " + newFehler); + + $(this).prev().prev().prev().css("background-color", calcColor(newFehler, newMaxFehler)) + .css('cursor', 'pointer'); + }); + + $('.hasFehler').on( "calcColor", function( event, newMaxFehler, activeFehlertypes) { + var newFehler = 0; + var actualRow = $(this); + + $.each(activeFehlertypes, function(key, val) { + newFehler = newFehler + parseInt(actualRow.attr(val)); + }); + + $(this).css("background-color", calcColor(newFehler, newMaxFehler)) + .css('cursor', 'pointer'); + }); + }); + + + setTimeout(function(){ + var activeFehlertypes = new Array(); + var newMaxFehler = 0; + + $('#fehlertypenset > .active').each(function(){ + activeFehlertypes.push($(this).attr("id")); + //console.log("Hinzugefuegt: " + $(this).attr("id")); + }); + + + $.each(activeFehlertypes,function(key, name){ + + //Neuen MaxFehler berechnen + newMaxFehler = newMaxFehler + parseInt($('#maxFehler').attr(name)); + }); + $('.hasFehler').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); + $('.maxFehlerMapping').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); + },100); + } + }); + + //Auswahl eines Eintrages aus den Binarys für die Darstellung des Assembler-Code + $('#binary').change(function() { + if($(this).val() != 'none') { + $('#variant').html('<option value="none" selected="selected"></option>'); + $.getJSON("core.php", {kommando: 'getVariants', datei: $(this).val()}, function(data) { + $.each(data, function(key, val) { + $('#variant').append('<option value="' + key + '">' + val + '</option>'); + }); + }); + } + }); + + //Analyse Button wird gedrueckt + $('#analyse').button().click( function () { + + $.getJSON("core.php", {kommando: 'getAsmCode', variant_id: $('#variant').val(), version: $('#faerbung').val()}, function(data) { + $('#asm').html(data); + }); + + $.getJSON("core.php", {kommando: 'getSourceFiles', variant: $('#variant').val()}, function(data) { + $.each(data, function(key, val) { + $('#sourceFiles').append('<option value="' + key + '">' + val + '</option>'); + }); + }); + + $.getJSON("core.php", {kommando: 'getResultTypes'}, function(data) { + + $('#fehlertypenset').html(''); + $.each(data, function(key, val) { + $('#fehlertypenset').append('<label class="btn btn-default" id="' + val + '"><input type="checkbox" id="' + val + '">' + val + '</label>'); + //$('#'+ val +'.btn').button('toggle'); + }); + + $('.hasFehler').on( "calcColor", function( event, newMaxFehler, activeFehlertypes) { + var newFehler = 0; + var actualRow = $(this); + + $.each(activeFehlertypes, function(key, val) { + newFehler = newFehler + parseInt(actualRow.attr(val)); + }); + + $(this).css("background-color", calcColor(newFehler, newMaxFehler)) + .css('cursor', 'pointer'); + }); + + //Auf Änderungen bzgl. des Fehler-Buttonset horchen + $('#fehlertypenset input[type=checkbox]').change(function() {setTimeout(function(){ + //console.log("aenderung!"); + var activeFehlertypes = new Array(); + var newMaxFehler = 0; + + $('#fehlertypenset > .active').each(function(){ + activeFehlertypes.push($(this).attr("id")); + }); + + + $.each(activeFehlertypes,function(key, name){ + //Neuen MaxFehler berechnen + newMaxFehler = newMaxFehler + parseInt($('#maxFehler').attr(name)); + }); + + $('.hasFehler').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); + $('.maxFehlerMapping').trigger('calcColor', [ newMaxFehler, activeFehlertypes ]); + },100)}); + }); + }); +});