Changeset 34


Ignore:
Timestamp:
Jun 15, 2009, 9:09:30 AM (15 years ago)
Author:
george
Message:
  • Přidáno: Uzamykání serverů a emulátorů pro vyloučení souběžných a opakovaných operací nad jednou položkou.
  • Upraveno: Zobrazovat čas trvání u úloh. Čas rozdělen na čas vytvoření, spuštění a ukončení.
  • Opraveno: Zobrazování čísel s jednotkami. Byl problém se zápornými čísly a čísly menšími než 1.
  • Přidáno: Jednotka shell pro sjednocený přístup k PHP funkcím z příkazového řádku.
Location:
trunk/www
Files:
2 added
2 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/emulator.php

    r31 r34  
    3535    global $Config;
    3636   
     37    $this->Lock();
    3738    $this->Task->Add('Stažení emulátoru', array(
    3839      'mkdir '.$Config['BaseDir'].'emulator/'.$this->Id.'/',
     
    5152    global $Config;
    5253   
     54    $this->Lock();
    5355    $this->Task->Add('Překlad emulátoru', array(
    5456      'cd '.$Config['BaseDir'].'emulator/'.$this->Id.'/source',
     
    6668  function ExtractMaps()
    6769  {
     70    $this->Lock();
    6871    $this->Task->Add('Vygenerování souborů map', array(
    6972      'cd wowclient/'.$this->Emulator['Client']['Version'].'/client',
     
    7477    return('Požadavek na vygenerování map zařazen.');
    7578  }
     79 
     80 
     81  function Lock()
     82  {
     83    $this->Database->update('Emulator', 'Id='.$this->Id, array('Lock' => 1));
     84  }
     85 
     86  function UnLock()
     87  {
     88    $this->Database->update('Emulator', 'Id='.$this->Id, array('Lock' => 0));
     89  }
    7690}
    7791
  • trunk/www/form_classes.php

    r33 r34  
    174174    'Title' => 'Seznam úloh',
    175175    'Table' => 'Task',
    176     'DefaultOrderColumn' => 'Time',
     176    'DefaultOrderColumn' => 'TimeCreate',
    177177    'DefaultOrderDirection' => 1,
    178178    'Items' => array(
    179       'Time' => array('Type' => 'DateTime', 'Caption' => 'Čas', 'Default' => ''),
     179      'TimeCreate' => array('Type' => 'DateTime', 'Caption' => 'Čas vytvoření', 'Default' => ''),
    180180      'Title' => array('Type' => 'String', 'Caption' => 'Akce', 'Default' => ''),
    181181      'State' => array('Type' => 'TaskState', 'Caption' => 'Stav', 'Default' => ''),
     182      'Duration' => array('Type' => 'String', 'Caption' => 'Trvání', 'Default' => ''),
    182183    ),
    183184  ),
  • trunk/www/global.php

    r32 r34  
    7373  'Time' => array
    7474  (
    75     'BaseIndex' => 0,
     75    'BaseIndex' => 8,
    7676    'Definition' => array
    7777    (
     
    167167    global $PrefixMultipliers;
    168168
    169     if(($Unit == '') and ($PrefixType != 'Time')) return($this->TruncateDigits($Value, $Digits));
     169    $Negative = ($Value < 0);
     170    $Value = abs($Value);
     171    if(($Unit == '') and ($PrefixType != 'Time'))
     172      return($this->TruncateDigits($Value, $Digits));
     173
    170174    $I = $PrefixMultipliers[$PrefixType]['BaseIndex'];
    171     if($Value > 0) $II = 1;
    172     else if($Value < 0) $II = -1;
    173     else $II = 0;
    174     while((($Value / $PrefixMultipliers[$PrefixType]['Definition'][$I + $II][2]) > $II) and (($I + $II) >= 0) and (($I + $II) <= count($PrefixMultipliers[$PrefixType]['Definition']))) $I = $I + $II;
     175    if($Value == 0) return($Value.' '.$PrefixMultipliers[$PrefixType]['Definition'][$I][0].$Unit);
     176     
     177    if($Value > 1)
     178    {
     179      while((($I + 1) <= count($PrefixMultipliers[$PrefixType]['Definition'])) and (($Value / $PrefixMultipliers[$PrefixType]['Definition'][$I + 1][2]) > 1))
     180        $I = $I + 1;
     181    } else
     182    if($Value < 1)
     183    {
     184      while((($I - 1) >= 0) and (($Value / $PrefixMultipliers[$PrefixType]['Definition'][$I][2]) < 1))
     185        $I = $I - 1;
     186    }
    175187    $Value = $Value / $PrefixMultipliers[$PrefixType]['Definition'][$I][2];
    176 
     188   
    177189    // Truncate digits count
    178190    $Value = $this->TruncateDigits($Value, $Digits);
    179 
     191    if($Negative) $Value = -$Value;
    180192    return($Value.' '.$PrefixMultipliers[$PrefixType]['Definition'][$I][0].$Unit);
    181193  }
  • trunk/www/index.php

    r33 r34  
    5858    {
    5959      $Output .= '<br /><a href="http://'.$this->System->Config['Web']['Host'].'/mysql/">Správa databáze</a> ';
    60       if(array_key_exists('Id', $Server->Server['Database']))
     60      if(array_key_exists('Id', $Server->Server['Database']) and ($Server->Server['Lock'] == 0))
    6161      {
    6262        $ServerStatus = $Server->GetState();
     
    6464          else $Output .= ' <a href="?Action=ServerStart&amp;Id='.$Server->Id.'">Spustit</a>';
    6565      }
    66       $Output .= ' <a href="?Action=ServerEdit&amp;Id='.$Server->Id.'">Upravit</a>';
    67       $Output .= ' <a href="?Action=ServerDatabaseImport&amp;Id='.$Server->Id.'">Načtení čisté databáze</a>';
     66      if($Server->Server['Lock'] == 0) $Output .= ' <a href="?Action=ServerEdit&amp;Id='.$Server->Id.'">Upravit</a>';
     67      //$Output .= ' <a href="?Action=ServerDatabaseImport&amp;Id='.$Server->Id.'">Načtení čisté databáze</a>';
    6868    }
    6969    $Output .= ' <a href="?Action=GameAccountRegister&amp;Id='.$Server->Id.'">Vytvoření herního účtu</a>';
     
    114114        {
    115115          $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>';
     116          if($Server->Server['Lock'] == 0) $Table->Values[$Index]['Actions'] .= ' <a href="?Action=Update&amp;Server='.$ServerId.'&amp;Update='.$Item['Id'].'">Aktualizovat</a>';
    117117          unset($Table->Values[$Index]['Id']);
    118118        }
     
    131131    $Output .= $Form->ShowTable();
    132132    $Output .= '<div style="text-align: center">';
     133    $Emulator = new Emulator($this->Database, $Id);
    133134    if($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR)
    134135    {
    135       $Output .= ' <a href="?Action=EmulatorDownload&amp;Id='.$Id.'">Stáhnout</a>';
    136       $Output .= ' <a href="?Action=EmulatorCompile&amp;Id='.$Id.'">Přeložit</a>';
     136      if($Emulator->Emulator['Lock'] == 0) $Output .= ' <a href="?Action=EmulatorDownload&amp;Id='.$Id.'">Stáhnout</a>';
     137      if($Emulator->Emulator['Lock'] == 0) $Output .= ' <a href="?Action=EmulatorCompile&amp;Id='.$Id.'">Přeložit</a>';
    137138    }
    138139    $Output .= '</div>';
     
    165166        {
    166167          $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>';
     168          if($Server->Server['Lock'] == 0) $Table->Values[$Index]['Actions'] .= ' <a href="?Action=BackupRestore&amp;Id='.$Value['Id'].'">Obnovit</a>';
    168169          unset($Table->Values[$Index]['Id']);
    169170        }
     
    171172        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_ADMINISTRATOR)
    172173        {
    173           $Output .= '<br /><div style="text-align: center;"><a href="?Action=BackupAdd&amp;Id='.$ServerId.'">Zálohovat</a></dev>';     
     174          if($Server->Server['Lock'] == 0) $Output .= '<br /><div style="text-align: center;"><a href="?Action=BackupAdd&amp;Id='.$ServerId.'">Zálohovat</a></dev>';     
    174175        }
    175176      } else $this->SystemMessage('Zastavení serveru', 'Nemáte oprávnění');
     
    200201  }
    201202
     203  function ShowTaskListOnRow($Row)
     204  {
     205    $Row['Duration'] = $this->System->AddPrefixMultipliers($Row['Duration'], '', 4, 'Time');
     206    return($Row);
     207  }
     208 
    202209  function ShowTaskList()
    203210  {
     
    208215      $Output = '<h4>Fronta úloh</h4>';
    209216      $Table = new Table('TaskList');
    210       $Table->Definition['Table'] = '(SELECT Time, Title, State FROM Task WHERE User='.$this->System->Modules['User']->User['Id'].' ORDER BY Id DESC)';
     217      $Table->OnRow = array($this, 'ShowTaskListOnRow');
     218      $Table->Definition['Table'] = '(SELECT (UNIX_TIMESTAMP(TimeEnd) - UNIX_TIMESTAMP(TimeStart)) AS Duration, TimeCreate, Title, State FROM Task WHERE User='.$this->System->Modules['User']->User['Id'].' ORDER BY Id DESC)';
    211219      $Table->LoadValuesFromDatabase($this->Database);
    212220      $Output .= $Table->Show();
     
    729737        '</table>';
    730738      } else
     739      if($_GET['Action'] == 'ServerList')
     740      {
     741        $Output .= $this->ShowServerList();
     742      } else
    731743      if($_GET['Action'] == 'Test')
    732744      {
  • trunk/www/mangos_debug.php

    r24 r34  
    7070  }
    7171 
    72   function ProcessLog()
     72  function ProcessLog($ServerId)
    7373  {
    7474    global $Config;
     
    7676    $Output = '';
    7777    // Read server Id from first parameter
    78     if((count($_SERVER['argv']) > 1) and is_numeric($_SERVER['argv'][1]))
    79     {
    8078    $ServerId = $_SERVER['argv'][1];
    8179    $LogDir = '../server/'.$ServerId.'/log/';
     
    105103    //$Log = array_slice($Lines, 0, $Line);
    106104    //$Log = addslashes(implode("\n", $Log));
    107 
     105 
    108106    // Get used database version from database
    109107    $DbResult = $this->Database->query('SELECT * FROM `server'.$ServerId.'_mangos`.`db_version`');
     
    131129      $this->Database->query('UPDATE `Debug` SET Log="'.$Log.'" WHERE Id='.$InsertId);
    132130      unlink($MangosLogFile);
     131    }
    133132   
    134     }
    135133    if(file_exists($MangosDbErrorsLogFile))
    136134    {
     
    159157    }
    160158    unlink($StdOutLogFile);
    161     } else $Output = 'Je nutno zadat číslo serveru jako parameter';
    162159    return($Output);
    163160  }
  • trunk/www/page.php

    r32 r34  
    2828    '<a href="?Action=Info">Informace</a>'.
    2929    ' <a href="?Action=State">Stav systému</a>'.
    30     ' <a href="?">Seznam serverů</a>'.
     30    ' <a href="?Action=ServerList">Seznam serverů</a>'.
    3131    ' <a href="?Action=ClientList">Verze klienta</a>'.
    3232    ' <a href="?Action=EmulatorList">Verze emulátoru</a>';
  • trunk/www/server.php

    r31 r34  
    5656  function ImportDatabase($Delete = false)
    5757  {
     58    $this->Lock();
    5859    $CommandList = array(
    5960      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_mangos < database/'.$this->Server['Database']['Id'].'/'.$this->Server['Database']['SourceFileName'],
     
    7475  }
    7576 
    76   function AddServer($Version)
    77   {
    78    
    79   }
    80  
    8177  function Start()
    8278  {
     79    $this->Lock();
    8380    $this->Task->Add('Start emulátoru', array(
    8481      'screen -A -m -d -S server'.$this->Id.'-realmd emulator/'.$this->Server['Database']['Emulator']['Id'].'/bin/mangos-realmd -c server/'.$this->Id.'/etc/realmd.conf',
     
    9087  function Stop()
    9188  {
     89    $this->Lock();
    9290    $this->Task->Add('Zastavení emulátoru', array(
    9391      'server/'.$this->Id.'/bin/stop.sh',
     
    177175      'gdb emulator/'.$this->Server['Database']['Emulator']['Id'].'/bin/mangos-worldd -x server/'.$this->Id.'/bin/mangos.gdb --batch >>server/'.$this->Id.'/log/mangos-worldd.log 2>>server/'.$this->Id.'/log/mangos-worldd.err',
    178176      'cd www',
    179       'php mangos_debug_process.php '.$this->Id.' >>server/'.$this->Id.'/log/mangos_debug.log 2>>server/'.$this->Id.'/log/mangos_debug.err',
     177      'php shell.php ServerProcessLog '.$this->Id.' >>server/'.$this->Id.'/log/mangos_debug.log 2>>server/'.$this->Id.'/log/mangos_debug.err',
    180178      'cd ..',
    181179      'sleep 3',
     
    275273  function Update($DatabaseId)
    276274  {
     275    $this->Lock();
     276   
    277277    // Stop server before update
    278278    $Output = $this->Stop();
     
    306306    return($Output);
    307307  }
     308 
     309  function Lock()
     310  {
     311    $this->Database->update('Server', 'Id='.$this->Id, array('Lock' => 1));
     312  }
     313 
     314  function UnLock()
     315  {
     316    $this->Database->update('Server', 'Id='.$this->Id, array('Lock' => 0));
     317  }
    308318}
    309319
  • trunk/www/task.php

    r31 r34  
    1515   
    1616    $CommandList = implode("\n", $Task)."\n";
    17     $this->Database->insert('Task', array('User' => $System->Modules['User']->User['Id'], 'Title' => $Title, 'Time' => 'NOW()', 'CommandList' => $CommandList));
     17    $this->Database->insert('Task', array('User' => $System->Modules['User']->User['Id'], 'Title' => $Title, 'TimeCreate' => 'NOW()', 'CommandList' => $CommandList));
    1818  }
    1919
     
    2323   
    2424    chdir($Config['BaseDir']);
    25     $DbResult = $this->Database->query('SELECT * FROM Task WHERE State = 0 ORDER BY Id,Time ASC');
     25    $DbResult = $this->Database->query('SELECT * FROM Task WHERE State = 0 ORDER BY Id,TimeCreate ASC');
    2626    $this->Database->query('UPDATE Task SET State=2 WHERE State=1'); // Change not finished running tasks to finished
    2727    while($Task = $DbResult->fetch_assoc())
    2828    {
    29       $this->Database->query('UPDATE Task SET State=1 WHERE Id='.$Task['Id']);
     29      $this->Database->query('UPDATE Task SET TimeStart=NOW(), State=1 WHERE Id='.$Task['Id']);
    3030      echo('Provádím úlohu '.$Task['Id'].': '.$Task['Title']."...\n");
    3131      $Task['CommandList'] = "#!/bin/sh\n".str_replace("\r", '', $Task['CommandList']);
     
    3737      echo($Output);
    3838      echo("Hotovo\n");
    39       $this->Database->query('UPDATE Task SET State=2, Output="'.addslashes($Output).'" WHERE Id='.$Task['Id']);
     39      $this->Database->query('UPDATE Task SET TimeEnd=NOW(), State=2, Output="'.addslashes($Output).'" WHERE Id='.$Task['Id']);
    4040    }
    4141  }
     
    4444  {
    4545    $this->Database->query('DELETE FROM Task WHERE Id='.$Id);
    46   }
     46  } 
    4747}
    4848
  • trunk/www/types/DateTime.php

    r24 r34  
    1515      $TimeParts = explode(':', $ValueParts[1]);
    1616
    17       $Output = $TimeParts[0].':'.$TimeParts[1].':'.$TimeParts[2].' '.($DateParts[2] * 1).'. '.$MonthNames[$DateParts[1] * 1].' '.$DateParts[0];
     17      $Output = ($DateParts[2] * 1).'.'.($DateParts[1] * 1).'.'.$DateParts[0].' '.$TimeParts[0].':'.$TimeParts[1].':'.$TimeParts[2];
    1818    } else $Output = '';
    1919    return($Output);
Note: See TracChangeset for help on using the changeset viewer.