mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			177 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
// MYSQL Check - FIXME
 | 
						|
// 1 UNKNOWN
 | 
						|
 | 
						|
/*
 | 
						|
 * Observium Network Management and Monitoring System
 | 
						|
 * Copyright (C) 2006-2012, Observium Developers - http://www.observium.org
 | 
						|
 *
 | 
						|
 * This program is free software: you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU General Public License as published by
 | 
						|
 * the Free Software Foundation, either version 3 of the License, or
 | 
						|
 * (at your option) any later version.
 | 
						|
 *
 | 
						|
 * See COPYING for more details.
 | 
						|
 */
 | 
						|
 | 
						|
if (!isset($debug)) {
 | 
						|
    // Not called from within discovery, let's load up the necessary stuff.
 | 
						|
    include 'includes/defaults.inc.php';
 | 
						|
    include 'config.php';
 | 
						|
    include 'includes/definitions.inc.php';
 | 
						|
    include 'includes/functions.php';
 | 
						|
 | 
						|
    $options = getopt('d');
 | 
						|
    if (isset($options['d'])) {
 | 
						|
        $debug = true;
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        $debug = false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
$insert = 0;
 | 
						|
 | 
						|
if ($db_rev = @dbFetchCell('SELECT version FROM `dbSchema` ORDER BY version DESC LIMIT 1')) {
 | 
						|
}
 | 
						|
else {
 | 
						|
    $db_rev = 0;
 | 
						|
    $insert = 1;
 | 
						|
}
 | 
						|
 | 
						|
// For transition from old system
 | 
						|
if ($old_rev = @dbFetchCell('SELECT revision FROM `dbSchema`')) {
 | 
						|
    echo "-- Transitioning from old revision-based schema to database version system\n";
 | 
						|
    $db_rev = 6;
 | 
						|
 | 
						|
    if ($old_rev <= 1000) {
 | 
						|
        $db_rev = 1;
 | 
						|
    }
 | 
						|
 | 
						|
    if ($old_rev <= 1435) {
 | 
						|
        $db_rev = 2;
 | 
						|
    }
 | 
						|
 | 
						|
    if ($old_rev <= 2245) {
 | 
						|
        $db_rev = 3;
 | 
						|
    }
 | 
						|
 | 
						|
    if ($old_rev <= 2804) {
 | 
						|
        $db_rev = 4;
 | 
						|
    }
 | 
						|
 | 
						|
    if ($old_rev <= 2827) {
 | 
						|
        $db_rev = 5;
 | 
						|
    }
 | 
						|
 | 
						|
    $insert = 1;
 | 
						|
}//end if
 | 
						|
 | 
						|
$updating = 0;
 | 
						|
 | 
						|
$include_dir_regexp = '/\.sql$/';
 | 
						|
 | 
						|
if ($handle = opendir($config['install_dir'].'/sql-schema')) {
 | 
						|
    while (false !== ($file = readdir($handle))) {
 | 
						|
        if (filetype($config['install_dir'].'/sql-schema/'.$file) == 'file' && preg_match($include_dir_regexp, $file)) {
 | 
						|
            $filelist[] = $file;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    closedir($handle);
 | 
						|
}
 | 
						|
 | 
						|
asort($filelist);
 | 
						|
$tmp = explode('.', max($filelist), 2);
 | 
						|
if ($tmp[0] <= $db_rev) {
 | 
						|
    if ($debug) {
 | 
						|
        echo "DB Schema already up to date.\n";
 | 
						|
    }
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
$limit = 150; //magic marker far enough in the future
 | 
						|
foreach ($filelist as $file) {
 | 
						|
    list($filename,$extension) = explode('.', $file, 2);
 | 
						|
    if ($filename > $db_rev) {
 | 
						|
 | 
						|
        if (isset($_SESSION['stage']) ) {
 | 
						|
            $limit++;
 | 
						|
            if ( time()-$_SESSION['last'] > 45 ) {
 | 
						|
                $_SESSION['offset'] = $limit;
 | 
						|
                $GLOBALS['refresh'] = '<b>Updating, please wait..</b><sub>'.date('r').'</sub><script>window.location.href = "install.php?offset='.$limit.'";</script>';
 | 
						|
                return;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if (!$updating) {
 | 
						|
            echo "-- Updating database schema\n";
 | 
						|
        }
 | 
						|
 | 
						|
        echo sprintf('%03d', $db_rev).' -> '.sprintf('%03d', $filename).' ...';
 | 
						|
 | 
						|
        $err = 0;
 | 
						|
 | 
						|
        if ($fd = @fopen($config['install_dir'].'/sql-schema/'.$file, 'r')) {
 | 
						|
            $data = fread($fd, 4096);
 | 
						|
            while (!feof($fd)) {
 | 
						|
                $data .= fread($fd, 4096);
 | 
						|
            }
 | 
						|
 | 
						|
            foreach (explode("\n", $data) as $line) {
 | 
						|
                if (trim($line)) {
 | 
						|
                    d_echo("$line \n");
 | 
						|
 | 
						|
                    if ($line[0] != '#') {
 | 
						|
                        if ($config['db']['extension'] == 'mysqli') {
 | 
						|
                            $update = mysqli_query($database_link, $line);
 | 
						|
                        }
 | 
						|
                        else {
 | 
						|
                            $update = mysql_query($line);
 | 
						|
                        }
 | 
						|
                        if (!$update) {
 | 
						|
                            $err++;
 | 
						|
                            if ($debug) {
 | 
						|
                                if ($config['db']['extension'] == 'mysqli') {
 | 
						|
                                    echo mysqli_error($database_link)."\n";
 | 
						|
                                }
 | 
						|
                                else {
 | 
						|
                                    echo mysql_error()."\n";
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if ($db_rev < 5) {
 | 
						|
                echo " done.\n";
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                echo " done ($err errors).\n";
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            echo " Could not open file!\n";
 | 
						|
        }//end if
 | 
						|
 | 
						|
        $updating++;
 | 
						|
        $db_rev = $filename;
 | 
						|
        if ($insert) {
 | 
						|
            dbInsert(array('version' => $db_rev), 'dbSchema');
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            dbUpdate(array('version' => $db_rev), 'dbSchema');
 | 
						|
        }
 | 
						|
    }//end if
 | 
						|
}//end foreach
 | 
						|
 | 
						|
if ($updating) {
 | 
						|
    echo "-- Done\n";
 | 
						|
    if( isset($_SESSION['stage']) ) {
 | 
						|
        $_SESSION['build-ok'] = true;
 | 
						|
    }
 | 
						|
}
 | 
						|
 |