public static function ajax_loadAvgSitePerf_callback() { $limit = preg_match('/^\\d+$/', $_POST['limit']) ? $_POST['limit'] : 10; $wfdb = new wfDB(); global $wpdb; $p = $wpdb->base_prefix; $rec = $wfdb->querySingleRec("select round(avg(domainLookupEnd),0) as domainLookupEnd, round(avg(connectEnd),0) as connectEnd, round(avg(responseStart),0) as responseStart, round(avg(responseEnd),0) as responseEnd, round(avg(domReady),0) as domReady, round(avg(loaded),0) as loaded from (select domainLookupEnd, connectEnd, responseStart, responseEnd, domReady, loaded from {$p}" . "wfPerfLog order by ctime desc limit %d) as T", $limit); return $rec; }
public static function getIPsGeo($IPs) { //works with int or dotted. Outputs same format it receives. $IPs = array_unique($IPs); $toResolve = array(); $db = new wfDB(); global $wpdb; $locsTable = $wpdb->base_prefix . 'wfLocs'; $IPLocs = array(); foreach ($IPs as $IP) { $isBinaryIP = !self::isValidIP($IP); if ($isBinaryIP) { $ip_printable = wfUtils::inet_ntop($IP); $ip_bin = $IP; } else { $ip_printable = $IP; $ip_bin = wfUtils::inet_pton($IP); } $row = $db->querySingleRec("select IP, ctime, failed, city, region, countryName, countryCode, lat, lon, unix_timestamp() - ctime as age from " . $locsTable . " where IP=%s", $ip_bin); if ($row) { if ($row['age'] > WORDFENCE_MAX_IPLOC_AGE) { $db->queryWrite("delete from " . $locsTable . " where IP=%s", $row['IP']); } else { if ($row['failed'] == 1) { $IPLocs[$ip_printable] = false; } else { $row['IP'] = self::inet_ntop($row['IP']); $IPLocs[$ip_printable] = $row; } } } if (!isset($IPLocs[$ip_printable])) { $toResolve[] = $ip_printable; } } if (sizeof($toResolve) > 0) { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $freshIPs = $api->call('resolve_ips', array(), array('ips' => implode(',', $toResolve))); if (is_array($freshIPs)) { foreach ($freshIPs as $IP => $value) { $IP_bin = wfUtils::inet_pton($IP); if ($value == 'failed') { $db->queryWrite("insert IGNORE into " . $locsTable . " (IP, ctime, failed) values (%s, unix_timestamp(), 1)", $IP_bin); $IPLocs[$IP] = false; } else { if (is_array($value)) { for ($i = 0; $i <= 5; $i++) { //Prevent warnings in debug mode about uninitialized values if (!isset($value[$i])) { $value[$i] = ''; } } $db->queryWrite("insert IGNORE into " . $locsTable . " (IP, ctime, failed, city, region, countryName, countryCode, lat, lon) values (%s, unix_timestamp(), 0, '%s', '%s', '%s', '%s', %s, %s)", $IP_bin, $value[3], $value[2], $value[1], $value[0], $value[4], $value[5]); $IPLocs[$IP] = array('IP' => $IP, 'city' => $value[3], 'region' => $value[2], 'countryName' => $value[1], 'countryCode' => $value[0], 'lat' => $value[4], 'lon' => $value[5]); } } } } } catch (Exception $e) { wordfence::status(2, 'error', "Call to Wordfence API to resolve IPs failed: " . $e->getMessage()); return array(); } } return $IPLocs; }
private function scan_comments_main() { $wfdb = new wfDB(); while ($elem = array_shift($this->scanQueue)) { $queueSize = sizeof($this->scanQueue); if ($queueSize > 0 && $queueSize % 1000 == 0) { wordfence::status(2, 'info', "Scanning comments with {$queueSize} left to scan."); } $blog = $elem[0]; $commentID = $elem[1]; $row = $wfdb->querySingleRec("select comment_ID, comment_date, comment_type, comment_author, comment_author_url, comment_content from " . $blog['table'] . " where comment_ID=%d", $commentID); $this->hoover->hoover($blog['blog_id'] . '-' . $row['comment_ID'], $row['comment_author_url'] . ' ' . $row['comment_author'] . ' ' . $row['comment_content']); $this->scanData[$blog['blog_id'] . '-' . $row['comment_ID']] = array('contentMD5' => md5($row['comment_content'] . $row['comment_author'] . $row['comment_author_url']), 'author' => $row['comment_author'], 'type' => $row['comment_type'] ? $row['comment_type'] : 'comment', 'date' => $row['comment_date'], 'isMultisite' => $blog['isMultisite'], 'domain' => $blog['domain'], 'path' => $blog['path'], 'blog_id' => $blog['blog_id']); $this->forkIfNeeded(); } }