Merge branch '201410_log-users' of https://github.com/davyrolink/phpservermon into davyrolink-201410_log-users
# Conflicts: # src/includes/psmconfig.inc.php # src/psm/Util/Install/Installer.phppull/307/head
						commit
						c811876c89
					
				|  | @ -221,22 +221,42 @@ function psm_update_conf($key, $value) { | |||
|  * everything should have been handled when calling this function
 | ||||
|  * | ||||
|  * @param string $server_id | ||||
|  * @param string $type | ||||
|  * @param string $message | ||||
|  * | ||||
|  * @return int log_id | ||||
|  */ | ||||
| function psm_add_log($server_id, $type, $message, $user_id = null) { | ||||
| function psm_add_log($server_id, $type, $message) { | ||||
| 	global $db; | ||||
| 
 | ||||
| 	$db->save( | ||||
| 	return $db->save( | ||||
| 		PSM_DB_PREFIX.'log', | ||||
| 		array( | ||||
| 			'server_id' => $server_id, | ||||
| 			'type' => $type, | ||||
| 			'message' => $message, | ||||
| 			'user_id' => ($user_id === null) ? '' : $user_id, | ||||
| 		) | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * This function just adds a user to the log_users table. | ||||
|  * | ||||
|  * @param $log_id | ||||
|  * @param $user_id | ||||
|  */ | ||||
| function psm_add_log_user($log_id, $user_id) { | ||||
| 	global $db; | ||||
| 
 | ||||
|     $db->save( | ||||
|         PSM_DB_PREFIX . 'log_users', | ||||
|         array( | ||||
|             'log_id'  => $log_id, | ||||
|             'user_id' => $user_id, | ||||
|         ) | ||||
|     ); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * This function adds the result of a check to the uptime table for logging purposes. | ||||
|  * | ||||
|  |  | |||
|  | @ -60,14 +60,6 @@ class LogController extends AbstractServerController { | |||
| 		); | ||||
| 		$log_types = array('status', 'email', 'sms', 'pushover'); | ||||
| 
 | ||||
| 		// get users
 | ||||
| 		$users = $this->db->select(PSM_DB_PREFIX.'users', null, array('user_id','name')); | ||||
| 
 | ||||
| 		$users_labels = array(); | ||||
| 		foreach ($users as $user) { | ||||
| 			$users_labels[$user['user_id']] = $user['name']; | ||||
| 		} | ||||
| 
 | ||||
| 		foreach($log_types as $key) { | ||||
| 			$records = $this->getEntries($key); | ||||
| 			$log_count = count($records); | ||||
|  | @ -95,15 +87,12 @@ class LogController extends AbstractServerController { | |||
| 				$record['datetime_format'] = psm_date($record['datetime']); | ||||
| 
 | ||||
| 				// fix up user list
 | ||||
| 				if(!empty($record['user_id'])) { | ||||
|                 $users = $this->getLogUsers($record['log_id']); | ||||
| 				if(!empty($users)) { | ||||
| 					$names = array(); | ||||
| 					$users = explode(',', $record['user_id']); | ||||
| 					foreach($users as $user_id) { | ||||
| 						if(isset($users_labels[$user_id])) { | ||||
| 							$names[] = $users_labels[$user_id]; | ||||
| 						} | ||||
| 					foreach($users as $user) { | ||||
|                         $names[] = $user['name']; | ||||
| 					} | ||||
| 					sort($names); | ||||
| 					$record['users'] = implode('<br/>', $names); | ||||
| 					$record['user_list'] = implode(' • ', $names); | ||||
| 				} | ||||
|  | @ -135,10 +124,10 @@ class LogController extends AbstractServerController { | |||
| 				'`servers`.`ip`, '. | ||||
| 				'`servers`.`port`, '. | ||||
| 				'`servers`.`type` AS server_type, '. | ||||
| 				'`log`.`log_id`, '. | ||||
| 				'`log`.`type`, '. | ||||
| 				'`log`.`message`, '. | ||||
| 				'`log`.`datetime`, '. | ||||
| 				'`log`.`user_id` '. | ||||
| 				'`log`.`datetime` '. | ||||
| 			'FROM `'.PSM_DB_PREFIX.'log` AS `log` '. | ||||
| 			'JOIN `'.PSM_DB_PREFIX.'servers` AS `servers` ON (`servers`.`server_id`=`log`.`server_id`) '. | ||||
| 			$sql_join . | ||||
|  | @ -148,4 +137,22 @@ class LogController extends AbstractServerController { | |||
| 		); | ||||
| 		return $entries; | ||||
| 	} | ||||
| 
 | ||||
|     /** | ||||
|      * Get all the user entries for a specific $log_id | ||||
|      * | ||||
|      * @param $log_id | ||||
|      * @return array | ||||
|      */ | ||||
|     protected function getLogUsers($log_id) { | ||||
|         return $this->db->query( | ||||
|             "SELECT
 | ||||
|                 u.`user_id`, | ||||
|                 u.`name` | ||||
|             FROM `" . PSM_DB_PREFIX . "log_users` AS lu | ||||
|             LEFT JOIN `" . PSM_DB_PREFIX . "users` AS u ON lu.`user_id` = u.`user_id` | ||||
|             WHERE lu.`log_id` = " . (int)$log_id . " | ||||
|             ORDER BY u.`name` ASC" | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -206,9 +206,13 @@ class Installer { | |||
| 						  `type` enum('status','email','sms','pushover') NOT NULL, | ||||
| 						  `message` varchar(255) NOT NULL, | ||||
| 						  `datetime` timestamp NOT NULL default CURRENT_TIMESTAMP, | ||||
| 						  `user_id` varchar(255) NOT NULL, | ||||
| 						  PRIMARY KEY  (`log_id`) | ||||
| 						) ENGINE=MyISAM  DEFAULT CHARSET=utf8;",
 | ||||
|             PSM_DB_PREFIX . 'log_users' => "CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
 | ||||
|                                    `log_id`  int(11) UNSIGNED NOT NULL , | ||||
|                                    `user_id`  int(11) UNSIGNED NOT NULL , | ||||
|                                    PRIMARY KEY (`log_id`, `user_id`) | ||||
|          						) ENGINE=MyISAM  DEFAULT CHARSET=utf8;",
 | ||||
| 			PSM_DB_PREFIX . 'servers' => "CREATE TABLE `" . PSM_DB_PREFIX . "servers` (
 | ||||
| 						  `server_id` int(11) unsigned NOT NULL AUTO_INCREMENT, | ||||
| 						  `ip` varchar(500) NOT NULL, | ||||
|  | @ -440,5 +444,29 @@ class Installer { | |||
| 		$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `website_username` varchar(255) NULL, ADD `website_password` varchar(255) NULL AFTER `website_username`;"; | ||||
| 
 | ||||
| 		$this->execSQL($queries); | ||||
| 
 | ||||
|     // Create log_users table
 | ||||
|         $this->execSQL("CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
 | ||||
|                         `log_id`  int(11) UNSIGNED NOT NULL , | ||||
|                         `user_id`  int(11) UNSIGNED NOT NULL , | ||||
|                         PRIMARY KEY (`log_id`, `user_id`) | ||||
|                       ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
 | ||||
| 
 | ||||
|         // Migrate the data
 | ||||
|         $logs = $this->db->select(PSM_DB_PREFIX . 'log', null, array('log_id', 'user_id')); | ||||
|         foreach ($logs as $log) { | ||||
|             // Validation
 | ||||
|             if (empty($log['user_id']) || trim($log['user_id']) == '') { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             // Insert into new table
 | ||||
|             foreach (explode(',', $log['user_id']) as $user_id) { | ||||
|                 psm_add_log_user($log['log_id'], $user_id); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // Drop old user_id('s) column
 | ||||
|         $this->execSQL("ALTER TABLE `" . PSM_DB_PREFIX . "log` DROP COLUMN `user_id`;"); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -198,8 +198,6 @@ class StatusNotifier { | |||
| 	 * @return boolean | ||||
| 	 */ | ||||
| 	protected function notifyByEmail($users) { | ||||
| 		$userlist = array(); | ||||
| 
 | ||||
| 		// build mail object with some default values
 | ||||
| 		$mail = psm_build_mail(); | ||||
| 		$mail->Subject	= utf8_decode(psm_parse_msg($this->status_new, 'email_subject', $this->server)); | ||||
|  | @ -209,19 +207,21 @@ class StatusNotifier { | |||
| 		$mail->Body		= utf8_decode($body); | ||||
| 		$mail->AltBody	= str_replace('<br/>', "\n", $body); | ||||
| 
 | ||||
|         if(psm_get_conf('log_email')) { | ||||
|             $log_id = psm_add_log($this->server_id, 'email', $body); | ||||
|    	    } | ||||
| 
 | ||||
| 		// go through empl
 | ||||
| 	    foreach ($users as $user) { | ||||
|             if(!empty($log_id)) { | ||||
|        	    	psm_add_log_user($log_id, $user['user_id']); | ||||
|        	    } | ||||
| 
 | ||||
| 	    	// we sent a seperate email to every single user.
 | ||||
| 	    	$userlist[] = $user['user_id']; | ||||
| 	    	$mail->AddAddress($user['email'], $user['name']); | ||||
| 	    	$mail->Send(); | ||||
| 	    	$mail->ClearAddresses(); | ||||
| 	    } | ||||
| 
 | ||||
| 	    if(psm_get_conf('log_email')) { | ||||
| 	    	// save to log
 | ||||
| 	    	psm_add_log($this->server_id, 'email', $body, implode(',', $userlist)); | ||||
| 	    } | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  | @ -231,38 +231,51 @@ class StatusNotifier { | |||
| 	 * @return boolean | ||||
| 	 */ | ||||
| 	protected function notifyByPushover($users) { | ||||
| 		$userlist = array(); | ||||
| 		$pushover = psm_build_pushover(); | ||||
|         // Remove users that have no pushover_key
 | ||||
|         foreach($users as $k => $user) { | ||||
|             if (trim($user['pushover_key']) == '') { | ||||
|                 unset($users[$k]); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 		if($this->status_new === true) { | ||||
| 			$pushover->setPriority(0); | ||||
| 		} else { | ||||
| 			$pushover->setPriority(2); | ||||
| 			$pushover->setRetry(300); //Used with Priority = 2; Pushover will resend the notification every 60 seconds until the user accepts.
 | ||||
| 			$pushover->setExpire(3600); //Used with Priority = 2; Pushover will resend the notification every 60 seconds for 3600 seconds. After that point, it stops sending notifications.
 | ||||
| 		} | ||||
| 		$message = psm_parse_msg($this->status_new, 'pushover_message', $this->server); | ||||
|         // Validation
 | ||||
|         if (empty($users)) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // Pushover
 | ||||
|         $message = psm_parse_msg($this->status_new, 'pushover_message', $this->server); | ||||
|         $pushover = psm_build_pushover(); | ||||
|         if($this->status_new === true) { | ||||
|             $pushover->setPriority(0); | ||||
|         } else { | ||||
|             $pushover->setPriority(2); | ||||
|             $pushover->setRetry(300); //Used with Priority = 2; Pushover will resend the notification every 60 seconds until the user accepts.
 | ||||
|             $pushover->setExpire(3600); //Used with Priority = 2; Pushover will resend the notification every 60 seconds for 3600 seconds. After that point, it stops sending notifications.
 | ||||
|         } | ||||
| 		$pushover->setTitle(psm_parse_msg($this->status_new, 'pushover_title', $this->server)); | ||||
| 		$pushover->setMessage(str_replace('<br/>', "\n", $message)); | ||||
| 		$pushover->setUrl(psm_build_url()); | ||||
| 		$pushover->setUrlTitle(psm_get_lang('system', 'title')); | ||||
| 
 | ||||
|         // Log
 | ||||
|         if(psm_get_conf('log_pushover')) { | ||||
|             $log_id = psm_add_log($this->server_id, 'pushover', $message); | ||||
|    	    } | ||||
| 
 | ||||
| 	    foreach($users as $user) { | ||||
| 			if(trim($user['pushover_key']) == '') { | ||||
| 				continue; | ||||
| 			} | ||||
| 			$userlist[] = $user['user_id']; | ||||
|             // Log
 | ||||
|             if(!empty($log_id)) { | ||||
|        	    	psm_add_log_user($log_id, $user['user_id']); | ||||
|        	    } | ||||
| 
 | ||||
|             // Set recipient + send
 | ||||
| 			$pushover->setUser($user['pushover_key']); | ||||
| 			if($user['pushover_device'] != '') { | ||||
| 				$pushover->setDevice($user['pushover_device']); | ||||
| 			} | ||||
| 			$pushover->send(); | ||||
| 	    } | ||||
| 
 | ||||
| 	    if(psm_get_conf('log_pushover')) { | ||||
| 	    	psm_add_log($this->server_id, 'pushover', $message, implode(',', $userlist)); | ||||
| 	    } | ||||
|         } | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  | @ -277,24 +290,26 @@ class StatusNotifier { | |||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		// we have to build an userlist for the log table..
 | ||||
| 		$userlist = array(); | ||||
|         $message = psm_parse_msg($this->status_new, 'sms', $this->server); | ||||
| 
 | ||||
|         // Log
 | ||||
|         if(psm_get_conf('log_sms')) { | ||||
|             $log_id = psm_add_log($this->server_id, 'sms', $message); | ||||
| 		} | ||||
| 
 | ||||
| 		// add all users to the recipients list
 | ||||
| 		foreach ($users as $user) { | ||||
| 			$userlist[] = $user['user_id']; | ||||
|             // Log
 | ||||
|             if(!empty($log_id)) { | ||||
|        	    	psm_add_log_user($log_id, $user['user_id']); | ||||
|        	    } | ||||
| 
 | ||||
| 			$sms->addRecipients($user['mobile']); | ||||
| 		} | ||||
| 
 | ||||
| 		$message = psm_parse_msg($this->status_new, 'sms', $this->server); | ||||
| 
 | ||||
| 		// Send sms
 | ||||
| 		$result = $sms->sendSMS($message); | ||||
| 
 | ||||
| 		if(psm_get_conf('log_sms')) { | ||||
| 			// save to log
 | ||||
| 			psm_add_log($this->server_id, 'sms', $message, implode(',', $userlist)); | ||||
| 		} | ||||
| 		return $result; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Samuel Denis-D'Ortun
						Samuel Denis-D'Ortun