123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565 |
- <?php
- /**
- * Watchdog tasks management and other interfaces
- */
- class WatchDogInterface {
- /**
- * Contains all watchdog tasks
- *
- * @var array
- */
- protected $allTasks = array();
- /**
- * Contains watchdog settings as key=>value
- *
- * @var array
- */
- protected $settings = array();
- /**
- * Contains previous watchdog alerts parsed from log
- *
- * @var array
- */
- protected $previousAlerts = array();
- /**
- * Contains available checktypes
- *
- * @var array
- */
- protected $checktypes = array();
- /**
- * Contains available operators
- *
- * @var array
- */
- protected $operators = array();
- const TASKID_EX = 'NO_REQUIRED_TASK_ID';
- const TASKADD_EX = 'MISSING_REQUIRED_OPTION';
- /**
- * load all watchdog tasks intoo private prop allTasks
- *
- * @return void
- */
- public function loadAllTasks() {
- $taskQuery = "SELECT * from `watchdog` ORDER BY `id` DESC;";
- $alltasks = simple_queryall($taskQuery);
- if (!empty($alltasks)) {
- foreach ($alltasks as $iz => $eachTask) {
- $this->allTasks[$eachTask['id']]['id'] = $eachTask['id'];
- $this->allTasks[$eachTask['id']]['active'] = $eachTask['active'];
- $this->allTasks[$eachTask['id']]['name'] = $eachTask['name'];
- $this->allTasks[$eachTask['id']]['checktype'] = $eachTask['checktype'];
- $this->allTasks[$eachTask['id']]['param'] = $eachTask['param'];
- $this->allTasks[$eachTask['id']]['operator'] = $eachTask['operator'];
- $this->allTasks[$eachTask['id']]['condition'] = $eachTask['condition'];
- $this->allTasks[$eachTask['id']]['action'] = $eachTask['action'];
- $this->allTasks[$eachTask['id']]['oldresult'] = $eachTask['oldresult'];
- }
- }
- }
- /**
- * load all watchdog previous alerts into private data prop
- *
- * @return void
- */
- public function loadAllPreviousAlerts() {
- //select year to load
- if (wf_CheckPost(array('alertsyearsel'))) {
- $curYear = vf($_POST['alertsyearsel'], 3);
- } else {
- $curYear = curyear();
- }
- $query = "SELECT `id`,`date`,`event` from `weblogs` WHERE `event` LIKE 'WATCHDOG NOTIFY THAT%' AND `date` LIKE '" . $curYear . "-%';";
- $all = simple_queryall($query);
- if (!empty($all)) {
- foreach ($all as $io => $each) {
- $this->previousAlerts[$each['id']]['id'] = $each['id'];
- $this->previousAlerts[$each['id']]['date'] = $each['date'];
- $event = str_replace('WATCHDOG NOTIFY THAT', '', $each['event']);
- $event = str_replace('`', '', $event);
- $this->previousAlerts[$each['id']]['event'] = $event;
- }
- }
- }
- /**
- * protected property allTasks getter
- *
- * @return array
- */
- public function getAllTasks() {
- $result = $this->allTasks;
- return ($result);
- }
- /**
- * Gets watchdog settings from database and load it into settings property
- * Also it sets default values into the database
- *
- * @return void
- */
- public function loadSettings() {
- $alert = zb_StorageGet('WATCHDOG_ALERT');
- if (empty($alert)) {
- $alert = __('Watchdog notifies that');
- zb_StorageSet('WATCHDOG_ALERT', $alert);
- }
- $phones = zb_StorageGet('WATCHDOG_PHONES');
- if (empty($phones)) {
- zb_StorageSet('WATCHDOG_PHONES', '');
- }
- $emails = zb_StorageGet('WATCHDOG_EMAILS');
- if (empty($emails)) {
- zb_StorageSet('WATCHDOG_EMAILS', '');
- }
- $telegramchats = zb_StorageGet('WATCHDOG_TELEGRAM');
- $maintenanceMode = zb_StorageGet('WATCHDOG_MAINTENANCE');
- $smsSilenceMode = zb_StorageGet('WATCHDOG_SMSSILENCE');
- $this->settings['WATCHDOG_ALERT'] = $alert;
- $this->settings['WATCHDOG_PHONES'] = $phones;
- $this->settings['WATCHDOG_EMAILS'] = $emails;
- $this->settings['WATCHDOG_TELEGRAM'] = $telegramchats;
- $this->settings['WATCHDOG_MAINTENANCE'] = $maintenanceMode;
- $this->settings['WATCHDOG_SMSSILENCE'] = $smsSilenceMode;
- $this->checktypes = array(
- 'icmpping' => 'icmpping',
- 'tcpping' => 'tcpping',
- 'udpping' => 'udpping',
- 'hopeping' => 'hopeping',
- 'script' => 'script',
- 'httpget' => 'httpget',
- 'getusertraff' => 'getusertraff',
- 'fileexists' => 'fileexists',
- 'opentickets' => 'opentickets',
- 'onepunch' => 'onepunch',
- 'snmpwalk' => 'snmpwalk',
- 'freediskspace' => 'freediskspace'
- );
- $this->operators = array(
- '=true' => '=true',
- '=false' => '=false',
- '==' => '==',
- '!=' => '!=',
- '>' => '>',
- '<' => '<',
- '>=' => '>=',
- '<=' => '<=',
- 'empty' => 'empty',
- 'notempty' => 'notempty',
- 'changed' => 'changed',
- 'notchanged' => 'notchanged',
- 'like' => 'like',
- 'notlike' => 'notlike',
- 'rised' => 'rised',
- 'decreased' => 'decreased'
- );
- }
- /**
- * Returns current watchdog settings
- *
- * @return array
- */
- public function getSettings() {
- $result = $this->settings;
- return ($result);
- }
- /**
- * shows all available tasks list
- *
- * @return string
- */
- public function listAllTasks() {
- $cells = wf_TableCell(__('ID'));
- $cells .= wf_TableCell(__('Active'));
- $cells .= wf_TableCell(__('Name'));
- $cells .= wf_TableCell(__('Check type'));
- $cells .= wf_TableCell(__('Parameter'));
- $cells .= wf_TableCell(__('Operator'));
- $cells .= wf_TableCell(__('Condition'));
- $cells .= wf_TableCell(__('Actions'));
- $cells .= wf_TableCell(__('Manage'));
- $rows = wf_TableRow($cells, 'row1');
- if (!empty($this->allTasks)) {
- foreach ($this->allTasks as $io => $eachtask) {
- $details = wf_tag('pre') . print_r($eachtask, true) . wf_tag('pre', true);
- $detailLink = wf_modal($eachtask['id'], $eachtask['name'], $details, '', '600', '400');
- $cells = wf_TableCell($detailLink, '', '', 'sorttable_customkey="' . $eachtask['id'] . '"');
- $cells .= wf_TableCell(web_bool_led($eachtask['active']), '', '', 'sorttable_customkey="' . $eachtask['active'] . '"');
- $cells .= wf_TableCell($eachtask['name']);
- $cells .= wf_TableCell($eachtask['checktype']);
- $cells .= wf_TableCell($eachtask['param']);
- $cells .= wf_TableCell($eachtask['operator']);
- $cells .= wf_TableCell($eachtask['condition']);
- $cells .= wf_TableCell($eachtask['action']);
- $controls = wf_JSAlert('?module=watchdog&delete=' . $eachtask['id'], web_delete_icon(), __('Removing this may lead to irreparable results'));
- $controls .= wf_JSAlert('?module=watchdog&edit=' . $eachtask['id'], web_edit_icon(), __('Are you serious'));
- $cells .= wf_TableCell($controls);
- $rows .= wf_tag('tr', false, 'row5');
- $rows .= $cells;
- $rows .= wf_tag('tr', true);
- }
- }
- $result = wf_TableBody($rows, '100%', '0', 'sortable');
- return ($result);
- }
- /**
- * shows new task creation form
- *
- * @return string
- */
- public function newTaskForm() {
- $inputs = wf_TextInput('newname', __('Name'), '', true);
- $inputs .= wf_Selector('newchecktype', $this->checktypes, __('Check type'), '', true);
- $inputs .= wf_TextInput('newparam', __('Parameter'), '', true);
- $inputs .= wf_Selector('newoperator', $this->operators, __('Operator'), '', true);
- $inputs .= wf_TextInput('newcondition', __('Condition'), '', true);
- $inputs .= wf_TextInput('newaction', __('Actions'), '', true);
- $inputs .= wf_CheckInput('newactive', __('Active'), true, true);
- $inputs .= wf_Submit(__('Create'));
- $form = wf_Form("", 'POST', $inputs, 'glamour');
- return ($form);
- }
- /**
- * shows modify form for some existing task
- *
- * @param int $taskID existing task id
- *
- * @return string
- */
- public function editTaskForm($taskID) {
- $taskID = vf($taskID, 3);
- if (empty($taskID)) {
- throw new Exception(self::TASKID_EX);
- }
- $inputs = wf_TextInput('editname', __('Name'), $this->allTasks[$taskID]['name'], true);
- $inputs .= wf_Selector('editchecktype', $this->checktypes, __('Check type'), $this->allTasks[$taskID]['checktype'], true);
- $inputs .= wf_TextInput('editparam', __('Parameter'), $this->allTasks[$taskID]['param'], true);
- $inputs .= wf_Selector('editoperator', $this->operators, __('Operator'), $this->allTasks[$taskID]['operator'], true);
- $inputs .= wf_TextInput('editcondition', __('Condition'), $this->allTasks[$taskID]['condition'], true);
- $inputs .= wf_TextInput('editaction', __('Actions'), $this->allTasks[$taskID]['action'], true);
- $inputs .= wf_CheckInput('editactive', __('Active'), true, $this->allTasks[$taskID]['active']);
- $inputs .= wf_Submit(__('Save'));
- $form = wf_Form("", 'POST', $inputs, 'glamour');
- $form .= wf_BackLink("?module=watchdog");
- return ($form);
- }
- /**
- * saves changes in the watchdog task as selected in editTaskForm
- *
- * @return void
- */
- public function changeTask() {
- $taskID = vf($_GET['edit'], 3);
- if (wf_CheckPost(array('editname', 'editaction', 'editparam'))) {
- if (!empty($taskID)) {
- if (isset($_POST['editactive'])) {
- $actFlag = 1;
- } else {
- $actFlag = 0;
- }
- simple_update_field('watchdog', 'name', $_POST['editname'], "WHERE `id`='" . $taskID . "'");
- simple_update_field('watchdog', 'checktype', $_POST['editchecktype'], "WHERE `id`='" . $taskID . "'");
- simple_update_field('watchdog', 'param', $_POST['editparam'], "WHERE `id`='" . $taskID . "'");
- simple_update_field('watchdog', 'operator', $_POST['editoperator'], "WHERE `id`='" . $taskID . "'");
- simple_update_field('watchdog', 'condition', $_POST['editcondition'], "WHERE `id`='" . $taskID . "'");
- simple_update_field('watchdog', 'action', $_POST['editaction'], "WHERE `id`='" . $taskID . "'");
- simple_update_field('watchdog', 'active', $actFlag, "WHERE `id`='" . $taskID . "'");
- log_register("WATCHDOG CHANGE TASK [" . $taskID . "] `" . $_POST['editname'] . "`");
- } else {
- throw new Exception(self::TASKID_EX);
- }
- } else {
- throw new Exception(self::TASKADD_EX);
- }
- }
- /**
- * delete some existing watchdog task
- *
- * @param int $taskID - existing task id
- *
- * @return void
- */
- public function deleteTask($taskID) {
- $taskID = vf($taskID, 3);
- if (empty($taskID)) {
- throw new Exception(self::TASKID_EX);
- }
- $query = "DELETE from `watchdog` WHERE `id`='" . $taskID . "'";
- nr_query($query);
- log_register("WATCHDOG DELETE TASK [" . $taskID . "]");
- }
- /**
- * creates new watchdog task
- *
- * @param string $name - task name
- * @param string $checktype - task check type
- * @param string $param - parameter
- * @param string $operator - operator
- * @param string $condition - condition for action
- * @param string $action - actions list
- * @param int $active - activity tinyint flag
- *
- * @return void
- */
- public function createTask($name, $checktype, $param, $operator, $condition, $action, $active = 0) {
- $active = mysql_real_escape_string($active);
- $name = mysql_real_escape_string($name);
- $checktype = mysql_real_escape_string($checktype);
- $param = mysql_real_escape_string($param);
- $operator = mysql_real_escape_string($operator);
- $condition = mysql_real_escape_string($condition);
- $action = mysql_real_escape_string($action);
- if ((empty($name)) OR ( empty($param)) OR ( empty($action))) {
- throw new Exception(self::TASKADD_EX);
- }
- $query = "INSERT INTO `watchdog` (`id` , `active` , `name` , `checktype` , `param` ,`operator` , `condition` ,`action` ,`oldresult`)
- VALUES (NULL , '" . $active . "', '" . $name . "', '" . $checktype . "', '" . $param . "', '" . $operator . "', '" . $condition . "', '" . $action . "', NULL);";
- nr_query($query);
- log_register("WATCHDOG CREATE TASK `" . $name . "`");
- }
- /**
- * Shows watchdog control panel
- *
- * @return string
- */
- public function panel() {
- $createWindow = $this->newTaskForm();
- $settingsWindow = $this->settingsForm();
- $result = '';
- $result .= wf_modalAuto(wf_img('skins/add_icon.png') . ' ' . __('Create new task'), __('Create new task'), $createWindow, 'ubButton');
- $result .= wf_Link("?module=watchdog", wf_img('skins/icon_search_small.gif') . ' ' . __('Show all tasks'), false, 'ubButton');
- $result .= wf_Link("?module=watchdog&manual=true", wf_img('skins/refresh.gif') . ' ' . __('Manual run'), false, 'ubButton');
- $result .= wf_Link("?module=watchdog&previousalerts=true", wf_img('skins/time_machine.png') . ' ' . __('Previous alerts'), false, 'ubButton');
- $result .= wf_modalAuto(wf_img('skins/settings.png') . ' ' . __('Settings'), __('Settings'), $settingsWindow, 'ubButton');
- return ($result);
- }
- /**
- * Sets maintenance mode state
- *
- * @param string $action
- *
- * @return void
- */
- public function setMaintenance($action) {
- if ($action == 'enable') {
- zb_StorageSet('WATCHDOG_MAINTENANCE', 'enabled');
- log_register('WATCHDOG MAINTENANCE ENABLED');
- }
- if ($action == 'disable') {
- zb_StorageDelete('WATCHDOG_MAINTENANCE');
- log_register('WATCHDOG MAINTENANCE DISABLED');
- }
- //update notification area
- $darkVoid = new DarkVoid();
- $darkVoid->flushCache();
- }
- /**
- * Sets SMS silince mode state
- *
- * @param string $action
- *
- * @return void
- */
- public function setSmsSilence($action) {
- if ($action == 'enable') {
- zb_StorageSet('WATCHDOG_SMSSILENCE', 'enabled');
- log_register('WATCHDOG SMSSILENCE ENABLED');
- }
- if ($action == 'disable') {
- zb_StorageDelete('WATCHDOG_SMSSILENCE');
- log_register('WATCHDOG SMSSILENCE DISABLED');
- }
- //update notification area
- $darkVoid = new DarkVoid();
- $darkVoid->flushCache();
- }
- /**
- * returns watchdog settings edit form
- *
- * @return string
- */
- public function settingsForm() {
- $result = '';
- $inputs = wf_TextInput('changealert', __('Watchdog alert text'), $this->settings['WATCHDOG_ALERT'], true, '30');
- $inputs .= wf_TextInput('changephones', __('Phone numbers to send alerts'), $this->settings['WATCHDOG_PHONES'], true, '30');
- $inputs .= wf_TextInput('changeemails', __('Emails to send alerts'), $this->settings['WATCHDOG_EMAILS'], true, '30');
- $inputs .= wf_TextInput('changetelegram', __('Telegram chat ids to send alerts'), $this->settings['WATCHDOG_TELEGRAM'], true, '30');
- $inputs .= wf_Submit(__('Save'));
- $result .= wf_Form("", 'POST', $inputs, 'glamour');
- if (cfr('ROOT')) {
- $result .= wf_tag('br');
- if (!$this->settings['WATCHDOG_MAINTENANCE']) {
- $result .= wf_Link('?module=watchdog&maintenance=enable', wf_img('skins/icon_ok.gif') . ' ' . __('Watchdog') . ': ' . __('Enabled'), false, 'ubButton');
- } else {
- $result .= wf_Link('?module=watchdog&maintenance=disable', wf_img('skins/icon_minus.png') . ' ' . __('Watchdog') . ': ' . __('Disabled'), false, 'ubButton');
- }
- $result .= ' ';
-
- if (!$this->settings['WATCHDOG_SMSSILENCE']) {
- $result .= wf_Link('?module=watchdog&smssilence=enable', wf_img('skins/icon_smsenabled.png') . ' ' . __('SMS silence') . ': ' . __('Disabled'), false, 'ubButton');
- } else {
- $result .= wf_Link('?module=watchdog&smssilence=disable', wf_img('skins/icon_smsdisabled.png') . ' ' . __('SMS silence') . ': ' . __('Enabled'), false, 'ubButton');
- }
- }
- return ($result);
- }
- /**
- * save the current settings of watchdog as it posted in settingsForm
- *
- * @return void
- */
- public function saveSettings() {
- if (wf_CheckPost(array('changealert'))) {
- zb_StorageSet('WATCHDOG_ALERT', $_POST['changealert']);
- zb_StorageSet('WATCHDOG_PHONES', $_POST['changephones']);
- zb_StorageSet('WATCHDOG_EMAILS', $_POST['changeemails']);
- zb_StorageSet('WATCHDOG_TELEGRAM', $_POST['changetelegram']);
- log_register("WATCHDOG SETTINGS CHANGED");
- }
- }
- /**
- * returns year selector to load alerts
- *
- * @return string
- */
- public function yearSelectorAlerts() {
- $inputs = wf_YearSelector('alertsyearsel', __('Year') . ' ', false);
- $inputs .= wf_Submit(__('Show'));
- $result = wf_Form("", 'POST', $inputs, 'glamour');
- $result .= wf_tag('br');
- return ($result);
- }
- /**
- * preprocess and return full calendar data for alerts report
- *
- * @retun string
- */
- public function renderAlertsCalendar() {
- $result = '';
- $controls = wf_TableCell($this->yearSelectorAlerts());
- $controls .= wf_TableCell($this->alertsSearchForm());
- $controls = wf_TableRow($controls);
- $result = wf_TableBody($controls, '60%', 0, '');
- if (!empty($this->previousAlerts)) {
- $calendarData = '';
- foreach ($this->previousAlerts as $io => $each) {
- $timestamp = strtotime($each['date']);
- $date = date("Y, n-1, j", $timestamp);
- $rawTime = date("H:i:s", $timestamp);
- $calendarData .= "
- {
- title: '" . $rawTime . ' ' . $each['event'] . "',
- start: new Date(" . $date . "),
- end: new Date(" . $date . "),
- className : 'undone'
- },
- ";
- }
- $result .= wf_FullCalendar($calendarData);
- } else {
- $result .= __('Nothing found');
- }
- return ($result);
- }
- /**
- * Returns previous alerts search form
- *
- * @return string
- */
- public function alertsSearchForm() {
- $result = '';
- $availTaskNames = array();
- if (!empty($this->allTasks)) {
- foreach ($this->allTasks as $io => $each) {
- $availTaskNames[$each['name']] = $each['name'];
- }
- }
- $inputs = wf_Selector('previousalertsearch', $availTaskNames, __('Name'), '', false);
- $inputs .= wf_Submit(__('Search'));
- $result = wf_Form("", 'POST', $inputs, 'glamour');
- return ($result);
- }
- /**
- * Returns previousa alerts search results
- *
- * @param string $request
- * @return string
- */
- public function alertSearchResults($request) {
- $result = $this->alertsSearchForm();
- $cells = wf_TableCell(__('Date'));
- $cells .= wf_TableCell(__('Event'));
- $rows = wf_TableRow($cells, 'row1');
- $counter = 0;
- if (!empty($this->previousAlerts)) {
- foreach ($this->previousAlerts as $io => $each) {
- if (ispos($each['event'], $request)) {
- $cells = wf_TableCell($each['date']);
- $cells .= wf_TableCell($each['event']);
- $rows .= wf_TableRow($cells, 'row3');
- $counter++;
- }
- }
- }
- $result .= wf_TableBody($rows, '100%', 0, 'sortable');
- $result .= __('Total') . ': ' . $counter;
- return ($result);
- }
- }
|