예제 #1
0
 public function createDefaultGroup()
 {
     $defaultgroups = json_decode(MONITIS_ADMIN_CONTACT_GROUPS, true);
     $existedGroups = MonitisApi::getContactGroupList();
     // existed monitis groups
     foreach ($defaultgroups as $mType => $groupName) {
         $group = MonitisHelper::in_array($existedGroups, 'id', MonitisConf::$settings['groups'][$mType]['groupId']);
         $alerts = json_decode(MONITIS_NOTIFICATION_RULE, true);
         if ($mType == 'internal') {
             $alerts['minFailedLocationCount'] = null;
         }
         $groupId = $group['id'] ? $group['id'] : 0;
         $notifByTypeGroup = MonitisApiHelper::getNotificationRuleByType($mType, $groupId);
         $alertRulesDefault = $notifByTypeGroup ? $notifByTypeGroup : $alerts;
         if ($group) {
             MonitisConf::$settings['groups'][$mType]['groupId'] = $group['id'];
             MonitisConf::$settings['groups'][$mType]['groupName'] = $group['name'];
             MonitisConf::$settings['groups'][$mType]['alert'] = $alertRulesDefault;
         } else {
             $newGroupName = $groupName;
             $resp = MonitisApi::addContactGroup(1, $newGroupName);
             if ($resp['status'] == 'ok') {
                 MonitisConf::$settings['groups'][$mType]['groupId'] = $resp['data'];
                 MonitisConf::$settings['groups'][$mType]['groupName'] = $newGroupName;
                 MonitisConf::$settings['groups'][$mType]['alert'] = $alertRulesDefault;
             } else {
                 // error
                 return array('status' => 'error', 'msg' => 'Add contact group error ' . $resp['error']);
             }
         }
         // $r = $this->addContacts(ucfirst($mType), MonitisConf::$settings['groups'][$mType]['groupId']);
     }
     MonitisConf::update_settings(json_encode(MonitisConf::$settings));
     return array('status' => 'ok', 'msg' => 'External, internal groups sets success');
 }
예제 #2
0
    public function synchronizeClients()
    {
        $all = array();
        $subUsers = MonitisApi::clients(true);
        $clntByUsr = monitisSqlHelper::query('SELECT user_id, firstname, lastname, email, LOWER(status) as status, api_key, secret_key
			FROM mod_monitis_user
			LEFT JOIN tblclients ON tblclients.id=mod_monitis_user.user_id');
        for ($i = 0; $i < count($subUsers); $i++) {
            $apikey = $subUsers[$i]['apikey'];
            $whmcsUser = MonitisHelper::in_array($clntByUsr, 'api_key', $apikey);
            $userid = 0;
            // user linked
            if ($whmcsUser) {
                $userid = $whmcsUser['user_id'];
            } else {
                // link user
                $arr = explode('_', $subUsers[$i]['account']);
                if ($arr && $arr[0]) {
                    $userid = intval(substr($arr[0], 5));
                    if ($userid > 0) {
                        $resp = monitisClientApi::linkUserByApikey($apikey, $userid);
                        if (@$resp['status'] == 'ok' && isset($resp['data'])) {
                            //$secretkey = $resp['data']['secret_key'];
                            $whmcsUser = $this->userById($userid);
                            $whmcsUser['api_key'] = $apikey;
                            $whmcsUser['secret_key'] = $resp['data']['secret_key'];
                        }
                    }
                }
            }
            $monitors = null;
            if ($userid > 0) {
                $monitors = $subUsers[$i]['monitors'];
                $monitors = $this->synchronizeMonitors($userid, $monitors);
            }
            $all[] = array('api_user' => $subUsers[$i], 'whmcs_user' => $whmcsUser, 'monitors' => $monitors);
        }
        return $all;
    }
예제 #3
0
 public function associateDrives($whmcsDrives, $agentInfo, $serverID)
 {
     $result = array("status" => "warning", "msg" => "No agent or agent is stopped");
     if ($agentInfo && isset($agentInfo['drives'])) {
         $agentId = $agentInfo['agentId'];
         $monDrives = $agentInfo['drives'];
         $whmcs_drives = null;
         if ($whmcsDrives) {
             $whmcs_drives = array();
             for ($i = 0; $i < count($whmcsDrives); $i++) {
                 $mon = MonitisHelper::in_array($monDrives, 'id', $whmcsDrives[$i]['monitor_id']);
                 if ($mon) {
                     $whmcs_drives[] = $whmcsDrives[$i];
                 } else {
                     monitisSqlHelper::altQuery('DELETE FROM ' . MONITIS_INTERNAL_TABLE . ' WHERE monitor_id=' . $whmcsDrives[$i]['monitor_id']);
                 }
             }
         }
         $ids = array();
         for ($i = 0; $i < count($monDrives); $i++) {
             $drive = $monDrives[$i];
             if (isset($drive['id'])) {
                 if (!$whmcs_drives || !MonitisHelper::in_array($whmcs_drives, 'monitor_id', $drive['id'])) {
                     $ids[] = $drive['id'];
                 }
             }
         }
         $cnt = count($ids);
         if ($ids && $cnt > 0) {
             for ($i = 0; $i < $cnt; $i++) {
                 $monitorID = $ids[$i];
                 $pubKey = MonitisApi::monitorPublicKey(array('moduleType' => 'drive', 'monitorId' => $monitorID));
                 $values = array('server_id' => $serverID, 'available' => MonitisConf::$settings['drive']['available'], 'agent_id' => $agentId, 'monitor_id' => $monitorID, 'monitor_type' => 'drive', 'client_id' => MONITIS_CLIENT_ID, "publickey" => $pubKey);
                 insert_query('mod_monitis_int_monitors', $values);
             }
             $result["status"] = 'ok';
             $result["msg"] = 'Add ' . $cnt . ' drive(s)';
         } else {
             $result["status"] = 'warning';
             $result["msg"] = 'No drive monitor for add';
         }
     }
     return $result;
 }
예제 #4
0
 private function getServerMonitors($server_id, &$arr)
 {
     $monitors = array();
     for ($i = 0; $i < count($arr); $i++) {
         if ($arr[$i]["server_id"] == $server_id && MonitisHelper::in_array($this->pubKeys, 'key', $arr[$i]["publickey"])) {
             $monitors[] = $arr[$i];
         }
     }
     return $monitors;
 }
예제 #5
0
 echo "<section>";
 //$monitors = $monitors['monitors'];
 for ($i = 0; $i < count($monitors); $i++) {
     $monitor = $monitors[$i];
     $monitor_id = $monitor['monitor_id'];
     $monitor_type = $monitor['monitor_type'];
     $item = $monitor['info'];
     $sets = $monitor["settings"];
     $sets = json_decode($sets, true);
     //$locationIds = explode(',', $item['locationIds']);
     $locationIds = explode(',', $item['locations']);
     $settingProduct = array('interval' => $interval, 'timeout' => $item['timeout'], 'name' => $monitor['info']['name'], 'types' => $monitor_type, 'locationIds' => $locationIds, 'locationsMax' => $sets['locationsMax']);
     $settingProduct = json_encode($settingProduct);
     $settingProduct = str_replace('"', "~", $settingProduct);
     /* notification rule by monitor id */
     $alert = MonitisHelper::in_array($alerts, 'monitorId', $monitor_id);
     $alertAction = 'add_rule';
     $rule = $alertAll;
     $ruleid = $allRuleid;
     $contactId = $allContactId;
     if ($alert) {
         $alertAction = 'edit_rule';
         $rule = str_replace('"', "~", $alert['rule']);
         $ruleid = $alert['id'];
         $contactId = $alert['contactId'];
     }
     /* suspend */
     $suspend = 'unsuspend';
     if (!$item["isSuspended"]) {
         $suspend = 'suspend';
     }
예제 #6
0
 public function activateProducts($productIds)
 {
     $result = array('status' => 'error', 'products' => array());
     $products = $this->allProducts();
     if ($products) {
         $result['status'] = 'ok';
         for ($i = 0; $i < count($productIds); $i++) {
             $prdct = MonitisHelper::in_array($products, 'pid', $productIds[$i]);
             $productId = intval($productIds[$i]);
             if ($prdct) {
                 if (isset($prdct['monitisProduct'])) {
                     // monitis product is active
                     if ($prdct['monitisProduct']['settings']) {
                         $result['products'][] = array('status' => 'warning', 'msg' => 'Product "' . $prdct['name'] . '" already has activated');
                     } else {
                         // activate
                         $setting = MonitisConf::$settings['ping'];
                         $setting['timeoutPing'] = 1000;
                         $setting['timeout'] = 10;
                         $this->activateProduct($productId, json_encode($setting));
                         $result['products'][] = array('status' => 'ok', 'msg' => 'Product "' . $prdct['name'] . '" activated');
                     }
                 } else {
                     // set up as monitoring product
                     $this->websiteValue['relid'] = $productId;
                     insert_query('tblcustomfields', $this->websiteValue);
                     $this->monitorTypesValue['relid'] = $productId;
                     insert_query('tblcustomfields', $this->monitorTypesValue);
                     $setting = MonitisConf::$settings['ping'];
                     $setting['timeoutPing'] = 1000;
                     $setting['timeout'] = 10;
                     $this->activateProduct($productId, json_encode($setting));
                     $result['products'][] = array('status' => 'ok', 'msg' => 'Product "' . $prdct['name'] . '" was set up as monitoring product successful');
                 }
             } else {
                 $result['products'][] = array('status' => 'error', 'msg' => 'Error product ' . $productId);
             }
         }
     }
     return $result;
 }
예제 #7
0
 private function initServer(&$server)
 {
     $monitor = null;
     if ($this->allPings) {
         // define ping monitor by IP
         $ping = MonitisHelper::in_array($this->allPings, 'url', $server['ipaddress']);
         if ($ping) {
             $monitorId = $ping['id'];
             $linkedMon = MonitisHelper::in_array($this->whmcsExt, 'monitor_id', $monitorId);
             if (!$linkedMon) {
                 // link ping monitor
                 $linkedMon = monitisSnapShots::linkPingMonitor($monitorId, 'ping', $server['id']);
             }
             $monitor = $ping;
             $monitor['available'] = $linkedMon['available'];
             $monitor['publickey'] = $linkedMon['publickey'];
         }
     }
     $server['ping'] = $monitor;
     $agent = $this->agentFullInfo;
     if ($agent) {
         $info = $this->intMonitor($agent, $server['id']);
         $server['agent'] = $info;
     }
     return $server;
 }
예제 #8
0
 private function init_all_servers()
 {
     for ($i = 0; $i < count($this->whmcsAllServers); $i++) {
         $server = $this->whmcsAllServers[$i];
         if ($this->allPings) {
             // define ping monitor by IP
             $ping = MonitisHelper::in_array($this->allPings, 'url', $server['ipaddress']);
             if ($ping) {
                 $monitorId = $ping['id'];
                 $ext = MonitisHelper::in_array($this->whmcsExt, 'monitor_id', $monitorId);
                 if (!$ext) {
                     // link monitor
                     $ext = monitisSnapShots::linkPingMonitor($monitorId, 'ping', $server['id']);
                     $this->result[] = array('server' => $server['name'], 'action' => 'link', 'monitor' => $ext);
                 }
             }
         }
         $agent = MonitisHelper::in_array($this->allAgents['agents'], 'key', $server['hostname']);
         if ($agent && isset($agent['status']) && $agent['status'] == 'running') {
             $this->internalMonitors($agent, $server);
         }
     }
     // remove unlinked internal monitors
     $this->unlinkedInternal();
 }
예제 #9
0
 private function init_all_servers()
 {
     for ($i = 0; $i < count($this->whmcsAllServers); $i++) {
         $monitors = array();
         $server = $this->whmcsAllServers[$i];
         if ($this->allPings) {
             // define ping monitor by IP
             $ping = MonitisHelper::in_array($this->allPings, 'url', $server['ipaddress']);
             if ($ping) {
                 $monitorId = $ping['id'];
                 $ext = MonitisHelper::in_array($this->whmcsExt, 'monitor_id', $monitorId);
                 if (!$ext && $this->synchronize) {
                     // link monitor
                     $ext = monitisSnapShots::linkPingMonitor($monitorId, 'ping', $server['id']);
                 }
                 $status = MonitisHelper::in_array($this->pingsStatus, 'id', $monitorId);
                 $monitors['ping'] = $status;
                 if ($ping['isSuspended']) {
                     $monitors['ping']['status'] = 'suspended';
                 }
             }
         }
         $agent = MonitisHelper::in_array($this->allAgents['agents'], 'key', $server['hostname']);
         if ($agent) {
             if (isset($agent['status']) && $agent['status'] == 'running') {
                 $info = $this->intMonitor($agent, $server['id']);
                 if ($info) {
                     $this->whmcsAllServers[$i]['agent_id'] = $info['agent_id'];
                     //$int['agent_id'];
                     $this->whmcsAllServers[$i]['agent_status'] = $info['status'];
                     $monitors['cpu'] = $info['cpu'];
                     $monitors['drive'] = $info['drive'];
                     $monitors['memory'] = $info['memory'];
                 }
             } elseif (isset($agent['status']) && $agent['status'] == 'stopped') {
                 $this->whmcsAllServers[$i]['agent_id'] = $agent['id'];
                 //$int['agent_id'];
                 $this->whmcsAllServers[$i]['agent_status'] = $agent['status'];
             }
         }
         if ($monitors && count($monitors) > 0) {
             $this->whmcsAllServers[$i]['monitors'] = $monitors;
         }
     }
     if ($this->synchronize) {
         $this->unlinkedInternal();
     }
 }
예제 #10
0
 public function planDetails($sss)
 {
     $result = array('clients' => 0, 'clientsMonitors' => 0, 'uptimeMonitors' => 0, 'locations' => 0, 'agents' => 0);
     /*
      * parent user info, plan
      */
     $params = array('loadUserPlan' => 'true');
     $userInfo = MonitisApi::userInfo($params);
     if (isset($userInfo['status']) && $userInfo['status'] == 'error' && isset($userInfo['code']) && $userInfo['code'] == 101) {
         return null;
     }
     $plan = array('roleName' => '', 'uptimePlan' => 0, 'intMonitors' => 0);
     if ($userInfo) {
         $roleName = $userInfo['plan']['roleName'];
         $basketItems = $userInfo['plan']['basketItems'];
         $plan['roleName'] = $roleName;
         if (strtoupper($roleName) == 'TRIAL') {
             $trial = MonitisHelper::in_array($basketItems, 'name', $roleName);
             if ($trial) {
                 $ext = MonitisHelper::in_array($trial['permissions'], 'actionId', $this->plans["uptimes"]["id"]);
                 // External monitoring / Uptime
                 $plan['uptimePlan'] = $ext['value'];
                 $int = MonitisHelper::in_array($trial['permissions'], 'actionId', $this->plans["servers"]["id"]);
                 // Server
                 $plan['serverPlan'] = $int['value'];
             }
         } else {
             $ext = $this->basketItemById($basketItems, $this->plans["uptimes"]["id"]);
             $plan['uptimePlan'] = $ext['quantity'];
             $int = $this->basketItemById($basketItems, $this->plans["servers"]["id"]);
             $plan['serverPlan'] = $int['quantity'];
         }
         $result['plan'] = $plan;
     }
     /*
      * clients info
      */
     $params = array('loadUserPlan' => 'true', 'loadMonitors' => 'true');
     $subUsers = MonitisApi::clientsList($params);
     $userMonitors = 0;
     for ($i = 0; $i < count($subUsers); $i++) {
         $userMonitors += count($subUsers[$i]['monitors']);
     }
     $result['clients'] = 0;
     if ($subUsers && count($subUsers) > 0) {
         $result['clients'] = count($subUsers);
     }
     $result['clientsMonitors'] = $userMonitors;
     /*
      * parent info
      * get all uptime monitors
      */
     $snapshots = MonitisApi::externalSnapshot();
     $result['uptimeMonitors'] = 0;
     if ($snapshots && count($snapshots) > 0) {
         $result['uptimeMonitors'] = count($snapshots);
     }
     /*
      * Server / Device monitors
      *
      */
     $agentsSnapshot = MonitisApi::allAgentsSnapshot('', true);
     if ($agentsSnapshot && isset($agentsSnapshot['agents'])) {
         $result['agents'] = count($agentsSnapshot['agents']);
     }
     $result['internalMonitors'] = 0;
     $internalMonitors = MonitisApi::getInternalMonitors();
     if ($internalMonitors) {
         if (isset($internalMonitors['cpus'])) {
             $result['internalMonitors'] += count($internalMonitors['cpus']);
         }
         if (isset($internalMonitors['memories'])) {
             $result['internalMonitors'] += count($internalMonitors['memories']);
         }
         if (isset($internalMonitors['drives'])) {
             $result['internalMonitors'] += count($internalMonitors['drives']);
         }
     }
     return $result;
 }