Сообщение 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 группы пока просто уведомление по смс для админов)
Проверил все пашет,
Может кому пригодится, вариант реализации функции reboots для выделенных серверов для реселлеров.
Сделал так:
1) Добавляем кнопку в \hosts\hosting\tables\DSOrders[User].xml
[code]
<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>
[/code]
2) создаем файл для кнопки, DSReboot.comp (аналогичный DSOrderInfo.comp не охото было с 0 делать =)) кидаем в \hosts\hosting\comp\www
[code]
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);
}
#-------------------------------------------------------------------------------
[/code]
3) И оброботчик сам DSReboot.comp, в /hosts/hosting/comp/www/API
[code]
#-------------------------------------------------------------------------------
/** @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');
[/code]
(у меня 4 группы серверов тоесть разные ЦОД, сервера из 2х групп уходят в ребут автоматом с помощью email, остальные 2 группы пока просто уведомление по смс для админов)
Проверил все пашет,