| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- <?php
- namespace ThurData\Servers\KerioEmail\App\Libs\Metrics;
- use WHMCS\UsageBilling\Contracts\Metrics\MetricInterface;
- use WHMCS\UsageBilling\Contracts\Metrics\ProviderInterface;
- use WHMCS\UsageBilling\Metrics\Metric;
- use WHMCS\UsageBilling\Metrics\Usage;
- use WHMCS\UsageBilling\Metrics\Units\GigaBytes;
- use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
- class MyMetricProvider implements ProviderInterface
- {
- private $moduleParams = [];
- public function __construct($moduleParams)
- {
- $this->moduleParams = $moduleParams;
- }
- public function metrics()
- {
- return [
- new Metric(
- 'mailboxes',
- 'Email Accounts',
- MetricInterface::TYPE_SNAPSHOT
- ),
- new Metric(
- 'aliases',
- 'Email Aliases',
- MetricInterface::TYPE_SNAPSHOT
- ),
- new Metric(
- 'distributionLists',
- 'Distribution Lists',
- MetricInterface::TYPE_SNAPSHOT
- ),
- new Metric(
- 'domainAliases',
- 'Domain Aliases',
- MetricInterface::TYPE_SNAPSHOT
- ),
- new Metric(
- 'storage',
- 'Storage',
- MetricInterface::TYPE_SNAPSHOT,
- new GigaBytes()
- )
- ];
- }
- public function usage()
- {
- $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
- try {
- $api->login($this->moduleParams['serverhostname'], $this->moduleParams['serverusername'], $this->moduleParams['serverpassword']);
- $domains = $api->getDomains(['id','name','aliasList']);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- $usage = [];
- foreach ($domains as $domain)
- {
- $domainName = $domain['name'];
- $domainID = $domain['id'];
- $countOfDomainAliases = count($domain['aliasList']);
- try
- {
- $fields = array(
- 'loginName',
- 'fullName',
- 'consumedSize'
- );
- $mailboxes = $api->getUsers($fields,$domainID);
- $countOfMailboxes = count($mailboxes);
- $totalUsage = 0;
- if ($countOfMailboxes > 0) {
- foreach ($mailboxes as $mailboxe) {
- switch($mailboxe['consumedSize']['units']) {
- case 'Bytes' :
- $usage = $mailboxe['consumedSize']['value']/1024/1024;
- break;
- case 'KiloBytes' :
- $usage = $mailboxe['consumedSize']['value']/1024;
- break;
- case 'MegaBytes' :
- $usage = $mailboxe['consumedSize']['value'];
- break;
- case 'GigaBytes' :
- $usage = $mailboxe['consumedSize']['value']*1024;
- break;
- }
- $totalUsage += $usage;
- }
- }
- $storage = $totalUsage == 0 ? 0 : round($totalUsage);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- try
- {
- $fields = array(
- "id",
- "name");
- $mailingLists = $api->getMailingLists($fields,$domainID);
- $countOfDistributionList = count($mailingLists);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- try
- {
- $fields = array(
- "id",
- "name");
- $aliases = $api->getAliases($fields,$domainID);
- $countOfEmailAliases = count($aliases);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- $domainData = [
- 'mailboxes' => $countOfMailboxes,
- 'distributionLists' => $countOfDistributionList,
- 'aliases' => $countOfEmailAliases,
- 'domainAliases' => $countOfDomainAliases,
- 'storage' => $storage,
- ];
- $usage[$domainName] = $this->wrapUserData($domainData);
- }
- $api->logout();
- return $usage;
- }
- public function tenantUsage($tenant)
- {
- $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
- try {
- $api->login($this->moduleParams['serverhostname'], $this->moduleParams['serverusername'], $this->moduleParams['serverpassword']);
- $domainID = $api->getDomainId($tenant);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- $usage = [];
- $countOfDomainAliases = count($domain['aliasList']);
- try
- {
- $fields = array(
- 'loginName',
- 'fullName',
- 'consumedSize'
- );
- $mailboxes = $api->getUsers($fields,$domainID);
- $countOfMailboxes = count($mailboxes);
- $totalUsage = 0;
- if ($countOfMailboxes > 0) {
- foreach ($mailboxes as $mailboxe) {
- switch($mailboxe['consumedSize']['units']) {
- case 'Bytes' :
- $usage = $mailboxe['consumedSize']['value']/1024/1024;
- break;
- case 'KiloBytes' :
- $usage = $mailboxe['consumedSize']['value']/1024;
- break;
- case 'MegaBytes' :
- $usage = $mailboxe['consumedSize']['value'];
- break;
- case 'GigaBytes' :
- $usage = $mailboxe['consumedSize']['value']*1024;
- break;
- }
- $totalUsage += $usage;
- }
- }
- $storage = $totalUsage == 0 ? 0 : round($totalUsage);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- try
- {
- $fields = array(
- "id",
- "name");
- $mailingLists = $api->getMailingLists($fields,$domainID);
- $countOfDistributionList = count($mailingLists);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- try
- {
- $fields = array(
- "id",
- "name");
- $aliases = $api->getAliases($fields,$domainID);
- $countOfEmailAliases = count($aliases);
- } catch (KerioApiException $error) {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $error,
- 'Debug Error',
- $error->getMessage()
- );
- return ['error' => $error->getMessage()];
- }
- $domainData = [
- 'mailboxes' => $countOfMailboxes,
- 'distributionLists' => $countOfDistributionList,
- 'aliases' => $countOfEmailAliases,
- 'domainAliases' => $countOfDomainAliases,
- 'storage' => $storage,
- ];
- $usage = $this->wrapUserData($domainData);
- $api->logout();
- return $usage;
- }
- private function wrapUserData($data)
- {
- $wrapped = [];
- foreach ($this->metrics() as $metric) {
- $key = $metric->systemName();
- if ($data[$key]) {
- $value = $data[$key];
- $metric = $metric->withUsage(
- new Usage($value)
- );
- }
- $wrapped[] = $metric;
- }
- return $wrapped;
- }
- }
|