/** * function that returns array data for existing FDB cache * * @param $fdbData_raw - array of existing cache _fdb files * * @return array */ function sn_SnmpParseFdbCacheArray($fdbData_raw) { $allswitches = zb_SwitchesGetAll(); $switchdata = array(); $result = array(); //switch data preprocessing if (!empty($allswitches)) { foreach ($allswitches as $io => $eachswitch) { $switchdata[$eachswitch['ip']] = $eachswitch['location']; } } foreach ($fdbData_raw as $each_raw) { $nameExplode = explode('_', $each_raw); if (sizeof($nameExplode) == 2) { $switchIp = $nameExplode[0]; $eachfdb_raw = file_get_contents('exports/' . $each_raw); $eachfdb = unserialize($eachfdb_raw); if (!empty($eachfdb_raw)) { foreach ($eachfdb as $mac => $port) { if (@(!empty($switchdata[$switchIp]))) { $switchDesc = $switchIp . ' - ' . @$switchdata[$switchIp]; } else { $switchDesc = $switchIp; } $result[$mac][] = $switchDesc . ' ' . __('Port') . ': ' . $port; } } } } return $result; }
/** * Returns switch data in profile form * * @param string $login * @return string */ function web_ProfileSwitchControlForm($login) { global $ubillingConfig; $alterconf = $ubillingConfig->getAlter(); $login = mysql_real_escape_string($login); $query = "SELECT * from `switchportassign` WHERE `login`='" . $login . "'"; //switch selector arranged by id (default) if ($alterconf['SWITCHPORT_IN_PROFILE'] == 1 or $alterconf['SWITCHPORT_IN_PROFILE'] == 4) { $allswitches = zb_SwitchesGetAll(); } //switch selector arranged by location if ($alterconf['SWITCHPORT_IN_PROFILE'] == 2) { $allswitches_q = "SELECT * FROM `switches` ORDER BY `location` ASC"; $allswitches = simple_queryall($allswitches_q); } //switch selector arranged by ip if ($alterconf['SWITCHPORT_IN_PROFILE'] == 3) { $allswitches_q = "SELECT * FROM `switches` ORDER BY `ip` ASC"; $allswitches = simple_queryall($allswitches_q); } $switcharr = array(); $switcharrFull = array(); $switchswpoll = array(); $switchgeo = array(); $cutLocation = true; if (!empty($allswitches)) { foreach ($allswitches as $io => $eachswitch) { if ($cutLocation) { if (mb_strlen($eachswitch['location']) > 32) { $switcharr[$eachswitch['id']] = $eachswitch['ip'] . ' - ' . mb_substr($eachswitch['location'], 0, 32, 'utf-8') . '...'; } else { $switcharr[$eachswitch['id']] = $eachswitch['ip'] . ' - ' . $eachswitch['location']; } } else { $switcharr[$eachswitch['id']] = $eachswitch['ip'] . ' - ' . $eachswitch['location']; } $switcharrFull[$eachswitch['id']] = $eachswitch['ip'] . ' - ' . $eachswitch['location']; if (ispos($eachswitch['desc'], 'SWPOLL')) { $switchswpoll[$eachswitch['id']] = $eachswitch['ip']; } if (!empty($eachswitch['geo'])) { $switchgeo[$eachswitch['id']] = $eachswitch['geo']; } } } //getting current data $assignData = simple_query($query); $sameUsers = ''; if (!empty($assignData)) { $currentSwitchPort = $assignData['port']; $currentSwitchId = $assignData['switchid']; } else { $currentSwitchPort = ''; $currentSwitchId = ''; } //checks other users with same switch->port if (!empty($currentSwitchId) and !empty($currentSwitchPort)) { $queryCheck = "SELECT `login` from `switchportassign` WHERE `port`='" . vf($currentSwitchPort) . "' AND `switchid`='" . vf($currentSwitchId, 3) . "';"; $checkSame = simple_queryall($queryCheck); if (!empty($checkSame)) { foreach ($checkSame as $ix => $eachsame) { if ($eachsame['login'] != $login) { $sameUsers .= ' ' . wf_Link("?module=userprofile&username="******"POST", $inputs, $formStyle); //form end $switchAssignController = wf_modal(web_edit_icon(), __('Switch port assign'), $controlForm, '', '450', '220'); //switch location and polling controls $switchLocators = ''; if (isset($switchswpoll[$currentSwitchId])) { $snmpSwitchLocatorIcon = wf_tag('img', false, '', 'src=skins/snmp.png height="10" title="' . __('SNMP query') . '"'); $switchLocators .= wf_Link('?module=switchpoller&switchid=' . $currentSwitchId, $snmpSwitchLocatorIcon, false, ''); } if (isset($switchgeo[$currentSwitchId])) { $geoSwitchLocatorIcon = wf_tag('img', false, '', 'src=skins/icon_search_small.gif height="10" title="' . __('Find on map') . '"'); $switchLocators .= wf_Link('?module=switchmap&finddevice=' . $switchgeo[$currentSwitchId], $geoSwitchLocatorIcon, false, ''); } $cells = wf_TableCell(__('Switch'), '30%', 'row2'); $cells .= wf_TableCell(@$switcharrFull[$currentSwitchId] . ' ' . $switchLocators); $rows = wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Port'), '30%', 'row2'); $cells .= wf_TableCell($currentSwitchPort); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Change'), '30%', 'row2'); $cells .= wf_TableCell($switchAssignController . ' ' . $sameUsers); $rows .= wf_TableRow($cells, 'row3'); $result = wf_TableBody($rows, '100%', '0'); //update subroutine if (wf_CheckPost(array('swassignlogin', 'swassignswid', 'swassignswport'))) { $newswid = vf($_POST['swassignswid'], 3); $newport = vf($_POST['swassignswport'], 3); nr_query("DELETE from `switchportassign` WHERE `login`='" . $_POST['swassignlogin'] . "'"); nr_query("INSERT INTO `switchportassign` (`id` ,`login` ,`switchid` ,`port`) VALUES (NULL , '" . $_POST['swassignlogin'] . "', '" . $newswid . "', '" . $newport . "');"); log_register("CHANGE SWITCHPORT (" . $login . ") ON SWITCHID [" . $newswid . "] PORT [" . $newport . "]"); rcms_redirect("?module=userprofile&username="******"DELETE from `switchportassign` WHERE `login`='" . $_POST['swassignlogin'] . "'"); log_register("DELETE SWITCHPORT (" . $login . ")"); rcms_redirect("?module=userprofile&username=" . $login); } return $result; }
/** * Returns list of all available switches devices with its controls. Also catches ajaxping and forcereping events. * * @return string */ function web_SwitchesShow() { global $ubillingConfig; $alterconf = $ubillingConfig->getAlter(); $allswitches = zb_SwitchesGetAll(); $modelnames = zb_SwitchModelsGetAllTag(); $currenttime = time(); $reping_timeout = $alterconf['SW_PINGTIMEOUT']; $deathTime = zb_SwitchesGetAllDeathTime(); //counters $countTotal = 0; $countAlive = 0; $countDead = 0; $countNp = 0; $countOnMap = 0; $countSwpoll = 0; $countMtsigmon = 0; $countOlt = 0; $countLinked = 0; //non realtime switches pinging $last_pingtime = zb_StorageGet('SWPINGTIME'); if (!$last_pingtime) { zb_SwitchesRepingAll(); zb_StorageSet('SWPINGTIME', $currenttime); $last_pingtime = $currenttime; } else { if ($currenttime > $last_pingtime + $reping_timeout * 60) { // normal timeout reping sub here zb_SwitchesRepingAll(); zb_StorageSet('SWPINGTIME', $currenttime); } } //force total reping and update cache if (wf_CheckGet(array('forcereping'))) { zb_SwitchesRepingAll(); zb_StorageSet('SWPINGTIME', $currenttime); if (wf_CheckGet(array('ajaxping'))) { $dead_raw = zb_StorageGet('SWDEAD'); $deathTime = zb_SwitchesGetAllDeathTime(); $deadarr = array(); $ajaxResult = ''; if ($dead_raw) { $deadarr = unserialize($dead_raw); if (!empty($deadarr)) { //there is some dead switches $deadcount = sizeof($deadarr); if ($alterconf['SWYMAP_ENABLED']) { //getting geodata $switchesGeo = zb_SwitchesGetAllGeo(); } //ajax container $ajaxResult .= wf_tag('div', false, '', 'id="switchping"'); foreach ($deadarr as $ip => $switch) { if ($alterconf['SWYMAP_ENABLED']) { if (isset($switchesGeo[$ip])) { if (!empty($switchesGeo[$ip])) { $devicefind = wf_Link('?module=switchmap&finddevice=' . $switchesGeo[$ip], wf_img('skins/icon_search_small.gif', __('Find on map'))) . ' '; } else { $devicefind = ''; } } else { $devicefind = ''; } } else { $devicefind = ''; } //check morgue records for death time if (isset($deathTime[$ip])) { $deathClock = wf_img('skins/clock.png', __('Switch dead since') . ' ' . $deathTime[$ip]) . ' '; } else { $deathClock = ''; } //switch location link $switchLocator = wf_Link('?module=switches&gotoswitchbyip=' . $ip, web_edit_icon(__('Go to switch'))); //add switch as dead $ajaxResult .= $devicefind . ' ' . $switchLocator . ' ' . $deathClock . $ip . ' - ' . $switch . '<br>'; } } else { $ajaxResult = __('Switches are okay, everything is fine - I guarantee'); } } $ajaxResult .= wf_delimiter() . __('Cache state at time') . ': ' . date("H:i:s"); print $ajaxResult; //darkvoid update $notifyArea = new DarkVoid(); $notifyArea->flushCache(); die; } } //load dead switches cache $dead_switches_raw = zb_StorageGet('SWDEAD'); if (!$dead_switches_raw) { $dead_switches = array(); } else { $dead_switches = unserialize($dead_switches_raw); } //create new ADcomments object if enabled if ($alterconf['ADCOMMENTS_ENABLED']) { $adcomments = new ADcomments('SWITCHES'); } $tablecells = wf_TableCell(__('ID')); $tablecells .= wf_TableCell(__('IP')); $tablecells .= wf_TableCell(__('Location')); $tablecells .= wf_TableCell(__('Active')); $tablecells .= wf_TableCell(__('Model')); $tablecells .= wf_TableCell(__('SNMP community')); $tablecells .= wf_TableCell(__('Geo location')); $tablecells .= wf_TableCell(__('Description')); $tablecells .= wf_TableCell(__('Actions')); $tablerows = wf_TableRow($tablecells, 'row1'); $lighter = 'onmouseover="this.className = \'row2\';" onmouseout="this.className = \'row3\';" '; if (!empty($allswitches)) { foreach ($allswitches as $io => $eachswitch) { if (isset($dead_switches[$eachswitch['ip']])) { if (isset($deathTime[$eachswitch['ip']])) { $obituary = __('Switch dead since') . ' ' . $deathTime[$eachswitch['ip']]; } else { $obituary = ''; } $aliveled = web_red_led($obituary); $aliveflag = '0'; $countDead++; } else { if (strpos($eachswitch['desc'], 'NP') === false) { $aliveled = web_green_led(); $aliveflag = '1'; $countAlive++; } else { $aliveled = web_yellow_led(); $aliveflag = '2'; $countNp++; } } $tablecells = wf_TableCell($eachswitch['id']); $tablecells .= wf_TableCell($eachswitch['ip'], '', '', 'sorttable_customkey="' . ip2int($eachswitch['ip']) . '"'); $tablecells .= wf_TableCell($eachswitch['location']); $tablecells .= wf_TableCell($aliveled, '', '', 'sorttable_customkey="' . $aliveflag . '"'); $tablecells .= wf_TableCell(@$modelnames[$eachswitch['modelid']]); $tablecells .= wf_TableCell($eachswitch['snmp']); $tablecells .= wf_TableCell($eachswitch['geo']); $tablecells .= wf_TableCell($eachswitch['desc']); $switchcontrols = ''; if (cfr('SWITCHESEDIT')) { $switchcontrols .= wf_Link('?module=switches&edit=' . $eachswitch['id'], web_edit_icon()); } if (cfr('SWITCHPOLL')) { if (!empty($eachswitch['snmp']) and ispos($eachswitch['desc'], 'SWPOLL')) { $switchcontrols .= ' ' . wf_Link('?module=switchpoller&switchid=' . $eachswitch['id'], wf_img('skins/snmp.png', __('SNMP query'))); $countSwpoll++; } } if ($alterconf['SWYMAP_ENABLED']) { if (!empty($eachswitch['geo'])) { $switchcontrols .= wf_Link('?module=switchmap&finddevice=' . $eachswitch['geo'], wf_img('skins/icon_search_small.gif', __('Find on map'))); $countOnMap++; } if (!empty($eachswitch['parentid'])) { $switchcontrols .= wf_Link('?module=switchmap&finddevice=' . $eachswitch['geo'] . '&showuplinks=true&traceid=' . $eachswitch['id'], wf_img('skins/ymaps/uplinks.png', __('Uplink switch'))); $countLinked++; } } if (ispos($eachswitch['desc'], 'MTSIGMON')) { $countMtsigmon++; } if (ispos($eachswitch['desc'], 'OLT')) { $countOlt++; } if ($alterconf['ADCOMMENTS_ENABLED']) { $switchcontrols .= $adcomments->getCommentsIndicator($eachswitch['id']); } if (isset($alterconf['SW_WEBNAV'])) { if ($alterconf['SW_WEBNAV']) { $switchcontrols .= ' ' . wf_tag('a', false, '', 'href="http://' . $eachswitch['ip'] . '" target="_BLANK"') . wf_img('skins/ymaps/globe.png', __('Go to the web interface')) . wf_tag('a', true); } } $tablecells .= wf_TableCell($switchcontrols); $tablerows .= wf_tag('tr', false, 'row3', $lighter); $tablerows .= $tablecells; $tablerows .= wf_tag('tr', true); $countTotal++; } } $result = wf_TableBody($tablerows, '100%', '0', 'sortable'); $result .= wf_img('skins/icon_active.gif') . ' ' . __('Alive switches') . ' - ' . ($countAlive + $countNp) . ' (' . $countAlive . '+' . $countNp . ')' . wf_tag('br'); $result .= wf_img('skins/icon_inactive.gif') . ' ' . __('Dead switches') . ' - ' . $countDead . wf_tag('br'); $result .= wf_img('skins/yellow_led.png') . ' ' . __('NP switches') . ' - ' . $countNp . wf_tag('br'); $result .= wf_img('skins/snmp.png') . ' ' . __('SWPOLL query') . ' - ' . $countSwpoll . wf_tag('br'); $result .= wf_img('skins/wifi.png') . ' ' . __('MTSIGMON devices') . ' - ' . $countMtsigmon . wf_tag('br'); $result .= wf_img('skins/pon_icon.gif') . ' ' . __('OLT devices') . ' - ' . $countOlt . wf_tag('br'); $result .= wf_img('skins/icon_search_small.gif') . ' ' . __('Placed on map') . ' - ' . $countOnMap . wf_tag('br'); $result .= wf_img('skins/ymaps/uplinks.png') . ' ' . __('Have uplinks') . ' - ' . $countLinked . wf_tag('br'); $result .= wf_tag('br') . wf_tag('b') . __('Total') . ': ' . $countTotal . wf_tag('b', true) . wf_tag('br'); return $result; }
/** * Function for getting all switches and place them to $AllSwitches */ protected function LoadAllSwitches() { $data = zb_SwitchesGetAll(); if (!empty($data)) { foreach ($data as $each) { $this->AllSwitches[$each['id']] = $each; } } }