소스 검색

bugfix MetricProvider

andre 2 년 전
부모
커밋
16423e6b46
1개의 변경된 파일169개의 추가작업 그리고 0개의 파일을 삭제
  1. 169 0
      app/Libs/Metrics/MyMetricProvider.php

+ 169 - 0
app/Libs/Metrics/MyMetricProvider.php

@@ -164,6 +164,120 @@ class MyMetricProvider implements ProviderInterface
             $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']);
+            $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,$this->maildomainID);
+                $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;
     }
 
@@ -185,4 +299,59 @@ 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;
+    }
+
 }