예제 #1
0
 public function run()
 {
     $settings = $this->config->get('PLUGIN_SETTINGS');
     $msg = '';
     if (!isset($settings['ReportMetricsEmail'])) {
         return false;
     }
     $free = disk_free_space(dirname(__FILE__));
     $total = disk_total_space(dirname(__FILE__));
     $msg .= sprintf('Disk space available: %d/%d (%.2f)%%', $free, $total, $free / $total * 100) . "\n\n";
     $msg .= 'Lane status' . "\n";
     foreach ($this->config->get('LANES', array()) as $lane) {
         $sql = new SQLManager($lane['host'], $lane['type'], $lane['op'], $lane['user'], $lane['pw']);
         if (!$sql->isConnected($lane['op'])) {
             $msg .= 'OFFLINE ' . $lane['host'] . "\n";
         } else {
             $msg .= 'ONLINE ' . $lane['host'] . "\n";
         }
     }
     $msg .= "\n" . 'Lane activity' . "\n";
     $dbc = FannieDB::get($this->config->get('TRANS_DB'));
     $res = $dbc->query('
         SELECT register_no,
             COUNT(*) as activity
         FROM dlog
         GROUP BY register_no
         ORDER by register_no');
     while ($w = $dbc->fetchRow($res)) {
         $msg .= 'Lane #' . $w['register_no'] . ', ' . $w['activity'] . " records\n";
     }
     $msg .= "\n";
     $msg .= $this->archiveStatus($dbc);
     $msg .= $this->custdataStats($dbc);
     $msg .= $this->productStats($dbc);
     $dbc->selectDB($this->config->get('OP_DB'));
     $res = $dbc->query('
         SELECT COUNT(*) AS total,
             COUNT(DISTINCT userHash) AS users,
             COUNT(DISTINCT ipHash) AS hosts
         FROM usageStats
         WHERE tdate >= \'' . date('Y-m-d') . '\'');
     $row = $dbc->fetchRow($res);
     $msg .= 'Pages served: ' . $row['total'] . "\n";
     $msg .= 'Unique users: ' . $row['users'] . "\n";
     $msg .= 'Unique IPs: ' . $row['hosts'] . "\n";
     $res = $dbc->query('
         SELECT COUNT(*) AS total,
             pageName
         FROM usageStats
         WHERE tdate >= \'' . date('Y-m-d') . '\'
         GROUP BY pageName
         ORDER BY COUNT(*) DESC');
     $msg .= 'Most popular pages: ' . "\n";
     $page_list = 0;
     while ($w = $dbc->fetchRow($res)) {
         $msg .= $w['total'] . ' ' . $w['pageName'] . "\n";
         $page_list++;
         if ($page_list > 9) {
             break;
         }
     }
     $msg .= "\n";
     $LOG_MAX = 100;
     $syslog_date = date('M j ');
     $msg .= "\nLog Entries:\n";
     $logs = $this->tail(dirname(__FILE__) . '/../../../logs/fannie.log', $LOG_MAX);
     foreach ($logs as $l) {
         if (substr($l, 0, strlen($syslog_date)) != $syslog_date) {
             continue;
         }
         $msg .= $l . "\n";
     }
     $msg .= "\nError Entries:\n";
     $logs = array();
     $logs = $this->tail(dirname(__FILE__) . '/../../../logs/debug_fannie.log', $LOG_MAX);
     foreach ($logs as $l) {
         if (substr($l, 0, strlen($syslog_date)) != $syslog_date) {
             continue;
         }
         $msg .= $l . "\n";
     }
     if (class_exists('PHPMailer')) {
         $mail = new PHPMailer();
         $mail->isSMTP();
         $mail->Host = '127.0.0.1';
         $mail->Port = 25;
         if ($settings['ReportMetricsSmtpUser'] && $settings['ReportMetricsSmtpPass']) {
             $mail->SMTPAuth = true;
             $mail->Username = $settings['ReportMetricsSmtpUser'];
             $mail->Password = $settings['ReportMetricsSmtpPass'];
         } else {
             $mail->SMTPAuth = false;
         }
         if ($settings['ReportMetricsSmtpEnc']) {
             $mail->SMTPSecure = strtolower($settings['ReportMetricsSmtpEnc']);
         }
         $mail->From = '*****@*****.**';
         $mail->FromName = 'CORE Metrics Report';
         $mail->addReplyTo('*****@*****.**');
         $mail->addAddress($settings['ReportMetricsEmail']);
         $mail->isHTML(false);
         $mail->Subject = 'CORE Metrics';
         $mail->Body = $msg;
         $mail->send();
     } else {
         mail($settings['ReportMetricsEmail'], 'CORE Metrics', $msg);
     }
 }