You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/splunk/order/search.php

432 lines
13 KiB
PHTML

<?php
7 months ago
//订单号 -> IP
//
//{
// "COLI_WebCode": "JP",
// "COLI_ID": "ZPL161028068",
// "COLI_ApplyDate": "2016-04-15 23:17:20",
// "COLI_SenderIP": "116.226.169.236"
//}
//
//CHT:http://www.chinahighlights.com/api/api.php?method=order.json_by_lmr&order_id=hy161104033
//国际:http://www.viaje-a-china.com/index.php/ajax/ajax_order_datas/
//
//
$order_id = isset($_GET['order_id']) ? $_GET['order_id'] : FALSE;
$order_id = isset($_POST['order_id']) ? $_POST['order_id'] : $order_id;
//$site = isset($_GET['site']) ? $_GET['site'] : FALSE;
//$site = isset($_POST['site']) ? $_POST['site'] : $site;
$ip = '255.255.255.255';
$web_code = FALSE;
$date = date('Y-m-d h:i:s');
$host = [
'xx' => 'xx',
'jp' => 'JP',
'vc' => 'FR',
'vac' => 'ES',
'train_vac' => 'ES',
'ru' => 'RU',
'train_ru' => 'RU',
'it' => 'IT',
'train_it' => 'IT',
'cht' => 'CHT',
'ct' => 'yincheng',
'gm' => 'gm-vps',
'ah' => 'AH',
];
$host_name = [
'jp' => 'http://www.arachina.com',
'vc' => 'http://www.voyageschine.com',
'vac' => 'http://www.viaje-a-china.com',
'train_vac' => 'http://www.viaje-a-china.com',
'ru' => 'http://www.chinahighlights.ru',
'train_ru' => 'http://www.chinahighlights.ru',
'it' => 'http://www.chinahighlights.it',
'train_it' => 'http://www.chinahighlights.it',
'cht' => 'http://www.chinahighlights.com',
'ct' => 'http://www.chinatravel.com',
'gm' => 'http://www.chinahighlightstravel.de',
'ah' => 'http://www.asiahighlights.com',
];
$bf_date = date('m/d/Y:00:00:00', time() - 3600 * 24 * 90);
$af_date = date('m/d/Y:00:00:00', time() + 3600 * 24 * 90);
$order_txt = '';
$web_code = 'xx';
$order_date = '';
if ($order_id) {
//if ($site == 'ch')
8 months ago
//{
7 months ago
// $order = @file_get_contents('http://www.chinahighlights.com/api/api.php?method=order.json_by_lmr&order_id='.$order_id);
8 months ago
//}
7 months ago
//else
//{
$order = @file_get_contents('http://www.viaje-a-china.com/index.php/ajax/ajax_order_datas/' . $order_id);
//}
if ($order && $order !== 'no data') {
$order = json_decode($order);
$ip = $order->COLI_SenderIP;
if (!$ip || $ip == '159.8.126.74' || $ip == '180.140.114.208') {
$ip = null;
}
7 months ago
$web_code = $order->COLI_WebCode;
$order_date = $order->COLI_ApplyDate;
$date_time = strtotime($order->COLI_ApplyDate);
$bf_date = date('m/d/Y:00:00:00', $date_time - 3600 * 24 * 90);
$af_date = date('m/d/Y:00:00:00', $date_time + 3600 * 24 * 90);
$order_txt = $order->COLI_OrderDetailText;
8 months ago
}
7 months ago
}
7 months ago
//连接Splunk SDK
require_once '../Splunk.php';
$connect_arguments = [
'scheme' => 'https',
'host' => '192.155.250.125',
'port' => 8089,
'username' => 'haina',
'password' => '383d43GZ82[Ai',
];
$service = new Splunk_Service($connect_arguments);
$service->login();
//查询IP
//[EXA] host=ES "68.180.229.232" earliest="11/1/2016:00:00:00" latest="11/2/2016:00:00:00"
$results = [];
if ($ip) {
$search = 'search host=' . $host[strtolower($web_code)] . ' "' . $ip . '" earliest="' . $bf_date . '" latest="' . $af_date . '" NOT("/ngx_pagespeed_beacon" OR "/tourprice" OR "/include" OR "/api" OR "/ajax" OR "/image" OR "/common" OR "/ckplayer" OR ".css" OR ".js" OR ".ico" OR ".gif" OR ".jpg" OR ".png" OR ".json" OR ".xml" OR ".ttf" OR ".woff" OR ".eot" OR "webhtmllog" OR "asphttp_accept_language" OR "down.asp" OR "verifyemail" OR "test")';
//调用Spluck Search
$job = $service->getJobs()->create($search);
while (!$job->isDone()) {
$job->refresh();
8 months ago
}
7 months ago
$results = $job->getResults();
}
?><!DOCTYPE html>
<html lang="en">
7 months ago
<head>
7 months ago
<title>订单日志查询</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="/css/another/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="/js/jquery.min.js"></script>
<style type="text/css">
@media (min-width: 768px) {
.container {
width: 750px;
}
._raw {
max-width: 700px;
word-wrap: break-word;
8 months ago
}
7 months ago
.btn-default {
max-width: 700px;
}
}
@media (min-width: 992px) {
.container {
width: 970px;
8 months ago
}
7 months ago
._raw {
max-width: 920px;
word-wrap: break-word;
8 months ago
}
7 months ago
.btn-default {
max-width: 860px;
}
}
@media (min-width: 1200px) {
.container {
width: 1200px;
}
._raw {
max-width: 1100px;
word-wrap: break-word;
}
.btn-default {
max-width: 1000px;
}
}
#formbody {
margin: 20px 0;
}
#start_date,
#end_date,
#fz_name,
#dz_name,
#train_date {
width: 135px;
}
#site_code {
min-width: 200px
}
#train_date {
min-width: 152px;
}
#fix_alert {
padding-top: 8px;
padding-bottom: 8px;
}
td,
th {
font-size: 13px;
}
.pagination {
margin: 0 0 12px;
}
#ui-datepicker-div {
z-index: 1000 !important;
}
pre {
margin-top: 5px;
font-size: 0.8em;
}
.btn-default {
white-space: initial;
text-align: left;
word-wrap: break-word;
}
.tt {
color: #07c;
}
._raw a.btn-sm {
font-size: 14px;
}
</style>
</head>
<body class="container">
<div id="formbody">
<form class="form-inline" action="" method="post" id="sform">
<div class="form-group has-success">
<label class="sr-only" for="order_id">订单号</label>
<input type="text" name="order_id" class="form-control" id="order_id" placeholder="输入订单号"
value="<?php if ($order_id) {
echo ($order_id);
}
?>">
</div>
<button type="submit" class="btn btn-primary" data-loading-text="Loading..." id="btn6">查询</button>
</form>
</div>
<div class="alert alert-info" role="alert" id="fix_alert">
<?php
if ($web_code) {
echo (' [站点:' . $web_code . ']');
}
if ($order_date) {
echo (' [提交日期:' . $order_date . ']');
}
if ($order_txt) {
echo ('<pre>' . $order_txt . '</pre>');
}
//echo(' 【SPL'.$search.'】');
?>
7 months ago
</div>
<!--nav>
<ul class="pagination">
<?php
7 months ago
$page = 1;
$page_count = 10;
$prev_cls = '';
if ($page == 1) {
$prev_cls = 'disabled';
}
8 months ago
7 months ago
$next_cls = '';
if ($page == $page_count) {
$next_cls = 'disabled';
}
8 months ago
?>
7 months ago
<li class="<?php echo ($prev_cls); ?>">
<a href="#" aria-label="Previous" id="prev">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
8 months ago
<?php for ($i = 1; $i <= $page_count; $i++) {
7 months ago
$cls = '';
if ($i == $page) {
$cls = 'active';
}
8 months ago
?>
7 months ago
<li class="<?php echo ($cls); ?>"><a href="javascript:;" class="page_a" data-action="/train/china-trains/search/logs/<?php echo ($i); ?>"><?php echo ($i); ?></a></li>
<?php } ?>
<li class="<?php echo ($next_cls); ?>">
<a href="#" aria-label="Next" id="next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav-->
7 months ago
<table class="table table-bordered table-hover">
<?php
$messages = [];
$anyRows = FALSE;
$columnNames = NULL;
foreach ($results as $result) {
if ($result instanceof Splunk_ResultsFieldOrder) {
//所有字段
$columnNames = $result->getFieldNames();
//所需字段
$need_th = ['_serial', '_raw', '_time'];
//字段差集
$columnNames = array_intersect($need_th, $columnNames);
echo '<thead><tr><td colspan="3" class="tt">提示: “GET”表示正常访问“POST”表示从表单提交访问“标黄”表示订单相关的访问。</td></tr><tr>';
foreach ($columnNames as $columnName) {
echo '<th>' . htmlspecialchars($columnName) .
'</th>';
}
8 months ago
7 months ago
echo '</tr></thead>';
echo "\n";
} else if ($result instanceof Splunk_ResultsMessage) {
$messages[] = $result;
} else if (is_array($result)) {
$anyRows = TRUE;
assert($columnNames !== NULL);
echo '<tr>';
foreach ($columnNames as $columnName) {
$cellValue = array_key_exists($columnName, $result) ? $result[$columnName] : NULL;
//nginx日志
if ($columnName == '_raw') {
echo '<td><div class="_raw">';
if (is_array($cellValue)) {
$log = implode('', $cellValue);
//116.226.169.236 - - [27/Oct/2016:07:35:39 -0500] "GET / HTTP/1.1" 200 8857 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1"
//ip(1), visit(3), from(6), ua(7)
$p = '/^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s-\s-\s\[(.*)\]\s\"(.*)\"\s(\d{3})\s(\d+)\s\"(.*)\"\s\"(.*)\"$/';
preg_match($p, $log, $matches);
//print_r($matches);
if (isset($matches[3])) {
$tmp_a = explode(' ', $matches[3]);
echo '<a href="' . $host_name[strtolower($web_code)] . @$tmp_a[1] . '" class="btn btn-sm btn-primary" type="button" target="_blank"><span class="badge">visit</span> ' . urldecode($matches[3]) . '</a> &nbsp;';
}
if (isset($matches[6])) {
if ($matches[6] == '-') {
$matches[6] = '从收藏夹、历史记录或地址栏直接访问';
}
7 months ago
echo '<a href="' . $matches[6] . '" class="btn btn-sm btn-default" type="button" target="_blank"><span class="badge">from</span> ' . urldecode($matches[6]) . '</a> &nbsp;';
8 months ago
}
7 months ago
if (!isset($matches[1])) {
echo $log;
8 months ago
}
}
7 months ago
echo '</div></td>';
}
//日期
else if ($columnName == '_time') {
echo '<td>';
$time = strtotime($cellValue);
echo date('Y-m-d h:i:s', $time);
echo '</td>';
}
//splunk记录
else {
echo '<td>';
if ($cellValue !== NULL) {
if (is_array($cellValue)) {
echo '<ul>';
foreach ($cellValue as $value) {
echo '<li>' . htmlspecialchars($value) . '</li>';
}
echo '</ul>';
} else {
echo htmlspecialchars($cellValue);
}
}
7 months ago
echo '</td>';
}
}
echo '</tr>';
}
}
?>
</table>
<?php if (count($messages) > 0): ?>
<ul>
<?php
foreach ($messages as $message) {
echo '<li>[' . htmlspecialchars($message->getType()) . '] ';
echo htmlspecialchars($message->getText()) . '</li>';
}
?>
</ul>
<?php endif; ?>
<?php if (!$anyRows && (count($messages) === 0)): ?>
<p>
没有查到相关日志
</p>
<?php endif; ?>
<script type="text/javascript">
function openwindow(url, name, iWidth, iHeight) {
var url; //转向网页的地址;
var name; //网页名称,可为空;
var iWidth; //弹出窗口的宽度;
var iHeight; //弹出窗口的高度;
//window.screen.height获得屏幕的高window.screen.width获得屏幕的宽
var iTop = (window.screen.height - 30 - iHeight) / 2; //获得窗口的垂直位置;
var iLeft = (window.screen.width - 10 - iWidth) / 2; //获得窗口的水平位置;
window.open(url, name, 'height=' + iHeight + ',,innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
}
$('a.js_win').on('click', function () {
var _sn = $(this).attr('data-sn');
var _url = '/train/china-trains/search/log_data/' + _sn + '/';
openwindow(_url, "SL", 809, 500);
});
$('.page_a').on('click', function () {
$('#sform').attr('action', $(this).attr('data-action')).submit();
});
$('#prev').on('click', function () {
if (!$(this).parent('li').hasClass('disabled')) {
var curr = $('li.active').index();
$('#sform').attr('action', '/train/china-trains/search/logs/' + (curr - 1)).submit();
}
});
$('#next').on('click', function () {
if (!$(this).parent('li').hasClass('disabled')) {
var curr = $('li.active').index();
$('#sform').attr('action', '/train/china-trains/search/logs/' + (curr + 1)).submit();
}
});
$('#btn6').on('click', function () {
$(this).html('Seraching...');
$(this).prop('disabled', true);
$('#sform').submit();
})
</script>
</body>
7 months ago
</html>