Интеграция с панелью ISPConfig

Запрос улучшений, интеграции с различными системами и т.д.
Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-22 14:53:58

Alex Keda писал(а):Источник цитаты предлагаю пока засунуть к остальным.

ну так пока и буду делать

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-22 18:38:47

очередной костыль:
при активации клиента нужно передать параметры тарифного плана (например $HostingScheme['PackageID']), но в функции ISPConfig_Active($Settings,$Login,$IsReseller = FALSE) такого параметра нет. как быть в таком случае?

Отправлено спустя 6 минут 33 секунды:
И еще вопрос:
при блокировке клиента все проходит на ура

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

#-------------------------------------------------------------------------------
# Функция блокировки клиента в панели ISPConfig
#-------------------------------------------------------------------------------
function ISPConfig_Suspend($Settings,$Login,$IsReseller = FALSE){
   /****************************************************************************/
   $__args_types = Array('array','string','boolean');
   #-----------------------------------------------------------------------------
   $__args__ = Func_Get_Args(); Eval(FUNCTION_INIT);
   /****************************************************************************/
   $Request = Array(
      'contact_name' => $Login,
      'country' => 'RU',
      'web_php_options' => 'no',
      'ssh_chroot' => 'no',
      'limit_client' => 0, // If this value is > 0, then the client is a reseller
      'username' => $Login,
      'language' => 'ru',
      'usertheme' => 'default',
      'locked' => 'y',
      'canceled' => 'y'
   );
   $reseller_id = 0; // this id has to be 0 if the client shall not be assigned to admin or if the client is a reseller
   #-----------------------------------------------------------------------------
   # Содаем подключение к панели ISPConfig
   $SoapLocation = SPrintF('%s://%s:%u/remote/index.php',($Settings['Protocol'] == 'ssl')?'https':'http',$Settings['Address'],$Settings['Port']);
   $SoapUri = SPrintF('%s://%s:%u/remote/',($Settings['Protocol'] == 'ssl')?'https':'http',$Settings['Address'],$Settings['Port']);
   $client = new SoapClient(null, array('location' => $SoapLocation,
                                     'uri'      => $SoapUri,
                                     'trace' => 1,
                                     'exceptions' => 1));
   # Открываем сессию на сервере ISPConfig
   $session_id = $client->login($Settings['Login'], $Settings['Password']);
   #-----------------------------------------------------------------------------
   # Запрашиваем ID клиента по его Имени пользователя
   try {
      $client->client_get_by_username($session_id, $Login);
      $Body = $client->__getLastResponse();
      $Response = Trim($Body);
      #-----------------------------------------------------------------------------
      $XML = String_XML_Parse($Response);
      $XML = $XML->ToArray('item');
      $Array = $XML['SOAP-ENV:Envelope']['SOAP-ENV:Body']['ns1:client_get_by_usernameResponse']['return'];
      foreach(Array_Keys($Array) as $Key)
         if ($Array[$Key]['key']=='client_id') break;
         $client_id = $Array[$Key]['value'];
//      Debug(SPrintF('%s => %s',$Array[$Key]['key'],$Array[$Key]['value'],true));
   } catch (SoapFault $Result) {
      $Response = $client->__getLastResponse();
      $Response = Strip_Tags($Response);
   }
   #-----------------------------------------------------------------------------
   # Проверяем ответ панели на ошибку запроса
   if(Preg_Match('/data_processing_error/',$Response)) {
      return new gException('WRONG_ANSWER',$Response);
   }
   #-----------------------------------------------------------------------------
   # Выполняем запрос блокировки клиента на панели ISPConfig
   try {
      $client->client_update($session_id, $client_id, $reseller_id, $Request);
      $Response = $client->__getLastResponse();
   } catch (SoapFault $Result) {
      $Response = $client->__getLastResponse();
      $Response = Strip_Tags($Response);
   }
//Debug(print_r($Response,true));
   #-----------------------------------------------------------------------------
   # Закрываем сессию на сервере ISPConfig
   $client->logout($session_id);
   #-----------------------------------------------------------------------------
   # Проверяем на ошибку запроса ответ панели
   if(Preg_Match('/data_processing_error/',$Response)) {
      return new gException('WRONG_ANSWER',$Response);
   }else{
      return TRUE;
   }
}

а при активации (используется тот-же код, но с параметрами запроса 'locked' => 'n', 'canceled' => 'n') задание упорно отказывается выполнятся в автоматическом режиме. при этом ручной запуск задания проходит без проблем.

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

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-22 20:12:22

alezhen писал(а):Источник цитаты при активации клиента нужно передать параметры тарифного плана (например $HostingScheme['PackageID']), но в функции ISPConfig_Active($Settings,$Login,$IsReseller = FALSE) такого параметра нет. как быть в таком случае?

непонял - все параметры тарифа чтоле? =0

alezhen писал(а):Источник цитаты задание упорно отказывается выполнятся в автоматическом режиме

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

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-22 21:59:34

Alex Keda писал(а):Источник цитаты непонял - все параметры тарифа чтоле?

Короче такая ерунда: активацию клиента можно делать только через client_update. При этом, если не указывать параметры, то клиент активируется с 0 лимитами. Есть 2 варианта: 1) передать только ИД тарифа, 2) передавать все лимиты. Предпочтителен 2 вариант. Небходим при создании доп. к тарифам. Например доп. дисковое простраство.

Отправлено спустя 2 минуты 22 секунды:
Alex Keda писал(а):Источник цитаты при этом оно что-то в отладочный лог пишет

Биллинг туда столько всякого бутора сыпет, что трудно понять что выгребать оттуда.

Отправлено спустя 4 минуты 3 секунды:
Результат выполнения задания

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

[18:07:21.83][console] Load file: '/var/www/clients/client3/web4/user/hosts/hosting/comp/Tasks/HostingActive.comp.php'
[18:07:21.83][console] [MySQL->Query]: SELECT `ID`,`UserID`,`Login`,`Domain`,(SELECT `ServerID` FROM `OrdersOwners`
WHERE `OrdersOwners`.`ID` = `HostingOrdersOwners`.`OrderID`) AS `ServerID`,(SELECT `IsReselling` FROM `HostingSchemes`
WHERE `HostingSchemes`.`ID` = `HostingOrdersOwners`.`SchemeID`) as `IsReselling`,(SELECT `Name` FROM `HostingSchemes`
WHERE `HostingSchemes`.`ID` = `HostingOrdersOwners`.`SchemeID`) as `SchemeName` FROM `HostingOrdersOwners` WHERE `ID` =
9
[18:07:21.83][console] Load file: '/var/www/clients/client3/web4/user/hosts/root/comp/Formats/Explode/Logic.comp.php'
[18:07:21.83][console] [MySQL->Query]: SELECT * FROM `Servers` WHERE `ID` = 2
[18:07:21.83][console] Load file: '/var/www/clients/client3/web4/user/hosts/root/comp/Formats/Explode/Logic.comp.php'
[18:07:21.83][console] Load file: '/var/www/clients/client3/web4/user/hosts/root/comp/Formats/Explode/Logic.comp.php'
[18:07:21.83][console] Load file: '/var/www/clients/client3/web4/user/hosts/root/comp/Formats/Explode/JSON.comp.php'
[18:07:21.83][console] Load file: '/var/www/clients/client3/web4/user/hosts/root/comp/Formats/Explode/Crypt.comp.php'
[18:07:21.83][console] [Exception]: [FUNCTION_NOT_SUPPORTED]=(Функция не поддерживается API
модулем)


Отправлено спустя 1 минуту 33 секунды:
это при активации задания.
тут-же запускаю задание вручную и вуаля - оно выполнено

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

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-22 22:14:25

alezhen писал(а):Источник цитаты активацию клиента можно делать только через client_update. При этом, если не указывать параметры, то клиент активируется с 0 лимитами. Есть 2 варианта: 1) передать только ИД тарифа, 2) передавать все лимиты. Предпочтителен 2 вариант. Небходим при создании доп. к тарифам. Например доп. дисковое простраство.

а что, заблокирован он - с нулевыми лимитами на всё чтоле?
чё бы не выдернуть те лимиты которые у него есть и не послать взад?

alezhen писал(а):Источник цитаты это при активации задания.
тут-же запускаю задание вручную и вуаля - оно выполнено

послать вас чтоле ... читать то что я вам писал раньше...
про необходимость перезапуска крона и очитски кэша...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-22 22:55:05

Alex Keda писал(а):Источник цитаты послать вас чтоле ... читать то что я вам писал раньше...
про необходимость перезапуска крона и очитски кэша...

не, мне вот делать нечего, как флудить. раз написал, то наверное и кеш почистил, и крон перезапустил, и апач тоже. и даже apc удалил и заново поставил!!!

Отправлено спустя 5 минут 42 секунды:
Alex Keda писал(а):Источник цитаты а что, заблокирован он - с нулевыми лимитами на всё чтоле?

так блокировка той-же функцией и стой-же проблемой )))

Отправлено спустя 3 минуты 27 секунд:
Alex Keda писал(а):Источник цитаты чё бы не выдернуть те лимиты которые у него есть и не послать взад?

можно конечно и так покарячится ))) запросить все лимиты и во время блокировки их послать обратно. но... все это не по человечески как-то... всего для того что-бы заблокировать пользователя нужно делать три запроса к панели...

Отправлено спустя 2 минуты 2 секунды:
если-бы билл был не халявный, уже давно забил-бы на эти кракозаблы )))

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

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-23 14:25:49

alezhen писал(а):Источник цитаты не, мне вот делать нечего, как флудить. раз написал, то наверное и кеш почистил, и крон перезапустил, и апач тоже. и даже apc удалил и заново поставил!!!

а я откуда знаю, что вы делали а что нет...

ну, ожидаемый ответ - в ./hosts/hosting/system/classes/HostingServer.class.php внутрь

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

public function Active
отладочку-то впилите, да посмотрите что и как вызывается... какая функция для какой библиотеки и с какими параметрами...
помнится, вы писали что чё-то там пилили во всех функциях... неплохо бы оригинал файла тогда вернуть.

а вообще да, ругань надо сделать более внятной. по крайней мере с указанием какая именно функция вызывалась.
сделаю к релизу.

alezhen писал(а):Источник цитаты можно конечно и так покарячится ))) запросить все лимиты и во время блокировки их послать обратно. но... все это не по человечески как-то... всего для того что-бы заблокировать пользователя нужно делать три запроса к панели...

непонимаю, чё вас так число запросов к панели беспокоит-то?
там каждый запрос по полчаса со 100% загрузкой всех процессоров сервера чтоле происходит?
если панель кривая - чё с этим сделашь-то? разработчикам панели напишите.
в биллинге либы для пяти панелей. ни в одной такого не требовалось.

alezhen писал(а):Источник цитаты если-бы билл был не халявный, уже давно забил-бы на эти кракозаблы

нет бесполезных знаний. обязательно когданибудь пригодится то что делаете.

Отправлено спустя 34 минуты 19 секунд:
вот, файлик к себе положите
https://raw.githubusercontent.com/joont ... .class.php
по крайней мере он будет явно писать название функции в лог
--
сами параметры в дебаг вываливать не стал, там пассы, мало ли, юзеры на него как-то выскочат ....
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-23 22:17:34

Итак, на сегодняшний день реализованы следующие функции:
1) Logon - вход в панель из биллинга (Автологин пока не реализован. В процессе разработки.)
2) Create - создание клиента в панели
3) Active - разблокировка клиента в панели
4) Suspend - блокировка клиента в панели
5) Delete - удаление клиента из панели

Данный функционал уже сейчас позволяет полноценную интеграцию в режиме фиксированных тарифов.

Далее будет реализованы динамические тарифы и реселлеры.

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

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-23 23:22:41

alezhen писал(а):Источник цитаты реализованы динамические тарифы


это чё?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-24 0:23:06

Вроде уже описывал.
Сейчас можно создать тарифы в панели, а при создании тарифов в биллинге указать ИД тарифа в панели. Жесткие тарифы без возможности изменения лимитов.

Потом доделаю возможность изменения не только тарифа в целом, а и например возможность дополнительно заказать увеличение дискового места на уже созданном клиенте.

Отправлено спустя 14 минут 17 секунд:
А вообще было-бы неплохо реализовать полноценный динамический тариф. Что-бы при заказе пользователь мог выбирать нужное кол-во ресурсов, а у каждой единицы ресурса была своя цена.


Вернуться в «Запрос улучшений»

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

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