UsageUpdate.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace ModulesGarden\Servers\ZimbraEmail\App\Http\Actions;
  3. use ModulesGarden\Servers\ZimbraEmail\App\Helpers\ZimbraManager;
  4. use ModulesGarden\Servers\ZimbraEmail\Core\App\Controllers\Instances\AddonController;
  5. use ModulesGarden\Servers\ZimbraEmail\Core\Models\Whmcs;
  6. use WHMCS\Database\Capsule;
  7. class UsageUpdate extends AddonController
  8. {
  9. protected $moduleParams;
  10. public function execute($params = null)
  11. {
  12. $this->moduleParams = $params;
  13. $domains =(new ZimbraManager())
  14. ->getApiByServer($this->moduleParams['serverid'])
  15. ->soap
  16. ->repository()
  17. ->domains()
  18. ->getAll();
  19. foreach ($domains as $domain)
  20. {
  21. try
  22. {
  23. $domainName = $domain->getName();
  24. $usage = $this->getDomainUsage($domainName);
  25. $mailboxes = $usage['mailboxes'];
  26. $storage = $usage['usage'];
  27. $storage = $storage == 0 ? 0 : round($storage/1024/1024);
  28. $serverId =$params['serverid'];
  29. Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['bwusage' => $mailboxes]);
  30. Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['diskusage' => $storage]);
  31. Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['lastupdate' => Capsule::raw('now()')]);
  32. usleep(5000);
  33. }
  34. catch (\Exception $ex)
  35. {
  36. }
  37. }
  38. }
  39. private function getDomainUsage($tenant)
  40. {
  41. $client = (new ZimbraManager())
  42. ->getApiByServer($this->moduleParams['serverid'])
  43. ->soap
  44. ->repository()
  45. ->accounts;
  46. $accounts = $client->getUsages($tenant);
  47. $mailboxes = count($client->getMailboxes($tenant));
  48. $totalUsage = 0;
  49. foreach ($accounts as $account)
  50. {
  51. $usage = $account->getUsed();
  52. $totalUsage += $usage;
  53. }
  54. return array('usage' => $totalUsage, 'mailboxes' => $mailboxes);
  55. }
  56. }