Revision fcaa56b1
Added by Seth Mos about 12 years ago
etc/inc/upgrade_config.inc | ||
---|---|---|
2664 | 2664 |
$databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); |
2665 | 2665 |
rsort($databases); |
2666 | 2666 |
foreach($databases as $database) { |
2667 |
$databasetmp = "{$database}.tmp"; |
|
2668 | 2667 |
$xmldump = "{$database}.old.xml"; |
2669 |
$xmldumptmp = "{$database}.tmp.xml"; |
|
2670 | 2668 |
$xmldumpnew = "{$database}.new.xml"; |
2671 | 2669 |
|
2672 | 2670 |
if ($g['booting']) |
... | ... | |
2675 | 2673 |
/* dump contents to xml and move database out of the way */ |
2676 | 2674 |
dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); |
2677 | 2675 |
|
2678 |
/* create new rrd database file */ |
|
2679 |
$rrdcreate = "$rrdtool create {$g['tmp_path']}/{$databasetmp} --step $rrdinterval "; |
|
2680 |
$rrdcreate .= "DS:inpass:COUNTER:$valid:0:$downstream "; |
|
2681 |
$rrdcreate .= "DS:outpass:COUNTER:$valid:0:$upstream "; |
|
2682 |
$rrdcreate .= "DS:inblock:COUNTER:$valid:0:$downstream "; |
|
2683 |
$rrdcreate .= "DS:outblock:COUNTER:$valid:0:$upstream "; |
|
2684 |
$rrdcreate .= "DS:inpass6:COUNTER:$valid:0:$downstream "; |
|
2685 |
$rrdcreate .= "DS:outpass6:COUNTER:$valid:0:$upstream "; |
|
2686 |
$rrdcreate .= "DS:inblock6:COUNTER:$valid:0:$downstream "; |
|
2687 |
$rrdcreate .= "DS:outblock6:COUNTER:$valid:0:$upstream "; |
|
2688 |
$rrdcreate .= "RRA:AVERAGE:0.5:1:1000 "; |
|
2689 |
$rrdcreate .= "RRA:AVERAGE:0.5:5:1000 "; |
|
2690 |
$rrdcreate .= "RRA:AVERAGE:0.5:60:1000 "; |
|
2691 |
$rrdcreate .= "RRA:AVERAGE:0.5:720:3000 "; |
|
2692 |
|
|
2693 |
create_new_rrd("$rrdcreate"); |
|
2694 |
/* create temporary xml from new RRD */ |
|
2695 |
dump_rrd_to_xml("{$g['tmp_path']}/{$databasetmp}", "{$g['tmp_path']}/{$xmldumptmp}"); |
|
2696 |
|
|
2697 |
$rrdold = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldump}"), 1, "tag"); |
|
2698 |
$rrdolder = $rrdold['rrd']; |
|
2699 |
unset($rrdold); |
|
2700 |
|
|
2701 |
$rrdnew = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldumptmp}"), 1, "tag"); |
|
2702 |
$rrdnewer = $rrdnew['rrd']; |
|
2703 |
unset($rrdnew); |
|
2704 |
|
|
2705 |
/* remove any MAX RRA's. Not needed for traffic. */ |
|
2706 |
if (is_array($rrdolder)) { |
|
2707 |
$i = 0; |
|
2708 |
foreach ($rrdolder['rra'] as $rra) { |
|
2709 |
if(trim($rra['cf']) == "MAX") { |
|
2710 |
unset($rrdolder['rra'][$i]); |
|
2711 |
} |
|
2712 |
$i++; |
|
2713 |
} |
|
2676 |
/* search and replace tags to add data sources */ |
|
2677 |
$ds_search = "<!-- Round Robin Archives -->"; |
|
2678 |
$ds_arr = array(); |
|
2679 |
$ds_arr[] = " <ds> |
|
2680 |
<name> inpass6 </name> |
|
2681 |
<type> COUNTER </type> |
|
2682 |
<minimal_heartbeat> {$valid} </minimal_heartbeat> |
|
2683 |
<min> 0.0000000000e+00 </min> |
|
2684 |
<max> 1.2500000000e+08 </max> |
|
2685 |
|
|
2686 |
<!-- PDP Status --> |
|
2687 |
<last_ds> 0 </last_ds> |
|
2688 |
<value> NaN </value> |
|
2689 |
<unknown_sec> 3 </unknown_sec> |
|
2690 |
</ds> |
|
2691 |
"; |
|
2692 |
$ds_arr[] = " <ds> |
|
2693 |
<name> outpass6 </name> |
|
2694 |
<type> COUNTER </type> |
|
2695 |
<minimal_heartbeat> {$valid} </minimal_heartbeat> |
|
2696 |
<min> 0.0000000000e+00 </min> |
|
2697 |
<max> 1.2500000000e+08 </max> |
|
2698 |
|
|
2699 |
<!-- PDP Status --> |
|
2700 |
<last_ds> 0 </last_ds> |
|
2701 |
<value> NaN </value> |
|
2702 |
<unknown_sec> 3 </unknown_sec> |
|
2703 |
</ds> |
|
2704 |
"; |
|
2705 |
$ds_arr[] = " <ds> |
|
2706 |
<name> inblock6 </name> |
|
2707 |
<type> COUNTER </type> |
|
2708 |
<minimal_heartbeat> {$valid} </minimal_heartbeat> |
|
2709 |
<min> 0.0000000000e+00 </min> |
|
2710 |
<max> 1.2500000000e+08 </max> |
|
2711 |
|
|
2712 |
<!-- PDP Status --> |
|
2713 |
<last_ds> 0 </last_ds> |
|
2714 |
<value> NaN </value> |
|
2715 |
<unknown_sec> 3 </unknown_sec> |
|
2716 |
</ds> |
|
2717 |
"; |
|
2718 |
$ds_arr[] = " <ds> |
|
2719 |
<name> outblock6 </name> |
|
2720 |
<type> COUNTER </type> |
|
2721 |
<minimal_heartbeat> {$valid} </minimal_heartbeat> |
|
2722 |
<min> 0.0000000000e+00 </min> |
|
2723 |
<max> 1.2500000000e+08 </max> |
|
2724 |
|
|
2725 |
<!-- PDP Status --> |
|
2726 |
<last_ds> 0 </last_ds> |
|
2727 |
<value> NaN </value> |
|
2728 |
<unknown_sec> 3 </unknown_sec> |
|
2729 |
</ds> |
|
2730 |
"; |
|
2731 |
|
|
2732 |
$cdp_search = "<\/cdp_prep>"; |
|
2733 |
$cdp_replace = "</cdp_prep>"; |
|
2734 |
$cdp_arr = array(); |
|
2735 |
$cdp_arr[] = " <ds> |
|
2736 |
<primary_value> NaN </primary_value> |
|
2737 |
<secondary_value> 0.0000000000e+00 </secondary_value> |
|
2738 |
<value> NaN </value> |
|
2739 |
<unknown_datapoints> 0 </unknown_datapoints> |
|
2740 |
</ds> |
|
2741 |
"; |
|
2742 |
$cdp_arr[] = " <ds> |
|
2743 |
<primary_value> NaN </primary_value> |
|
2744 |
<secondary_value> 0.0000000000e+00 </secondary_value> |
|
2745 |
<value> NaN </value> |
|
2746 |
<unknown_datapoints> 0 </unknown_datapoints> |
|
2747 |
</ds> |
|
2748 |
"; |
|
2749 |
$cdp_arr[] = " <ds> |
|
2750 |
<primary_value> NaN </primary_value> |
|
2751 |
<secondary_value> 0.0000000000e+00 </secondary_value> |
|
2752 |
<value> NaN </value> |
|
2753 |
<unknown_datapoints> 0 </unknown_datapoints> |
|
2754 |
</ds> |
|
2755 |
"; |
|
2756 |
$cdp_arr[] = " <ds> |
|
2757 |
<primary_value> NaN </primary_value> |
|
2758 |
<secondary_value> 0.0000000000e+00 </secondary_value> |
|
2759 |
<value> NaN </value> |
|
2760 |
<unknown_datapoints> 0 </unknown_datapoints> |
|
2761 |
</ds> |
|
2762 |
"; |
|
2763 |
|
|
2764 |
$value_search = "<\/row>"; |
|
2765 |
$value_replace = "</row>"; |
|
2766 |
$value = "<v> NaN </v>"; |
|
2767 |
|
|
2768 |
$xml = file_get_contents("{$g['tmp_path']}/{$xmldump}"); |
|
2769 |
foreach($ds_arr as $ds) { |
|
2770 |
$xml = preg_replace("/$ds_search/s", "$ds{$ds_search}", $xml); |
|
2771 |
} |
|
2772 |
foreach($cdp_arr as $cdp) { |
|
2773 |
$xml = preg_replace("/$cdp_search/s", "$cdp{$cdp_replace}", $xml); |
|
2774 |
} |
|
2775 |
foreach($ds_arr as $ds) { |
|
2776 |
$xml = preg_replace("/$value_search/s", "$value{$value_replace}", $xml); |
|
2777 |
} |
|
2778 |
|
|
2779 |
file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $xml); |
|
2780 |
mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); |
|
2781 |
unset($xml); |
|
2714 | 2782 |
|
2715 |
file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", dump_xml_config_raw(migrate_rrd_format($rrdolder, $rrdnewer), "rrd")); |
|
2716 |
mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); |
|
2717 |
unset($rrdolder, $rrdnewer); |
|
2718 |
} |
|
2719 | 2783 |
} |
2720 | 2784 |
enable_rrd_graphing(); |
2721 | 2785 |
if ($g['booting']) |
Also available in: Unified diff
Install Plan B for upgrading the RRD files to the newer format to add IPv6 fields.
We now perform a search and replace on the XML contents to add fields instead of reading the XML into a PHP array.
A conversion with a 2.0 config on a 128MB VM without swap is succesful, needs more testing.
Ticket #2950