mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			168 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| // MYSQL Check - FIXME
 | |
| // 1 UNKNOWN
 | |
| 
 | |
| /*
 | |
|  * LibreNMS 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;
 | |
|     }
 | |
| }
 |