| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- namespace ThurData\Servers\KerioEmail\App\Libs\Metrics;
- use ThurData\Servers\HetznerVps\App\Libs\HetznerVps\Api;
- use ThurData\Servers\HetznerVps\App\Libs\HetznerVps\Api\Constants;
- use ThurData\Servers\KerioEmail\App\Helpers\KerioManager;
- use ThurData\Servers\KerioEmail\App\Enums\Size;
- use mysql_xdevapi\DocResult;
- use WHMCS\UsageBilling\Contracts\Metrics\MetricInterface;
- use WHMCS\UsageBilling\Contracts\Metrics\ProviderInterface;
- use WHMCS\UsageBilling\Metrics\Metric;
- use WHMCS\UsageBilling\Metrics\Units\WholeNumber;
- use WHMCS\UsageBilling\Metrics\Usage;
- use WHMCS\UsageBilling\Metrics\Units\GigaBytes;
- 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()
- {
- logModuleCall(
- 'kerioEmail',
- __FUNCTION__,
- $this->moduleParams,
- 'Debug Usage',
- 'Test1'
- );
-
- $domains =(new KerioManager())
- ->getApiByServer($this->moduleParams['serverid'])
- ->soap
- ->repository()
- ->domains()
- ->getAll();
- $usage = [];
- foreach ($domains as $domain)
- {
- $domainName = $domain->getName();
- $mailboxes = $this->getAccounts($domainName);
- $countOfMailboxes = count($mailboxes);
- $countOfDistributionList = count($this->getDistributionList($domainName));
- $countOfEmailAliases = 0;
- foreach ($mailboxes as $account)
- {
- $countOfEmailAliases += count($account->getAliases());
- }
- $domainAliases = $this->getDomainAliases($domainName);
- $countOfDomainAliases = count($domainAliases);
- $storage = $this->getDomainUsage($domainName);
- $domainData = [
- 'mailboxes' => $countOfMailboxes,
- 'distributionLists' => $countOfDistributionList,
- 'aliases' => $countOfEmailAliases,
- 'domainAliases' => $countOfDomainAliases,
- 'storage' => round($storage / Size::B_TO_GB, 2),
- ];
- $usage[$domainName] = $this->wrapUserData($domainData);
- }
- return $usage;
- }
- public function tenantUsage($tenant)
- {
- $mailboxes = $this->getAccounts($tenant);
- $countOfMailboxes = count($mailboxes);
- $countOfEmailAliases = 0;
- foreach ($mailboxes as $account)
- {
- $countOfEmailAliases += count($account->getAliases());
- }
- $countOfDistributionList = count($this->getDistributionList($tenant));
- $domainAliases = $this->getDomainAliases($tenant);
- $countOfDomainAliases = count($domainAliases);
- $storage = $this->getDomainUsage($tenant);
- $userData = [
- 'mailboxes' => $countOfMailboxes,
- 'distributionLists' => $countOfDistributionList,
- 'aliases' => $countOfEmailAliases,
- 'domainAliases' => $countOfDomainAliases,
- 'storage' => round($storage / Size::B_TO_GB, 2),
- ];
- return $this->wrapUserData($userData);
- }
- 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;
- }
- private function getAccounts($tenant)
- {
- $accounts =(new KerioManager())
- ->getApiByServer($this->moduleParams['serverid'])
- ->soap
- ->repository()
- ->accounts()
- ->getByDomainName($tenant);
- return $accounts;
- }
- private function getDomainAliases($tenant)
- {
- $domainAliases =(new KerioManager())
- ->getApiByServer($this->moduleParams['serverid'])
- ->soap
- ->repository()
- ->domains
- ->getAliases($tenant);
- return $domainAliases;
- }
- private function getDomainUsage($tenant)
- {
- $accounts =(new KerioManager())
- ->getApiByServer($this->moduleParams['serverid'])
- ->soap
- ->repository()
- ->accounts
- ->getUsages($tenant);
- $totalUsage = 0;
- foreach ($accounts as $account)
- {
- $usage = $account->getUsed();
- $totalUsage += $usage;
- }
- return $totalUsage;
- }
- private function getDistributionList($tenant)
- {
- $distributionList =(new KerioManager())
- ->getApiByServer($this->moduleParams['serverid'])
- ->soap
- ->repository()
- ->lists
- ->getAllDistributionListsByDomain($tenant);
- return $distributionList;
- }
- }
|