Changeset 31


Ignore:
Timestamp:
Jun 14, 2009, 12:34:03 AM (15 years ago)
Author:
george
Message:
  • Opraveno: Obnova databáze ze zálohy.
  • Přidáno: Zobrazení tabulky dostupných aktualizací a možnost jejich provedení.
  • Opraveno: Odstranění znaků \r konce řádků z generovaných sh skriptů.
Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Readme.txt

    r30 r31  
    441) Popis složek
    55
    6   www - webové administrační rozhraní v PHP
    7   server - složka pro ukládání konfigurací a ladících záznamů vytvořených serverů
    8   emulator - složka obsahující dostupné emulátory
    9   database - složka obsahující zdrojové sql soubory pro nastavení databáze
    10   wowclient - složka obsahující datové soubory pro jednotlivé verze herního klienta
    11   temp - složka pro dočasné soubory
    12   backup - složka pro uložení souborů záloh databází
     6  www - Webové administrační rozhraní v PHP.
     7  server - Složka pro ukládání konfigurací a ladících záznamů vytvořených serverů.
     8  emulator - Složka obsahující dostupné emulátory.
     9  database - Složka obsahující zdrojové sql soubory pro nastavení databáze. Soubory jsou získávány z adresy https://unifieddb.svn.sourceforge.net/svnroot/unifieddb/.
     10  database/číslo/update - Složka obsahující rozdílové aktualizace databáze.
     11  wowclient - Složka obsahující datové soubory pro jednotlivé verze herního klienta.
     12  temp - Složka pro dočasné soubory.
     13  backup - Složka pro uložení souborů záloh databází.
    1314
    1415
     
    1617
    1718  Zkopírovat soubor www/config.sample.php na www/config.php a vyplnit údaje.
     19  Uživatelský účet pro přístup do databáze MySQL musí mít plný přístup, aby mohl vytvářet databáze pro servery.
    1820
    1921
  • trunk/www/backup.php

    r28 r31  
    1818  function Restore()
    1919  {
     20    $ServerId = $this->Backup['Server'];
    2021    $this->Task->Add('Obnovení databáze', array(
    2122      'mysql --silent --skip-column-names -u server'.$ServerId.' -pserver'.$ServerId.' server'.$ServerId.'_mangos -e "show tables" | gawk \'{print "drop table " $1 ";"}\' | mysql -u server'.$ServerId.' -pserver'.$ServerId.' server'.$ServerId.'_mangos',
     
    2425      'mysql --silent --skip-column-names -u server'.$ServerId.' -pserver'.$ServerId.' server'.$ServerId.'_scriptdev2 -e "show tables" | gawk \'{print "drop table " $1 ";"}\' | mysql -u server'.$ServerId.' -pserver'.$ServerId.' server'.$ServerId.'_scriptdev2',
    2526      'mkdir temp/wowhosting',
    26       'tar -xjf backup/wowhosting-'.$ServerId.'.tar.bz2 -C temp/wowhosting',
    27       'mysql --user server'.$ServerId.' --password server'.$ServerId.' server'.$ServerId.'_characters < temp/wowhosting/characters.sql',
    28       'mysql --user server'.$ServerId.' --password server'.$ServerId.' server'.$ServerId.'_realmd < temp/wowhosting/realmd.sql',
    29       'mysql --user server'.$ServerId.' --password server'.$ServerId.' server'.$ServerId.'_mangos < temp/wowhosting/mangos.sql',
    30       'mysql --user server'.$ServerId.' --password server'.$ServerId.' server'.$ServerId.'_scriptdev2 < temp/wowhosting/scriptdev2.sql',
    31       'rm -f temp/wowhosting',
     27      'tar -xjf backup/wowhosting-'.$this->Id.'.tar.bz2 -C temp',
     28      'mysql --user=server'.$ServerId.' --password=server'.$ServerId.' server'.$ServerId.'_characters < temp/wowhosting/characters.sql',
     29      'mysql --user=server'.$ServerId.' --password=server'.$ServerId.' server'.$ServerId.'_realmd < temp/wowhosting/realmd.sql',
     30      'mysql --user=server'.$ServerId.' --password=server'.$ServerId.' server'.$ServerId.'_mangos < temp/wowhosting/mangos.sql',
     31      'mysql --user=server'.$ServerId.' --password=server'.$ServerId.' server'.$ServerId.'_scriptdev2 < temp/wowhosting/scriptdev2.sql',
     32      'rm -rf temp/wowhosting',
    3233    ));
     34    return('Úloha obnovení databáze ze zálohy zařazena do fronty.');
    3335  }
    3436 
     
    4951      'rm -rf wowhosting',
    5052    ));
    51     return('Úloha zálohování byla zařazena do fronty');
     53    return('Úloha zálohování byla zařazena do fronty.');
    5254  } 
    5355}
  • trunk/www/emulator.php

    r24 r31  
    3636   
    3737    $this->Task->Add('Stažení emulátoru', array(
     38      'mkdir '.$Config['BaseDir'].'emulator/'.$this->Id.'/',
    3839      'cd '.$Config['BaseDir'].'emulator/'.$this->Id.'/',
    3940      'git clone git://github.com/mangos/mangos.git source',
  • trunk/www/index.php

    r30 r31  
    7272  }
    7373 
    74   function ShowEmulatorListOnRow($Row)
    75   {
    76     $Row['Name'] = '<a href="?Action=EmulatorShow&amp;Id='.$Row['Id'].'">'.$Row['Name'].'</a>';
    77     return($Row);
    78   }
    79  
    8074  function ShowEmulatorList()
    8175  {
     
    8478    $Output = '<h4>Seznam verzí emulátoru</h4>';
    8579    $Table = new Table('EmulatorList');
    86     $Table->OnRow = array($this, 'ShowEmulatorListOnRow');
     80    $Table->Definition['Items']['Id'] = array('Type' => 'Hidden', 'Caption' => '', 'Default' => '');
    8781    $Table->LoadValuesFromDatabase($this->Database);
     82    $Table->Definition['Items']['Actions'] = array('Type' => 'String', 'Caption' => '', 'Default' => '');
     83    foreach($Table->Values as $Index => $Item)
     84    {
     85      $Table->Values[$Index]['Actions'] = '<a href="?Action=EmulatorShow&amp;Id='.$Item['Id'].'">Podprobnosti</a>';
     86      unset($Table->Values[$Index]['Id']);
     87    }
    8888    $Output .= $Table->Show();
    8989    if($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR)
     
    9191      $Output .= '<br /><div style="text-align: center;"><a href="?Action=EmulatorAdd">Přidat emulátor</a></dev>';     
    9292    }
     93    return($Output);
     94  }
     95
     96  function ShowUpdateList($ServerId)
     97  {
     98    global $Config;
     99   
     100    if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     101    {
     102      $Server = new Server($this->Database, $_GET['Id']);
     103      if(($this->System->Modules['User']->User['Id'] == $Server->Server['User']) or ($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR))
     104      {
     105        $Server = new Server($this->Database, $ServerId);
     106        $Output = '<h4>Seznam dostupných aktulizací</h4>';
     107        $Output .= 'Před provedením aktualizace bude server zastaven a provedena záloha databáze.';
     108        $Table = new Table('EmulatorList');
     109        $Table->Definition['Table'] = substr($Table->Definition['Table'], 0, -1).' WHERE Revision > '.$Server->Server['Database']['Emulator']['Revision'].' ORDER BY Revision)';
     110        $Table->Definition['Items']['Id'] = array('Type' => 'Hidden', 'Caption' => '', 'Default' => '');
     111        $Table->LoadValuesFromDatabase($this->Database);
     112        $Table->Definition['Items']['Actions'] = array('Type' => 'String', 'Caption' => '', 'Default' => '');
     113        foreach($Table->Values as $Index => $Item)
     114        {
     115          $Table->Values[$Index]['Actions'] = '<a href="?Action=EmulatorShow&amp;Id='.$Item['Id'].'">Podprobnosti</a>';
     116          $Table->Values[$Index]['Actions'] .= ' <a href="?Action=Update&amp;Server='.$ServerId.'&amp;Update='.$Item['Id'].'">Aktualizovat</a>';
     117          unset($Table->Values[$Index]['Id']);
     118        }
     119        $Output .= $Table->Show();
     120      } else $this->SystemMessage('Dostupné aktualizace', 'Nemáte oprávnění');
     121    } else $Output .= USER_BAD_ROLE;   
    93122    return($Output);
    94123  }
     
    104133    if($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR)
    105134    {
     135      $Output .= ' <a href="?Action=EmulatorDownload&amp;Id='.$Id.'">Stáhnout</a>';
    106136      $Output .= ' <a href="?Action=EmulatorCompile&amp;Id='.$Id.'">Přeložit</a>';
    107       $Output .= ' <a href="?Action=EmulatorDownloadAndCompile&amp;Id='.$Id.'">Stáhnout a přeložit</a>';
    108137    }
    109138    $Output .= '</div>';
     
    136165        {
    137166          $Table->Values[$Index]['Actions'] = '<a href="?Action=BackupDownload&amp;Id='.$Value['Id'].'">Stáhnout</a>';
     167          $Table->Values[$Index]['Actions'] .= ' <a href="?Action=BackupRestore&amp;Id='.$Value['Id'].'">Obnovit</a>';
    138168          unset($Table->Values[$Index]['Id']);
    139169        }
     
    178208      $Output = '<h4>Fronta úloh</h4>';
    179209      $Table = new Table('TaskList');
    180       $Table->Definition['Table'] = '(SELECT Time, Title, State FROM Task WHERE User='.$this->System->Modules['User']->User['Id'].')';
     210      $Table->Definition['Table'] = '(SELECT Time, Title, State FROM Task WHERE User='.$this->System->Modules['User']->User['Id'].' ORDER BY Id DESC)';
    181211      $Table->LoadValuesFromDatabase($this->Database);
    182212      $Output .= $Table->Show();
     
    256286        $Output .= '<div><a href="?Action=BackupList&amp;Id='.$Server['Id'].'">Zálohy</a></div>';
    257287        $Output .= '<div><a href="?Action=TaskList">Fronta úloh</a></div>';
     288        $Output .= '<div><a href="?Action=UpdateList&amp;Id='.$Server['Id'].'">Dostupné aktualizace</a></div>';
    258289      } else $Output .= '<div><a href="?Action=ServerAdd">Vytvořit vlastní server</a></div>';
    259290      if($this->System->Modules['User']->User['Role'] == USER_ROLE_ADMINISTRATOR)
     
    284315    '<li>Neomezený počet účtů a postav.</li>'.
    285316    '<li>Možnost stáhnout si celou databázi serveru a v případě zájmů hráčů tak přejít na vlastní výkonější vyhrazený server.</li>'.
     317    '<li>Automatické restartování serveru při selhání a automatický záznam ladících informací o pádu.</li>'.
    286318    '</ul><br />'.
     319    '<p>Vámi vytvořený server může být bez předchozího upozornění smazán, např. pokud nebude již využíván nebo bude potřeba snížit vytížení hostingu.</p>'.
    287320    'Technická podpora: '.$Config['Web']['AdminEmail'];
    288321    return($Output);
     
    524557        } else $Output .= $this->SystemMessage('Překlad emulátoru', 'Nebylo zadáno Id');
    525558      } else
     559      if($_GET['Action'] == 'EmulatorDownload')
     560      {
     561        if(array_key_exists('Id', $_GET))
     562        {
     563          $Emulator = new Emulator($this->Database, $_GET['Id']);
     564          $Emulator->Download();       
     565          $Output .= $this->SystemMessage('Stažení emulátoru', 'Úloha zařazena do fronty');
     566          $Output .= $this->ShowTaskList();
     567        } else $Output .= $this->SystemMessage('Stažení emulátoru', 'Nebylo zadáno Id');
     568      } else
    526569      if($_GET['Action'] == 'ServerDebug')
    527570      {
     
    548591      {
    549592        $Output .= $this->ShowDebugList($_GET['Id']);
     593      } else     
     594      if($_GET['Action'] == 'UpdateList')
     595      {
     596        $Output .= $this->ShowUpdateList($_GET['Id']);
    550597      } else     
    551598      if($_GET['Action'] == 'GameAccountRegister')
     
    583630        } else $Output .= USER_BAD_ROLE;
    584631      } else     
     632      if($_GET['Action'] == 'BackupRestore')
     633      {
     634        if(!array_key_exists('Id', $_GET)) $Output .= $this->SystemMessage('Obnovení ze zálohy', 'Nebylo zadáno Id zálohy');
     635        else if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     636        {
     637          $Backup = new Backup($this->Database, $_GET['Id']);
     638          $Server = new Server($this->Database, $Backup->Backup['Server']);
     639          if(($this->System->Modules['User']->User['Id'] == $Server->Server['User']) or ($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR))
     640          {
     641            $Output .= $this->SystemMessage('Obnovení ze zálohy', $Backup->Restore());
     642            $Output .= $this->ShowTaskList();
     643          } else $this->SystemMessage('Obnovení ze zálohy', 'Nemáte oprávnění');
     644        } else $Output .= USER_BAD_ROLE;
     645      } else     
    585646      if($_GET['Action'] == 'BackupDownload')
    586647      {
     
    602663      {
    603664        $Output .= $this->ShowTaskList();
     665      } else     
     666      if($_GET['Action'] == 'Update')
     667      {
     668        if(!array_key_exists('Server', $_GET)) $Output .= $this->SystemMessage('Aktualizace serveru', 'Nebylo zadáno Id serveru');
     669        else if(!array_key_exists('Update', $_GET)) $Output .= $this->SystemMessage('Aktualizace serveru', 'Nebylo zadáno Id aktualizace');
     670        else if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     671        {
     672          $Server = new Server($this->Database, $_GET['Server']);
     673          if(($this->System->Modules['User']->User['Id'] == $Server->Server['User']) or ($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR))
     674          {
     675            $Output .= $this->SystemMessage('Aktualizace serveru', $Server->Update($_GET['Update']));
     676            $Output .= $this->ShowTaskList();
     677          } else $this->SystemMessage('Aktualizace serveru', 'Nemáte oprávnění');
     678        } else $Output .= USER_BAD_ROLE;
    604679      } else     
    605680      if($_GET['Action'] == 'Test')
  • trunk/www/server.php

    r30 r31  
    272272    return($Output);
    273273  }
     274 
     275  function Update($DatabaseId)
     276  {
     277    // Stop server before update
     278    $Output = $this->Stop();
     279   
     280    // Backup current
     281    $Backup = new Backup($this->Database, 0);
     282    $Output .= '<br />'.$Backup->Create($this->Id);
     283   
     284    // Do update
     285    $Commands = array();
     286    $DbResult = $this->Database->query('SELECT `Revision` FROM `Database` WHERE `Id` = '.$this->Server['Database']['Id']);
     287    $DbRow = $DbResult->fetch_assoc();
     288    $DatabaseRevisionStart = $DbRow['Revision'];
     289    $DbResult = $this->Database->query('SELECT `Revision` FROM `Database` WHERE `Id` = '.$DatabaseId);
     290    $DbRow = $DbResult->fetch_assoc();
     291    $DatabaseRevisionEnd = $DbRow['Revision'];
     292    $DbResult = $this->Database->query('SELECT * FROM `DatabaseUpdate` WHERE (`Revision` > '.$DatabaseRevisionStart.') AND (`Revision` <= '.$DatabaseRevisionEnd.') ORDER BY `Revision`');
     293    while($DbRow = $DbResult->fetch_assoc())
     294    {
     295      $Updates = explode("\n", $DbRow['Updates']);
     296      foreach($Updates as $Update)
     297      if($Update != '')
     298      {
     299        $Parts = explode('|', $Update);
     300        $Command = 'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_'.$Parts[0].' < database/'.$DbRow['Database'].'/update/'.$Parts[1];
     301        $Commands[] = $Command;
     302      }     
     303    }
     304    $this->Task->Add('Aktualizace databáze', $Commands);
     305    $Output .= '<br />Úloha aktualizace serveru byla přidána do fronty.';
     306    return($Output);
     307  }
    274308}
    275309
  • trunk/www/task.php

    r29 r31  
    1414    global $System;
    1515   
    16     $this->Database->insert('Task', array('User' => $System->Modules['User']->User['Id'], 'Title' => $Title, 'Time' => 'NOW()', 'CommandList' => implode("\n", $Task)."\n"));
     16    $CommandList = implode("\n", $Task)."\n";
     17    $this->Database->insert('Task', array('User' => $System->Modules['User']->User['Id'], 'Title' => $Title, 'Time' => 'NOW()', 'CommandList' => $CommandList));
    1718  }
    1819
     
    2324    chdir($Config['BaseDir']);
    2425    $DbResult = $this->Database->query('SELECT * FROM Task WHERE State = 0 ORDER BY Id,Time ASC');
     26    $this->Database->query('UPDATE Task SET State=2 WHERE State=1'); // Change not finished running tasks to finished
    2527    while($Task = $DbResult->fetch_assoc())
    2628    {
    2729      $this->Database->query('UPDATE Task SET State=1 WHERE Id='.$Task['Id']);
    2830      echo('Provádím úlohu '.$Task['Id'].': '.$Task['Title']."...\n");
    29       $Task['CommandList'] = "#!/bin/sh\n".$Task['CommandList'];
     31      $Task['CommandList'] = "#!/bin/sh\n".str_replace("\r", '', $Task['CommandList']);
    3032      file_put_contents($this->TempScript, $Task['CommandList']);
    3133      chmod($this->TempScript, 0755);
Note: See TracChangeset for help on using the changeset viewer.