Доработка системы, Reboot для Dedicated

Установка и настройка биллинговой системы.
Аватара пользователя
rootden
Сообщения: 260
Зарегистрирован: 2010-09-24 8:28:44
Благодарил (а): 1 раз

Доработка системы, Reboot для Dedicated

Сообщение rootden » 2011-09-25 8:31:59

Может кому пригодится, вариант реализации функции reboots для выделенных серверов для реселлеров.

Сделал так:

1) Добавляем кнопку в \hosts\hosting\tables\DSOrders[User].xml

Код: Выделить всё

 <Reboots>
  <IsSorted>0</IsSorted>
  <Comp>Buttons/Window</Comp>
  <Args>
   <ListElement>/DSReboot</ListElement>
   <ListElement>
    <DSOrderID>%ID%</DSOrderID>
   </ListElement>
   <ListElement>Перезагрузить сервер</ListElement>
   <ListElement>re.gif</ListElement>
  </Args>
  <Attribs>
   <class>TableSuperStandard</class>
   <style>width:22px;</style>
  </Attribs>
 </Reboots>

<Sequence>
 <ListElement>SelectID</ListElement>
 <ListElement>Info</ListElement>
 <ListElement>Pay</ListElement>
 <ListElement>Reboots</ListElement>
 <ListElement>Number</ListElement>
 <ListElement>Scheme</ListElement>
 <ListElement>Expiration</ListElement>
 <ListElement>Status</ListElement>
 <ListElement>StatusOver</ListElement>
</Sequence>


2) создаем файл для кнопки, DSReboot.comp (аналогичный DSOrderInfo.comp не охото было с 0 делать =)) кидаем в \hosts\hosting\comp\www

Код: Выделить всё

Eval(COMP_INIT);
$Args = Args();
#-------------------------------------------------------------------------------
$DSOrderID = (integer) @$Args['DSOrderID'];
#-------------------------------------------------------------------------------
if(Is_Error(System_Load('modules/Authorisation.mod','classes/DOM.class')))
  return ERROR | @Trigger_Error(500);
#-------------------------------------------------------------------------------
$Columns = Array('*','(SELECT `Name` FROM `DSSchemes` WHERE `DSSchemes`.`ID` = `DSOrdersOwners`.`SchemeID`) as `Scheme`','(SELECT `Name` FROM `DSServersGroups` WHERE `DSServersGroups`.`ID` = (SELECT `ServersGroupID` FROM `DSSchemes` WHERE `DSSchemes`.`ID` = `DSOrdersOwners`.`SchemeID`)) as `ServersGroupName`');
#-------------------------------------------------------------------------------
$DSOrder = DB_Select('DSOrdersOwners',$Columns,Array('UNIQ','ID'=>$DSOrderID));
#-------------------------------------------------------------------------------
switch(ValueOf($DSOrder)){
  case 'error':
    return ERROR | @Trigger_Error(500);
  case 'exception':
    return ERROR | @Trigger_Error(400);
  case 'array':
    #---------------------------------------------------------------------------
    $__USER = $GLOBALS['__USER'];
    #---------------------------------------------------------------------------
    $IsPermission = Permission_Check('DSOrdersRead',(integer)$__USER['ID'],(integer)$DSOrder['UserID']);
    #---------------------------------------------------------------------------
    switch(ValueOf($IsPermission)){
      case 'error':
        return ERROR | @Trigger_Error(500);
      case 'exception':
        return ERROR | @Trigger_Error(400);
      case 'false':
        return ERROR | @Trigger_Error(700);
      case 'true':
        #-----------------------------------------------------------------------
        $DOM = new DOM();
        #-----------------------------------------------------------------------
        $Links = &Links();
        # Коллекция ссылок
        $Links['DOM'] = &$DOM;
        #-----------------------------------------------------------------------
        if(Is_Error($DOM->Load('Window')))
          return ERROR | @Trigger_Error(500);
        #-----------------------------------------------------------------------
        $DOM->AddText('Title','Удаленная перезагрузка сервера сотрудниками ДЦ');
        #-----------------------------------------------------------------------
        $Table = Array('Информация о заказе');
        #-----------------------------------------------------------------------
        $Comp = Comp_Load('Formats/Order/Number',$DSOrder['OrderID']);
        if(Is_Error($Comp))
          return ERROR | @Trigger_Error(500);
        #-----------------------------------------------------------------------
        $Table[] = Array('Номер',$Comp);
        #-----------------------------------------------------------------------
        $Table[] = Array('Тарифный план',SPrintF('%s (%s)',$DSOrder['Scheme'],$DSOrder['ServersGroupName']));
      //$Table[] = $DSOrder['ServersGroupName'];
       $Table[] = 'Данные доступа';
       $Table[] = Array('Первичный IP адрес',$DSOrder['IP']);
       $Table[] = Array('Пароль root (Linux/FreeBSD)',$DSOrder['ExtraIP']);
   #-----------------------------------------------------------------------
   $Params = Array('type'=>'hidden','name'=>'AutoProlong');
   if($DSOrder['AutoProlong'] == "yes"){
      $msg = "Отключить";
      $Params['value'] = 'no';
   }else{
      $msg = "Включить";
      $Params['value'] = 'yes';
   }
   $AutoProlong = Comp_Load('Form/Input',$Params);
   #-------------------------------------------------------------------
              $Table[] = new Tag('TD',Array('colspan'=>2,'width'=>'300px','class'=>'Standard','style'=>'background-color:#D1E9F5;'),'Ваш сервер будет перезагружен сотрундниками дата-центра в течении 15-20 минут.  НЕ ЖМИТЕ КНОПКУ НЕСКОЛЬКО РАЗ!!!');
   $Comp = Comp_Load(
         'Form/Input',
         Array(
            'type'    => 'button',
            'onclick' => "AjaxCall('/API/DSReboot',FormGet(form),'Отправвляем запрос в ДЦ','GetURL(document.location);');",
            'value'   => "Перезагрузить сервер"
         )
      );
   if(Is_Error($Comp))
      return ERROR | @Trigger_Error(500);
   #-----------------------------------------------------------------------
   $Table[] = Array('Reboot',$Comp);
   #-----------------------------------------------------------------------
        #-----------------------------------------------------------------------
        $Comp = Comp_Load('Tables/Standard',$Table);
        if(Is_Error($Comp))
          return ERROR | @Trigger_Error(500);
        #-----------------------------------------------------------------------
        $Form = new Tag('FORM',Array('method'=>'POST'),$Comp);
   #-----------------------------------------------------------------------
   $Form->AddChild($AutoProlong);
        #-----------------------------------------------------------------------
        $Comp = Comp_Load(
          'Form/Input',
          Array(
            'type'  => 'hidden',
            'name'  => 'DSOrderID',
            'value' => $DSOrder['ID']
          )
        );
        if(Is_Error($Comp))
          return ERROR | @Trigger_Error(500);
        #-----------------------------------------------------------------------
        $Form->AddChild($Comp);
        #-----------------------------------------------------------------------
        $DOM->AddChild('Into',$Form);
        #-----------------------------------------------------------------------
        if(Is_Error($DOM->Build(FALSE)))
          return ERROR | @Trigger_Error(500);
        #-----------------------------------------------------------------------
        return Array('Status'=>'Ok','DOM'=>$DOM->Object);
      default:
        return ERROR | @Trigger_Error(101);
    }
  default:
    return ERROR | @Trigger_Error(101);
}
#-------------------------------------------------------------------------------


3) И оброботчик сам DSReboot.comp, в /hosts/hosting/comp/www/API

Код: Выделить всё

#-------------------------------------------------------------------------------
/** @author Rootden dgrad-host.ru */
/******************************************************************************/
Eval(COMP_INIT);
/******************************************************************************/

if(Is_Error(System_Load('modules/Authorisation.mod')))
  return ERROR | @Trigger_Error(500);
#-------------------------------------------------------------------------------
$Args = Args();
#-------------------------------------------------------------------------------
$DSOrderID   = (integer) @$Args['DSOrderID'];
#---------------------------------------------------------------------------
$__USER = $GLOBALS['__USER'];
$Columns = Array('*','(SELECT `Name` FROM `DSSchemes` WHERE `DSSchemes`.`ID` = `DSOrdersOwners`.`SchemeID`) as `Scheme`','(SELECT `Name` FROM `DSServersGroups` WHERE `DSServersGroups`.`ID` = (SELECT `ServersGroupID` FROM `DSSchemes` WHERE `DSSchemes`.`ID` = `DSOrdersOwners`.`SchemeID`)) as `ServersGroupName`');
$DSOrderr = DB_Select('DSOrdersOwners',$Columns,Array('UNIQ','ID'=>$DSOrderID));
$reb = $DSOrderr['ServersGroupName'];
$ip = $DSOrderr['IP'];
$nomer = '7902......;
$me = 'Dgrad-host.ru';
$apikey='КЛЮЧЬ';
$url = 'http://smspilot.ru/api.php';
$pin = 'секретно';
$to = 'reboots@burst.net';
//reboots@burst.net
$subject = 'Reboot';
$heads = "From: support@ХОСТИНГ\r\nContent-type: text/plain; charset=UTF-8 \r\n";
$message = <<<EOT
-
Hi,

Please reboot the server: $ip

Identification Pin Code: $pin

This is an automated message from the billing system, you can not answer.
-
EOT;
$sms = <<<EOT
-
Reboot: $reb
IP: $ip
-
EOT;

switch ($reb){
    case "Dedicated сервера в США":
        mail ($to, $subject, $message, $heads);
        break;
    case "Dedicated сервера в Англии":
        mail ($to, $subject, $message, $heads);
        break;
   case "Dedicated сервера в Нидерланда":
        $ch = curl_init();
        $request = "send=$sms&to=$nomer&from=$me&apikey=$apikey";
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($ch);
        curl_close($ch);
        break;
    case "Dedicated сервера в Германии":
        $ch = curl_init();
        $request = "send=$sms&to=$nomer&from=$me&apikey=$apikey";
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($ch);
        curl_close($ch);
        break;
   default:
   return ERROR | @Trigger_Error(101);
}
$IsInsert = DB_Insert('Events',Array('UserID'=>$__USER['ID'],'PriorityID'=>'Billing','Text'=>SPrintF('%s ip %s отправлен в reboot.',$reb,$ip)));
return Array('Status'=>'Ok');


(у меня 4 группы серверов тоесть разные ЦОД, сервера из 2х групп уходят в ребут автоматом с помощью email, остальные 2 группы пока просто уведомление по смс для админов)

Проверил все пашет,

Аватара пользователя
rootden
Сообщения: 260
Зарегистрирован: 2010-09-24 8:28:44
Благодарил (а): 1 раз

Re: Доработка системы, Reboot для Dedicated

Сообщение rootden » 2011-09-25 9:24:51

а теперь как всегда вопросы,

25.09.jpg
25.09.jpg (39.83 КБ) 5763 просмотра


1) по клику вылазиет окно мол отправка запроса в дц а далее пож... подождите, после того как код выполнится кидает на страницу GetURL(document.location);

так вот как сделать что бы после того как код выполнился открывалось окно например с надписью "Ваш выделенный сервер будет перезагружен сотрундниками дата-центра в течении 15-20 минут" а не обновлялась страница.

2) Как сделать что бы юзер не смог нажать эту кнопку например не более 1 раза за час, бывают разные блин клиенты...

Бум думать.

Аватара пользователя
Alex Keda
Сообщения: 2907
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 20 раз

Re: Доработка системы, Reboot для Dedicated

Сообщение Alex Keda » 2011-09-25 23:04:49

1) Добавляем кнопку в \hosts\hosting\tables\DSOrders[User].xml

и прочее далее по списку.

если вы не хотите чтобы ваши измеения перезатёрлись со следующим обновлением, кладите их в

Код: Выделить всё

/hosts/_ИМЯ_ВАШЕГО_ХОСТА_/..........


P.S. и используйте правильные слэши.
на сервере они в другую сторону, вообще-то
Убей их всех! Бог потом рассортирует...

Аватара пользователя
rootden
Сообщения: 260
Зарегистрирован: 2010-09-24 8:28:44
Благодарил (а): 1 раз

Re: Доработка системы, Reboot для Dedicated

Сообщение rootden » 2011-09-26 3:54:28

если вы не хотите чтобы ваши измеения перезатёрлись со следующим обновлением, кладите их в

Код: Выделить всё

/hosts/_ИМЯ_ВАШЕГО_ХОСТА_/..........


P.S. и используйте правильные слэши.
на сервере они в другую сторону, вообще-то



как то пробовал кидать в /hosts/_ИМЯ_ВАШЕГО_ХОСТА_ нечего не получилось,попробую еще как закончу весь список нововведений.

Блин, слеши некорректные из за того что путь выдернул из Notepad++

serge
Сообщения: 171
Зарегистрирован: 2009-10-06 23:43:37
Откуда: Саратов
Контактная информация:

Re: Доработка системы, Reboot для Dedicated

Сообщение serge » 2011-09-26 9:06:10

rootden писал(а):Блин, слеши некорректные из за того что путь выдернул из Notepad++

+1
Сам руками правлю после копипаста :D

Аватара пользователя
Alex Keda
Сообщения: 2907
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 20 раз

Re: Доработка системы, Reboot для Dedicated

Сообщение Alex Keda » 2011-09-26 10:07:43

бедные =)
а я с консоли прям в vim код лабаю =)
Убей их всех! Бог потом рассортирует...


Вернуться в «Установка и настройка»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей