Changeset 4 for trunk/flowmon-web

Show
Ignore:
Timestamp:
12/05/08 10:18:51 (16 years ago)
Author:
ixs
Message:

Additional changes, nslookup support, added time selection to the chart itself...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/flowmon-web/charts/proto-dist.inc.php

    r1 r4  
    1616# along with this program; if not, write to the Free Software 
    1717# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
    18 # Copyright 2004, 2005 Red Hat, Inc. 
    19 # 
    20 # AUTHOR: Andreas Thienemann <athienem@redhat.com> 
    2118# 
    2219 
  • trunk/flowmon-web/charts/top-dst.inc.php

    r1 r4  
    2121# 
    2222 
    23 require_once('phplot-5.0.5/phplot.php'); 
     23require_once('stacked-bars.inc.php'); 
    2424 
    2525// Get the data from the table, format it and write it out to a file 
    26 function chart_prepare($flowsrc, $starttime, $endtime) { 
     26function chart_prepare($flowsrc, $starttime, $endtime, $timeframe = False) { 
    2727        global $date_fmt_str; 
    2828        global $dbh; 
    2929 
    30  
    3130        // Define the plot properties 
    32         $style = 'Top Destination'; 
     31        $style = 'Top Sources'; 
    3332        $chart_title = $style.' '.$flowsrc.' - '.strftime($date_fmt_str, $starttime).' to '.strftime($date_fmt_str, $endtime); 
    3433        $ytitle = 'Bytes'; 
    35         $output = tempnam('tmp/', 'plot'); 
    36         $data_colors = array('SkyBlue', 'green', 'orange', 'blue', 'purple', 'red', 'violet', 'azure1', 'yellow', 'DarkGreen'); 
    37  
    3834 
    3935        // Grab the data from the database 
     
    5147        $q->execute(); 
    5248 
    53         // Fill the legend build the WHERE limit 
    54         $legend = $q->fetchAll(PDO::FETCH_COLUMN, 0); 
    55         $limit = ''; 
    56         for ($i = 0; $i < count($legend); $i++) { 
    57                 $limit .= @$legend[$i].', '; 
    58                 if (array_key_exists($i, $legend)) { 
    59                         $legend[$i] = long2ip($legend[$i]); 
    60                 } else { 
    61                         $legend[$i] = ''; 
     49        // Did this return anything at all? 
     50        if ($q->rowCount() == 0) { 
     51                // No 
     52                print('No data for query-period'); 
     53                return False; 
     54        } else { 
     55                // Yes? Carry on! 
     56 
     57                // Fill the legend build the WHERE limit 
     58                $legend = $q->fetchAll(PDO::FETCH_COLUMN, 0); 
     59                $limit = ''; 
     60                for ($i = 0; $i < count($legend); $i++) { 
     61                        $limit .= @$legend[$i].', '; 
     62                        if (array_key_exists($i, $legend)) { 
     63                                $legend[$i] = long2ip($legend[$i]); 
     64                        } else { 
     65                                $legend[$i] = ''; 
     66                        } 
    6267                } 
    63         } 
    64         $legend[] = 'rest'; 
    65         $limit = substr($limit, 0, (strlen($limit) - 2)); 
     68                $legend[] = 'rest'; 
     69                $limit = substr($limit, 0, (strlen($limit) - 2)); 
    6670 
    67         // divide the timespan into 5min intervals 
    68         // query the traffic per talker in 5min intervals 
    69         // Initialize the data_table 
    70         $data = array(); 
    71         $steps = 0; 
    72         $rest_table = array(); 
    73         for ($time1 = $starttime; $time1 < $endtime; $time1 += (5 * 60)) { 
    74                 $time2 = ($time1 + (5 * 60)); 
    75                 $steps++; 
    76                 // Add the column header (time) to the data array 
    77                 $data[] = array(strftime('%H:%M', $time1)); 
    78                 $q = $dbh->prepare('SELECT IPDst, SUM(Bytes) AS TrafficSum 
    79                                 FROM Flows 
    80                                 WHERE TimeStop BETWEEN ? AND ? 
    81                                 AND IPDst IN ('.$limit.') 
    82                                 AND FlowSrc = ? 
    83                                 GROUP BY IPDst 
    84                                 ORDER BY TrafficSum DESC 
    85                                 LIMIT 0, 9'); 
    86                 $q->bindParam(1, $time1, PDO::PARAM_INT); 
    87                 $q->bindParam(2, $time2, PDO::PARAM_INT); 
    88                 $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
    89                 $q->execute(); 
    90                 $r = $q->fetchAll(); 
    91                 $i = (count($data) - 1); 
    92                 foreach ($r as $row) { 
    93                         $tmpdata[$i][$row[0]] = $row[1]; 
     71                // divide the timespan into 5min intervals 
     72                // query the traffic per talker in 5min intervals 
     73                // Initialize the data_table 
     74                $data = array(); 
     75                $steps = 0; 
     76                $rest_table = array(); 
     77                for ($time1 = $starttime; $time1 < $endtime; $time1 += (5 * 60)) { 
     78                        $time2 = ($time1 + (5 * 60)); 
     79                        $steps++; 
     80                        // Add the column header (time) to the data array 
     81                        $data[] = array(strftime('%H:%M', $time1)); 
     82                        $q = $dbh->prepare('SELECT IPDst, SUM(Bytes) AS TrafficSum 
     83                                        FROM Flows 
     84                                        WHERE TimeStop BETWEEN ? AND ? 
     85                                        AND IPDst IN ('.$limit.') 
     86                                        AND FlowSrc = ? 
     87                                        GROUP BY IPDst 
     88                                        ORDER BY TrafficSum DESC 
     89                                        LIMIT 0, 9'); 
     90                        $q->bindParam(1, $time1, PDO::PARAM_INT); 
     91                        $q->bindParam(2, $time2, PDO::PARAM_INT); 
     92                        $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
     93                        $q->execute(); 
     94                        $r = $q->fetchAll(); 
     95                        $i = (count($data) - 1); 
     96                        foreach ($r as $row) { 
     97                                $tmpdata[$i][$row[0]] = $row[1]; 
     98                        } 
     99 
     100                        // Get the rest of the aggregated traffic to fill up the bars 
     101                        $q = $dbh->prepare('SELECT SUM(Bytes) AS TrafficSum 
     102                                        FROM Flows 
     103                                        WHERE TimeStop BETWEEN ? AND ? 
     104                                        AND IPDst NOT IN ('.$limit.') 
     105                                        AND FlowSrc = ?'); 
     106                        $q->bindParam(1, $time1, PDO::PARAM_INT); 
     107                        $q->bindParam(2, $time2, PDO::PARAM_INT); 
     108                        $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
     109                        $q->execute(); 
     110                        $rest_table[] = $q->fetch(); 
    94111                } 
    95112 
    96                 // Get the rest of the aggregated traffic to fill up the bars 
    97                 $q = $dbh->prepare('SELECT SUM(Bytes) AS TrafficSum 
    98                                 FROM Flows 
    99                                 WHERE TimeStop BETWEEN ? AND ? 
    100                                 AND IPDst NOT IN ('.$limit.') 
    101                                 AND FlowSrc = ?'); 
    102                 $q->bindParam(1, $time1, PDO::PARAM_INT); 
    103                 $q->bindParam(2, $time2, PDO::PARAM_INT); 
    104                 $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
    105                 $q->execute(); 
    106                 $rest_table[] = $q->fetch(); 
    107         } 
    108  
    109         // Iterate through the legend and fill the data array from the temporary data array 
    110         // This function makes sure that each top talker is always at the same position 
    111         // in the multidimensional data table. 
    112         // This is necessary for phpplot to assign the same color to each host on 
    113         // sequential columns 
    114         // $ip is the key for the temp_data lookup 
    115         foreach ($legend as $ip) { 
    116                 for($i = 0; $i < $steps; $i++) { 
    117                         if (array_key_exists($i, $tmpdata)) { 
    118                         // The "column" exists, let's sort the rows 
    119                                 $key = sprintf('%u', ip2long($ip)); 
    120                                 if (array_key_exists($key, $tmpdata[$i])) { 
    121                                         $data[$i][] = $tmpdata[$i][$key]; 
     113                // Iterate through the legend and fill the data array from the temporary data array 
     114                // This function makes sure that each top talker is always at the same position 
     115                // in the multidimensional data table. 
     116                // This is necessary for phpplot to assign the same color to each host on 
     117                // sequential columns 
     118                // $ip is the key for the temp_data lookup 
     119                foreach ($legend as $ip) { 
     120                        for($i = 0; $i < $steps; $i++) { 
     121                                if (array_key_exists($i, $tmpdata)) { 
     122                                // The "column" exists, let's sort the rows 
     123                                        $key = sprintf('%u', ip2long($ip)); 
     124                                        if (array_key_exists($key, $tmpdata[$i])) { 
     125                                                $data[$i][] = $tmpdata[$i][$key]; 
     126                                        } else { 
     127                                                $data[$i][] = ''; 
     128                                        } 
    122129                                } else { 
    123130                                        $data[$i][] = ''; 
    124131                                } 
    125                         } else { 
    126                                 $data[$i][] = ''; 
    127132                        } 
    128133                } 
    129         } 
    130134 
    131135 
    132         // Append the data from the rest_table to the data array 
    133         for($i = 0; $i < $steps; $i++) { 
    134                 $data[$i][(count($data[$i]) - 1)] = $rest_table[$i][0]; 
    135        
     136               // Append the data from the rest_table to the data array 
     137               for($i = 0; $i < $steps; $i++) { 
     138                       $data[$i][(count($data[$i]) - 1)] = $rest_table[$i][0]; 
     139               
    136140 
    137         // Create the chart, write it to tmp/output.png 
    138         $plot = new PHPlot(800, 400); 
    139         $plot->SetIsInline(True); 
    140         //$plot->SetPrintImage(False); 
    141         $plot->SetImageBorderType('plain'); 
    142         $plot->SetDataColors($data_colors); 
    143  
    144  
    145         $plot->SetPlotType('stackedbars'); 
    146         $plot->SetDataType('text-data'); 
    147         $plot->SetDataValues($data); 
    148  
    149         $plot->SetTitle($chart_title); 
    150         $plot->SetYTitle($ytitle); 
    151         $plot->SetLegend($legend); 
    152  
    153         $plot->SetXTickLabelPos('none'); 
    154         $plot->SetXTickPos('none'); 
    155  
    156         $plot->SetNumberFormat(',', '.'); 
    157         $plot->SetPrecisionY(0); 
    158  
    159         $plot->SetOutputFile($output); 
    160         $plot->DrawGraph(); 
    161  
    162         chmod($output, 0644); 
    163         $target =  dirname($output).'/'.basename($output).'.png'; 
    164         if (rename($output, $target)) { 
    165                 return 'tmp/'.basename($target); 
    166         } else { 
    167                 return False; 
     141                return draw_stackedbar($chart_title, $legend, $ytitle, $data); 
    168142        } 
    169143} 
    170  
  • trunk/flowmon-web/charts/top-ports-dst.inc.php

    r1 r4  
    2121# 
    2222 
    23 require_once('phplot-5.0.5/phplot.php'); 
     23require_once('stacked-bars.inc.php'); 
    2424 
    2525// Get the data from the table, format it and write it out to a file 
     
    3333        $chart_title = $style.' '.$flowsrc.' - '.strftime($date_fmt_str, $starttime).' to '.strftime($date_fmt_str, $endtime); 
    3434        $ytitle = 'Bytes'; 
    35         $output = tempnam('tmp/', 'plot'); 
    36         $data_colors = array('SkyBlue', 'green', 'orange', 'blue', 'purple', 'red', 'violet', 'azure1', 'yellow', 'DarkGreen'); 
    37  
    3835 
    3936        // Grab the data from the database 
     
    135132        } 
    136133 
    137         // Create the chart 
    138         $plot = new PHPlot(800, 400); 
    139         $plot->SetIsInline(True); 
    140         //$plot->SetPrintImage(False); 
    141         $plot->SetImageBorderType('plain'); 
    142         $plot->SetDataColors($data_colors); 
     134        print_r($data); 
     135        return draw_stackedbar($chart_title, $legend, $ytitle, $data); 
    143136 
    144  
    145         $plot->SetPlotType('stackedbars'); 
    146         $plot->SetDataType('text-data'); 
    147         $plot->SetDataValues($data); 
    148  
    149         $plot->SetTitle($chart_title); 
    150         $plot->SetYTitle($ytitle); 
    151         $plot->SetLegend($legend); 
    152  
    153         $plot->SetXTickLabelPos('none'); 
    154         $plot->SetXTickPos('none'); 
    155  
    156         $plot->SetNumberFormat(',', '.'); 
    157         $plot->SetPrecisionY(0); 
    158  
    159         $plot->SetOutputFile($output); 
    160         $plot->DrawGraph(); 
    161  
    162         chmod($output, 0644); 
    163         $target =  dirname($output).'/'.basename($output).'.png'; 
    164         if (rename($output, $target)) { 
    165                 return 'tmp/'.basename($target); 
    166         } else { 
    167                 return False; 
    168         } 
    169137} 
    170138 
  • trunk/flowmon-web/charts/top-ports-src.inc.php

    r1 r4  
    2121# 
    2222 
    23 require_once('phplot-5.0.5/phplot.php'); 
     23require_once('stacked-bars.inc.php'); 
    2424 
    2525// Get the data from the table, format it and write it out to a file 
     
    3333        $chart_title = $style.' '.$flowsrc.' - '.strftime($date_fmt_str, $starttime).' to '.strftime($date_fmt_str, $endtime); 
    3434        $ytitle = 'Bytes'; 
    35         $output = tempnam('tmp/', 'plot'); 
    36         $data_colors = array('SkyBlue', 'green', 'orange', 'blue', 'purple', 'red', 'violet', 'azure1', 'yellow', 'DarkGreen'); 
    3735 
    3836 
     
    135133        } 
    136134 
    137         // Create the chart 
    138         $plot = new PHPlot(800, 400); 
    139         $plot->SetIsInline(True); 
    140         //$plot->SetPrintImage(False); 
    141         $plot->SetImageBorderType('plain'); 
    142         $plot->SetDataColors($data_colors); 
     135        return draw_stackedbar($chart_title, $legend, $ytitle, $data); 
    143136 
    144  
    145         $plot->SetPlotType('stackedbars'); 
    146         $plot->SetDataType('text-data'); 
    147         $plot->SetDataValues($data); 
    148  
    149         $plot->SetTitle($chart_title); 
    150         $plot->SetYTitle($ytitle); 
    151         $plot->SetLegend($legend); 
    152  
    153         $plot->SetXTickLabelPos('none'); 
    154         $plot->SetXTickPos('none'); 
    155  
    156         $plot->SetNumberFormat(',', '.'); 
    157         $plot->SetPrecisionY(0); 
    158  
    159         $plot->SetOutputFile($output); 
    160         $plot->DrawGraph(); 
    161  
    162         chmod($output, 0644); 
    163         $target =  dirname($output).'/'.basename($output).'.png'; 
    164         if (rename($output, $target)) { 
    165                 return 'tmp/'.basename($target); 
    166         } else { 
    167                 return False; 
    168         } 
    169137} 
    170138 
  • trunk/flowmon-web/charts/top-src.inc.php

    r1 r4  
    2121# 
    2222 
    23 require_once('phplot-5.0.5/phplot.php'); 
     23require_once('stacked-bars.inc.php'); 
    2424 
    2525// Get the data from the table, format it and write it out to a file 
    26 function chart_prepare($flowsrc, $starttime, $endtime, $timeframe = False) { 
     26function chart_prepare($flowsrc, $starttime, $endtime, $nslookup = False) { 
    2727        global $date_fmt_str; 
    2828        global $dbh; 
    29  
    30         if ($timeframe != False) { 
    31                 $starttime = (time() - $timeframe); 
    32                 $endtime = time(); 
    33         } 
    3429 
    3530        // Define the plot properties 
     
    3732        $chart_title = $style.' '.$flowsrc.' - '.strftime($date_fmt_str, $starttime).' to '.strftime($date_fmt_str, $endtime); 
    3833        $ytitle = 'Bytes'; 
    39         $output = tempnam('tmp/', 'plot'); 
    40         $data_colors = array('SkyBlue', 'green', 'orange', 'blue', 'purple', 'red', 'violet', 'azure1', 'yellow', 'DarkGreen'); 
    41  
    4234 
    4335        // Grab the data from the database 
     
    5547        $q->execute(); 
    5648 
    57         // Fill the legend build the WHERE limit 
    58         $legend = $q->fetchAll(PDO::FETCH_COLUMN, 0); 
    59         $limit = ''; 
    60         for ($i = 0; $i < count($legend); $i++) { 
    61                 $limit .= @$legend[$i].', '; 
    62                 if (array_key_exists($i, $legend)) { 
    63                         $legend[$i] = long2ip($legend[$i]); 
    64                 } else { 
    65                         $legend[$i] = ''; 
     49        // Did this return anything at all? 
     50        if ($q->rowCount() == 0) { 
     51                // No 
     52                print('No data for query-period'); 
     53                return False; 
     54        } else { 
     55                // Yes? Carry on! 
     56 
     57                // Fill the legend build the WHERE limit 
     58                $legend = $q->fetchAll(PDO::FETCH_COLUMN, 0); 
     59                $limit = ''; 
     60                for ($i = 0; $i < count($legend); $i++) { 
     61                        $limit .= @$legend[$i].', '; 
     62                        if (array_key_exists($i, $legend)) { 
     63                                $legend[$i] = long2ip($legend[$i]); 
     64                        } else { 
     65                                $legend[$i] = ''; 
     66                        } 
    6667                } 
    67         } 
    68         $legend[] = 'rest'; 
    69         $limit = substr($limit, 0, (strlen($limit) - 2)); 
     68                $legend[] = 'rest'; 
     69                $limit = substr($limit, 0, (strlen($limit) - 2)); 
    7070 
    71         // divide the timespan into 5min intervals 
    72         // query the traffic per talker in 5min intervals 
    73         // Initialize the data_table 
    74         $data = array(); 
    75         $steps = 0; 
    76         $rest_table = array(); 
    77         for ($time1 = $starttime; $time1 < $endtime; $time1 += (5 * 60)) { 
    78                 $time2 = ($time1 + (5 * 60)); 
    79                 $steps++; 
    80                 // Add the column header (time) to the data array 
    81                 $data[] = array(strftime('%H:%M', $time1)); 
    82                 $q = $dbh->prepare('SELECT IPSrc, SUM(Bytes) AS TrafficSum 
    83                                 FROM Flows 
    84                                 WHERE TimeStop BETWEEN ? AND ? 
    85                                 AND IPSrc IN ('.$limit.') 
    86                                 AND FlowSrc = ? 
    87                                 GROUP BY IPSrc 
    88                                 ORDER BY TrafficSum DESC 
    89                                 LIMIT 0, 9'); 
    90                 $q->bindParam(1, $time1, PDO::PARAM_INT); 
    91                 $q->bindParam(2, $time2, PDO::PARAM_INT); 
    92                 $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
    93                 $q->execute(); 
    94                 $r = $q->fetchAll(); 
    95                 $i = (count($data) - 1); 
    96                 foreach ($r as $row) { 
    97                         $tmpdata[$i][$row[0]] = $row[1]; 
     71                // divide the timespan into 5min intervals 
     72                // query the traffic per talker in 5min intervals 
     73                // Initialize the data_table 
     74                $data = array(); 
     75                $steps = 0; 
     76                $rest_table = array(); 
     77                for ($time1 = $starttime; $time1 < $endtime; $time1 += (5 * 60)) { 
     78                        $time2 = ($time1 + (5 * 60)); 
     79                        $steps++; 
     80                        // Add the column header (time) to the data array 
     81                        $data[] = array(strftime('%H:%M', $time1)); 
     82                        $q = $dbh->prepare('SELECT IPSrc, SUM(Bytes) AS TrafficSum 
     83                                        FROM Flows 
     84                                        WHERE TimeStop BETWEEN ? AND ? 
     85                                        AND IPSrc IN ('.$limit.') 
     86                                        AND FlowSrc = ? 
     87                                        GROUP BY IPSrc 
     88                                        ORDER BY TrafficSum DESC 
     89                                        LIMIT 0, 9'); 
     90                        $q->bindParam(1, $time1, PDO::PARAM_INT); 
     91                        $q->bindParam(2, $time2, PDO::PARAM_INT); 
     92                        $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
     93                        $q->execute(); 
     94                        $r = $q->fetchAll(); 
     95                        $i = (count($data) - 1); 
     96                        foreach ($r as $row) { 
     97                                $tmpdata[$i][$row[0]] = $row[1]; 
     98                        } 
     99 
     100                        // Get the rest of the aggregated traffic to fill up the bars 
     101                        $q = $dbh->prepare('SELECT SUM(Bytes) AS TrafficSum 
     102                                        FROM Flows 
     103                                        WHERE TimeStop BETWEEN ? AND ? 
     104                                        AND IPSrc NOT IN ('.$limit.') 
     105                                        AND FlowSrc = ?'); 
     106                        $q->bindParam(1, $time1, PDO::PARAM_INT); 
     107                        $q->bindParam(2, $time2, PDO::PARAM_INT); 
     108                        $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
     109                        $q->execute(); 
     110                        $rest_table[] = $q->fetch(); 
    98111                } 
    99112 
    100                 // Get the rest of the aggregated traffic to fill up the bars 
    101                 $q = $dbh->prepare('SELECT SUM(Bytes) AS TrafficSum 
    102                                 FROM Flows 
    103                                 WHERE TimeStop BETWEEN ? AND ? 
    104                                 AND IPSrc NOT IN ('.$limit.') 
    105                                 AND FlowSrc = ?'); 
    106                 $q->bindParam(1, $time1, PDO::PARAM_INT); 
    107                 $q->bindParam(2, $time2, PDO::PARAM_INT); 
    108                 $q->bindParam(3, sprintf('%u', ip2long($flowsrc)), PDO::PARAM_INT); 
    109                 $q->execute(); 
    110                 $rest_table[] = $q->fetch(); 
    111         } 
    112  
    113         // Iterate through the legend and fill the data array from the temporary data array 
    114         // This function makes sure that each top talker is always at the same position 
    115         // in the multidimensional data table. 
    116         // This is necessary for phpplot to assign the same color to each host on 
    117         // sequential columns 
    118         // $ip is the key for the temp_data lookup 
    119         foreach ($legend as $ip) { 
    120                 for($i = 0; $i < $steps; $i++) { 
    121                         if (array_key_exists($i, $tmpdata)) { 
    122                         // The "column" exists, let's sort the rows 
    123                                 $key = sprintf('%u', ip2long($ip)); 
    124                                 if (array_key_exists($key, $tmpdata[$i])) { 
    125                                         $data[$i][] = $tmpdata[$i][$key]; 
     113                // Iterate through the legend and fill the data array from the temporary data array 
     114                // This function makes sure that each top talker is always at the same position 
     115                // in the multidimensional data table. 
     116                // This is necessary for phpplot to assign the same color to each host on 
     117                // sequential columns 
     118                // $ip is the key for the temp_data lookup 
     119                foreach ($legend as $ip) { 
     120                        for($i = 0; $i < $steps; $i++) { 
     121                                if (array_key_exists($i, $tmpdata)) { 
     122                                // The "column" exists, let's sort the rows 
     123                                        $key = sprintf('%u', ip2long($ip)); 
     124                                        if (array_key_exists($key, $tmpdata[$i])) { 
     125                                                $data[$i][] = $tmpdata[$i][$key]; 
     126                                        } else { 
     127                                                $data[$i][] = ''; 
     128                                        } 
    126129                                } else { 
    127130                                        $data[$i][] = ''; 
    128131                                } 
    129                         } else { 
    130                                 $data[$i][] = ''; 
    131132                        } 
    132133                } 
    133         } 
    134134 
    135135 
    136         // Append the data from the rest_table to the data array 
    137         for($i = 0; $i < $steps; $i++) { 
    138                 $data[$i][(count($data[$i]) - 1)] = $rest_table[$i][0]; 
    139        
     136               // Append the data from the rest_table to the data array 
     137               for($i = 0; $i < $steps; $i++) { 
     138                       $data[$i][(count($data[$i]) - 1)] = $rest_table[$i][0]; 
     139               
    140140 
    141         // Create the chart, write it to tmp/output.png 
    142         $plot = new PHPlot(900, 400); 
    143         $plot->SetIsInline(True); 
    144         //$plot->SetPrintImage(False); 
    145         $plot->SetImageBorderType('plain'); 
    146         $plot->SetDataColors($data_colors); 
     141                if ($nslookup === True) { 
     142                        for ($i=0; $i < count($legend); $i++) { 
     143                                $legend[$i] = gethostbyaddr($legend[$i]).' ('.$legend[$i].')'; 
     144                        } 
     145                } 
    147146 
    148  
    149         $plot->SetPlotType('stackedbars'); 
    150         $plot->SetDataType('text-data'); 
    151         $plot->SetDataValues($data); 
    152  
    153         $plot->SetTitle($chart_title); 
    154         $plot->SetYTitle($ytitle); 
    155         $plot->SetLegend($legend); 
    156  
    157         $plot->SetXTickLabelPos('none'); 
    158         $plot->SetXTickPos('none'); 
    159  
    160         $plot->SetLegendPixels(760, 40); 
    161         $plot->SetMarginsPixels(100, 150, 50, 50); 
    162  
    163  
    164         $plot->SetNumberFormat(',', '.'); 
    165         $plot->SetPrecisionY(0); 
    166         $plot->SetYLabelType('data'); 
    167  
    168         $plot->SetOutputFile($output); 
    169         $plot->DrawGraph(); 
    170  
    171         chmod($output, 0644); 
    172         $target =  dirname($output).'/'.basename($output).'.png'; 
    173         if (rename($output, $target)) { 
    174                 return 'tmp/'.basename($target); 
    175         } else { 
    176                 return False; 
     147                return draw_stackedbar($chart_title, $legend, $ytitle, $data); 
    177148        } 
    178149} 
    179  
  • trunk/flowmon-web/common.inc.php

    r1 r4  
    8989        return $head; 
    9090} 
     91 
     92function chartstyle_header() { 
     93 
     94        global $chart_styles; 
     95 
     96        if (@$_REQUEST['nslookup'] == 'on') { 
     97                $nslookup = 'checked="checked"'; 
     98        } else { 
     99                $nslookup = False; 
     100        } 
     101        if (@$_REQUEST['rolling'] == 'on') { 
     102                $rolling = 'checked="checked"'; 
     103        } else { 
     104                $rolling = False; 
     105        } 
     106 
     107        $output = '<div style="margin: 30px auto 30px auto; width: 850px; text-align: left;"><form action='.$_SERVER['SCRIPT_NAME'].'> 
     108        <table> 
     109         <tr> 
     110          <td>Start Date: <input type="text" name="startdate" value="'.$_REQUEST['startdate'].'" size="10" /></td> 
     111          <td>Start Time: <input type="text" name="starttime" value="'.$_REQUEST['starttime'].'" size="5" /></td> 
     112          <td>End Date: <input type="text" name="enddate" value="'.$_REQUEST['enddate'].'" size="10" /></td> 
     113          <td>End Time: <input type="text" name="endtime" value="'.$_REQUEST['endtime'].'" size="5" /></td> 
     114          <td>Chart Style: <select name="style" size=1>'; 
     115 
     116                foreach ($chart_styles as $style=>$file) { 
     117                        if (@$_REQUEST['style'] == $style) { 
     118                                $output .= '<option selected="selected">'.$style.'</option>'."\n"; 
     119                        } else { 
     120                                $output .= '<option>'.$style.'</option>'."\n"; 
     121                        } 
     122                } 
     123 
     124        $output .= ' </select><td>Nslookup: <input type="checkbox" name="nslookup" '.$nslookup.'/><td> 
     125           </select><td>Rolling chart: <input type="checkbox" name="rolling" '.$rolling.'/><td> 
     126          <td><input type="hidden" name="probe" value="'.$_REQUEST['probe'].'" /><input type="hidden" name="action" value="chart" /><input type="submit" value="Chart!" /></td> 
     127         </tr> 
     128        </table> 
     129        </form></div>'; 
     130 
     131// <tr><td><input type="hidden" name="probe" value="'.$_REQUEST['probe'].'" /><select name="timeframe"><option $ 
     132 
     133        return $output; 
     134} 
  • trunk/flowmon-web/config.inc.php

    r1 r4  
    1313# Date formatstring 
    1414$date_fmt_str = '%Y-%m-%d %T+%Z'; 
    15 $date_fmt = ('Y-m-d T'); 
    1615 
    1716# Chart Styles we support 
  • trunk/flowmon-web/index.php

    r1 r4  
    1818# along with this program; if not, write to the Free Software 
    1919# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
    20 # Copyright 2004, 2005 Red Hat, Inc. 
    21 # 
    22 # AUTHOR: Andreas Thienemann <athienem@redhat.com> 
    2320# 
    2421 
     
    7067                print('<option value="'.$probe.'">'.$hostname.' ('.$probe.')</option>'); 
    7168        } 
    72         print('</select><input type="hidden" name="action" value="probe_select"><input type="submit" value="Graph!"></form>'); 
     69        print('</select><input type="hidden" name="action" value="chart"><input type="hidden" name="nslookup" value="on"><input type="hidden" name="rolling" value="on"><input type="submit" value="Graph!"></form>'); 
    7370        print('</div>'); 
    7471        print(html_footer()); 
     
    7774// We have selected a probe, present with detailes form to get the chart parameters 
    7875} else if (array_key_exists('action', $_REQUEST) && $_REQUEST['action'] == 'probe_select') { 
     76 
    7977        print(html_header($title = 'FlowMon '.$prog_vers.' - running on '.$_SERVER['HTTP_HOST'], $calendar = True)); 
    8078        print(page_header($title = 'FlowMon Chart Parameters')); 
     
    112110        print(html_header($title = 'FlowMon '.$prog_vers.' - running on '.$_SERVER['HTTP_HOST'], $calendar = True)); 
    113111        print(page_header($title = 'FlowMon Traffic Chart')); 
     112 
     113        // Initialize defaults which might not exist 
     114        if (!@array_key_exists('style', $_REQUEST)) { 
     115                $_REQUEST['style'] = 'Top Sources'; 
     116        } 
     117        if (!@array_key_exists('timeframe', $_REQUEST)) { 
     118                $_REQUEST['timeframe'] = '3600'; 
     119        } 
     120        if (@$_REQUEST['rolling'] == 'on') { 
     121                $_REQUEST['startdate'] = strftime('%Y-%m-%d', (time() - $_REQUEST['timeframe'])); 
     122                $_REQUEST['starttime'] = strftime('%H:%M', (time() - $_REQUEST['timeframe'])); 
     123                $_REQUEST['enddate'] = strftime('%Y-%m-%d'); 
     124                $_REQUEST['endtime'] = strftime('%H:%M'); 
     125 
     126                $starttime = strtotime($_REQUEST['startdate'].' '.$_REQUEST['starttime']); 
     127                $endtime = strtotime($_REQUEST['enddate'].' '.$_REQUEST['endtime']); 
     128        } else { 
     129                // Sanitize user input 
     130                $starttime = strtotime($_REQUEST['startdate'].' '.$_REQUEST['starttime']); 
     131                $endtime = strtotime($_REQUEST['enddate'].' '.$_REQUEST['endtime']); 
     132        } 
     133        print(chartstyle_header($_REQUEST['startdate'], $_REQUEST['starttime'], $_REQUEST['enddate'], $_REQUEST['endtime'])); 
    114134        print('<div style="margin: 30px auto 30px auto; width: 850px; text-align: left;"> 
    115135                <h1> Statistics</h1>'); 
     
    120140        } 
    121141 
    122         // Sanitize user input 
    123         $starttime = strtotime($_REQUEST['startdate'].' '.$_REQUEST['starttime']); 
    124         $endtime = strtotime($_REQUEST['enddate'].' '.$_REQUEST['endtime']); 
    125142        if (!isvalid_probe($_REQUEST['probe'])) { 
    126143                die("Invalid Probe"); 
    127144        } 
    128145 
    129         $file = chart_prepare($_REQUEST['probe'], $starttime, $endtime); 
     146        // Do we want namelookups? 
     147        if (@$_REQUEST['nslookup'] == 'on') { 
     148                $nslookup = True; 
     149        } else { 
     150                $nslookup = False; 
     151        } 
     152 
     153        $file = chart_prepare($_REQUEST['probe'], $starttime, $endtime, $nslookup=$nslookup); 
    130154 
    131155        print('<img src="'.$file.'" />'); 
     
    135159        print(html_footer()); 
    136160 
    137 // Rolling chart requested 
    138 } else if (array_key_exists('action', $_REQUEST) && $_REQUEST['action'] == 'rollingchart') { 
    139         print(html_header($title = 'FlowMon '.$prog_vers.' - running on '.$_SERVER['HTTP_HOST'], $calendar = False, $refresh = 300)); 
    140         print(page_header($title = 'FlowMon Rolling Traffic Chart')); 
    141         print('<div style="margin: 30px auto 30px auto; width: 850px; text-align: left;"> 
    142                 <h1>Rolling Statistics (updated every 5min)</h1>'); 
    143  
    144         // Import the Chart-Plugin 
    145         if (array_key_exists($_REQUEST['style'], $chart_styles)) { 
    146                 require_once('charts/'.$chart_styles[$_REQUEST['style']]); 
    147         } 
    148  
    149         // Sanitize user input 
    150         if (!isvalid_probe($_REQUEST['probe'])) { 
    151                 die("Invalid Probe"); 
    152         } 
    153  
    154         $file = chart_prepare($_REQUEST['probe'], False, False, $_REQUEST['timeframe']); 
    155  
    156         print('<img src="'.$file.'" />'); 
    157  
    158         print(' </div>'); 
    159  
    160         print(html_footer()); 
    161  
    162  
    163161}