ソースを参照

bugfix MetricProvider

andre 2 年 前
コミット
efa6d64811
2 ファイル変更87 行追加132 行削除
  1. 9 13
      app/Http/Actions/UsageUpdate.php
  2. 78 119
      app/Libs/Metrics/MyMetricProvider.php

+ 9 - 13
app/Http/Actions/UsageUpdate.php

@@ -13,14 +13,6 @@ class UsageUpdate extends AddonController
 {
     public function execute($params = null)
     {
-        logModuleCall(
-            'kerioEmail',
-            __FUNCTION__,
-            $params,
-            'Debug Usage',
-            $api
-        );
-
         $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
         try {
             $api->login($params['serverhostname'], $params['serverusername'], $params['serverpassword']);
@@ -76,12 +68,16 @@ class UsageUpdate extends AddonController
                 Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['bwusage' => $mailboxes]);
                 Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['diskusage' => $storage]);
                 usleep(5000);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
             }
-            catch (\Exception $ex)
-            {
-
-            }
-
         }
     }
 }

+ 78 - 119
app/Libs/Metrics/MyMetricProvider.php

@@ -2,15 +2,9 @@
 
 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;
 use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
@@ -60,7 +54,7 @@ class MyMetricProvider implements ProviderInterface
         $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
         try {
             $api->login($this->moduleParams['serverhostname'], $this->moduleParams['serverusername'], $this->moduleParams['serverpassword']);
-            $domains = $api->getDomains(['id','name']);
+            $domains = $api->getDomains(['id','name','aliasList']);
         } catch (KerioApiException $error) {
             logModuleCall(
                 'kerioEmail',
@@ -71,44 +65,94 @@ class MyMetricProvider implements ProviderInterface
             );
             return ['error' => $error->getMessage()];
         }
-
-        logModuleCall(
-            'kerioEmail',
-            __FUNCTION__,
-            $this->moduleParams,
-            'Debug Usage',
-            $domains
-        );
-
         $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)
+            $domainName = $domain['name'];
+            $domainID = $domain['id'];
+            $countOfDomainAliases = count($domain['aliasList']);
+            try
             {
-                $countOfEmailAliases += count($account->getAliases());
+                $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,$this->maildomainID);
+                $countOfEmailAliases = count($aliases);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
             }
-
-            $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),
+                'storage' => $storage,
             ];
 
             $usage[$domainName] = $this->wrapUserData($domainData);
@@ -117,36 +161,6 @@ class MyMetricProvider implements ProviderInterface
         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 = [];
@@ -165,59 +179,4 @@ class MyMetricProvider implements ProviderInterface
         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;
-    }
-
 }