Compare commits

..

60 Commits

Author SHA1 Message Date
lingel 3bc7711fe0 ppt最终上传
5 months ago
lingel 4c88920ce1 ppt更改
5 months ago
lingel 28a8bd37af 文档最终上传
5 months ago
lingel 18e64662d3 更改
5 months ago
pzthu8lr3 5e47926b92 Delete 'model/高可用分布式网关管理软件系统--讲解视频.mp4'
5 months ago
ps249eph7 cbaeab7ac4 Merge pull request '前端数据展示' (#33) from xumingyang_branch into master
5 months ago
xmy c9b6e1b156 前端
5 months ago
lyy 0239d9462b 更新数据显示优化组件,更新主备切换操作板
5 months ago
lingel 1608dd75ab 视频上传
5 months ago
lingel 2edd7b08b6 中台最终版上传
5 months ago
pf7astvk4 2d274e7798 Merge pull request '新的主动探测算法' (#32) from dongjiaqi_branch into master
5 months ago
djq 069aa4cd73 全新的主动探测算法
5 months ago
ps249eph7 3f898d4131 Merge pull request '灾备' (#31) from xumingyang_branch into master
5 months ago
xmy 9205ad7e65 灾备
5 months ago
pf7astvk4 2db7937be6 Merge pull request '修正文件路径' (#22) from liuyuyang_branch into master
5 months ago
lingel 08201469c5 Merge branch 'master' of https://bdgit.educoder.net/pf7astvk4/Nginx
5 months ago
lingel fb687b96ef 新的中台处理模块,controller_completed,
5 months ago
pf7astvk4 f05f5ae364 Merge pull request '自评报告' (#29) from dongjiaqi_branch into master
5 months ago
djq 36ec4b773d 自评报告
5 months ago
pf7astvk4 25f49838bc Merge pull request '开发文档修改调整' (#28) from dongjiaqi_branch into master
5 months ago
djq 312712f89b 开发文档修改后重提交
5 months ago
lingel f79a906ee7 11
5 months ago
lyy 2a6320ca9d 11
5 months ago
lyy f411754a28 Merge branch 'master' of https://bdgit.educoder.net/pf7astvk4/Nginx
5 months ago
pf7astvk4 fe1b2cc254 Merge pull request 'try' (#26) from dongjiaqi_branch into master
5 months ago
djq 8818d08873 try
5 months ago
lyy b6709de6e0 更新全部前端代码
5 months ago
lyy eca93ac7f1 Merge branch 'master' of https://bdgit.educoder.net/pf7astvk4/Nginx
5 months ago
lyy 152bf9a883 修正代码结构
5 months ago
ps249eph7 da16a19c33 Merge pull request '网关灾备' (#18) from xumingyang_branch into master
5 months ago
xmy b21d410226 网关灾备
5 months ago
pzthu8lr3 6933dfb58a Merge pull request '开发内容合并' (#17) from yuankaifeng_branch into master
5 months ago
pf7astvk4 e1b86f92f3 Merge pull request '新的补丁文件' (#16) from dongjiaqi_branch into master
5 months ago
djq 67e9dca506 新的补丁文件
5 months ago
ps249eph7 b8c482a8ca Merge pull request '网关灾备' (#15) from xumingyang_branch into master
5 months ago
xmy 68f57b4e5d 网关灾备
5 months ago
lyy 048b544f8e 更新所有前端代码,优化前端显示
5 months ago
lyy d00aa35bbf 更新全部前端代码,优化界面设计
5 months ago
pf7astvk4 abdc2b11b7 Merge pull request '主动探测完整' (#12) from dongjiaqi_branch into master
5 months ago
djq 981ec6f393 主动探测完整
5 months ago
djq f6da1b1c7c 主动探测完整(含前端)
5 months ago
pf7astvk4 bb3e577512 Merge pull request '主动探测后端服务器系统功能的nginx.conf 文件添加' (#11) from dongjiaqi_branch into master
6 months ago
djq 3af238a6c0 nginx.conf文件配置
6 months ago
pf7astvk4 3a2b641e7b Merge pull request '主动探测后端服务器系统功能(最终显示的前端未完善)' (#10) from dongjiaqi_branch into master
6 months ago
djq 2224d73344 主动探测后端服务器系统功能
6 months ago
pzthu8lr3 7919cc1304 Merge pull request '优化controler逻辑,优化代码结构' (#9) from yuankaifeng_branch into master
6 months ago
pzthu8lr3 ea721bd5f5 Merge pull request 'controller三个接口实现,中台对于数据库的简单管理' (#8) from yuankaifeng_branch into master
6 months ago
pzthu8lr3 ad9b6ea924 Merge pull request '更新controller的链接逻辑' (#7) from yuankaifeng_branch into master
6 months ago
pzthu8lr3 2711a6cd07 Merge pull request 'controller框架——part1' (#6) from yuankaifeng_branch into master
6 months ago
pf7astvk4 410047be56 设计规格说明书修改
6 months ago
djq 4ed5368641 设计规格说明书修改
6 months ago
djq 98ab26a113 设计规格说明书修改
6 months ago
ps249eph7 78087d6df3 nginx源码
6 months ago
xmy 34055d68ff nginx源码
6 months ago
pzthu8lr3 fae3ef71ee Merge pull request '合并主动探测模块' (#3) from yuankaifeng_branch into master
7 months ago
pkbxg3m62 ce3228ae03 111
7 months ago
lyy 104a161ff0 添加前端代码以及对应素材文件
7 months ago
pf7astvk4 0fa45ac931 5.10
7 months ago
djq 3a84999d64 日志数据分析
7 months ago
djq 3d015a6214 Init
7 months ago

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

@ -0,0 +1,363 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" rel="stylesheet" type="text/css" />
<script>
var data=[
{
message:'192.172.0.1 is Master,192.173.0.2 is Backup'
}
];
  renderEl(data.message);
paintVis(data.message);
function renderEl(arr) {
        let str = '';
        str += `
           <table>
<caption>
当前网络中网关情况:
</caption>
<thead>
<tr>
<th scope="col">服务器IP</th>
<th scope="col">服务器状态</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">${arr.substr(0,arr.indexOf("Master")-3)}</th>
<td>Master</td>
</tr>
<tr>
<th scope="row">${arr.substr(arr.indexOf("Master")+6,arr.indexOf("Backup")-3)}</th>
<td>Backup</td>
</tr>
</table>
`;
const el = document.getElementById('wrap');
        el.innerHTML = str;
}
function paintVis(arr){
var nodes = new vis.DataSet([
{ id: 1, label: 'keepalived:vrrp\n 192.168.229.130',color: {background: 'lightgreen'}},
{ id: 2, label: arr.substring(0,arr.indexOf("Master")-3),color: {background: 'lightgreen'}},
{ id: 3, label: arr.substring(arr.indexOf("Master")+6,arr.indexOf("Backup")-3),color: {background: 'grey'}},
{ id: 4, label: 'web Server\n 192.168.229.129.81',color: {background: 'lightgreen'}},
{ id: 5, label: 'web Server\n 192.168.229.129.81',color: {background: 'grey'}},
{ id: 6, label: '客户端',color: {background: 'lightgreen'} },
]);
var edges = new vis.DataSet([
{ from: 6, to: 1 , color: {color:'#00ff00'}},
{ from: 1, to: 2 , color: {color:'#00ff00'}},
{ from: 1, to: 3 , color: {color:'grey'}},
{ from: 2, to: 4 , color: {color:'#00ff00'}},
{ from: 2, to: 5 , color: {color:'#00ff00'}},
{ from: 3, to: 4 , color: {color:'grey'}},
{ from: 3, to: 5 , color: {color:'#00ff00'}},
]);
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var options = {
nodes: {
shape:'dot',
font: {
color: '#000', // 字体的颜色
size: 10 // 显示字体大小
},
scaling: {
min: 20,
max: 40 // 缩放效果比例
},
borderWidth: 1,
color: {
border: 'white',
// 若是引用图标,背景颜色
}
},
groups: {
ws: { // 系统定义的形状 dot等 这些官网都可以找到
shape: 'square',
color: 'white'
}
},
layout: {
randomSeed: 1 // 配置每次生成的节点位置都一样参数为数字1、2等
},
physics: {
// barnesHut: { gravitationalConstant: -30000 },
barnesHut: {
gravitationalConstant: 0,
springConstant: 0,
springLength: 0
},
stabilization: true
// { iterations: 2500 }
},
interaction: {
// navigationButtons: true,
hover: false, // 鼠标移过后加粗该节点和连接线
selectConnectedEdges: false, // 选择节点后是否显示连接线
hoverConnectedEdges: false, // 鼠标滑动节点后是否显示连接线
tooltipDelay: 200,
zoomView: false // 是否能缩放画布
},
edges: {
label:'Solid',
smooth: {type: "discrete"},
color: { // 连接线的样式
hover: '#848484',
inherit: 'from',
opacity: 1.0
},
shadow: true, // 连接线阴影配置
smooth: true // 是否显示方向箭头
// arrows: {to : true }//箭头指向from节点
}
};
var network = new vis.Network(container, data, options);
}
</script>
<style>
table{
width: 50%;
border-collapse: collapse;
margin: auto;
}
table caption{
font-size: large;
font-weight: bold;
margin: 1em 0;
}
th,td{
border: 1px solid #999;
text-align: center;
padding: 20px 0;
}
table thead tr{
background-color: #008c8c;
color: #fff;
}
table tbody tr:nth-child(odd){
background-color: #eee;
}
table tbody tr:hover{
background-color: #ccc;
}
table tbody tr td:first-child{
color: #f40;
}
table tfoot tr td{
text-align: right;
padding-right: 20px;
}
#dropdownMenu {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-item {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-item:hover {
background-color: #f1f1f1;
}
</style>
<header>
<div style="text-align: center; padding-right: 10px; flex: 1 1 0%;font-size: large;background-color: rgb(227, 234, 234);">主备切换</div>
</header>
<body>
<table>
<caption>
当前网络中网关情况:
</caption>
<div id="wrap"></div>
</body>
<div id="dropdownMenu" class="dropdown-content">
<a href="#" class="dropdown-item" id="toggleOpen">开启</a>
<a href="#" class="dropdown-item" id="toggleClose">关闭</a>
</div>
<h1>网络拓扑图<button id="submitBtn">提交</button></h1>
<div id="doubleClickArea">
<div id="mynetwork" style="width:auto; height:500px; border:1px solid lightgray;"></div>
</div>
<script>
var nodes = new vis.DataSet([
{ id: 1, label: 'keepalived:vrrp\n 192.168.229.130',color:'lightgreen'},
{ id: 2, label: 'nginx负载均衡\n 192.168.229.128:80',color:'lightgreen'},
{ id: 3, label: 'nginx负载均衡\n 192.168.229.129.80',color: 'grey'},
{ id: 4, label: 'web Server\n 192.168.229.129.81',color:'lightgreen'},
{ id: 5, label: 'web Server\n 192.168.229.129.81',color: 'grey'},
{ id: 6, label: '客户端',color:'lightgreen' },
]);
var edges = new vis.DataSet([
{ id: 7,from: 6, to: 1 , color: '#00ff00'},
{ id: 8,from: 1, to: 2 , color: '#00ff00'},
{ id: 9,from: 1, to: 3 , color: 'grey'},
{ id: 10,from: 2, to: 4 , color: '#00ff00'},
{ id: 11,from: 2, to: 5 , color: '#00ff00'},
{ id: 12,from: 3, to: 4 , color: 'grey'},
{ id: 13,from: 3, to: 5 , color: '#00ff00'},
]);
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var options = {
nodes: {
shape:'dot',
font: {
color: '#000', // 字体的颜色
size: 10 // 显示字体大小
},
scaling: {
min: 20,
max: 40 // 缩放效果比例
},
borderWidth: 1,
color: {
border: 'white',
// 若是引用图标,背景颜色
}
},
groups: {
ws: { // 系统定义的形状 dot等 这些官网都可以找到
shape: 'square',
color: 'white'
}
},
layout: {
randomSeed: 1 // 配置每次生成的节点位置都一样参数为数字1、2等
},
physics: {
// barnesHut: { gravitationalConstant: -30000 },
barnesHut: {
gravitationalConstant: 0,
springConstant: 0,
springLength: 0
},
stabilization: true
// { iterations: 2500 }
},
interaction: {
// navigationButtons: true,
hover: true, // 鼠标移过后加粗该节点和连接线
selectConnectedEdges: false, // 选择节点后是否显示连接线
hoverConnectedEdges: false, // 鼠标滑动节点后是否显示连接线
tooltipDelay: 200,
zoomView: false // 是否能缩放画布
},
edges: {
label:'Solid',
smooth: {type: "discrete"},
color: { // 连接线的样式
inherit: 'from',
},
shadow: false, // 连接线阴影配置
smooth: true // 是否显示方向箭头
// arrows: {to : true }//箭头指向from节点
}
};
var network = new vis.Network(container, data, options);
network.on('click', function (event) {
nodeId = event.nodes[0]; // 获取被点击的节点ID
nodeData = nodes.get(nodeId); // 根据节点ID获取节点数据
if (nodeData) {
console.log('Clicked on node: ' + nodeData.id + '\n' +
'Entity Info: ' + nodeData.label+ '\n' +
'Color Info:' + nodeData.color);
// 可以在这里添加更多的逻辑来处理点击事件
}
});
var doubleClickArea = document.getElementById('doubleClickArea');
var dropdownMenu = document.getElementById('dropdownMenu');
// 为双击区域添加双击事件监听器
doubleClickArea.addEventListener('dblclick', function(event) {
// 显示下拉菜单
var nodeToUpdate = nodes.get(nodeId);
if (nodeToUpdate.color === 'grey') {
nodeToUpdate.color = '#00ff00';
} else {
nodeToUpdate.color = 'grey';
}
nodes.update([nodeToUpdate]);
});
function updateEdgeColor() {
// 获取所有节点的颜色
for(var i=1;i<=6;i++){
for(var j=1;j<=6;j++)
{
var node1Color =nodes.get(i).color;
var node2Color =nodes.get(j).color;
var edgeColor = ((node1Color =="lightgreen") && (node2Color =="lightgreen")) ? 'green' : 'grey';
var edge = edges.get({ from: i, to: j });
if (edge) {
edge.color = { color: edgeColor };
console.log("Update")
edges.update(edge);
}
}
}
// 更新边的颜色
for(var i=0;i<=6;i++)
{
for(var j=0;j<=6;j++)
{
var edge = edges.get({ from: i, to: j });
if (edge) {
edge.color = { color: edgeColor };
console.log("Update")
edges.update(edge);
}
}
}
}
setInterval(updateEdgeColor, 3000); // 每3000毫秒3秒更新一次
var submitButton = document.getElementById('submitBtn');
// 为提交按钮添加点击事件监听器
submitButton.addEventListener('click', function() {
// 从Vis.js网络图中获取当前的nodes信息
var currentNodes = nodes.get();
// 将nodes信息转换为JSON格式
var nodesJson = JSON.stringify(currentNodes);
// 使用fetch API发送数据到后端服务器
fetch('YOUR_BACKEND_ENDPOINT', { // 替换为你的后端服务器端点
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: nodesJson
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
});
</script>

@ -0,0 +1,686 @@
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
<link rel="stylesheet" type="text/css" href="msgList.css">
<link rel="stylesheet" href="./assets/css/style.css">
<script type="text/javascript" src="./assets/js/jquery.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="./echarts.min.js"></script>
</head>
<style>
#pie {
width: 400px;
height: 400px;
}
.mainbody{
position: absolute;
left: 190px;
}
.wrap{
width: 260px;
height: 100%;
background-color: #dce0e9;
position: fixed;
}
.wrap-hidden{
transform: translateX(-150%);
}
.header{
width: 100%;
height: 65px;
background-color: #adadad;
font-size: 24px;
color: #fff;
text-align: center;
line-height: 65px;
}
.nav{
width:250px;
margin: 10px 5px 0;
}
.list{
margin-bottom: 5px;
}
.list h2{
position: relative;
padding: 15px 0;
background-color: #3889d4;
text-align: center;
font-size: 16px;
color: #fff;
transition: .5s;
}
.list h2.on{
background-color: #393c4a;
}
.list i{
position: absolute;
right: 10px;
top: 16px;
border: 8px solid transparent;
border-left-color: #fff;/*triangle*/
transform:rotate(0deg);
transform-origin: 1px 8px;
transition: .5s;
}
.list i.on{
transform:rotate(90deg);
}
.hide{
overflow: hidden;
height: 0;
transition: .5s;
}
.hide h5{
padding: 10px 0;
background-color: #282c3a;
text-align: center;
color:#fff;
border-bottom:#42495d;
div{
display: block;
}
.h1, .h2, .h3, .h4, .h5, .h6, a, abbr, body, cite, dd, dl, dt, h1, h2, h3, h4, h5, h6, iframe, input, li, object, ol, p, pre, span, ul {
font-family: 'Microsoft YaHei','SF Pro Display',Roboto,Noto,Arial,'PingFang SC',sans-serif;
}
a{
text-decoration: none;
cursor: pointer;
}
ul, li, ol, dl, dt, dd {
list-style: none;
}
div, figure, footer, header, hgroup, html, iframe, img, mark, menu, nav, object, section, span, table, tr, td, th, tbody, tfoot, thead, video {
border: 0;
margin: 0;
padding: 0;
}
.my_msg_list{
position:inherit;
margin-top: 50px;
width: 1300px;
min-height: 400px;
margin-bottom: 20px;
}
.my_msg_list_view{
position: relative;
margin-left: 100px;
background-color: #fff;
padding: 24px 16px;
-webkit-box-shadow: 0 2px 4px 0 rgba(0,0,0,0.28);
box-shadow: 0 2px 4px 0 rgba(0,0,0,0.28);
min-height: 520px;
box-sizing: border-box;
}
.my_msg_list_box{
border: 0;
margin: 0;
padding: 0;
box-sizing: border-box;
}
.my_msg_list_con{
border: 0;
margin: 0;
padding: 0;
box-sizing: border-box;
}
.my_msg_list_title{
width: 100%;
margin: 0;
font-size: 14px;
color: #3d3d3d;
margin-bottom: 8px;
display: block;
overflow: hidden;
zoom: 1;
box-sizing: border-box;
}
.fr{
float: right!important;
display: inline-block;
color: #4a90e2;
}
.line{
display: inline-block;
height: 12px;
margin: 2px 12px;
border-right: 1px solid #979797;
}
.msg_list{
padding: 0 0 0 15px;
min-height: 370px;
box-sizing: border-box;
}
.msg_list_ul{
font-size: 14px;
vertical-align: baseline;
margin: 0;
padding: 0;
}
.msg_list_ul_li{
position: relative;
padding: 16px 0;
border-bottom: 1px solid #e0e0e0;
}
.msg_type{
display: inline-block;
height: 40px;
line-height: 40px;
padding: 0 5px;
color: #4d4d4d;
font-size: 25px;
text-align: center;
background-color: #fff;
border: 1px solid #e0e0e0;
vertical-align: top;
}
.msg_info_box{
width: 100%;
color: #4d4d4d;
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
.msg_title{
display: inline-block;
width: 85%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
.options-f{
width: 16%;
height: 20px;
margin: 0;
margin-top: -20px;
padding: 0;
}
.msg_delete{
width: 10px;
height: 10px;
float: right;
}
.msg_content{
margin-top: 15px;
margin-bottom: -16px;
padding: 15px;
background-color: #f7f7f7;
font-size: 14px;
color: #4d4d4d;
line-height: 22px;
}
.page-box{
width: 100%;
margin: 32px 0 20px;
text-align: center;
border-top-color: initial;
border-right-color: initial;
border-bottom-color: initial;
border-left-color: initial;
}
.ule {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
.lie {
width: 12%;
display: inline-block;
font: 13px sans-serif;
}
.lie a {
display: block;
color: rgb(39, 124, 184);
text-align: center;
padding: 14px 70px;
text-decoration: none;
}
.lie a:hover {
background-color: #e3e3f5;
}
.ula {
width: 100%;
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
.lia {
width: 12%;
display: inline-block;
font: 13px sans-serif;
}
.lia a {
font-size: larger;
color: rgb(0, 0, 0);
text-align: center;
padding: 14px 50px;
text-decoration: none;
}
.lia a:hover {
background-color: #b7b7b7;
}
.square{
width:200px;
height:5px;
border:1px solid transparent;
background: #06b81a;
}
.modal {
display: none;
position: fixed;
z-index: 999;
left: 0;
top: 0;
width: 100px;
height: 100px;
overflow: auto;
background-color: rgba(0,0,0,0.4);
}
.modal-content {
background-color: #fefefe;
margin: 15% auto;
padding: 20px;
border: 1px solid #888;
width: 50%;
max-width: 600px; /* 限制图表的最大宽度 */
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
}
#chart-container {
width: 500px;
height: 800px;
margin: auto;
}
.circle-tag {
width: 20px;
height: 20px;
border-radius: 100%;
background-color: #3498db;
color: white;
text-align:left;
font-size: 16px;
font-family: Arial, sans-serif;
display: grid;
}
</style>
<header class="top-navigation">
<div class="container">
<a class="logo" aria-label="MDN homepage"><svg id="mdn-docs-logo" x="0" y="0" viewBox="0 0 694.9 10.4" style="enable-background:new 0 0 694.9 104.4" role="img"><title>MDN Web Docs</title>
<button title="Open main menu" type="button" class="button action has-icon main-menu-toggle" aria-haspopup="true" aria-label="Open main menu" aria-expanded="true"><span class="button-wrap"><span class="icon icon-menu "></span><span class="visually-hidden"><a href="MainPageUI.html">Open main menu</a></span></span></button>
</div>
</header>
<body>
<button id="toggleSidebar">隐藏/显示 侧边栏</button>
<div class="wrap">
<div class="header">消息过滤器</div>
<div class="nav">
<ul>
<li class="list">
<h2><i></i>服务器</h2>
<div class="hide">
<h5>北京</h5>
<h5>长沙</h5>
<h5>上海</h5>
</div>
</li>
<li class="list">
<h2><i></i>响应时间</h2>
<div class="hide">
<h5>"<=100ms"</h5>
<h5>"<=1500ms"</h5>
<h5>">1500ms"</h5>
</div>
</li>
<li class="list">
<h2><i></i>当前服务器状态</h2>
<div class="hide">
<h5>正常</h5>
<h5>受损</h5>
<h5>繁忙</h5>
</div>
</li>
<li class="list">
<h2><i></i>返回消息报头</h2>
<div class="hide">
<h5>TCP</h5>
</div>
</li>
</ul>
</div>
</div>
<script>
(function () {
var oList = document.querySelectorAll('.list h2'),
oHide = document.querySelectorAll('.hide'),
oIcon = document.querySelectorAll('.list i'),
lastIndex = 0;
for(var i=0;i<oList.length;i++){
oList[i].index = i;
oList[i].isClick = false;
oList[i].initHeight = oHide[i].clientHeight;
oHide[i].style.height = '0';
oList[i].onclick = function () {
if(this.isClick){
oHide[this.index].style.height = '0';
oIcon[this.index].className = '';
oList[this.index].className = '';
oList[this.index].isClick = false;
}
else{
oHide[lastIndex].style.height = '0';
oIcon[lastIndex].className = '';
oList[lastIndex].className = '';
oHide[this.index].style.height = '220px';
oIcon[this.index].className = 'on';
oList[this.index].className = 'on';
oList[lastIndex].isClick = false;
oList[this.index].isClick = true;
lastIndex = this.index;
}
}
}
})();
</script>
<div class="mainbody">
<div class="chart-container">
<div class="chart-card">
<h4 class="h3">消息类别统计表</h4>
<table class="card-table">
<tbody class="table-body flex-center">
<div id="graph"></div>
</tbody>
</table>
<span class="tooltip text" data-tooltip></span>
<div class="wrapper flex-center">
<div class="card-meta">
<p class="text">最近7天总共有</p>
<data class="meta-value" value="478.33">478条</data>
</div>
<div class="card-meta">
<data class="meta-value small" value="2.4">+2.4%</data>
<p class="text">from last month</p>
</div>
</div>
</div>
</div>
<div class="piechart" id="pie"></div>
<script>
</script>
<!-- 假设这是您的消息列表容器 -->
<div id="my_msg_list">
<div class="my_msg_list_view">
<div class="my_msg_list_box">
<div class="my_msg_list_con">
<div class="my_msg_list_title">
<span >消息列表:</span>
<a class="fr">清空所有消息</a>
<span class="line fr"></span>
<a class="fr">全部标记为已读</a>
</div>
<div class="ule">
<div class="lie"><a href="#home">服务器列表</a></div>
<div class="lie"><a href="#location">地区</a></div>
<div class="lie"><a href="#news">距离上次响应时间</a></div>
<div class="lie"><a href="#contact">当前服务器状态</a></div>
<div class="lie"><a href="#about">返回消息报头</a></div>
</div>
<div id="mylist"></div>
<!-- 消息列表将在这里动态生成 -->
<div class="page-box">
</div>
</div>
</div>
</div>
</div>
</div>
</html>
<script>
// 假设这是您接收到的JSON数据
var jsonData = [
{
"server": "127.0.0.1",
"location":"北京",
"responseTime": "100ms",
"status": "正常",
"protocol": "TCP",
"date": "2024-07-01",
"value":200
},
{
"server": "127.0.0.2",
"location":"上海",
"responseTime": "1300ms",
"status": "受损",
"protocol": "TCP",
"date": "2024-07-01",
"value":30
},
{
"server": "127.0.0.3",
"location":"广州",
"responseTime": "70ms",
"status": "繁忙",
"protocol": "TCP",
"date": "2024-07-01",
"value":50
}
];
var jsonData2 = [
{
"server": "127.0.0.1",
"location":"北京",
"responseTime": "70ms",
"status": "正常",
"protocol": "TCP",
"date": "2024-07-01",
"value":250
},
{
"server": "127.0.0.2",
"location":"上海",
"responseTime": "150ms",
"status": "正常",
"protocol": "TCP",
"date": "2024-07-01",
"value":70
},
{
"server": "127.0.0.3",
"location":"广州",
"responseTime": "70ms",
"status": "繁忙",
"protocol": "TCP",
"date": "2024-07-01",
"value":50
}
];
var jsonData3 = [
{
"server": "127.0.0.1",
"location":"北京",
"responseTime": "75ms",
"status": "正常",
"protocol": "TCP",
"date": "2024-07-01",
"value":300
},
{
"server": "127.0.0.2",
"location":"上海",
"responseTime": "120ms",
"status": "正常",
"protocol": "TCP",
"date": "2024-07-01",
"value":100
},
{
"server": "127.0.0.3",
"location":"广州",
"responseTime": "100ms",
"status": "正常",
"protocol": "TCP",
"date": "2024-07-01",
"value":60
}
];
// 函数用于更新消息列表
function updateMessageList(data) {
var msgListContainer = document.getElementById('mylist');
msgListContainer.innerHTML = ''; // 清空现有内容
data.forEach(function(item) {
var msgItem = document.createElement('div');
msgItem.className = 'msg_item';
msgItem.innerHTML = `
<li class="msg_list_ul_li">
<div class="ula">
<div class="lia"><a href="test.html"><div class="circle-tag"></div><span></span>${item.server}</a></div>
<div class="lia"><a href="#location">${item.location}</a></div>
<div class="lia"><a href="#news">${item.responseTime}</a></div>
<div class="lia"><a href="#contact">${item.status}</a></div>
<div class="lia"><a href="#about">${item.protocol}</a></div>
</div>
<em class="data-time" style="float: right;padding-right:10px">${item.date}</em>
</li>
`;
msgListContainer.appendChild(msgItem);
});
}
function updateGraph(data) {
var msgListContainer = document.getElementById('graph');
msgListContainer.innerHTML = ''; // 清空现有内容
data.forEach(function(item) {
var msgItem = document.createElement('div');
msgItem.className = 'msg_item';
msgItem.innerHTML = `
<tr class="table-row flex-center">
<th class="table-heading" scope="col">${item.server}</th>
<td class="table-data">
<div class="chart-bar" data-chart-bar="&{item.server}">${item.value}</div>
</td>
</tr>
`;
msgListContainer.appendChild(msgItem);
});
}
var pie = echarts.init(document.getElementById('pie'));
// 饼状图配置项
var pieOption = {
title: {
text: '数据统计饼状图'
},
tooltip: {
show: true,
trigger: "item",
backgroundColor: "#1677FF",
formatter: "{a}{b}<br/>{c}次({d}%)"
},
color: ['#3e87ff', '#65b2f3', '#b9cfec'],
series: [
{
name: '服务器名',
type: 'pie',
radius: '50%',
center: ['50%', '50%'],
// 初始化为空数组数据将根据jsonData动态设置
data: [],
itemStyle: {
normal: {
label: {
show: true
},
labelLine: {
show: true
}
},
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
// 将jsonData转换为饼状图的数据格式
function generatePieData(jsonData) {
return jsonData.map(function (item) {
return {
value: item.value,
name: item.server
};
});
}
function updatePieChart(jsonData) {
pieOption.series[0].data = generatePieData(jsonData);
pie.setOption(pieOption);
}
//侧边栏隐藏显示切换
document.addEventListener('DOMContentLoaded', function () {
var toggleSidebarButton = document.getElementById('toggleSidebar');
var sidebar = document.querySelector('.wrap');
toggleSidebarButton.addEventListener('click', function () {
sidebar.classList.toggle('wrap-hidden');
});
});
function updateAll(){
updatePieChart(jsonData);// 调用函数以更新消息列表
updateGraph(jsonData)
updateMessageList(jsonData);
setTimeout(function(){
updateAll2();
},5000);
}
function updateAll2(){
updatePieChart(jsonData2);// 调用函数以更新消息列表
updateGraph(jsonData2)
updateMessageList(jsonData2);
setTimeout(function(){
updateAll3();
},5000)
}
function updateAll3(){
updatePieChart(jsonData3);// 调用函数以更新消息列表
updateGraph(jsonData3)
updateMessageList(jsonData3);
}
updateAll();
</script>
</body>
</html>

@ -0,0 +1,132 @@
<style>
.loader {
background: #ffffff;
background: radial-gradient(#ffffff, #ffffff);
bottom: 0;
left: 0;
overflow: hidden;
position: fixed;
right: 0;
top: 0;
z-index: 99999;
}
.loader-inner {
bottom: 0;
height: 60px;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
width: 100px;
}
.loader-line-wrap {
animation:
spin 2000ms cubic-bezier(.175, .885, .32, 1.275) infinite
;
box-sizing: border-box;
height: 50px;
left: 0;
overflow: hidden;
position: absolute;
top: 0;
transform-origin: 50% 100%;
width: 100px;
}
.loader-line {
border: 4px solid transparent;
border-radius: 100%;
box-sizing: border-box;
height: 100px;
left: 0;
margin: 0 auto;
position: absolute;
right: 0;
top: 0;
width: 100px;
}
.loader-line-wrap:nth-child(1) { animation-delay: -50ms; }
.loader-line-wrap:nth-child(2) { animation-delay: -100ms; }
.loader-line-wrap:nth-child(3) { animation-delay: -150ms; }
.loader-line-wrap:nth-child(4) { animation-delay: -200ms; }
.loader-line-wrap:nth-child(5) { animation-delay: -250ms; }
.loader-line-wrap:nth-child(1) .loader-line {
border-color: hsl(0, 80%, 60%);
height: 90px;
width: 90px;
top: 7px;
}
.loader-line-wrap:nth-child(2) .loader-line {
border-color: hsl(60, 80%, 60%);
height: 76px;
width: 76px;
top: 14px;
}
.loader-line-wrap:nth-child(3) .loader-line {
border-color: hsl(120, 80%, 60%);
height: 62px;
width: 62px;
top: 21px;
}
.loader-line-wrap:nth-child(4) .loader-line {
border-color: hsl(180, 80%, 60%);
height: 48px;
width: 48px;
top: 28px;
}
.loader-line-wrap:nth-child(5) .loader-line {
border-color: hsl(240, 80%, 60%);
height: 34px;
width: 34px;
top: 35px;
}
@keyframes spin {
0%, 15% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
</style>
<div class="loader">
<div class="loader-inner">
<div class="loader-line-wrap">
<div class="loader-line"></div>
</div>
<div class="loader-line-wrap">
<div class="loader-line"></div>
</div>
<div class="loader-line-wrap">
<div class="loader-line"></div>
</div>
<div class="loader-line-wrap">
<div class="loader-line"></div>
</div>
<div class="loader-line-wrap">
<div class="loader-line"></div>
</div>
</div>
</div>
<style>
.login {
position: absolute;
top: 50%;
left: 75%;
margin: -150px 0 0 -150px;
width:300px;
height:300px;
}
</style>
<html>
<body>
<h1>welcome</h1>
</body>
<script>
setTimeout(()=>location.href="LoginUI.html",5000);
</script>
</html>

@ -0,0 +1,199 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>LoginUI</title>
<script type="text/javascript">
function submits(btn){
var userName = document.getElementById("username").value;
var pwd = document.getElementById("pwd").value;
console.log(userName)
if (userName == "admin" && pwd == "admin") {
window.location.href="MainPageUI.html";
window.event.returnValue=false;
}
else {
alert("用户名或密码不正确!");
}
}
</script>
<style>
/* 让页面所有元素的padding和margin都设置为0 */
/*{margin:0;padding:0;box-sizing:border-box;}*/
h3{
right: 0;
}
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 150px 150px;
grid-gap: 10px;
}
/* 设置背景图,字体设置为微软雅黑 */
body{background:url(bg.jpg);font-family: "微软雅黑", sans-serif;}
/* 引用图片高度设置为28px就是页面最上方像屋檐一样的黑色图 */
.headtop{background:url(dove.png);height:28px;}
/* 整个登录框的css并使用绝对定位居中 */
.login {
position: absolute;
top: 50%;
left: 75%;
margin: -150px 0 0 -150px;
width:300px;
height:300px;
}
.login h1 { color:#555555; text-shadow: 0px 10px 8px #CDC673; letter-spacing:2px;text-align:center;margin-bottom:20px; }
input{
grid-column: 2;
grid-row: 1/3;
padding:10px;
width:100%;
color:white;
margin-bottom:10px;
background-color:#555555;
border: 1px solid black;
border-radius:4px;
letter-spacing:2px;
}
.imgBox{
padding-top: 180px;
border-top: 2px solid cadetblue;
width: 100%;
height: 450px;
margin: 0 auto;
}
.imgBox img{
width: 100%;
height: 450px;
margin: 0 auto;
padding-top: 30px;
}
.img1{
display: block;
}
.img2{
display: none
}
.img3{
display: block;
}
.box1 {
grid-column: 2;
grid-row: 1/3;
}
label{
color: #ffffff;
font-weight: bold;
font-size: 20px;
margin-left: 40px;
}
.box2 {
grid-column: 1;
grid-row: 1 / 3;
}
/* 登录按钮的csscursor:pointer当鼠标移到按钮上面时变成小手形状 */
form button{
width: 107%;
padding:10px;
background-color:#CDC673;
border:1px solid black;
border-radius:4px;
cursor:pointer;
}
</style>
</head>
<body style="background-image:url('./assets/images/R-C\ \(1\).png'); background-repeat:no-repeat; background-position:center center; background-attachment:fixed; background-size:cover;">
<div class="wrapper">
<div class="box1">
<div class="headtop"></div>
<div class="login">
<h1 style="font-size: 25px;">//欢迎来到HADG的登入界面//</h1>
<h1 style="font-size: 15px;">请核实您登入的身份</h1>
<form action="" method="post">
<label for="username">用户名</label><br>
<input type="text" name="username" id="username" class="input" value="" placeholder="用户名admin"><br>
<label for="pwd">密码</label><br>
<input type="password" name="" id="pwd" class="input" value="" placeholder="密码admin">
<button type="submit" class="submit" onclick="submits(this)">开始登录</button>
</form>
<td class="login_td" align="right" width=71><a
href="RegisterUI.html"
>新用户注册</a></td>
</div>
</div>
<div class="imgBox">
<img class="img-slide img1"
src="./assets/images/img1.jpg"
alt="1"
/>
<img class="img-slide img2"
src="./assets/images/img2.jpg"
alt="2"
/>
</div>
</div>
</div>
</body>
<script type="text/javascript">
var index=0;
//效果
function ChangeImg() {
index++;
var a=document.getElementsByClassName("img-slide");
if(index>=a.length) index=0;
for(var i=0;i<a.length;i++){
a[i].style.display='none';
}
a[index].style.display='block';
}
//设置定时器,每隔两秒切换一张图片
setInterval(ChangeImg,8000);
</script>
</html>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 获取表单元素
var form = document.querySelector('.ant-form');
// 为表单添加提交事件监听器
form.addEventListener('submit', function(e) {
e.preventDefault(); // 阻止表单的默认提交行为
// 收集表单数据
var formData = {
//question_kind: document.getElementsByName('question_kind').value,
type:"login_message",
username: document.getElementById('username').value,
password: document.getElementById('password').value,
};
console.log(formData);
// 使用fetch API发送数据到后端
fetch('http://localhost:8080/xmy', {
method: 'POST', // 或者 'PUT'
headers: {
'Content-Type': 'application/json',
// 如果需要认证添加Authorization头部
// 'Authorization': 'Bearer your_token_here'
},
body: JSON.stringify(formData) // 将表单数据转换为JSON字符串
})
.then(response => response.json()) // 转换响应为JSON
.then(data => {
console.log('Success:', data);
alert('登录成功提交!');
location.href = "./MainPageUI.html";
})
.catch((error) => {
console.error('Error:', error);
alert('登录失败,请检查用户名和密码!');
});
});
});
</script>

@ -0,0 +1,339 @@
<!DOCTYPE html>
<!-- 声明文档类型-->
<html lang="en">
<!-- 确定语言形态 -->
<style>
#pie {
width: 400px;
height: 400px;
}
.downorder{
width: 100px;
position: relative;
height: auto;
margin: auto;
}
.downorder:hover a{
display: block;
}
.order{
position: relative;
text-align: center;
display: inline-block;
font-size: 16px;
padding: 15px;
background-color: rgb(1, 1, 1);
color: aliceblue;
}
.order:hover{
background-color: rgb(0, 0, 0);
color: rgb(6, 80, 238);
}
.downtext{
position: relative;
text-align: center;
display: inline-block;
font-size: 10px;
background-color: rgba(182, 182, 182,0.75);
color: aliceblue;
}
.downtext a{
/* display: block; */
display: none;
padding: 15px;
}
.downtext a:hover{
background-color: rgba(182, 182, 182,0.25);
color: rgb(58, 76, 243);
}
/* 遮罩层 */
#overlay {
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
font-size: 16px;
/* IE9以下不支持rgba模式 */
background-color: rgba(0, 0, 0, 0.5);
/* 兼容IE8及以下 */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7f000000,endColorstr=#7f000000);
display: none;
}
/* 弹出框主体 */
.popup {
background-color: #ffffff;
max-width: 400px;
min-width: 200px;
height: 240px;
border-radius: 5px;
margin: 100px auto;
text-align: center;
}
/* 弹出框的标题 */
.popup_title {
height: 60px;
line-height: 60px;
border-bottom: solid 1px #cccccc;
}
/* 弹出框的内容 */
.popup_content {
height: 50px;
line-height: 50px;
padding: 15px 20px;
}
/* 弹出框的按钮栏 */
.popup_btn {
padding-bottom: 10px;
}
/* 弹出框的按钮 */
.popup_btn button {
color: #778899;
width: 40%;
height: 40px;
cursor: pointer;
border: solid 1px #cccccc;
border-radius: 5px;
margin: 5px 10px;
color: #ffffff;
background-color: #337ab7;
}
</style>
<script type="text/javascript" src="echarts.js"></script>
<head>
<meta charset="UTF-8">
<!--控制网页的编码格式 utf-8 国际性编码-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--控制视口比例以及缩放-->
<title>首页</title>
<!-- 先引入重置样式表和公共样式表以及主页样式表 -->
<link rel="stylesheet" href="./css/index.css">
<link rel="stylesheet" href="./css/public.css">
<link rel="stylesheet" href="./css/reset.css">
<!-- 这个顺序引入更规范 -->
</head>
<body>
<!-- 这是网页的头部版心盒子 -->
<div class="header_con">
<!-- h1里面放logo哦 -->
<h1>
<img
width="150px"
height="80px"
src="./assets/images/Nginx.jpg" alt="">
</h1>
<!-- 头部右侧表单标签-->
<form action="">
<input type="text" class="search" value="SEARCH...">
<div>
<input type="button" class="btn">
</div>
</form>
</div>
<!-- 导航栏平铺部分:会显示黑色 -->
<div id="nav">
<!-- 导航栏版心部分 -->
<div class="nav_con">
<ul>
<li>
<div class="downorder">
<button class="order">
首页
</button>
<div class="downtext">
<a href="">查看主动探测</a>
<a href="">查看流量控制</a>
<a href="">查看Nginx日志</a>
</div>
</div></li>
<li>
<button class="order"
id="showPopup" onclick="showPopup()">系统设置</button>
<div id="overlay">
<div class="popup">
<p class="popup_title">系统设置</p>
<p class="popup_content">当前系统版本1.13</p>
<div class="popup_btn">
<button onclick="hidePopup()">确认</button>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
<!-- banner的平铺部分 -->
<div id="banner">
<div class="banner_con">
<a href="./index.html">
<img src="./assets/images/R-C.png"
height="466px"
width="1000px"
>
</a>
</div>
</div>
<!-- 新闻列表的版心部分 -->
<div class="news_con">
<!-- 最左侧的盒子 -->
<div class="news_l">
<h3 class="news_title">版本更新情况</h3>
<ul class="news_list">
<li>
<a>alpha 0.11 更新ui版本</a>
<span>2024-05-05</span>
</li>
<li>
<a>alpha 0.10 更新跳转其他界面逻辑</a>
<span>2024-05-03</span>
</li>
<li>
<a>alpha 0.09 更新LoginUI设计</a>
<span>1998-09-15</span>
</li>
</ul>
</div>
<!-- 中间的盒子-->
<div class="news_c">
<h3 class="news_title">服务器列表</h3>
<p class="txt1">北京 ip192.168.20.2</p>
<p class="txt1">广州 ip192.168.21.4</p>
<p class="txt1">长沙 ip192.168.23.4</p>
</div>
<!-- 右边的盒子 -->
<div class="news_r">
<h3 class="news_title">最近操作</h3>
<p class="txt3">开启主备切换服务</p>
<p class="txt3">开启Nginx服务</p>
<a href="#"><img src="./images/btn_img_05.jpg" alt=""></a>
</div>
</div>
<!-- 市场项目那一部分 -->
<div class="case_con">
<h3>当前可用服务</h3>
<div class="case_box">
<dl>
<dt><a href="DetectUI.html"><img src="./assets/images/R-C green.png" alt=""></a></dt>
<dd>查看主动探测</dd>
</dl>
<dl>
<dt><img src="./assets/images/R-C red.png" alt=""></dt>
<dd>查看流量控制</dd>
</dl>
<dl>
<dt><img src="./assets/images/R-C pink.png" alt=""></dt>
<dd>启用主备切换</dd>
</dl>
<dl>
<dt><img src="./assets/images/R-C blue.png"></dt>
<dd>查看Nginx日志</dd>
<script>
const util = require('util');
const child_process = require('child_process');
// 调用util.promisify方法返回一个promise,如const { stdout, stderr } = await exec('rm -rf build')
const exec = util.promisify(child_process.exec);
const appPath = join(__dirname, 'app');
const runClean = async function () {
// cwd指定子进程的当前工作目录 这里的rm -rf build为删除指定目录下的一个文件夹
await exec(`rm -rf build`, { cwd: appPath });
await exec(`rm -rf test`, { cwd: appPath });
runClean();
}
</script>
</dl>
</div>
</div>
<!-- 产品中心那一部分的平铺-->
<div id="links">
<!-- 这个顺序引入更规范 -->
<div class="links_con">
<!-- 版心部分 -->
<!-- 左边的盒子 -->
<div class="links_l">
<h3 class="links_title">技术支持</h3>
<ul class="links_list">
<li>
<a href="#">国防科技大学信息中心</a>
</li>
<li>
<a href="#">全军指挥控制中心</a>
</li>
<li>
<a href="#">国防科技大学网络安全小组</a>
</li>
<li>
<a href="#">软体生物开发小组</a>
</li>
<li>
<a href="#">国防科技大学软件体系结构课程</a>
</li>
</ul>
</div>
<!-- 中间的盒子 -->
<div class="links_c">
<h3 class="links_title">开发者联系方式</h3>
<ul class="links_list">
<li>
<a href="#">liuyuyang21a@gfkd.mtn</a>
</li>
<li>
<a href="#">yuankaifeng21@gfkd.mtn</a>
</li>
<li>
<a href="#">xumingyang21@gfkd.mtn</a>
</li>
<li>
<a href="#">dongjiaqi21@gfkd.mtn</a>
</li>
</ul>
</div>
<!-- 右边的盒子 -->
<div class="links_r">
<h3 class="links_title">HADG</h3>
<h3 class="links_a"> 旨在为全军指挥信息系统提供坚实保障,开发更高效的网关服务</h3>
<div class="map">
<img
width="150px"
height="100px"
src="./assets/images/nginx.gif">
</div>
</div>
</div>
</div>
<!-- 页脚 -->
<div class="footer_con">
<!-- 页脚左边的盒子 -->
<p class="footer_l">
<a href="./table.html">意见反馈</a>
<a href="#">用户协议</a>
<a href="#">交流QQ群</a>
<a href="#" class="footer-right">湘ICP备20002562号-1</a>
</p>
<!-- 页脚右边的盒子 -->
<p class="footer_r">
国防科技大学软件体系结构课程徐明洋小组开发
</p>
</div>
</body>
<script>
function showPopup(){
var overlay = document.getElementById("overlay");
overlay.style.display = "block";
}
function hidePopup(){
var overlay = document.getElementById("overlay");
overlay.style.display = "none";
}
</script>
</html>

@ -0,0 +1,183 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<!-- 引入格式文件-->
<!-- <link rel="stylesheet" href="html&css.css"> -->
</head>
<body>
<style>
*{
margin: 0px;/*所有的外边距为0*/
padding: 0px;/*所有的内边距为0*/
box-sizing: border-box;/*规定两个并排的带边框的框*/
}
table{
text-align: center;
}
body{
background: url("./assets/images/button.jpg")no-repeat center;
padding-top: 25px;
}
.rg_layout{
width: 900px;
height: 500px;
border: 8px solid #EEEEEE;/*solid 定义实线*/
background-color: white;
margin: auto;
}
.rg_left{
float: none;
text-align: center;
margin: 15px;
}
.rg_left>p:first-child{
color: #FFD026;
font-size: 20px;
}
.rg_left>p:last-child{
color: #A6A6A6;
font-size: 20px;
}
.rg_center{
float: left;
}
.rg_right{
float: none;
margin: 250px;
padding-left: 10px;
white-space:nowrap;
}
.rg_right p{
font-size: 15px;
}
.rg_right p a{
color: coral;
}
.td_left{
padding-left: 250px;
width: 100px;
text-align: center;
height: 45px;
white-space:nowrap;
}
.td_right{
padding-left: 40px;
text-align: center;
white-space:nowrap;
}
.bt_center{
padding-left: 310px;
}
#username,#real_name,#ID,#password,#tel,#birthday,#checkcode{
width: 251px;
height: 32px;
border: 1px solid #A6A6A6;
/*设置边框圆角*/
border-radius: 5px;
padding-left: 10px;
}
#checkcode{
width: 110px;
}
#img_check{
height: 32px;
vertical-align: middle;/*设置图片的位置垂直居中*/
}
#btn_sub{
width: 100px;
height: 40px;
background-color: #FFD026;
border: 1px solid #FFD026;
padding-left: 10px;
}
</style>
<div class="rg_layout">
<div class="rg_left">
<p>新用户注册</p>
<p>USER REGISTER</p>
</div>
<div class="rg_center">
<div class="rg_form">
<form class="ant-form" action="#" method="post">
<table>
<tr><!--label 标签的作用是当点击文字也会跳到文本输出框-->
<!--for属性与ID属性对应规定 label 绑定到哪个表单元素。-->
<td class="td_left"><label for="username">用户名</label> </td>
<td class="td_right"><input type="text" name="username" id="username"> </td>
</tr>
<tr>
<td class="td_left"><label for="real_name">姓名</label> </td>
<td class="td_right"><input type="text" name="real_name" id="real_name"> </td>
</tr>
<tr><!--label 标签的作用是当点击文字也会跳到文本输出框-->
<td class="td_left"><label for="ID">身份证号</label> </td>
<td class="td_right"><input type="text" name="ID" id="ID"> </td>
</tr>
<tr>
<td class="td_left"><label for="password">密码</label> </td>
<td class="td_right"><input type="password" name="password" id="password"> </td>
</tr>
<tr>
<td class="td_left"><label for="tel">再次输入密码</label> </td>
<td class="td_right"><input type="password" name="tel" id="tel"> </td>
</tr>
<tr>
<td colspan="2" align="center" class="bt_center">
<input type="submit" value="注册" id="btn_sub">
</td>
</tr>
</table>
</form>
</div>
</div>
<div class="rg_right">
<p><a href="LoginUI.html">返回登录界面</a></p>
</div>
</div>
</body>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 获取表单元素
var form = document.querySelector('.ant-form');
// 为表单添加提交事件监听器
form.addEventListener('submit', function(e) {
e.preventDefault(); // 阻止表单的默认提交行为
// 收集表单数据
var formData = {
//question_kind: document.getElementsByName('question_kind').value,
ID:document.getElementById('ID').value,
password: document.getElementById('password').value,
real_name:document.getElementById('real_name').value,
source:"frontend",
tel:document.getElementById('tel').value,
type:"register_message",
username: document.getElementById('username').value,
};
console.log(formData);
fetch('', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(formData) // 将表单数据转换为JSON字符串
})
.then(response => response.json()) // 转换响应为JSON
.then(data => {
console.log('Success:', data);
alert('反馈成功提交!');
})
.catch((error) => {
console.error('Error:', error);
alert('提交失败,请稍后重试!');
});
});
});
</script>
</html>

@ -0,0 +1,41 @@
<div class="sidebar">
<div class="menu-item">北京</div>
<div class="menu-item">长沙</div>
<div class="menu-item">上海</div>
<!-- 更多菜单项... -->
</div>
<button id="toggleIndent">切换缩进</button>
<style>
/* 初始的侧边栏样式 */
.sidebar {
width: 200px; /* 侧边栏宽度 */
background-color: #f4f4f4; /* 侧边栏背景颜色 */
padding: 10px; /* 侧边栏内边距 */
}
/* 菜单项样式 */
.menu-item {
padding: 8px 20px; /* 菜单项内边距 */
margin-bottom: 5px; /* 菜单项之间的间隔 */
background-color: #ddd; /* 菜单项背景颜色 */
cursor: pointer; /* 鼠标悬停时显示为指针 */
transition: background-color 0.3s; /* 背景颜色变化的过渡效果 */
}
/* 缩进效果的样式 */
.indented {
margin-left: 20px; /* 缩进的距离 */
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
var toggleIndentButton = document.getElementById('toggleIndent');
var menuItems = document.querySelectorAll('.menu-item');
toggleIndentButton.addEventListener('click', function () {
menuItems.forEach(function (item) {
item.classList.toggle('indented');
});
});
});
</script>

@ -0,0 +1,289 @@
/*-----------------------------------*\
#style.css
\*-----------------------------------*/
/**
* copyright 2022 codewithsadee
*/
/*-----------------------------------*\
#CUSTOM PROPERTY
\*-----------------------------------*/
:root {
/**
* colors
*/
--medium-slate-blue: hsl(240, 73%, 65%);
--space-cadet_10: hsl(226, 54%, 26%, 0.1);
--space-cadet: hsl(226, 54%, 26%);
--ghost-white: hsl(227, 69%, 97%);
--cool-gray: hsl(226, 19%, 63%);
--cultured: hsl(0, 0%, 95%);
--white: hsl(0, 0%, 100%);
/**
* typography
*/
--ff-dm-sans: 'Roboto', sans-serif;
--ff-helvetica: 'Helvetica', sans-serif;
--fs-1: 3rem;
--fs-2: 2.4rem;
--fs-3: 1.5rem;
--fs-4: 1.2rem;
--fw-500: 500;
--fw-600: 600;
--fw-700: 700;
/**
* shadow
*/
--shadow: 1px 1px 3px hsla(0, 0%, 0%, 0.15);
/**
* radius
*/
--radius-5: 5px;
--radius-15: 15px;
/**
* transition
*/
--transition-1: 0.25s ease;
--transition-2: 1s ease;
}
/*-----------------------------------*\
#RESET
\*-----------------------------------*/
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
span,
data { display: block; }
img { height: auto; }
table,
tbody,
tr,
th,
td {
all: unset;
}
html {
font-family: var(--ff-dm-sans);
font-size: 10px;
}
body {
background-color: var(--ghost-white);
color: var(--cool-gray);
font-size: 1.6rem;
padding-inline: 15px;
min-height: 100vh;
}
/*-----------------------------------*\
#REUSED STYLE
\*-----------------------------------*/
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.balance-card,
.chart-card {
width: 300px;
height: 150px;
position: relative;
padding: 5px;
border-radius: var(--radius-10);
}
.text { font-size: var(--fs-3); }
.h2 { font-size: var(--fs-2); }
/*-----------------------------------*\
#BALANCE CARD
\*-----------------------------------*/
.chart-container {
width: 100%;
max-width: 540px;
margin-inline: 100px;
left: 50px;
}
.balance-card {
background-color: var(--medium-slate-blue);
color: var(--white);
justify-content: space-between;
margin-block-end: 15px;
}
.balance-card .text {
font-weight: unset;
margin-block-end: 5px;
}
.balance-card .h2 { font-weight: var(--fw-700); }
.balance-card .logo { width: 60px; }
/*-----------------------------------*\
#CHART CARD
\*-----------------------------------*/
.chart-card {
position: relative;
margin-right: 30px;
background-color: var(--white);
}
.chart-card .h2 {
color: var(--space-cadet);
font-weight: var(--fw-500);
margin-block-end: 50px;
}
.chart-card .card-table {
display: block;
padding-block-end: 24px;
border-block-end: 1px solid var(--space-cadet_10);
margin-block-end: 24px;
}
.chart-card .table-body {
justify-content: space-evenly;
align-items: stretch;
gap: 12px;
}
.chart-card .table-row {
flex-direction: column-reverse;
justify-content: flex-start;
gap: 10px;
min-height: calc(150px + 31px);
}
.chart-card .table-heading {
color: var(--space-cadet);
font-family: var(--ff-helvetica);
font-size: var(--fs-4);
}
.chart-card .table-data {
min-width: 20px;
height: 100%;
background-color: var(--cultured);
cursor: pointer;
}
.chart-card .chart-bar {
background-color: var(--medium-slate-blue);
height: 50%;
width: 100%;
transform-origin: bottom;
transition: transform var(--transition-2);
}
.chart-card .chart-bar:hover { opacity: 0.75; }
.tooltip {
position: fixed;
top: 0;
left: 50%;
transform: translateX(-50%);
background-color: var(--white);
color: var(--space-cadet);
font-family: var(--ff-helvetica);
font-weight: var(--fw-600);
padding: 8px;
border: 1px solid var(--cultured);
border-radius: var(--radius-5);
box-shadow: var(--shadow);
pointer-events: none;
opacity: 0;
transition: var(--transition-1);
}
.tooltip.active { opacity: 1; }
.chart-card .wrapper {
justify-content: space-between;
align-items: flex-start;
}
.chart-card .meta-value {
color: var(--space-cadet);
font-weight: var(--fw-500);
margin-block-start: 5px;
}
.chart-card .meta-value:not(.small) { font-size: var(--fs-1); }
.chart-card .card-meta:last-child {
align-self: flex-end;
text-align: right;
}
.piechart{
margin-top: -180px;
left: 600px;
width: 150px;
height: 150px;
position: fixed;
padding: 5px;
border-radius: var(--radius-10);
}
/*-----------------------------------*\
#MEDIA QUERIES
\*-----------------------------------*/
/**
* responsive for large than 768px screen
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

@ -0,0 +1,4 @@
<svg width="61" height="42" viewBox="0 0 61 42" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M40.7182 41C51.9195 41 60.9999 32.0457 60.9999 21C60.9999 9.9543 51.9195 1 40.7182 1C29.5169 1 20.4365 9.9543 20.4365 21C20.4365 32.0457 29.5169 41 40.7182 41Z" fill="#1E2F65"/>
<path d="M20.4366 40.1666C31.1712 40.1666 39.8732 31.5854 39.8732 21C39.8732 10.4145 31.1712 1.83331 20.4366 1.83331C9.70207 1.83331 1 10.4145 1 21C1 31.5854 9.70207 40.1666 20.4366 40.1666Z" stroke="white" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -0,0 +1,20 @@
[
{
"server": "shanghai",
"stat": "busy",
"amount": 70,
"recentTime":70
},
{
"server": "changsha",
"stat": "busy",
"amount": 50,
"recentTime": 1300
},
{
"server": "beijing",
"stat": "busy",
"amount": 56,
"recentTime": 70
}
]

File diff suppressed because one or more lines are too long

@ -0,0 +1,149 @@
'use strict';
/**
* import json data
*/
import data from './data.json' assert { type: 'json' };
/**
* -> select all DOM elements
*/
const tooltip = document.querySelector("[data-tooltip]");
const chartBars = document.querySelectorAll("[data-chart-bar]");
/**
* add event on element
*/
const addEventOnElem = function (elem, type, callback) {
if (elem.length > 1) {
for (let i = 0; i < elem.length; i++) {
elem[i].addEventListener(type, callback);
}
} else {
elem.addEventListener(type, callback);
}
}
/**
* -> get the max day amount from data
*/
let maxDayAmount = 0;
for (let i = 0; i < data.length; i++) {
if (data[i].amount > maxDayAmount) {
maxDayAmount = data[i].amount;
}
}
/**
* -> get chart bars height as array
* -> set the height of all bars in chart
*/
const setChartBarsHeight = function (height) {
for (let i = 0; i < height.length; i++) {
chartBars[i].style.transform = `scaleY(${height[i] / 100})`;
}
}
/**
* -> get the day amount from data
* -> find the percentage of every number
* -> push all number in chartBarsHeight
*/
const charBarsHeight = [];
for (let i = 0; i < data.length; i++) {
const dayAmount = data[i].amount;
const percentOfNum = dayAmount / maxDayAmount * 100;
charBarsHeight.push(percentOfNum);
}
setChartBarsHeight(charBarsHeight);
/**
* -> get top, left, and chart bar width
* -> get tooltip height
* -> set the gap between chart bar and tooltip
* -> set the tooltip position
*/
const setTooltipPos = function (top, left, chartBarWidth) {
const tooltipHeight = tooltip.offsetHeight;
const gap = 8;
tooltip.style.top = `${top - tooltipHeight - gap}px`;
tooltip.style.left = `${left + chartBarWidth / 2}px`;
}
/**
* when chart bar is hover
* -> add active class in tooltip
* -> get chart bar top position from window
* -> get chart bar left position from window
* -> get chart bar width
* -> call setTooltipPos and pass the chart bar top,
* left position and width
*/
const chartBarOnHover = function () {
tooltip.classList.add("active");
const barTopPos = this.getBoundingClientRect().top;
const barLeftPos = this.getBoundingClientRect().left;
const barWidth = this.offsetWidth;
setTooltipPos(barTopPos, barLeftPos, barWidth);
}
addEventOnElem(chartBars, "mouseover", chartBarOnHover);
/**
* -> hide tooltip when leave cursor from chart bar
*/
const hideTooltip = function () {
tooltip.classList.remove("active");
}
addEventOnElem(chartBars, "mouseleave", hideTooltip);
/**
* -> add tooltip value when hover on any bar chart
*/
const addTooltipValue = function () {
for (let i = 0; i < data.length; i++) {
if (data[i].server === this.dataset.chartBar) {
tooltip.innerHTML = data[i].amount.toString();
break;
}
}
}
addEventOnElem(chartBars, "mouseover", addTooltipValue);

File diff suppressed because one or more lines are too long

@ -0,0 +1,235 @@
@charset "utf-8";
/* 统一板块宽度和左右居中 */
.banner_con,
.news_con,
.case_con,
.links_con,
.footer_con {
width: 1002px;
margin: 0 auto;
}
#banner {
height: 465px;
background: gray url("../images/banner1_02_02.jpg") no-repeat center;
}
#banner .banner_con {
height: 465px;
/* background: pink; */
margin: 0 auto;
}
.news_con {
height: 243px;
background: white;
}
.news_title {
/* background: cadetblue; */
font-size: 18px;
color: #3f434f;
line-height: 18px;
padding-top: 36px;
}
.news_list {
/* background: cornflowerblue; */
margin-top: 23px;
}
.news_list li {
width: 437px;
height: 25px;
background: url("../images/ico_05.jpg") no-repeat left;
padding-left: 14px;
/* margin-top: 23px;不能给li加哦 要给他爹,不然每个儿子顶部都会空出来*/
}
.news_list li a {
float: left;
font-size: 12px;
color: #565656;
line-height: 25px;
}
.news_list li span {
float: right;
color: #9a9a9a;
font-size: 12px;
}
.news_l {
width: 480px;
height: 243px;
/* background: rebeccapurple; */
float: left;
padding-left: 21px;
}
.news_c {
width: 194px;
height: 243px;
background: #f1f1f1;
float: left;
padding: 0 27px 0 20px;
}
.news_c .txt1 {
font-size: 12px;
color: #555555;
line-height: 25px;
margin-top: 34px;
/* 行高自己去量哦 */
}
.news_c .txt2 {
font-size: 12px;
color: #979797;
line-height: 25px;
margin-top: 15 px;
/* 行高自己去量哦 */
}
.news_r {
width: 180px;
height: 243px;
background: #fbfbfb url("../images/ma_05.jpg") no-repeat right bottom;
float: left;
padding: 0 38px 0 24px;
}
.news_r .txt3 {
font-size: 12px;
color: #585858;
line-height: 24px;
margin: 21px 0 22px 0;
}
.case_con {
height: 304px;
/* background: goldenrod; */
}
.case_con h3 {
font-size: 18px;
color: #3f434f;
/* background: pink; */
padding: 28px 0 18px 22px;
}
.case_con .case_box {
height: 240px;
/* background: orange; */
}
.case_box dl {
width: 210px;
/* 这是由图片尺寸为210得出的这样文本就会屈居于一处 */
/* background: burlywood; */
float: left;
margin: 0 20px;
}
/* 这里很重要!一定要设置宽高,也就是图片尺寸得出,这样以后图片更换,结构就不会乱! */
.case_box dl dt {
width: 190px;
height: 190px;
}
.case_box dl dd {
font-size: 24px;
color: #4f4f4f;
line-height: 24px;
margin-top: 13px;
float: center;
left: 10px;
}
/* 上面给dt这个容器指定了宽高现在让img跟随这个容器的宽高 */
.case_box dl dt img {
width: 100%;
height: 100%;
}
#links {
background: #e5e5e5;
}
.links_con {
height: 250px;
/* */
}
.links_con .links_title {
color: #5d5d5d;
line-height: 16px;
border-bottom: 1px solid #c1c1c1;
padding: 31px 0 11px 13px;
}
.links_con .links_l {
width: 452px;
height: 250px;
background: #e5e5e5;
float: left;
margin-left: 20px;
}
.links_con .links_list {
/* background: cornsilk; */
height: 170px;
padding-left: 5px;
padding-top: 15px;
}
.links_con .links_list li {
width: 136px;
height: 24px;
background: url("../images/btn_img_13.jpg") no-repeat left center;
font-size: 12px;
line-height: 24px;
padding-left: 13px;
float: left;
}
.links_con .links_list li a {
color: #5f5f5f;
white-space:nowrap;
}
.links_con .links_c {
width: 153px;
height: 250px;
background: #e5e5e5;
float: left;
margin: 0 50px;
}
.links_con .links_a {
width: 265px;
height: 24px;
font-size: 14px;
color: #8f8585;
}
.links_con .links_c .links_list li {
width: 130px;
}
.links_con .links_r {
width: 256px;
height: 250px;
background: #e5e5e5;
float: left;
}
.links_con .links_r .map {
text-align: center;
padding-top: 11px;
}

@ -0,0 +1,363 @@
@charset "UTF-8";
/* CSS Document */
.bg{
margin:0 auto;
width:100%;
min-height:100vh;
background:url(../images/bg2.jpg) no-repeat;
background-size: cover;
padding-top:0rem;
padding:0rem 0.2rem;
}
/*.conIn{
display:flex;
display: -webkit-flex;}*/
.title{
width:100%;
font-size:0.12rem;
line-height:0.3rem;
color:rgba(14,253,255,1);
text-align:center;
font-weight:bold;
}
.border_bg_leftTop{
position:absolute;
left:-0.008rem;
top:-0.04rem;
width:0.37rem;
height:0.05rem;
display:block;
background: url(../images/title_left_bg.png) no-repeat;
background-size:cover;}
.border_bg_rightTop{
position:absolute;
right:-0.01rem;
top:-0.01rem;
width:0.1rem;
height:0.1rem;
display:block;
background:url(../images/border_bg.jpg) no-repeat;
background-size:cover;}
.border_bg_leftBottom{
position:absolute;
left:-0.008rem;
bottom:-0.008rem;
width:0.1rem;
height:0.1rem;
display:block;
background:url(../images/border_bg.jpg) no-repeat;
background-size:cover;}
.border_bg_rightBottom{
position:absolute;
right:-0.01rem;
bottom:-0.01rem;
width:0.08rem;
height:0.08rem;
display:block;
background:url(../images/title_right_bg.png) no-repeat;
background-size:cover;}
.leftMain{
width:75%;
float:left;
padding-right:0.1rem;
padding-top:0.1rem;
}
.rightMain{
width:25%;
float:left;
padding-top:0.1rem;}
.leftMain_top{
width:100%;
padding-bottom:0.1rem;}
.leftMain_top ul{
display:flex;
display: -webkit-flex;
}
.leftMain_top ul li{
float:left;
width:25%;
padding-right:0.1rem;}
.leftMain_top ul li:last-child{
padding:0;}
.leftMain_top ul li .liIn{
border:0.008rem solid rgba(14,253,255,0.5);
width:100%;
min-height:60px;
position:relative;
padding:0.08rem 0.05rem;
}
.leftMain_top ul li .liIn h3{
font-size:0.08rem;
color:#fff;
margin-bottom:0.05rem;
}
.leftMain_top ul li .liIn .shu{
font-size:0.12rem;
color:rgba(14,253,255,1);
font-family:dig;
margin-bottom:0.02rem;}
.leftMain_top ul li .liIn .shu i{
font-size:0.04rem;
margin-left:0.06rem;
font-style:normal;}
.leftMain_top ul li .liIn .zi{
font-size:0.04rem;
color:#fff;
position:relative;
z-index:10;}
.leftMain_top ul li .liIn .zi .span1{
margin-right:0.1rem;}
.leftMain_middle{
width:100%;
padding-bottom:0.1rem;
display:flex;
display: -webkit-flex;}
.leftMain_middle .leftMain_middle_left{
width:60%;
padding-right:0.1rem;}
.leftMain_middle .leftMain_middle_left .leftMain_middle_leftIn{
border:0.008rem solid rgba(14,253,255,0.5);
width:100%;
min-height:60px;
position:relative;
padding:0.08rem 0.05rem;
}
.leftMain_middle .leftMain_middle_left .leftMain_middle_leftIn h3{
font-size:0.08rem;
color:#fff;
margin-bottom:0.05rem;
}
.leftMain_middle .leftMain_middle_left .leftMain_middle_leftIn .biaoge{
min-height:200px;}
.leftMain_middle .leftMain_middle_right{
width:40%;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn{
border:0.008rem solid rgba(14,253,255,0.5);
width:100%;
min-height:60px;
position:relative;
padding:0.08rem 0.05rem;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn h3{
font-size:0.08rem;
color:#fff;
margin-bottom:0.05rem;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge{
min-height:200px;}
/*左边中间部分排行榜*/
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai{
width:100%;
overflow:hidden;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn{
display:flex;
display: -webkit-flex;
align-items:center;
color:#fff;
font-size:0.06rem;
height:0.18rem;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left{
width:25%;
position:relative;
padding-left:0.14rem;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left .bot{
width:0.08rem;
height:0.08rem;
background:#f78cf3;
border-radius:1000px;
display:block;
position:absolute;
left:0.02rem;
top:0;
bottom:0;
margin:auto 0;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn2 .liIn_left .bot{
background:#e7feb8;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn3 .liIn_left .bot{
background:#fdea8a;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn4 .liIn_left .bot{
background:#8ff9f8;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn5 .liIn_left .bot{
background:#d890fa;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn6 .liIn_left .bot{
background:#05d1fc;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left zi{
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_line{
width:58%;
height:0.08rem;
background:rgba(255,255,255,0.5);
border-radius:2000px;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_line .line_lineIn{
width:100%;
height:0.08rem;
background:#f78cf3;
border-radius:100px;
-webkit-animation: widthMove1 2s ease-in-out ;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn2 .liIn_line .line_lineIn{
background:#e7feb8;
-webkit-animation: widthMove2 2s ease-in-out ;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn3 .liIn_line .line_lineIn{
background:#fdea8a;
-webkit-animation: widthMove3 2s ease-in-out ;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn4 .liIn_line .line_lineIn{
background:#8ff9f8;
-webkit-animation: widthMove4 2s ease-in-out ;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn5 .liIn_line .line_lineIn{
background:#d890fa;
-webkit-animation: widthMove5 2s ease-in-out ;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn6 .liIn_line .line_lineIn{
background:#05d1fc;
-webkit-animation: widthMove6 2s ease-in-out ;}
@-webkit-keyframes widthMove1 {
0% {width:0%; }
100% { width:98.5%; }
}
@-webkit-keyframes widthMove2 {
0% {width:0%; }
100% { width:88.5%; }
}
@-webkit-keyframes widthMove3 {
0% {width:0%; }
100% { width:68.5%; }
}
@-webkit-keyframes widthMove4 {
0% {width:0%; }
100% { width:40.5%; }
}
@-webkit-keyframes widthMove5 {
0% {width:0%; }
100% { width:22.5%; }
}
@-webkit-keyframes widthMove6 {
0% {width:0%; }
100% { width:10.5%; }
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .num{
width:17%;
font-family:dig;
padding-left:0.02rem;}
/*左边底部*/
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul{
display:flex;
display: -webkit-flex;
flex-wrap:wrap;
width:100%;
}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul li{
width:33.3%;
text-align:center;
margin-bottom:0.05rem;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul li .shu{
font-size:0.14rem;
color:rgba(14,253,255,1);
font-family:dig;
padding:0.12rem 0 0.02rem;
font-weight:normal;}
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul li .zi{
font-size:0.06rem;
color:#fff;}
/*右边部分*/
.rightMain .rightMain_top{
width:100%;
padding-bottom:0.1rem;
}
.rightMain .rightMain_topIn{
border:0.008rem solid rgba(14,253,255,0.5);
width:100%;
min-height:60px;
position:relative;
padding:0.08rem 0.05rem;
}
.rightMain .rightMain_topIn h3{
font-size:0.08rem;
color:#fff;
margin-bottom:0.05rem;
}
.rightMain .rightMain_topIn .biaoge{
min-height:200px;}
.rightMain .rightMain_bottom{
width:100%;
}
.rightMain .rightMain_bottomIn{
border:0.008rem solid rgba(14,253,255,0.5);
width:100%;
min-height:60px;
position:relative;
padding:0.08rem 0.05rem;
}
.rightMain .rightMain_bottomIn h3{
font-size:0.08rem;
color:#fff;
margin-bottom:0.05rem;
}
/*右下角表格*/
.rightMain .rightMain_bottomIn .biaoge{
min-height:200px;}
.rightMain .rightMain_bottomIn .biaoge_list{
overflow:hidden;
position: relative;}
.rightMain .rightMain_bottomIn .biaoge_list .biaoge_listIn .ul_list{
overflow:hidden;
position: relative;}
.rightMain .rightMain_bottomIn .biaoge_list .biaoge_listIn .ul_listIn{
-webkit-animation: 14s gundong linear infinite normal;
animation: 14s gundong linear infinite normal;
position: relative;}
@keyframes gundong {
0% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
100% {
-webkit-transform: translate3d(0, -30vh, 0);
transform: translate3d(0, -30vh, 0);
}
}
.rightMain .rightMain_bottomIn .biaoge_list ul{
display:flex;
display: -webkit-flex;
width:100%;
}
.rightMain .rightMain_bottomIn .biaoge_list .ul_title{
background: linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
background: -ms-linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
background: -webkit-linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
background: -moz-linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
}
.rightMain .rightMain_bottomIn .biaoge_list .ul_con{
border-bottom:0.008rem solid rgba(14,253,255,0.5);}
.rightMain .rightMain_bottomIn .biaoge_list ul li{
width:20%;
text-align:center;
color:#fff;
font-size:0.06rem;
height:0.2rem;
line-height:0.2rem;}
.rightMain .rightMain_bottomIn .biaoge_list ul li:frist-child{
text-align:left;}

@ -0,0 +1,138 @@
@charset "utf-8";
/* 公共区域版心宽度一样,左右居中 */
/* .header-wrap {
width: 1100px;
height: 62px;
margin: 0 auto;
} */
.header_con {
width: 1002px;
height: 100px;
/* background: pink; */
/* 左右居中 */
margin: 0 auto;
}
.header_con h1 {
width: 604px;
height: 10px;
/* background: orange; */
float: left;
padding: 34px 0 0 20px;
}
.header_con form {
width: 227px;
height: 61px;
/* background: orangered; */
float: left;
padding-top: 39px;
padding-right: 21px;
}
.header_con .search {
width: 195px;
height: 26px;
background: #f1f1f1;
border: 1px solid #e5e5e5;
/* 清除右侧边框 */
border-right: none;
float: left;
color: #888888;
}
.header_con .btn {
width: 30px;
height: 26px;
border: none;
background: #f1f1f1 url("../images/search_03.jpg") no-repeat center;
}
.header_con form div {
width: 30px;
height: 26px;
border: 1px solid #e5e5e5;
border-left: none;
float: left;
/* 给btn套盒子的时候也要加浮动 */
}
#nav {
height: 58px;
background: black;
}
#nav .nav_con {
width: 1002px;
height: 58px;
background: black;
margin: 0 auto;
}
/* 导航横向排列 */
#nav .nav_con li {
width: 498px;
height: 58px;
float: left;
background: black;
/* 左右居中 */
text-align: center;
/* 上下居中 */
line-height: 58px;
border-left: 1px solid #4a4a4a;
font-size: 12px;
}
.nav_con li a {
color: white;
}
.margin-left {
margin-left: 25px;
border-left: none!important;
}
/* 公共样式的footer */
.footer_con {
height: 82px;
/* background: #cccccc; */
}
.footer_con .footer_l {
height: 58px;
float: left;
/* background: red; */
padding-top: 24px;
}
.footer_con .footer_l a {
font-size: 12px;
float: left;
color: #868686;
border-right: 1px solid #868686;
/* padding:字体和边框的距离哈 */
padding: 0 7px;
padding-left: 15px;
}
.footer_con .footer_l .footer-right {
border-right: none!important;
}
.footer_con .footer_r {
height: 57px;
color: #8a8a8a;
font-size: 12px;
padding-top: 25px;
/* background: pink; */
padding-right: 21px;
float: right;
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,93 @@
.loader {
background: #000;
background: radial-gradient(#222, #000);
bottom: 0;
left: 0;
overflow: hidden;
position: fixed;
right: 0;
top: 0;
z-index: 99999;
}
.loader-inner {
bottom: 0;
height: 60px;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
width: 100px;
}
.loader-line-wrap {
animation:
spin 2000ms cubic-bezier(.175, .885, .32, 1.275) infinite
;
box-sizing: border-box;
height: 50px;
left: 0;
overflow: hidden;
position: absolute;
top: 0;
transform-origin: 50% 100%;
width: 100px;
}
.loader-line {
border: 4px solid transparent;
border-radius: 100%;
box-sizing: border-box;
height: 100px;
left: 0;
margin: 0 auto;
position: absolute;
right: 0;
top: 0;
width: 100px;
}
.loader-line-wrap:nth-child(1) { animation-delay: -50ms; }
.loader-line-wrap:nth-child(2) { animation-delay: -100ms; }
.loader-line-wrap:nth-child(3) { animation-delay: -150ms; }
.loader-line-wrap:nth-child(4) { animation-delay: -200ms; }
.loader-line-wrap:nth-child(5) { animation-delay: -250ms; }
.loader-line-wrap:nth-child(1) .loader-line {
border-color: hsl(0, 80%, 60%);
height: 90px;
width: 90px;
top: 7px;
}
.loader-line-wrap:nth-child(2) .loader-line {
border-color: hsl(60, 80%, 60%);
height: 76px;
width: 76px;
top: 14px;
}
.loader-line-wrap:nth-child(3) .loader-line {
border-color: hsl(120, 80%, 60%);
height: 62px;
width: 62px;
top: 21px;
}
.loader-line-wrap:nth-child(4) .loader-line {
border-color: hsl(180, 80%, 60%);
height: 48px;
width: 48px;
top: 28px;
}
.loader-line-wrap:nth-child(5) .loader-line {
border-color: hsl(240, 80%, 60%);
height: 34px;
width: 34px;
top: 35px;
}
@keyframes spin {
0%, 15% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}

@ -0,0 +1,76 @@
@charset "utf-8";
/* 重置样式表 */
* {
margin: 0;
padding: 0;
}
/* 统一页面文本 */
body {
font-size: 16px;
font-family: "微软雅黑";
}
/* 清除列表符号 */
ul,
ol,
li {
list-style: none;
}
/* 清除下划线 */
u,
a {
text-decoration: none;
}
/* 清除倾斜 */
i,
em {
font-style: normal;
}
/* 清除加粗 */
b,
strong {
font-weight: normal;
}
/* 清除文本默认大小和加粗 */
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: 16px;
font-weight: normal;
}
/* 边框清零 */
img {
border: none;
}
/* 清除聚焦时候的边框 */
input {
outline: none;
}

@ -0,0 +1,64 @@
body{
background: url("ab.jpg") no-repeat center;
background-size: cover;
height: 100vh;
width: 100%;
}
.login{
color: #988fc7;
float: right;
width: 100px;
height: 40px;
border-radius: 50%;
justify-content: center;
align-items: center;
transition: 0.4s;
}
.search-box{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
background:#2f3640;
height: 38px;
border-radius: 60px;
padding: 10px;
}
.search-box:hover > .search-txt{
width: 240px;
padding: 0 6px;
}
.search-box:hover > .search-btn{
background: white;
}
.search-btn{
color: #988fc7;
float: right;
width: 40px;
height: 40px;
border-radius: 50%;
background: #2f3640;
display: flex;
justify-content: center;
align-items: center;
transition: 0.4s;
}
.search-txt{
border:none;
background: none;
outline: none;
float: left;
padding: 0;
color: white;
font-size: 16px;
transition: 0.4s;
line-height: 40px;
width: 0px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1006 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,669 @@
<!doctype html>
<html>
<head>
<!--更多资源https://gitee.com/iGaoWei/big-data-view -->
<meta charset="utf-8">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>酷炫智能大屏数据中心</title>
<!--大屏-->
<link type="text/css" href="css/public2.css" rel="stylesheet">
<link type="text/css" href="css/icon.css" rel="stylesheet">
<link type="text/css" href="css/index2.css" rel="stylesheet">
<script type="text/javascript">
document.documentElement.style.fontSize = document.documentElement.clientWidth /768*100 + 'px';
</script>
<script src="js/echarts.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<div class="bg">
<div class="title">HADG数据分析中心<button type="button" class="refresh-button" onclick="location.reload();"></button></div>
<div class="leftMain">
<div class="leftMain_top">
<div id="mytitle"></div>
</div>
<div class="leftMain_middle">
<div class="leftMain_middle_left">
<div class="leftMain_middle_leftIn">
<h3>系统处理信息数量统计图</h3>
<!-- 为ECharts准备一个具备大小宽高的Dom -->
<div class="biaoge" style="width:100%; height:25vh" id="chartmain"></div>
<script type="text/javascript">
//window.onload = function () {
//指定图表的配置项和数据
//};
</script>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</div>
<div class="leftMain_middle_right">
<div class="leftMain_middle_rightIn">
<h3>服务器错误率情况</h3>
<div class="biaoge biaoge_pai" style="width:100%; height:25vh">
<div class="biaoge_paiIn">
<ul>
<div id="mylist"></div>
</ul>
</div>
</div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</div>
</div>
<div class="leftMain_middle">
<div class="leftMain_middle_left">
<div class="leftMain_middle_leftIn">
<h3>服务器响应时间波动情况</h3>
<div class="biaoge" style="width:100%; height:25vh">
<canvas id="chartmain_zhe"></canvas>
</div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</div>
<div class="leftMain_middle_right">
<div class="leftMain_middle_rightIn">
<h3>服务器存活情况</h3>
<div class="biaoge biaoge_bi" style="width:100%; height:25vh">
<div class="biaoge" style="width:100%; height:30vh" id="chartmain_bing2"></div>
</div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</div>
</div>
</div>
<di class="rightMain">
<div class="rightMain_top">
<div class="rightMain_topIn">
<h3></h3>
<div class="biaoge" style="width:100%; height:30vh" id="chartmain_bing"></div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</div>
<div class="rightMain_bottom">
<div class="rightMain_bottomIn">
<h3>最近处理消息简报</h3>
<div class="biaoge biaoge_list" style="width:100%; height:36vh">
<div class="biaoge_listIn">
<ul class="ul_title">
<li>服务器名</li>
<li>地区</li>
<li>报文格式</li>
<li>响应时间</li>
</ul>
<div class="ul_list">
<div class="ul_listIn">
<ul class="ul_con">
<li>127.0.0.1</li>
<li>北京</li>
<li>TCP</li>
<li>110ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.2</li>
<li>广州</li>
<li>TCP</li>
<li>150ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.2</li>
<li>广州</li>
<li>TCP</li>
<li>144ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.3</li>
<li>上海</li>
<li>TCP</li>
<li>220ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.1</li>
<li>北京</li>
<li>TCP</li>
<li>70ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.3</li>
<li>上海</li>
<li>TCP</li>
<li>170ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.2</li>
<li>广州</li>
<li>TCP</li>
<li>110ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.3</li>
<li>上海</li>
<li>TCP</li>
<li>310ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.1</li>
<li>北京</li>
<li>TCP</li>
<li>120ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.3</li>
<li>上海</li>
<li>TCP</li>
<li>580ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.2</li>
<li>广州</li>
<li>TCP</li>
<li>110ms</li>
</ul>
<ul class="ul_con">
<li>127.0.0.2</li>
<li>广州</li>
<li>TCP</li>
<li>70ms</li>
</ul>
</div>
</div>
<div style="clear:both;"></div>
</div>
<!--大屏-->
<!--数字增长累加动画-->
<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script src="js/jquery.numscroll.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
// var jsonData;
// function a(){
// jsonData='aaaa';
// }
// setInterval(a,1000);
// console.log(jsonData);
//document.addEventListener('DOMContentLoaded', function() {
// 获取表单元素
// window.setInterval(myFunction,5000);
//     function myFunction(){
//         fetch('http://localhost:8080/aaa', {
//             method: 'POST', // 或者 'PUT'
//             headers: {
//                 'Content-Type': 'application/json',
//                 // 如果需要认证添加Authorization头部
//                 // 'Authorization': 'Bearer your_token_here'
//             },
//             body: 'abc' // 将表单数据转换为JSON字符串
//         })
//         .then(response => {return response.json()}) // 转换响应为JSON
//         .then(data => {
//             var jsonData=data;
// console.log(jsonData)
//         })
//     }
// })
var jsonData1={ AveSurRate:0.71,messageCount:2980,//平均存活度
TimeArray:['6.17', '6.18', '6.19', '6.20', '6.21', '6.22', '6.23', '6.24', '6.25', '6.26', '6.27', '6.28', '6.29', '6.30', '7.1'],//系统处理信息数量统计图横轴
DataArray:[220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 150],//系统处理信息数量统计图数据
data1:[//错误率
{value: 0.1, name: '北京'},
{value: 0.6, name: '广州'},
{value: 0.1, name: '长沙'},
{value: 0.2, name: '上海'},
],
data2:[//存活情况
{value: 0.2, name: '良好'},
{value: 0.2, name: '一般'},
{value: 0.3, name: '差'},
{value: 0.3, name: '极差'},
],
data:{
labels: ['16:00', '16:10', '16:20', '16:30', '16:40', '16:50'], // 服务器响应时间波动情况X轴标签
datasets: [//服务器响应时间波动情况数据信息
{
label: '127.0.0.1', // 数据集名称
data: [100, 70, 70, 60, 77, 79], // 数据集数据
},
{
label: '127.0.0.2',
data: [1300, 1300, 1500, 100, 70, 150],
},
{
label: '127.0.0.3',
data: [70, 80, 80, 100, 110, 70],
}]
}
};
var jsonData2={ AveSurRate:0.75,messageCount:3010,//平均存活度
TimeArray:['6.17', '6.18', '6.19', '6.20', '6.21', '6.22', '6.23', '6.24', '6.25', '6.26', '6.27', '6.28', '6.29', '6.30', '7.1'],//系统处理信息数量统计图横轴
DataArray:[220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 350],//系统处理信息数量统计图数据
data1:[//错误率
{value: 0.3, name: '北京'},
{value: 0.4, name: '广州'},
{value: 0.1, name: '长沙'},
{value: 0.2, name: '上海'},
],
data2:[//存活情况
{value: 0.3, name: '良好'},
{value: 0.2, name: '一般'},
{value: 0.1, name: '差'},
{value: 0.2, name: '极差'},
],
data:{
labels: ['16:10', '16:20', '16:30', '16:40', '16:50','17:00'], // 服务器响应时间波动情况X轴标签
datasets: [//服务器响应时间波动情况数据信息
{
label: '127.0.0.1', // 数据集名称
data: [70, 70, 60, 77, 79,80], // 数据集数据
},
{
label: '127.0.0.2',
data: [1300, 1500, 100, 70, 150,170],
},
{
label: '127.0.0.3',
data: [80, 80, 100, 110, 70,100],
}]
}
};
function paintchartmain(jsonData){
console.log('paintchartmain')
var dataAxis = jsonData.TimeArray;
var data = jsonData.DataArray;
var yMax = 500;
var dataShadow = [];
for (var i = 0; i < data.length; i++) {
dataShadow.push(yMax);
}
option = {
title: {
text: '',
subtext: ''
},
grid:{
x:40,
y:40,
x2:20,
y2:20,
},
xAxis: {
data: dataAxis,
axisLabel: {
/*inside: true,*/
interval:0,
textStyle: {
color: '#fff',
fontSize: 12
}
},
axisTick: {
show: false,
},
axisLine: {
show: true,
symbol:['none', 'arrow'],
symbolOffset: 12,
lineStyle:{
color: '#fff',
}
},
z: 10
},
yAxis: {
type: 'value',
name: '条数:条',
axisLine: {
show: true,
symbol: ['none', 'arrow'],
symbolOffset: 12,
lineStyle:{
color: '#fff',
}
},
axisTick: {
show: false
},
axisLabel: {
textStyle: {
color: '#fff',
fontSize: 12
}
}
},
dataZoom: [
{
type: 'inside'
}
],
series: [
{ // For shadow
type: 'bar',
itemStyle: {
color: 'rgba(0,0,0,0.05)'
},
barGap: '-100%',
barCategoryGap: '40%',
data: dataShadow,
animation: false
},
{
type: 'bar',
itemStyle: {
color: new echarts.graphic.LinearGradient(
0, 0, 0, 1,
[
{offset: 0, color: '#0efdff'},
{offset: 0.5, color: '#188df0'},
{offset: 1, color: '#188df0'}
]
)
},
emphasis: {
itemStyle: {
color: new echarts.graphic.LinearGradient(
0, 0, 0, 1,
[
{offset: 0, color: '#2378f7'},
{offset: 0.7, color: '#2378f7'},
{offset: 1, color: '#0efdff'}
]
)
}
},
data: data
}
]
};
// Enable data zoom when user click bar.
/*var zoomSize = 6;
myChart.on('click', function (params) {
console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
myChart.dispatchAction({
type: 'dataZoom',
startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
endValue: dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
});
});*/
//获取dom容器
var myChart = echarts.init(document.getElementById('chartmain'));
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
//console.log(jsonData.data);
function paintchartmainbing(jsonData){
var ctx = document.getElementById('chartmain_zhe').getContext('2d');
myChart = new Chart(ctx, {
type: 'line', // 图表类型
data: jsonData.data, // 传递数据
options: {
scales: {
y: {
beginAtZero: false // Y轴是否从0开始
}
},
responsive: true, // 响应式图表
maintainAspectRatio: false // 保持宽高比
}
});
//获取dom容器
option = {
title: {
text: '数据情况统计',
subtext: '',
left: 'right',
textStyle: {
color: '#fff',
fontSize: 12
}
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
// orient: 'vertical',
// top: 'middle',
type: 'scroll',
orient: 'vertical',
right: 10,
top: 40,
bottom: 20,
left: 'right',
data: ['西凉', '益州', '兖州', '荆州', '幽州'],
textStyle: {
color: '#fff',
fontSize: 12
}
},
grid:{
x:'-10%',
y:40,
x2:20,
y2:20,
},
color : [ '#09d0fb', '#f88cfb', '#95f8fe', '#f9f390', '#ecfeb7' ],
series: [
{
type: 'pie',
radius: '65%',
center: ['50%', '50%'],
selectedMode: 'single',
data: jsonData.data1,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
//获取dom容器
myChart1 = echarts.init(document.getElementById('chartmain_bing'));
// 使用刚指定的配置项和数据显示图表。
myChart1.setOption(option);
setTimeout(function(){
myChart.destroy();
},8000);
}
function paintchartmainbing2(jsonData){
option2 = {
title: {
text: '',
subtext: '',
left: 'right',
textStyle: {
color: '#fff',
fontSize: 12
}
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
// orient: 'vertical',
// top: 'middle',
type: 'scroll',
orient: 'vertical',
right: 10,
top: 40,
bottom: 20,
left: 'right',
data: ['西凉', '益州', '兖州', '荆州', '幽州'],
textStyle: {
color: '#fff',
fontSize: 12
}
},
grid:{
x:'-10%',
y:40,
x2:20,
y2:20,
},
color : [ '#09d0fb', '#f88cfb', '#95f8fe', '#f9f390', '#ecfeb7' ],
series: [
{
type: 'pie',
radius: '65%',
center: ['50%', '50%'],
selectedMode: 'single',
data: jsonData.data2,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
//获取dom容器
myChart2 = echarts.init(document.getElementById('chartmain_bing2'));
// 使用刚指定的配置项和数据显示图表。
myChart2.setOption(option2);
}
$(".shu1").numScroll();
$(".shu2").numScroll();
$(".shu3").numScroll();
$(".shu4").numScroll();
$(".shu5").numScroll();
$(".shu6").numScroll();
function updateMessageList(data) {
var msgListContainer = document.getElementById('mylist');
msgListContainer.innerHTML = ''; // 清空现有内容
data.forEach(function(item) {
var msgItem = document.createElement('div');
msgItem.className = 'msg_item';
msgItem.innerHTML = `
<li>
<div class="liIn">
<div class="liIn_left"><span class="bot"></span><span class="zi">${item.name}</span></div>
<div class="liIn_line"><div class="line_lineIn" style="width:98.5%;"></div></div>
<p class="num">${item.value}</p>
</div>
</li>
`;
msgListContainer.appendChild(msgItem);
});
}
function updatetitle(jsonData){
let str='';
str+=`
<div class="leftMain_topIn">
<ul>
<li>
<div class="liIn">
<h3>当前系统版本</h3>
<p class="shu"><span class="shu1">1.15</span><i>version</i></p>
<div class="zi"><span class="span1"></span><span></span></div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</li>
<li>
<div class="liIn">
<h3>已连接服务器数量</h3>
<p class="shu"><span class="shu2">5</span><i></i></p>
<div class="zi"><span class="span1"></span><span></span></div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</li>
<li>
<div class="liIn">
<h3>已处理消息总条数</h3>
<p class="shu"><span class="shu3">${jsonData.messageCount}</span><i></i></p>
<div class="zi"><span class="span1"></span><span></span></div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</li>
<li>
<div class="liIn">
<h3>系统活跃度</h3>
<p class="shu"><span class="shu4">${jsonData.AveSurRate}</span><i></i></p>
<div class="zi"><span class="span1"></span><span></span></div>
<span class="border_bg_leftTop"></span>
<span class="border_bg_rightTop"></span>
<span class="border_bg_leftBottom"></span>
<span class="border_bg_rightBottom"></span>
</div>
</li>
</ul>
</div>
`;
const el = document.getElementById('mytitle');
        el.innerHTML = str;
}
function paintall()
{
console.log("test");
paintchartmain(jsonData1);
paintchartmainbing(jsonData1);
paintchartmainbing2(jsonData1);
updateMessageList(jsonData1.data1);
updatetitle(jsonData1);
setTimeout(function(){
paintall2();
},8000)
}
function paintall2()
{
console.log("test");
paintchartmain(jsonData2);
paintchartmainbing(jsonData2);
paintchartmainbing2(jsonData2);
updateMessageList(jsonData2.data1);
updatetitle(jsonData2);
}
paintall();
// setInterval(paintall,3000);
/*$(".num2").numScroll({
time:5000
});*/
</script>
<!--大屏-->
</body>
</html>

File diff suppressed because one or more lines are too long

@ -0,0 +1,275 @@
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export * from './src/echarts';
export * from './src/export';
import './src/component/dataset';
// ----------------------------------------------
// All of the modules that are allowed to be
// imported are listed below.
//
// Users MUST NOT import other modules that are
// not included in this list.
// ----------------------------------------------
// ----------------
// Charts (series)
// ----------------
// All of the series types, for example:
// chart.setOption({
// series: [{
// type: 'line' // or 'bar', 'pie', ...
// }]
// });
import './src/chart/bar';
import './src/chart/boxplot';
import './src/chart/candlestick';
import './src/chart/custom';
import './src/chart/effectScatter';
import './src/chart/funnel';
import './src/chart/gauge';
import './src/chart/graph';
import './src/chart/heatmap';
import './src/chart/line';
import './src/chart/lines';
import './src/chart/map';
import './src/chart/parallel';
import './src/chart/pictorialBar';
import './src/chart/pie';
import './src/chart/radar';
import './src/chart/sankey';
import './src/chart/scatter';
import './src/chart/sunburst';
import './src/chart/themeRiver';
import './src/chart/tree';
import './src/chart/treemap';
// -------------------
// Coordinate systems
// -------------------
// All of the axis modules have been included in the
// coordinate system module below, do not need to
// make extra import.
// `cartesian` coordinate system. For some historical
// reasons, it is named as grid, for example:
// chart.setOption({
// grid: {...},
// xAxis: {...},
// yAxis: {...},
// series: [{...}]
// });
import './src/component/grid';
// `polar` coordinate system, for example:
// chart.setOption({
// polar: {...},
// radiusAxis: {...},
// angleAxis: {...},
// series: [{
// coordinateSystem: 'polar'
// }]
// });
import './src/component/polar';
// `geo` coordinate system, for example:
// chart.setOption({
// geo: {...},
// series: [{
// coordinateSystem: 'geo'
// }]
// });
import './src/component/geo';
// `singleAxis` coordinate system (notice, it is a coordinate system
// with only one axis, work for chart like theme river), for example:
// chart.setOption({
// singleAxis: {...}
// series: [{type: 'themeRiver', ...}]
// });
import './src/component/singleAxis';
// `parallel` coordinate system, only work for parallel series, for example:
// chart.setOption({
// parallel: {...},
// parallelAxis: [{...}, ...],
// series: [{
// type: 'parallel'
// }]
// });
import './src/component/parallel';
// `calendar` coordinate system. for example,
// chart.setOptionp({
// calendar: {...},
// series: [{
// coordinateSystem: 'calendar'
// }]
// );
import './src/component/calendar';
// ------------------
// Other components
// ------------------
// `graphic` component, for example:
// chart.setOption({
// graphic: {...}
// });
import './src/component/graphic';
// `toolbox` component, for example:
// chart.setOption({
// toolbox: {...}
// });
import './src/component/toolbox';
// `tooltip` component, for example:
// chart.setOption({
// tooltip: {...}
// });
import './src/component/tooltip';
// `axisPointer` component, for example:
// chart.setOption({
// tooltip: {axisPointer: {...}, ...}
// });
// Or
// chart.setOption({
// axisPointer: {...}
// });
import './src/component/axisPointer';
// `brush` component, for example:
// chart.setOption({
// brush: {...}
// });
// Or
// chart.setOption({
// tooltip: {feature: {brush: {...}}
// })
import './src/component/brush';
// `title` component, for example:
// chart.setOption({
// title: {...}
// });
import './src/component/title';
// `timeline` component, for example:
// chart.setOption({
// timeline: {...}
// });
import './src/component/timeline';
// `markPoint` component, for example:
// chart.setOption({
// series: [{markPoint: {...}}]
// });
import './src/component/markPoint';
// `markLine` component, for example:
// chart.setOption({
// series: [{markLine: {...}}]
// });
import './src/component/markLine';
// `markArea` component, for example:
// chart.setOption({
// series: [{markArea: {...}}]
// });
import './src/component/markArea';
// `legend` component scrollable, for example:
// chart.setOption({
// legend: {type: 'scroll'}
// });
import './src/component/legendScroll';
// `legend` component not scrollable. for example:
// chart.setOption({
// legend: {...}
// });
import './src/component/legend';
// `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.
import './src/component/dataZoom';
// `dataZoom` component providing drag, pinch, wheel behaviors
// inside coodinate system, for example:
// chart.setOption({
// dataZoom: {type: 'inside'}
// });
import './src/component/dataZoomInside';
// `dataZoom` component providing a slider bar, for example:
// chart.setOption({
// dataZoom: {type: 'slider'}
// });
import './src/component/dataZoomSlider';
// `dataZoom` component including both `visualMapContinuous` and `visualMapPiecewise`.
import './src/component/visualMap';
// `visualMap` component providing continuous bar, for example:
// chart.setOption({
// visualMap: {type: 'continuous'}
// });
import './src/component/visualMapContinuous';
// `visualMap` component providing pieces bar, for example:
// chart.setOption({
// visualMap: {type: 'piecewise'}
// });
import './src/component/visualMapPiecewise';
// -----------------
// Render engines
// -----------------
// Provide IE 6,7,8 compatibility.
import 'zrender/src/vml/vml';
// Render via SVG rather than canvas.
import 'zrender/src/svg/svg';

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,84 @@
/*!
* jquery.numscroll.js -- 数字滚动累加动画插件 (Digital rolling cumulative animation)
* version 1.0.0
* 2018-09-22
* author: KevinTseng < 921435247@qq.com@qq.com >
* 文档: https://github.com/chaorenzeng/jquery.numscroll.js.git
* QQ交流群: 739574382
*/
(function($) {
function isInt(num) {
//作用:是否为整数
//返回:true是 false否
var res = false;
try {
if(String(num).indexOf(".") == -1 && String(num).indexOf(",") == -1) {
res = parseInt(num) % 1 === 0 ? true : false;
}
} catch(e) {
res = false;
}
return res;
}
function isFloat(num) {
//作用:是否为小数
//返回:小数位数(-1不是小数)
var res = -1;
try {
if(String(num).indexOf(".") != -1) {
var index = String(num).indexOf(".") + 1; //获取小数点的位置
var count = String(num).length - index; //获取小数点后的个数
if(index > 0) {
res = count;
}
}
} catch(e) {
res = -1;
}
return res;
}
$.fn.numScroll = function(options) {
var settings = $.extend({
'time': 1500,
'delay': 0
}, options);
return this.each(function() {
var $this = $(this);
var $settings = settings;
var num = $this.attr("data-num") || $this.text(); //实际值
var temp = 0; //初始值
$this.text(temp);
var numIsInt = isInt(num);
var numIsFloat = isFloat(num);
var step = (num / $settings.time) * 10; //步长
setTimeout(function() {
var numScroll = setInterval(function() {
if(numIsInt) {
$this.text(Math.floor(temp));
} else if(numIsFloat != -1) {
$this.text(temp.toFixed(numIsFloat));
} else {
$this.text(num);
clearInterval(numScroll);
return;
}
temp += step;
if(temp > num) {
$this.text(num);
clearInterval(numScroll);
}
}, 1);
}, $settings.delay);
});
};
})(jQuery);

@ -0,0 +1,207 @@
div{
display: block;
}
.h1, .h2, .h3, .h4, .h5, .h6, a, abbr, body, cite, dd, dl, dt, h1, h2, h3, h4, h5, h6, iframe, input, li, object, ol, p, pre, span, ul {
font-family: 'Microsoft YaHei','SF Pro Display',Roboto,Noto,Arial,'PingFang SC',sans-serif;
}
a{
text-decoration: none;
cursor: pointer;
}
ul, li, ol, dl, dt, dd {
list-style: none;
}
div, figure, footer, header, hgroup, html, iframe, img, mark, menu, nav, object, section, span, table, tr, td, th, tbody, tfoot, thead, video {
border: 0;
margin: 0;
padding: 0;
}
.my_msg_list{
position:inherit;
margin-top: 50px;
width: 1300px;
min-height: 400px;
margin-bottom: 20px;
}
.my_msg_list_view{
position: relative;
margin-left: 100px;
background-color: #fff;
padding: 24px 16px;
-webkit-box-shadow: 0 2px 4px 0 rgba(0,0,0,0.28);
box-shadow: 0 2px 4px 0 rgba(0,0,0,0.28);
min-height: 520px;
box-sizing: border-box;
}
.my_msg_list_box{
border: 0;
margin: 0;
padding: 0;
box-sizing: border-box;
}
.my_msg_list_con{
border: 0;
margin: 0;
padding: 0;
box-sizing: border-box;
}
.my_msg_list_title{
width: 100%;
margin: 0;
font-size: 14px;
color: #3d3d3d;
margin-bottom: 8px;
display: block;
overflow: hidden;
zoom: 1;
box-sizing: border-box;
}
.fr{
float: right!important;
display: inline-block;
color: #4a90e2;
}
.line{
display: inline-block;
height: 12px;
margin: 2px 12px;
border-right: 1px solid #979797;
}
.msg_list{
padding: 0 0 0 15px;
min-height: 370px;
box-sizing: border-box;
}
.msg_list_ul{
font-size: 14px;
vertical-align: baseline;
margin: 0;
padding: 0;
}
.msg_list_ul_li{
position: relative;
padding: 16px 0;
border-bottom: 1px solid #e0e0e0;
}
.msg_type{
display: inline-block;
height: 40px;
line-height: 40px;
padding: 0 5px;
color: #4d4d4d;
font-size: 25px;
text-align: center;
background-color: #fff;
border: 1px solid #e0e0e0;
vertical-align: top;
}
.msg_info_box{
width: 100%;
color: #4d4d4d;
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
.msg_title{
display: inline-block;
width: 85%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
.options-f{
width: 16%;
height: 20px;
margin: 0;
margin-top: -20px;
padding: 0;
}
.msg_delete{
width: 10px;
height: 10px;
float: right;
}
.msg_content{
margin-top: 15px;
margin-bottom: -16px;
padding: 15px;
background-color: #f7f7f7;
font-size: 14px;
color: #4d4d4d;
line-height: 22px;
}
.page-box{
width: 100%;
margin: 32px 0 20px;
text-align: center;
border-top-color: initial;
border-right-color: initial;
border-bottom-color: initial;
border-left-color: initial;
}
.ule {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
.lie {
width: 15%;
display: inline-block;
font: 13px sans-serif;
}
.lie a {
white-space:nowrap;
display: block;
color: rgb(39, 124, 184);
text-align: center;
padding: 14px 70px;
text-decoration: none;
}
/*鼠标移动到选项上修改背景颜色 */
.lie a:hover {
background-color: #e3e3f5;
}
.ula {
width: 100%;
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
.lia {
width: 15%;
display: inline-block;
font: 13px sans-serif;
}
.lia a {
display: block;
font-size: larger;
color: rgb(0, 0, 0);
text-align: center;
padding: 14px 50px;
text-decoration: none;
}
/*鼠标移动到选项上修改背景颜色 */
.lia a:hover {
background-color: #b7b7b7;
}
.square{
width:200px;
height:5px;
border:1px solid transparent;
background: #06b81a;
}

@ -0,0 +1,276 @@
<head>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 获取表单元素
var form = document.querySelector('.ant-form');
// 为表单添加提交事件监听器
form.addEventListener('submit', function(e) {
e.preventDefault(); // 阻止表单的默认提交行为
// 收集表单数据
var formData = {
//question_kind: document.getElementsByName('question_kind').value,
url: document.getElementById('url').value,
description: document.getElementById('description').value,
question_kind:document.querySelector('input[name="option"]:checked').value
};
console.log(formData);
// 使用fetch API发送数据到后端
fetch('http://localhost:8080/xmy', {
method: 'POST', // 或者 'PUT'
headers: {
'Content-Type': 'application/json',
// 如果需要认证添加Authorization头部
// 'Authorization': 'Bearer your_token_here'
},
body: JSON.stringify(formData) // 将表单数据转换为JSON字符串
})
.then(response => response.json()) // 转换响应为JSON
.then(data => {
console.log('Success:', data);
alert('反馈成功提交!');
})
.catch((error) => {
console.error('Error:', error);
alert('提交失败,请稍后重试!');
});
});
});
window.setInterval(myFunction,5000);
    function myFunction(){
        fetch('http://localhost:8080/aaa', {
            method: 'POST', // 或者 'PUT'
            headers: {
                'Content-Type': 'application/json',
                // 如果需要认证添加Authorization头部
                // 'Authorization': 'Bearer your_token_here'
            },
            body: 'abc' // 将表单数据转换为JSON字符串
        })
        .then(response => response.json()) // 转换响应为JSON
        .then(data => {
console.log(data);
            renderEl(data.message);
        })
    }
   function renderEl(arr) {
        let str = '';
        str += `
           <div
style={{
position: 'absolute',
left: '900px',
top: '20px',
border: 'thick double #FFFAFA',
width:'300px',
whiteSpace:'nowrap'
}}>
<div>
已经解决问题数:${arr.slice(5,11)}
</div>
<table>
<caption>
问题统计数据 更新时间:${arr.substr(arr.indexOf("time:")+5,19)}
</caption>
<thead>
<tr>
<th scope="col">问题类型</th>
<th scope="col">问题数量</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">登录注册</th>
<td>${arr.substr(arr.indexOf("登录")+2,3)}</td>
</tr>
<tr>
<th scope="row">信息认证</th>
<td>${arr.substr(arr.indexOf("信息")+2,3)}</td>
</tr>
<tr>
<th scope="row">实训编程</th>
<td>${arr.substr(arr.indexOf("编程")+2,3)}</td>
</tr>
<tr>
<th scope="row">实训课程 </th>
<td>${arr.substr(arr.indexOf("课程")+2,3)}</td>
</tr>
</tbody>
<tfoot>
<tr>
<th scope="row">其它</th>
<td>${arr.substr(arr.indexOf("其它")+2,3)}</td>
</tr>
</tfoot>
</table>
</div>
            `;
        const el = document.getElementById('wrap');
        el.innerHTML = str;
    }
</script>
</head>
<body>
<div style="padding-left: 10px; padding-right: 10px; flex: 1 1 0%;">
<h1 class="title___Q0EMb">意见反馈</h1>
<div class="minH500">
<section class="wrap___AsKly bg-white pl30 pr30 pt30">
<div class="Text">想对我们的平台提供功能建议?
<br>发现网页中的问题或bug想告诉我们
<br>期望与我们展开合作?
<br>在这里把你想说的一切告诉我们吧?</div>
<div class="c-red-ee4 mt20 mb20">* <a class=
href="">看看帮助中心是否有你想要的答案</a>
</div>
<form class="ant-form ant-form-vertical ant-form-middle css-lw48js">
<div class="ant-form-item css-lw48js ant-form-item-has-success">
<div class="ant-row ant-form-item-row css-lw48js">
<div class="ant-col ant-form-item-label css-lw48js">
<label for="question_kind"
class="ant-form-item-required"
title="问题分类:">问题分类:</label>
</div>
<div class="ant-col ant-form-item-control css-lw48js">
<div class="ant-form-item-control-input">
<div class="ant-form-item-control-input-content">
<div aria-required="true"
class="ant-radio-group ant-radio-group-outline ant-radio-group-middle css-lw48js"
>
<span class="ant-radio ant-wave-target">
<input
type="radio"
value="1"
id="option1"
checked="true"
name="option">
</span>
<span><label for="option1">登录注册</label></span>
<span class="ant-radio ant-wave-target">
<input
type="radio"
value="2"
id="option2"
name="option">
</span>
<span><label for="option2">信息认证</label></span>
<span class="ant-radio ant-wave-target">
<input
type="radio"
value="3"
id="option3"
name="option">
</span>
<span><label for="option3">实训编程</label></span>
<span class="ant-radio ant-wave-target">
<input
type="radio"
value="4"
id="option4"
name="option">
</span>
<span><label for="option4">实训课程</label></span>
<span class="ant-radio ant-wave-target">
<input
type="radio"
value="5"
id="option5"
name="option">
</span>
<span><label for="option5">课堂</label></span>
<span class="ant-radio ant-wave-target">
<input
type="radio"
value="6"
id="option6"
name="option">
</span>
<span><label for="option6">其它</label></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="ant-form-item css-lw48js">
<div class="ant-row ant-form-item-row css-lw48js">
<div class="ant-col ant-form-item-label css-lw48js">
<label for="url"
class="ant-form-item-required"
title="问题页面网址:">问题页面网址:</label>
</div>
<div class="ant-col ant-form-item-control css-lw48js"
style="display: flex ;width: 100px;">
<div class="ant-form-item-control-input">
<div class="ant-form-item-control-input-content">
<input placeholder="反馈平台问题,请同时填写对应的问题页面链接,以便平台能够及时跟踪解决,谢谢"
id="url"
aria-required="true"
class="ant-input css-lw48js"
type="text"
value="">
</div>
</div>
</div>
</div>
</div>
<div class="ant-form-item css-lw48js">
<div class="ant-row ant-form-item-row css-lw48js">
<div class="ant-col ant-form-item-label css-lw48js">
<label for="description"
class="ant-form-item-required"
title="问题描述:">问题描述:</label>
</div>
<div class="ant-col ant-form-item-control css-lw48js">
<div class="ant-form-item-control-input">
<div class="ant-form-item-control-input-content">
<textarea rows="4"
placeholder="反馈平台问题,请同时填写对应的问题页面链接,以便平台能够及时跟踪解决,谢谢"
id="description"
aria-required="true"
class="ant-input css-lw48js"></textarea>
</div>
</div>
</div>
</div>
</div>
<div id="wrap"></div>
<div class="ant-form-item css-lw48js">
<div class="ant-row ant-form-item-row css-lw48js">
<div class="ant-col ant-form-item-control css-lw48js">
<div class="ant-form-item-control-input">
<div class="ant-form-item-control-input-content">
<button type="submit"
class="ant-btn css-lw48js ant-btn-primary">
<span>提交</span>
</button>
</div>
</div>
</div>
</div>
</div>
</form>
</section>
</div>
</div>
</body>

@ -0,0 +1,202 @@
<html>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<head>
<title>模态框示例</title>
<style>
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.4);
}
.modal-content {
background-color: #fefefe;
margin: 2.5% auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
.table-container {
margin: auto;
width: 80%;
max-width: 600px; /* 根据需要调整表格的最大宽度 */
}
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<div id="myModal" class="modal">
<div class="modal-content">
<span class="close">&times;</span>
<div>
<canvas id="myChart"></canvas>
</div>
<div class="table-container">
<table>
<caption>响应时间统计</caption>
<tr>
<th>统计指标</th>
<th></th>
</tr>
<tr>
<td>最大响应时间</td>
<td id="maxResponseTime">-</td>
</tr>
<tr>
<td>最小响应时间</td>
<td id="minResponseTime">-</td>
</tr>
<tr>
<td>平均响应时间</td>
<td id="averageResponseTime">-</td>
</tr>
<tr>
<td>错误率</td>
<td id="errorRate">-</td>
</tr>
</table>
</div>
</div>
</div>
</body>
<script>
// 获取按钮和模态框元素
var btn = document.getElementById('openModalBtn');
var modal = document.getElementById('myModal');
var span = document.getElementsByClassName("close")[0];
// 为按钮添加点击事件以打开模态框
modal.style.display = "block";
// 为关闭按钮添加点击事件以关闭模态框
span.onclick = function() {
modal.style.display = "none";
window.history.go(-1); //返回上一页
}
// 在用户点击模态框外部时关闭模态框
// window.onclick = function(event) {
// if (event.target == modal) {
// modal.style.display = "none";
// window.history.go(-1); //返回上一页
// }
// }
//var receiveData={[{"time":"2021.2.19", "responsetime": 10},{"time":"2021.3.19", "responsetime": 10}]};
var receiveData={"servername":"127.0.0.1","DisabledRate": 0.5,
"ResponseTimeArray": [111,110,110,111,111,111],
"Time":["2021.3.19","2021.3.20","2021.3.21","2021.3.22","2021.3.22","2021.3.23"]}
var jsonData = {
"labels": receiveData.Time,
"data": [
{
"label": "响应时间",
"data": receiveData.ResponseTimeArray
},
]
};
// 获取Canvas元素
window.onload=function(){
var ctx = document.getElementById('myChart').getContext('2d');
// 创建折线图
var myChart = new Chart(ctx, {
type: 'line', // 图表类型
data: {
labels:jsonData.labels,
datasets:[{
label:jsonData.data[0].label,
data:jsonData.data[0].data,
backgroundColor: 'rgba(255, 99, 132, 0.2)', // 数据集的背景颜色
borderColor: 'rgba(255, 99, 132, 1)', // 数据集的边框颜色
borderWidth: 1 // 边框宽度
}]
},
options: {
scales: {
y: {
beginAtZero: false // Y轴是否从0开始
}
},
responsive: true, // 响应式图表
maintainAspectRatio: true // 保持宽高比
}
});
};
// 可以添加一个函数来更新图表数据
function updateChartData(newData) {
myChart.data.datasets.forEach((dataset, index) => {
myChart.data.labels = newData.labels;
myChart.data.datasets[index].data = newData.data[index].data;
});
myChart.update();
}
function calculateResponseTimeStats(data) {
const times = data.map(set => set.data);
const flattenedTimes = times.flat();
const maxTime = Math.max(...flattenedTimes);
const minTime = Math.min(...flattenedTimes);
const sumTime = flattenedTimes.reduce((acc, curr) => acc + curr, 0);
const averageTime = sumTime / flattenedTimes.length;
return {
max: maxTime,
min: minTime,
average: averageTime
};
}
// 更新表格中的统计数据
function updateStatsTable(stats,data) {
document.getElementById('maxResponseTime').textContent = stats.max;
document.getElementById('minResponseTime').textContent = stats.min;
document.getElementById('averageResponseTime').textContent = stats.average.toFixed(2);
document.getElementById('errorRate').textContent=data.DisabledRate;
}
// 使用jsonData中的数据更新统计表
const stats = calculateResponseTimeStats(jsonData.data);
updateStatsTable(stats,receiveData);
// 模拟数据更新
setInterval(() => {
// 这里应该根据实际逻辑获取新数据
var newData = {
labels: jsonData.labels,
data: [
// 这里添加新数据点或更新现有数据点
]
};
updateChartData(newData);
}, 1000);
</script>
</html>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,77 @@
GoAccess was designed and developed by Gerardo Orellana <goaccess@prosoftcorp.com>
Special thanks to the following individuals for their great contributions:
* Aaditya Bagga <abchk1234@gmail.com>
* Adam Števko <adam.stevko@gmail.com>
* Adrian <totcha@gazeta.pl>
* Alexander Eifler <github@eifx.de>
* Andreas Sommer <andreas.sommer@ppro.com>
* Andreas Weigel <andreaswe@securepoint.de>
* Andrew Minion <andrew@andrewrminion.com>
* Antonio Terceiro <terceiro@softwarelivre.org>
* Arnie97 <arnie97@gmail.com>
* Aslak Raanes <aslakr@gmail.com>
* Bjørnar Hansen <tilbjornar@gmail.com>
* Bo Cai <charpty@gmail.com>
* Bob Black <git@riblack.com>
* Chilledheart <rwindz0@gmail.com>
* Chris Downs <chris-downs@users.noreply.github.com>
* Christian Hermann <c.hermann@bitbeans.de>
* Christian Moelders <christian.moelders@storeplus.de>
* Christopher Meng <i@cicku.me>
* Daniel (dmilith) Dettlaff <dmilith@me.com>
* Daniel Aleksandersen <code@daniel.priv.no>
* David Geistert <d3f3kt@scripts4u.net>
* Enrique Becerra <kabeza@gmail.com>
* Florian Forster <ff@octo.it>
* Francisco Azevedo <francisco.j.azevedo@gmail.com>
* Frederic Cambus <fcambus@users.sourceforge.net>
* Genki Sugawara <sugawara@cookpad.com>
* Jeffery Wilkins <djcanadianjeff@gmail.com>
* Jeremy Burks <jeremy@zomgwat.com>
* Joe Groocock <me@frebib.net>
* Joe Winett <joe@winett.com>
* Joona <joona.paivahonka@gmail.com>
* Julian Xhokaxhiu <xhokaxhiujulian@gmail.com>
* Justin Mills <justin.mills@utah.edu>
* Kamino Hiroki <37243867+4f8p@users.noreply.github.com>
* Kit Westneat <kit.westneat@gmail.com>
* Maksim Losev <mlosev@beget.ru>
* Mark J. Berger <mark.berger.j@gmail.com>
* Mathieu Aubin <mathieu@zeroserieux.com>
* Mathieu Thoretton <mathieu.thoretton@getyourguide.com>
* Max Christian Pohle <info@entwicklerseite.de>
* Michael Vetter <jubalh@iodoru.org>
* Nicolas <np.pascal@gmail.com>
* Nicolas Le Manchet <nicolas@lemanchet.fr>
* Otto Kekäläinen <otto.kekalainen@seravo.fi>
* Sean Cross <sean@xobs.io>
* Sebastian Wiedenroth <wiedi@frubar.net>
* SjonHortensius <SjonHortensius@users.noreply.github.com>
* Steely Wing <steelywing@users.noreply.github.com>
* Stoyan Dimov <s.dimov@codelogic.eu>
* Stéphane Péchard <stephanepechard@gmail.com>
* Tatsuyuki Ishi <ishitatsuyuki@gmail.com>
* Thomas Gläßle <t_glaessle@gmx.de>
* Tom Samstag <github@modtwo.com>
* Viktor Szépe <viktor@szepe.net>
* Ville Skyttä <ville.skytta@iki.fi>
* Vladimir Pavljuchenkov <spiderx@spiderx.dp.ua>
* Vladimir Pavljuchenkov <spiderx@spiderx.dp.ua>
* Yuri D'Elia <wavexx@thregr.org>
* Yuriy M. Kaminskiy <yumkam@gmail.com>
* abgit <francisco.j.azevedo@gmail.com>
* as0n <n.was.here@gmail.com>
* fqbuild <fqbuild@FutureQuest.net>
* holys <chendahui007@gmail.com>
* kyle sloan <kyle@ifsight.com>
* m-r-r <raybaudroigm@gmail.com>
* mynameiscfed <christopherfederico@gmail.com>
* pravdomil <pravdomil.toman@gmail.com>
* radoslawc <radoslawc@gmail.com>
* radoslawc <radoslawc@gmail.com>
* schoonc <schoonc@users.noreply.github.com>
* wodev <wodev@fischer-net.net>
* woobee <support.developpement@gmail.com>
* zeke <zhenkai0605@gmail.com>

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2009-2016 Gerardo Orellana <hello @ goaccess.io>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,705 @@
Changes to GoAccess 1.3 - Friday, November 23, 2018
- Added ability to store accumulated processing time into DB_GEN_STATS tcb
file via '--accumulated-time' command line option.
- Added additional Apache status codes to the list.
- Added a few feed readers to the list.
- Added 'Android 8 Oreo' to the list of OSs.
- Added 'Android Pie 9' to the list of OSs.
- Added --anonymize-ip command line option to anonymize ip addresses.
- Added --browsers-file command line option to load a list of crawlers from a
text file.
- Added byte unit (PiB) to C formatter and refactored code.
- Added byte unit (PiB) to JS formatter.
- Added Chinese translation (i18n).
- Added French translation (i18n).
- Added '%h' date specifier to the allowed date character specifiers.
- Added "HeadlessChrome" to the list of browsers.
- Added --hide-referer command line option to hide referers from report.
- Added HTTP status code 429 (TOO MANY REQUESTS).
- Added IGNORE_LEVEL_PANEL and IGNORE_LEVEL_REQ definitions.
- Added --ignore-referer-report command line option to hide referers from
output.
- Added Japanese translation (i18n).
- Added macOS 10.14 Mojave to the list of OSs.
- Added "Mastodon" user-agent to the list of crawlers/unix-like.
- Added new fontawesome icons and use angle arrows in HTML paging.
- Added new purple theme to HTML report and default to it.
- Added --no-parsing-spinner command line option to switch off parsing
spinner.
- Added .ogv and ogg static file extension (ogg video, Ogg Vorbis audio).
- Added OS X version numbers when outputting with --real-os.
- Added parsing mechanism in an attempt capture more bots and to include
unspecified bots/crawlers.
- Added --pidfile command line option to the default config file.
- Added Spanish translation (i18n).
- Added SSL support for Docker goaccess build.
- Added support to the WebSocket server for openssl-1.1*.
- Added the ability to show/hide a chart per panel in the HTML report.
- Added transparency to the navigation bar of the HTML report.
- Added "WhatsApp" user-agent to the list of crawlers.
- Changed default db folder so it adds the process id (PID). --db-path is
required now when using --load-from-disk.
- Changed Dockerfile to build from the current source.
- Changed 'hits' to be right-aligned on TUI.
- Changed to use faster slide animations on HTML report.
- Changed wording from 'Bandwidth' to the proper term 'Tx. Amount'.
- Ensure database filenames used by btree are less predictable.
- Ensure HTML templates, CSS and JS files are minified when outputting
report.
- Ensure key phrases from Google are added even when https is used.
- Ensure live report updates data & charts if tab/document has focus.
- Ensure multiple 'Yandex' crawlers are properly parsed.
- Ensure Safari has priority over most crawlers except the ones that are
known to have it.
- Ensure the request protocol on its own is properly parsed.
- Ensure the right number of tests are performed against the given log.
- Ensure user configuration is parsed first when available.
- Ensure wss:// is used when connecting via HTTPS.
- Ensure XFF parser takes into account escaped braces.
- Fixed a regression where fifo-in/out would fail with ENXIO.
- Fixed a regression where it would return EXIT_FAILURE on an empty log.
- Fixed a (ssh) pipeline problem with fgetline()/fgets() when there is a race
for data on stdin.
- Fixed broken X-Forwarded-For (XFF) %~ specifier in certain parsing cases.
- Fixed conf.filenames duplication problem if logs are via pipe.
- Fixed float percent value on JSON/HTML output for locales using decimal comma.
- Fixed issue where it was not possible to establish a Web Socket connection
when attempting to parse and extract HTTP method.
- Fixed issue where log formats with pipe delimiter were not propely parsed.
- Fixed memory leak after config file path has been set (housekeeping).
- Fixed memory leak when adding host to holder introduced in c052d1ea.
- Fixed possible memory leak when hiding specific referrers.
- Fixed several JS jshint warnings.
- Fixed sudo installs on TravisCI.
- Fixed UNDEFINED time range in HTML report when VISITORS panel was ignored.
- Fixed unnecessary closing span tags from template.
- Fixed use-after-free when two color items were found on color_list.
Changes to GoAccess 1.2 - Tuesday, March 07, 2017
- Added a Dockerfile.
- Added Amazon S3 bucket name as a VirtualHost (server block).
- Added a replacement for GNU getline() to dynamically expand line buffer
while maintaining real-time output.
- Added --daemonize command line option to run GoAccess as daemon.
- Added several improvements to the HTML report on small-screen devices.
- Added option to the HTML report to auto-hide tables on small-screen
devices.
- Added --process-and-exit command line option to parse log and exit.
- Added several feed readers to the list of browsers.
- Added "-" single dash per convention to read from the standard input.
- Added support for MaxMind GeoIP2.
- Added the ability to read and follow from a pipe such as
"tail -f access.log | goaccess -"
- Added the ability to specify multiple logs as input sources, e.g.:
"goaccess access.log access.log.1" while maintaining real-time output.
- Added time unit (seconds) to the processed time label in the HTML/terminal
output.
- Added visitors' percent column to the terminal dashboard.
- Changed D3 charts to dim Y-axis on mouseover.
- Changed D3 charts to reflect HTML column sort.
- Changed D3 charts to render only if within the viewport. This improves the
overall real-time HTML performance.
- Changed HTML report tables to render only if within the viewport.
- Changed percentage calculation to be based on the total within each panel.
- Ensure start/end dates are updated real-time in the HTML output.
- Ensure "window.location.hostname" is used as the default WS server host.
In most cases, this should avoid the need for specifying "--ws-url=host".
Simply using "--real-time-html" should suffice.
- Fixed issue on HTML report to avoid outputting scientific notation for all
byte sizes.
- Fixed integer overflow when calculating bar graph length on terminal
output.
- Fixed issue where global config file would override command line arguments.
- Fixed issue where it wouldn't allow loading from disk without specifying a
file when executed from the cron.
- Fixed issue where parser couldn't read some X-Forwarded-For (XFF) formats.
Note that this breaks compatibility with the original implementation of
parsing XFF, but at the same time it gives much more flexibility on different
formats.
- Fixed issue where specifying fifo-in/out wouldn't allow HTML real-time
output.
- Fixed issue where the wrong number of parsed lines upon erroring out was
displayed.
- Fixed issue where the WebSocket server prevented to establish a connection
with a client due to invalid UTF-8 sequences.
- Fixed percent issue when calculating visitors field.
- Updated the list of crawlers.
Changes to GoAccess 1.1.1 - Wednesday, November 23, 2016
- Added data metric's "unique" count on each panel to the JSON/HTML outputs.
- Changed D3 bar charts to use .rangeBands and avoid extra outer padding.
- Fixed mouseover offset position issue on D3 bar charts.
- Fixed possible heap overflow when an invalid status code was parsed and
processed. This also ensures that only valid HTTP status codes are parsed
>=100 or <= 599.
- Fixed sluggish D3 chart re-rendering by changing how x-axis labels are
displayed in the HTML report.
Changes to GoAccess 1.1 - Tuesday, November 08, 2016
- Added a new layout to the HTML report and additional settings and changes.
- Added --crawlers-only command line option to display crawlers/bots only.
- Added --fifo-in and --fifo-out command line options to set websocket FIFO
reader/writer.
- Added --no-html-last-updated command line option.
- Added --num-tests command line option.
- Added --html-prefs command line option to to set default preferences for
the HTML report.
- Added "Amazon S3" Log Format to the list of predefined options.
- Added "Android 7.1 Nougat" to the list of OSs.
- Added "Android Marshmallow 6.0.1" to the list of OSs.
- Added "Android Nougat 7.0" to the list of OSs.
- Added "Feed Wrangler" to the list of feeds.
- Added "Go-http-client" to the list of browsers.
- Added "MicroMessenger" (WeChat) to the list of browsers.
- Added "SemrushBot" to the list of crawlers.
- Added "Remote User" panel to capture HTTP authentication requests. Use %e
within the log-format variable to enable this panel.
- Added tebibyte unit to the byte to string function converter.
- Added the ability to parse reverse proxy logs that have multiple IPs. This
adds the ability to parse the "X-Forwarded-For" field in a reverse proxy
setup.
- Added the ability to show which token didn't match log/date/time pattern.
This also ensures that in the absence of data, its output is not treated as
error but instead it produces an empty report.
- Added the ability to specify a WebSocket protocol (ws|wss) through
--ws-url.
- Added the request query string to the W3C format.
- Added TLS/SSL support to the HTML real-time report.
- Changed browser classification for Google Cloud Clients.
- Changed how "Darwin" OS was reported to display AppName instead.
- Changed default W3C log format to use the URL path instead of full request.
- Changed HTML default number of items on each table to 7.
- Changed request parser to allow empty query strings.
- Changed default HTML output theme to darkBlue.
- Ensure every version of iOS is broken down under the OS panel.
- Ensure latest JSON data is fast-forwarded when connection is opened.
GoAccess now sends the latest JSON data to the client as soon as the
WebSocket connection is opened.
- Ensure localStorage is supported and enabled in the HTML report
- Ensure unknown coutries/continents are listed.
- Fixed D3 chart width overflow issue on Edge.
- Fixed integer to string key conversion for unique visitors. This fixes the
issue where resulting keys would collide with existing keys and thus not
keeping the right visitors count on certain panels.
- Fixed memory leak when unable to URL decode %q specifier.
- Fixed memory leak when unable to URL decode %U specifier.
- Fixed month name abbreviation on app.js.
- Fixed percentage integer overflow with large numbers on 32bits platforms.
- Fixed percent calculation due to integer division rounding to zero.
- Fixed possible code injection when outputting an HTML report.
- Fixed segfault when using options -H or -M without an argument.
- Removed timestamp from the HTML report title tag.
Changes to GoAccess 1.0.2 - Tuesday, July 05, 2016
- Added minor changes to the HTML report stylesheet.
- Added the ability to specify the WebSocket port within --ws-url.
- Added the proper byte swap functions used by Sun Solaris.
- Added the proper default --http-method/protocol values on the config file.
- Changed bar transition to scale delay dynamically to the length of the
dataset.
- Fixed build issue on platforms lacking of open_memstream() by refactoring
the JSON module to use its own memory buffer.
- Fixed issue where the server wouldn't send cached buffer to slow clients.
- Fixed OS X build check of ncursesw.
- Implemented a throttle mechanism for slow clients to avoid caching too much
data on the server-side.
- Removed flickering on D3 line and bar chart redraw.
Changes to GoAccess 1.0.1 - Friday, June 17, 2016
- Added Android version number along with the codename when using --real-os,
e.g., "Lollipop 5.1".
- Added some missing headers and function checks to configure.ac.
- Fixed a regression where it wouldn't allow abbreviated date and time
formats such as %F or %T.
- Fixed build issues on systems running GLIBC older than 2.9, such as RHEL <= 5.
- Fixed issue where it wouldn't send the whole buffer to a socket causing the
real-time-html WebSocket server to progressively consume a lot more memory.
- Fixed memory leak when using getline and follow mode enabled.
- Fixed some buffer initialization issues on read_line() and
perform_tail_follow().
- Fixed uint types in sha1 files.
Changes to GoAccess 1.0 - Thursday, June 09, 2016
- Added --enable-panel=<PANEL> command line option to display the given
module.
- Added --json-pretty-print command line option to output pretty json.
- Added --log-format=<format> command-line shortcuts for standard log
formats.
- Added --origin command line option to match the origin WebSocket header.
- Added --output=<file.[html|csv|json]> as a shortcut to --output-format.
- Added a complete real-time functionality to the HTML output.
- Added an option to set the max number of items to show per panel.
- Added D3 Visualziations to the HTML dashboard.
- Added metadata metrics to the each of the panels (JSON output)
- Added option to specify time distribution specificity.
- Added the ability to download a JSON file from the HTML report.
- Added the ability to output multiple formats on a single log parse.
- Added the ability to set the date specificity in hours.
- Added the ability to sort all HTML tables on all panels.
- Added the ability to specify a custom CSS and JS file to the HTML report.
- Added user-agents to the JSON output per each host.
- Added "Vivaldi" to the list of browsers.
- Bootstrapify the HTML dashboard.
- Changed configure.ac to use LDFLAGS instead of CFLAGS where applicable.
- Changed default terminal color scheme to 256 Monokai if terminal supports 256 colors.
- Changed GoAccess license to The MIT License (MIT)
- Changed the visitors panel to display its dates continuously instead of top.
- Default to 256 Monokai color scheme if terminal supports 256 colors.
- Default to display HTTP method/protocol (if applicable).
- Display the children's Max. T.S. as the parent's top Max. T.S.
- Ensure the parent's Avg. T.S. displays parent's Cum. T.S. over parent's Hits.
- Fixed color issue when switching from the color scheme dialog.
- Fixed cross platform build issue when ncurses is built with and without
termlib=tinfo.
- Fixed curses header window issue where it wouldn't clear out on small
window sizes.
- Fixed issue where tail mode wouldn't parse full lines using getline().
- Fixed minor background color issue when using ncurses 6.
- Fixed possible division by zero when calculating percentage.
- Fixed singly link list node removal.
- Fixed still reachable memory leak on GeoIP cleanup (geoip legacy >= 1.4.7).
- Fixed various Valgrind's still reachable memory leaks.
- Removed -Wredundant-decls.
Changes to GoAccess 0.9.8 - Monday, February 29, 2016
- Added a more complete list of static extensions to the config file.
- Added "Android 6.0 Marshmallow" to the list of OSs.
- Added --no-tab-scroll command line option to disable scroll through panels
on TAB.
- Added the first and last log dates to the overall statistics panel.
- Ensure GoAccess links correctly against libtinfo.
- Ensure static content is case-insensitive verified.
- Fixed bandwidth overflow issue (numbers > 2GB on non-x86_64 arch).
- Fixed broken HTML layout when html-method/protocol is missing in config file.
- Refactored parsing and display of available modules/panels.
Changes to GoAccess 0.9.7 - Monday, December 21, 2015
- Added "Squid native" log format to the config file.
- Fixed integer overflow when getting total bandwidth using the on-disk
storage.
- Fixed issue where a timestamp was stored as date under the visitors panel.
- Fixed issue where config dialog fields were not cleared out on select.
- Fixed issue where "Virtual Hosts" menu item wasn't shown in the HTML sidebar.
Changes to GoAccess 0.9.6 - Tuesday, October 27, 2015
- Added --dcf command line option to view the default config file path.
- Added --ignore-status the ability to ignore parsing status codes.
- Added "Darwin" to the list of OSs.
- Fixed segfault when appending data to a log (follow) without virtualhosts.
Changes to GoAccess 0.9.5 - Thursday, October 22, 2015
- Added major performance improvements to the default storage when parsing and
storing data (~%44 less memory, ~37% faster).
- Added the ability to parse virtual hosts and a new panel to display metrics
per virtual host.
- Added the ability to parse HTTP/2 requests.
- Added the ability to use GNU getline() to parse full line requests.
- Added the ability to output debug info if a log file is specified, even
without --enable-debug.
- Added OS X "El Capitan".
- Added WebDav HTTP methods and HTTP status from RFC 2518 and RFC 3253.
- Fixed detection of some Googlebots.
- Fixed issue where time served metrics were not shown when loading persisted
data.
- Fixed linker error on OSX: ld: library not found for -lrt.
- Fixed percentage on the HTML output when excluding IPs.
- Removed GLib dependency and refactored storage functionality. By removing
this dependency, GoAccess is able to store data in a more efficient manner,
for instance, it avoids storing integer data as void* (generic typing), thus
greatly improving memory consumption for integers.
Changes to GoAccess 0.9.4 - Tuesday, September 08, 2015
- Added --all-static-files command line option to parse static files
containing a query string.
- Added --invalid-requests command line option to log invalid requests to a file.
- Added additional overall metric - total valid requests.
- Added "%~" specifier to move forward through a log string until a non-space
char is found.
- Added the ability to parse native Squid access.log format.
- Fixed a few issues in the configuration script.
- Fixed inability to parse color due to a missing POSIX extension.
"ERR:Invalid bg/fg color pairs"
Changes to GoAccess 0.9.3 - Wednesday, August 26, 2015
- Added --no-column-names command line option to disable column name metrics.
- Added a default color palette (Monokai) to the config file.
- Added AWS Elastic Load Balancing to the list of predefined log/date/time
formats.
- Added CloudFlare status codes.
- Added column headers for every enabled metric on each panel.
- Added cumulative time served metric.
- Added "DragonFly" BSD to the list of OSs.
- Added maximum time served metric (slowest running requests).
- Added "Slackbot" to the list of crawlers/browsers.
- Added the ability to parse the query string specifier "%q" from a log file.
- Added the ability to process logs incrementally.
- Added the ability to set custom colors on the terminal output.
- Disabled REFERRERS by default.
- Ensure bandwidth metric is displayed only if %b specifier is parsed.
- Fixed issue where the --sort-panel option wouldn't sort certain panels.
- Fixed several compiler warnings.
- Set predefined static files when no config file is used.
- Updated "Windows 10" user agent from 6.4 (wrong) to 10.0.(actual)
Changes to GoAccess 0.9.2 - Monday, July 06, 2015
- Added ability to fully parse browsers that contain spaces within a token.
- Added multiple user agents to the list of browsers.
- Added the ability to handle time served in milliseconds as a decimal number
`%L`.
- Added the ability to parse a timestamp in microseconds.
- Added the ability to parse Google Cloud Storage access logs.
- Added the ability to set a custom title and header in the HTML report.
- Added "%x" as timestamp log-format specifier.
- Ensure agents" hash table is destroyed upon exiting the program.
- Ensure "Game Systems" are processed correctly.
- Ensure visitors panel header is updated depending if crawlers are parsed or
not.
- Fixed issue where the date value was set as time value in the config
dialog.
- Fixed memory leak in the hits metrics when using the in-memory storage
(GLib).
Changes to GoAccess 0.9.1 - Tuesday, May 26, 2015
- Added --hl-header command line option to highlight active panel.
- Added "Applebot" to the list of web crawlers.
- Added "Microsoft Edge" to the list of browsers.
- Added additional Nginx-specific status codes.
- Ensure dump_struct is used only if using __GLIBC__.
- Ensure goaccess image has an alt attribute on the HTML output for valid
HTML5.
- Ensure the config file path is displayed when something goes wrong (FATAL).
- Ensure there is a character indicator to see which panel is active.
- Fixed Cygwin compile issue attempting to use -rdynamic.
- Fixed issue where a single IP did not get excluded after an IP range.
- Fixed issue where requests showed up in the wrong view even when
--no-query-string was used.
- Fixed issue where some browsers were not recognized or marked as "unknown".
- Fixed memory leak when excluding an IP range.
- Fixed overflows on sort comparison functions.
- Fixed segfault when using on-disk storage and loading persisted data with -a.
- Removed keyphrases menu item from HTML output.
- Split iOS devices from Mac OS X.
Changes to GoAccess 0.9 - Thursday, March 19, 2015
- Added --geoip-database command line option for GeoIP Country/City IPv6.
- Added "Windows 10 (v6.4)" to the real windows user agents.
- Added ability to double decode an HTTP referer and agent.
- Added ability to sort views through the command line on initial load.
- Added additional data values to the backtrace report.
- Added additional graph to represent the visitors metric on the HTML output.
- Added AM_PROG_CC_C_O to configure.ac
- Added "Android Lollipop" to the list of operating systems.
- Added "average time served" metric to all panels.
- Added "bandwidth" metric to all panels.
- Added command line option to disable summary metrics on the CSV output.
- Added numeric formatting to the HTML output to improve readability.
- Added request method specifier to the default W3C log format.
- Added the ability to ignore parsing and displaying given panel(s).
- Added the ability to ignore referer sites from being counted. A good case
scenario is to ignore own domains. i.e., owndomain.tld. This also allows
ignoring hosts using wildcards. For instance, *.mydomain.tld or www.mydomain.*
or www?.mydomain.tld
- Added time/hour distribution module. e.g., 00-23.
- Added "visitors" metrics to all panels.
- Changed AC_PREREQ macro version so it builds on old versions of autoconf.
- Changed GEOIP database load to GEOIP_MEMORY_CACHE for faster lookups.
- Changed maximum number of choices to display per panel to 366 fron 300.
- Ensure config file is read from home dir if unable to open it from
%sysconfdir% path.
- Fixed array overflows when exceeding MAX_* limits on command line options.
- Fixed a SEGFAULT where sscanf could not handle special chars within the
referer.
- Fixed character encoding on geolocation output (ISO-8859 to UTF8).
- Fixed issue on wild cards containing "?" at the end of the string.
- Fixed issue where a "Nothing valid to process" error was triggered when the
number of invalid hits was equal to the number of valid hits.
- Fixed issue where outputting to a file left a zero-byte file in pwd.
- Improved parsing of operating systems.
- Refactored log parser so it allows with ease the addition of new modules.
This also attempts to decouple the core functionality from the rendering
functions. It also gives the flexibility to add children metrics to root
metrics for any module. e.g., Request A was visited by IP1, IP2, IP3, etc.
- Restyled HTML output.
Changes to GoAccess 0.8.5 - Sunday, September 14, 2014
- Fixed SEGFAULT when parsing a malformed request that doesn't have HTTP
status.
Changes to GoAccess 0.8.4 - Monday, September 08, 2014
- Added --444-as-404 command line option to handle nginx non-standard status
code 444 as 404.
- Added --4xx-to-unique-count command line option to count client errors (4xx)
to the unique visitors count. Now by default it omits client errors (4xx)
from being added to the unique visitors count as they are probably not welcomed
visitors. 4xx errors are always counted in panels other than visitors, OS &
browsers.
- Added and updated operating systems, and browsers.
- Added excluded IP hits count to the general statistics panel on all reports.
- Added HTTP nonstandard code "444" to the status code list.
- Fixed compile error due to missing include <sys/types.h> for type
off_t (gcc 4.1).
- Fixed issue when excluding IPv4/v6 ranges.
- Removed request status field restriction. This allows parsing logs that
contain only a valid date, IPv4/6 and host.
Changes to GoAccess 0.8.3 - Monday, July 28, 2014
- Fixed SEGFAULT when parsing a CLF log format and using --ignore-crawlers.
- Fixed parsing conflict between some Opera browsers and Chrome.
- Fixed parsing of several feed readers that are Firefox/Safari-based.
- Fixed Steam detection.
- Added Huawei to the browser's list and removed it from the OS's list.
Changes to GoAccess 0.8.2 - Monday, July 20, 2014
- Added --version command line option.
- Added --ignore-crawlers command line option to ignore crawlers.
- Added ability to parse dates containing whitespaces in between,
e.g., "Jul 15 20:13:59" (syslog format).
- Added a variety of browsers, game systems, feed readers, and podcasts.
- Added missing up/down arrows to the help section.
- Added the ability to ignore multiple IPv4/v6 and IP ranges.
- Added the PATCH method according to RFC 5789.
- Fixed GeoLocation percent issue for the JSON, CSV and HTML outputs.
- Fixed memory leak when excluding one or multiple IPs.
Changes to GoAccess 0.8.1 - Monday, June 16, 2014
- Added ability to add/remove static files by extension through the config
file.
- Added ability to print backtrace on segmentation fault.
- Escaped JSON strings correctly according to [RFC4627].
- Fixed encoding issue when extracting keyphrases for some HTTP referers.
- Fixed issue where HTML bar graphs were not shown due to numeric locale.
- Fixed issue with URIs containing "\r?\n" thus breaking the corresponding
output.
- Make sure request string is URL decoded on all outputs.
Changes to GoAccess 0.8 - Tuesday, May 20, 2014
- Added APT-HTTP to the list of browsers.
- Added data persistence and ability to load data from disk.
- Added IE11 to the list of browsers.
- Added IEMobile to the list of browsers.
- Added multiple command line options.
- Added Nagios check_http to the list of browsers.
- Added parsing progress metrics - total requests / requests per second.
- Added the ability to parse a GeoLiteCity.dat to get the city given an IPv4.
- Changed the way the configuration file is parsed. This will parse all
configuration options under ~/.goaccessrc or the specified config file and
will feed getopt_long with the extracted key/value pairs. This also allows the
ability to have comments on the config file which won't be overwritten.
- Ensure autoconf determines the location of ncurses headers.
- Fixed issue where geo_location_data was NULL.
- Fixed issue where GoAccess did not run without a tty allocated to it.
- Fixed potential memory leak on --log-file realpath().
- Fixed Solaris build errors.
- Implemented an on-memory hash database using Tokyo Cabinet. This
implementation allows GoAccess not to rely on GLib's hash table if one is
needed.
- Implemented large file support using an on-disk B+ Tree database. This
implementation allows GoAccess not to hold everything in memory but instead
it uses an on-disk B+ Tree database.
- Trimmed leading and trailing whitespaces from keyphrases module.
Changes to GoAccess 0.7.1 - Monday, February 17, 2014
- Added --no-color command line option to turn off color output.
- Added --real-os command line option to get real OS names, e.g.,
"Android, Windows, Mac".
- Added ability to log debug messages to a file.
- Added ability to parse tab-separated log format strings.
- Added ability to support terminals without colors.
- Added command line option to append HTTP method to request.
- Added command line option to append HTTP protocol to request.
- Added long options to command-line.
- Added missing "Win 9x 4.90" (Windows Me) user-agent.
- Added missing Windows RT user-agent.
- Ensure mouse click does not reset expanded module if it is the same.
- Fixed Amazon CloudFront tab-separated log format.
- Fixed "FreeBSD style" ncursesw built into system.
- Fixed HTML report issue where data cell would not wrap.
- Fixed issue when isatty() could not find a valid file descriptor.
- Fixed SymbianOS user-agent and retrieve its version.
Changes to GoAccess 0.7 - Monday, December 15, 2013
- Added a command line option to ignore request query strings.
- Added additional compiler flags & fixed several warnings.
- Added additional static file extensions.
- Added country per IP to HOSTS module (HTML & JSON).
- Added DEBUG mode to Makefile & -O2 to default release.
- Added GEOLOCATION report to all outputs - includes continents/countries.
- Added IP resolver to HTML and JSON output.
- Added module numbers to each module header.
- Added the ability to output JSON and CSV.
- Added Windows NT 6.3 (Win 8.1) to the list.
- Fixed buffer overflow issue with realpath.
- New HTML report - HTML5 + CSS styles.
- Properly split request line into the three request modules.
Changes to GoAccess 0.6.1 - Monday, October 07, 2013
- Added active module indication by name.
- Added additional crawlers to the list.
- Added custom configuration file option.
- Added human-readable string when unable to open log.
- Added missing include when compiling on OSX 10.6.
- Added optional mouse support to the main dashboard.
- Added the ability to select active module by number (keys).
- Added the rest of HTTP methods according to RFC2616.
- Changed referring site sscanf format to process multiple URLs.
- Changed the default color scheme to monochrome.
- Fixed issue where %T was not processing floating-point numbers.
- Fixed percentage issue for browsers and os modules.
- Fixed SIGSEGV when reading from stdin to stdout.
- Improved performance when expanding a module.
- Reduced memory consumption by decreasing number of dns threads.
- Removed ^UP/^DOWN due to a key mapping conflict.
Changes to GoAccess 0.6 - Monday, July 15, 2013
- Added a bunch of minor fixes and changes.
- Added and updated list of browsers and operating systems.
- Added a predefined log format/date for the Amazon CloudFront (Download
Distribution).
- Added parsing/processing indicators.
- Added the ability to independently sort each module.
- Added the ability to search across the whole dashboard with the option to
use regular expressions.
- Config window now accepts [ENTER] to continue or F10.
- Fixed issue where Opera +15 was identified as Chrome.
- Implemented the ability to parse the time taken to serve the request, in
microseconds and seconds.
- Improved memory usage and better performance in general.
- Moved away from the original pop-up UI to a new expandable dashboard
allowing data to be processed in real-time.
- Sanitized HTML output with html entities for special chars.
- Updated the hosts module so it shows the reverse DNS as a sub node.
Changes to GoAccess 0.5 - Monday, June 04, 2012
- Added ability to output a full stats report to a file.
- Added a key shortcut to scroll top/bottom.
- Added a new include sys/socket.h - BSD
- Added support for IPv6
- Added the ability to parse a custom format string.
- Fixed google cache key-phrases.
- Fixed issue on empty Google query strings.
- Fixed issue on Opera agents where version was not recognized correctly.
- Fixed other minor fixes and changes.
Changes to GoAccess 0.4.2 - Monday, January 03, 2011
- Added UTF-8 support. Now it should handle properly wide-character/UTF-8.
Run ./configure --enable-utf8
- Fixed a minor bug when adding monthly totals on visitors subwin.
- Removed -lrt since GoAccess does not link to librt. (OS X doesn't include
librt)
Changes to GoAccess 0.4.1 - Monday, December 13, 2010
- Added more flexibility when resizing the terminal. Should work fine with
the standard 80x24.
- Added the ability to pass a flag to ./configure so GeoIP can be enabled if
needed.
- Implemented a pipeline from stdin, so the input doesn't have to be only a
file.
Changes to GoAccess 0.4 - Tuesday, November 30, 2010
- Added graphs to the unique_visitors subwin.
- Implemented bandwidth per day, and host.
- Implemented list of agents for specific hosts.
- Rewrote hash tables iterative code to avoid the use of GHashTableIter, this
way it works with all GLib > 2.0.0.
- Various bug fixes and code cleanups (mainly in the subwin modules).
Changes to GoAccess 0.3.3 - Monday, September 27, 2010
- Changed tarball's filename.
- Fixed a request size parsing issue. Due to malformed syntax on the HTTP
protocol, bandwidth was reset to 0. Ex. "HEAD /" 400 20392
- Fixed a segfault when goaccess was executed without any options but with an
additional unknown argument.
Changes to GoAccess 0.3.2 - Thursday, September 09, 2010
- Fixed an agent parsing issue. As a result, operating systems were not
properly counted.
Changes to GoAccess 0.3.1 - Friday, September 03, 2010
- Added a color scheme implementation
Changes to GoAccess 0.3 - Sunday, August 29, 2010
- Added a counter for total requests since initial parse was implemented
- Added a more detailed and comprehensive browser and os report
- Added bandwidth details for requested files
- Added percentage details on modules 2, 3, 4, 5, 10, 11
- Code cleanups
- Fixed a potential segmentation fault when resizing main window
- Fixed a segmentation fault on pop-up window search if haystack was null
- Fixed invalid entries when parsing status codes
- Implemented a real support for LFS - Handles files larger than 2 GiB on
32-bit systems
- Implemented support for "vhost_combined" log format
- Changed position of data/graphs depending on # of hits
Changes to GoAccess 0.2 - Sunday, July 25, 2010
- Added a keyphrases report coming from Google search engine. This includes,
raw, cache, and translation queries.
- Fixed a memory leak when invalid entries were parsed
- Fixed a potential buffer overflow.
- Implemented real-time statistics (RTS). Data will be appended as the log
file grows. Equivalent to "tail -f" on Unix systems
- Implemented screen resize functionality
- Simpliflied creation of the "unique visitors" hash-key.
- Simpliflied the "process_unique_data" function
- Various small speed increases & code cleanup
Changes to GoAccess 0.1.2 - Monday, July 12, 2010
- Fixed a segmentation fault when parsing logs with unusual request type. Ex.
"GET HTTP/1.1 HTTP/1.1"
Changes to GoAccess 0.1.1 - Saturday, July 10, 2010
- Added an enhanced error handling
- Added an extra macro on configure.ac to check against GHashTableIter.
./configure might not check for glib 2.16 that introduced "GHashTableIter".
- Added Glibc LFS
- Cleaned up code a little bit
- Fixed a segmentation fault when displaying the help text on x86_64.
- Fixed assignments in conditions. In case the assignment is actually intended
put extra parenthesis around it. This will shut GCC (and others) up.
- Fixed casts associated with "g_hash_table_iter_next".
- Fixed comparison between signed and unsigned integer types.
- Fixed function declarations.
- Fixed includes.
- Fixed two format strings. (If the error was ever triggered, it'd most
likely lead to a segfault)
Changes to GoAccess 0.1 - Tuesday, July 06, 2010
- Initial release 0.1

@ -0,0 +1,370 @@
Installation Instructions
*************************
Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
privileges.
5. Optionally, type `make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
HP-UX `make' updates targets which have the same time stamps as
their prerequisites, which makes it generally unusable when shipped
generated files such as `configure' are involved. Use GNU `make'
instead.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,219 @@
#AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = goaccess
AUTOMAKE_OPTIONS = subdir-objects
dist_noinst_DATA = \
resources/tpls.html \
resources/css/app.css \
resources/css/bootstrap.min.css \
resources/css/fa.min.css \
resources/js/app.js \
resources/js/charts.js \
resources/js/d3.v3.min.js \
resources/js/hogan.min.js
noinst_PROGRAMS = bin2c
bin2c_SOURCES = src/bin2c.c
BUILT_SOURCES = \
tpls.h \
bootstrapcss.h \
facss.h \
appcss.h \
d3js.h \
hoganjs.h \
chartsjs.h \
appjs.h
CLEANFILES = \
src/tpls.h \
src/bootstrapcss.h \
src/facss.h \
src/appcss.h \
src/d3js.h \
src/hoganjs.h \
src/chartsjs.h \
src/appjs.h \
resources/tpls.html.tmp \
resources/css/bootstrap.min.css.tmp \
resources/css/fa.min.css.tmp \
resources/css/app.css.tmp \
resources/js/d3.v3.min.js.tmp \
resources/js/hogan.min.js.tmp \
resources/js/charts.js.tmp \
resources/js/app.js.tmp
# Tpls
tpls.h: bin2c$(EXEEXT) resources/tpls.html
if HAS_SEDTR
cat resources/tpls.html | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/tpls.html.tmp
./bin2c resources/tpls.html.tmp src/tpls.h tpls
else
./bin2c resources/tpls.html src/tpls.h tpls
endif
# Bootstrap
bootstrapcss.h: bin2c$(EXEEXT) resources/css/bootstrap.min.css
if HAS_SEDTR
cat resources/css/bootstrap.min.css | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/css/bootstrap.min.css.tmp
./bin2c resources/css/bootstrap.min.css.tmp src/bootstrapcss.h bootstrap_css
else
./bin2c resources/css/bootstrap.min.css src/bootstrapcss.h bootstrap_css
endif
# Font Awesome
facss.h: bin2c$(EXEEXT) resources/css/fa.min.css
if HAS_SEDTR
cat resources/css/fa.min.css | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/css/fa.min.css.tmp
./bin2c resources/css/fa.min.css.tmp src/facss.h fa_css
else
./bin2c resources/css/fa.min.css src/facss.h fa_css
endif
# App.css
appcss.h: bin2c$(EXEEXT) resources/css/app.css
if HAS_SEDTR
cat resources/css/app.css | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/css/app.css.tmp
./bin2c resources/css/app.css.tmp src/appcss.h app_css
else
./bin2c resources/css/app.css src/appcss.h app_css
endif
# D3.js
d3js.h: bin2c$(EXEEXT) resources/js/d3.v3.min.js
if HAS_SEDTR
cat resources/js/d3.v3.min.js | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/js/d3.v3.min.js.tmp
./bin2c resources/js/d3.v3.min.js.tmp src/d3js.h d3_js
else
./bin2c resources/js/d3.v3.min.js src/d3js.h d3_js
endif
# Hogan.js
hoganjs.h: bin2c$(EXEEXT) resources/js/hogan.min.js
if HAS_SEDTR
cat resources/js/hogan.min.js | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/js/hogan.min.js.tmp
./bin2c resources/js/hogan.min.js.tmp src/hoganjs.h hogan_js
else
./bin2c resources/js/hogan.min.js src/hoganjs.h hogan_js
endif
# Charts.js
chartsjs.h: bin2c$(EXEEXT) resources/js/charts.js
if HAS_SEDTR
cat resources/js/charts.js | sed -E "s@(,|;)[[:space:]]*//..*@\1@g" | sed -E "s@^[[:space:]]*//..*@@g" | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/js/charts.js.tmp
./bin2c resources/js/charts.js.tmp src/chartsjs.h charts_js
else
./bin2c resources/js/charts.js src/chartsjs.h charts_js
endif
# App.js
appjs.h: bin2c$(EXEEXT) resources/js/app.js
if HAS_SEDTR
cat resources/js/app.js | sed -E "s@(,|;)[[:space:]]*//..*@\1@g" | sed -E "s@^[[:space:]]*//..*@@g" | sed "s/^[[:space:]]*//" | sed "/^$$/d" | tr -d "\r\n" > resources/js/app.js.tmp
./bin2c resources/js/app.js.tmp src/appjs.h app_js
else
./bin2c resources/js/app.js src/appjs.h app_js
endif
confdir = $(sysconfdir)/goaccess
dist_conf_DATA = config/goaccess.conf
dist_conf_DATA += config/browsers.list
goaccess_SOURCES = \
src/base64.c \
src/base64.h \
src/browsers.c \
src/browsers.h \
src/color.c \
src/color.h \
src/commons.c \
src/commons.h \
src/csv.c \
src/csv.h \
src/error.c \
src/error.h \
src/gdashboard.c \
src/gdashboard.h \
src/gdns.c \
src/gdns.h \
src/gholder.c \
src/gholder.h \
src/gmenu.c \
src/gmenu.h \
src/goaccess.c \
src/goaccess.h \
src/gslist.c \
src/gslist.h \
src/gstorage.c \
src/gstorage.h \
src/gwsocket.c \
src/gwsocket.h \
src/json.c \
src/json.h \
src/labels.h \
src/opesys.c \
src/opesys.h \
src/options.c \
src/options.h \
src/output.c \
src/output.h \
src/parser.c \
src/parser.h \
src/settings.c \
src/settings.h \
src/sha1.c \
src/sha1.h \
src/sort.c \
src/sort.h \
src/ui.c \
src/ui.h \
src/util.c \
src/util.h \
src/websocket.c \
src/websocket.h \
src/xmalloc.c \
src/xmalloc.h
if TCB
goaccess_SOURCES += \
src/tcabdb.c \
src/tcabdb.h \
src/tcbtdb.c \
src/tcbtdb.h
else
goaccess_SOURCES += \
src/khash.h \
src/gkhash.c \
src/gkhash.h
endif
if GEOIP_LEGACY
goaccess_SOURCES += \
src/geoip1.c \
src/geoip1.h
endif
if GEOIP_MMDB
goaccess_SOURCES += \
src/geoip2.c \
src/geoip1.h
endif
if DEBUG
AM_CFLAGS = -DDEBUG -O0 -g -DSYSCONFDIR=\"$(sysconfdir)\"
else
AM_CFLAGS = -O2 -DSYSCONFDIR=\"$(sysconfdir)\"
endif
if WITH_RDYNAMIC
AM_LDFLAGS = -rdynamic
endif
AM_CFLAGS += -Wno-long-long -Wall -W -Wnested-externs -Wformat=2
AM_CFLAGS += -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
AM_CFLAGS += -Wwrite-strings -Wshadow -Wpointer-arith -Wsign-compare
AM_CFLAGS += -Wbad-function-cast -Winline -Wcast-align -Wextra
AM_CFLAGS += -Wdeclaration-after-statement -Wno-missing-field-initializers
dist_man_MANS = goaccess.1
SUBDIRS = po
ACLOCAL_AMFLAGS = -I m4
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
EXTRA_DIST = config.rpath

File diff suppressed because it is too large Load Diff

@ -0,0 +1,80 @@
Copyright (C) 2009-2018
Gerardo Orellana <goaccess@prosoftcorp.com>
* Version history:
- 1.3 [Friday, November 23, 2018]
. GoAccess 1.3 Released. See ChangeLog for new features/bug-fixes.
- 1.2 [Tuesday, March 07, 2017]
. GoAccess 1.2 Released. See ChangeLog for new features/bug-fixes.
- 1.1.1 [Wednesday, November 23, 2016]
. GoAccess 1.1.1 Released. See ChangeLog for new features/bug-fixes.
- 1.1 [Tuesday, November 08, 2016]
. GoAccess 1.1 Released. See ChangeLog for new features/bug-fixes.
- 1.0.2 [Tuesday, July 05, 2016]
. GoAccess 1.0.2 Released. See ChangeLog for new features/bug-fixes.
- 1.0.1 [Friday, June 17, 2016]
. GoAccess 1.0.1 Released. See ChangeLog for new features/bug-fixes.
- 1.0 [Thursday, June 09, 2016]
. GoAccess 1.0 Released. See ChangeLog for new features/bug-fixes.
- 0.9.8 [Monday, February 29, 2016]
. GoAccess 0.9.8 Released. See ChangeLog for new features/bug-fixes.
- 0.9.7 [Monday, December 21, 2015]
. GoAccess 0.9.7 Released. See ChangeLog for new features/bug-fixes.
- 0.9.6 [Tuesday, October 27, 2015]
. GoAccess 0.9.6 Released. See ChangeLog for new features/bug-fixes.
- 0.9.5 [Thursday, October 22, 2015]
. GoAccess 0.9.5 Released. See ChangeLog for new features/bug-fixes.
- 0.9.4 [Tuesday, September 08 , 2015]
. GoAccess 0.9.4 Released. See ChangeLog for new features/bug-fixes.
- 0.9.3 [Wednesday, August 28, 2015]
. GoAccess 0.9.3 Released. See ChangeLog for new features/bug-fixes.
- 0.9.2 [Monday, July 06, 2015]
. GoAccess 0.9.2 Released. See ChangeLog for new features/bug-fixes.
- 0.9.1 [Tuesday, May 26, 2015]
. GoAccess 0.9.1 Released. See ChangeLog for new features/bug-fixes.
- 0.9 [Thursday, March 19, 2015]
. GoAccess 0.9 Released. See ChangeLog for new features/bug-fixes.
- 0.8.5 [Sunday, September 14, 2014]
. GoAccess 0.8.5 Released. See ChangeLog for new features/bug-fixes.
- 0.8.4 [Monday, September 08, 2014]
. GoAccess 0.8.4 Released. See ChangeLog for new features/bug-fixes.
- 0.8.3 [Monday, July 28, 2014]
. GoAccess 0.8.3 Released. See ChangeLog for new features/bug-fixes.
- 0.8.2 [Monday, July 21, 2014]
. GoAccess 0.8.2 Released. See ChangeLog for new features/bug-fixes.
- 0.8.1 [Monday, June 16, 2014]
. GoAccess 0.8.1 Released. See ChangeLog for new features/bug-fixes.
- 0.8 [Monday, May 20, 2013]
. GoAccess 0.8 Released. See ChangeLog for new features/bug-fixes.
- 0.7.1 [Monday, February 17, 2014]
. GoAccess 0.7.1 Released. See ChangeLog for new features/bug-fixes.
- 0.7 [Monday, December 16, 2013]
. GoAccess 0.7 Released. See ChangeLog for new features/bug-fixes.
- 0.6.1 [Monday, October 07, 2013]
. GoAccess 0.6.1 Released. See ChangeLog for new features/bug-fixes.
- 0.6 [Monday, July 15, 2013]
. GoAccess 0.6 Released. See ChangeLog for new features/bug-fixes.
- 0.5 [Monday, June 04, 2012]
. GoAccess 0.5 Released. See ChangeLog for new features/bug-fixes.
- 0.4.2 [Monday, January 03, 2011]
. GoAccess 0.4.2 Released. See ChangeLog for new features/bug-fixes.
- 0.4.1 [Monday, December 13, 2010]
. GoAccess 0.4.1 Released. See ChangeLog for new features/bug-fixes.
- 0.4 [Tuesday, November 30, 2010]
. GoAccess 0.4 Released. See ChangeLog for new features/bug-fixes.
- 0.3.3 [Monday, September 27, 2010]
. GoAccess 0.3.3 Released. See ChangeLog for new features/bug-fixes.
- 0.3.2 [Thursday, September 09 2010]
. GoAccess 0.3.2 Released. See ChangeLog for new features/bug-fixes.
- 0.3.1 [Friday, September 03, 2010]
. GoAccess 0.3.1 Released. See ChangeLog for new features/bug-fixes.
- 0.3 [Sunday, August 29, 2010]
. GoAccess 0.3 Released. See ChangeLog for new features/bug-fixes.
- 0.2 [Sunday, July 25, 2010]
. GoAccess 0.2 Released. See ChangeLog for new features/bug-fixes.
- 0.1.2 [Tuesday, July 13, 2010]
. GoAccess 0.1.2 Released. See ChangeLog for new features/bug-fixes.
- 0.1.1 [Saturday, July 10, 2010]
. GoAccess 0.1.1 Released. See ChangeLog for new features/bug-fixes.
- 0.1 [Wednesday, July 07, 2010]
. Welcome to the GoAccess 0.1 Released.

@ -0,0 +1,100 @@
What is it?
-------------
GoAccess is an open source real-time web log analyzer and interactive viewer
that runs in a terminal in *nix systems or through your browser.
It provides fast and valuable HTTP statistics for system administrators that
require a visual server report on the fly.
Features
-------------------------------
GoAccess parses the specified web log file and
outputs the data to the X terminal. Features include:
* Completely Real Time
All panels and metrics are timed to be updated every 200 ms on the terminal
output and every second on the HTML output.
* No configuration needed
You can just run it against your access log file, pick the log format and
let GoAccess parse the access log and show you the stats.
* Track Application Response Time
Track the time taken to serve the request. Extremely useful if you want to
track pages that are slowing down your site.
* Nearly All Web Log Formats
GoAccess allows any custom log format string. Predefined options include,
Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc
* Incremental Log Processing
Need data persistence? GoAccess has the ability to process logs incrementally
through the on-disk B+Tree database.
* Only one dependency
GoAccess is written in C. To run it, you only need ncurses as a dependency.
That's it. It even has its own Web Socket server - http://gwsocket.io/.
* Visitors
Determine the amount of hits, visitors, bandwidth, and metrics for slowest
running requests by the hour, or date.
* Metrics per Virtual Host
Have multiple Virtual Hosts (Server Blocks)? A panel that displays which
virtual host is consuming most of the web server resources.
* Color Scheme Customizable
Tailor GoAccess to suit your own color taste/schemes. Either through the
terminal, or by simply updating the stylesheet on the HTML output.
* Support for large datasets
GoAccess features an on-disk B+Tree storage for large datasets where it is not
possible to fit everything in memory.
* Docker support
GoAccess comes with a default Docker (https://hub.docker.com/r/allinurl/goaccess/)
that will listen for HTTP connections on port 7890. Although, you can still
fully configure it, by using Volume mapping and editing goaccess.conf.
* and more... visit https://goaccess.io for more details.
Why GoAccess?
-------------
GoAccess was designed to be a fast, terminal-based log analyzer. Its core idea
is to quickly analyze and view web server statistics in real time without
needing to use your browser (great if you want to do a quick analysis of your
access log via SSH, or if you simply love working in the terminal).
While the terminal output is the default output, it has the capability to
generate a complete real-time HTML report, as well as a JSON, and CSV report.
You can see it more of a monitor command tool than anything else.
Keys
----
The user can make use of the following keys:
* ^F1^ or ^h^ Main help,
* ^F5^ Redraw [main window],
* ^q^ Quit the program, current window or module,
* ^o^ or ^ENTER^ Expand selected module,
* ^[Shift]0-9^ Set selected module to active,
* ^Up^ arrow Scroll up main dashboard,
* ^Down^ arrow Scroll down main dashboard,
* ^j^ Scroll down within expanded module,
* ^k^ Scroll up within expanded module,
* ^c^ Set or change scheme color,
* ^CTRL^ + ^f^ Scroll forward one screen within,
* active module,
* ^CTRL^ + ^b^ Scroll backward one screen within,
* active module,
* ^TAB^ Iterate modules (forward),
* ^SHIFT^ + ^TAB^ Iterate modules (backward),
* ^s^ Sort options for current module,
* ^/^ Search across all modules,
* ^n^ Find position of the next occurrence,
* ^g^ Move to the first item or top of screen,
* ^G^ Move to the last item or bottom of screen,
Examples can be found by running `man goaccess`.

@ -0,0 +1,10 @@
1Copyright (C) 2009-2018
6erardo Orellana <goaccess@prosoftcorp.com>
For a more comprehensive list of to-do items, please refer to the GitHub site.
https://github.com/allinurl/goaccess/issues
or visit http://goaccess.io/faq#todo
If you are interested in working on any of the items listed in there, email
goaccess@prosoftcorp.com or better, open a new issue:

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -0,0 +1,343 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2012-03-05.13; # UTC
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
# Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,672 @@
#! /bin/sh
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2010 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# Known limitations:
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
# than 256 bytes, otherwise the compiler driver will dump core. The only
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
shrext=.so
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
# Code taken from libtool.m4's _LT_CC_BASENAME.
for cc_temp in $CC""; do
case $cc_temp in
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
\-*) ;;
*) break;;
esac
done
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
# Code taken from libtool.m4's _LT_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix*)
wl='-Wl,'
;;
darwin*)
case $cc_basename in
xlc*)
wl='-Wl,'
;;
esac
;;
mingw* | cygwin* | pw32* | os2* | cegcc*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6* | nonstopux*)
wl='-Wl,'
;;
newsos6)
;;
linux* | k*bsd*-gnu)
case $cc_basename in
ecc*)
wl='-Wl,'
;;
icc* | ifort*)
wl='-Wl,'
;;
lf95*)
wl='-Wl,'
;;
pgcc | pgf77 | pgf90)
wl='-Wl,'
;;
ccc*)
wl='-Wl,'
;;
como)
wl='-lopt='
;;
*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
wl='-Wl,'
;;
esac
;;
esac
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
rdos*)
;;
solaris*)
wl='-Wl,'
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3*)
wl='-Wl,'
;;
sysv4*MP*)
;;
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
wl='-Wl,'
;;
unicos*)
wl='-Wl,'
;;
uts4*)
;;
esac
fi
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
interix*)
# we just hope/assume this is gcc and not c89 (= MSVC++)
with_gnu_ld=yes
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
# Set some defaults for GNU ld with shared library support. These
# are reset later if shared libraries are not supported. Putting them
# here allows them to be overridden if necessary.
# Unlike libtool, we use -rpath here, not --rpath, since the documented
# option of GNU ld is called -rpath, not --rpath.
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
case "$host_os" in
aix[3-9]*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
# behavior of shared libraries on other platforms, we cannot use
# them.
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | mingw* | pw32* | cegcc*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
interix[3-9]*)
hardcode_direct=no
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
gnu* | linux* | k*bsd*-gnu)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
netbsd*)
;;
solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
case `$LD -v 2>&1` in
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
ld_shlibs=no
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
else
ld_shlibs=no
fi
;;
esac
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = no; then
hardcode_libdir_flag_spec=
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix[4-9]*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
;;
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
:
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
;;
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
echo 'int main () { return 0; }' > conftest.c
${CC} ${LDFLAGS} conftest.c -o conftest
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
fi
if test -z "$aix_libpath"; then
aix_libpath="/usr/lib:/lib"
fi
rm -f conftest.c conftest
# End _LT_AC_SYS_LIBPATH_AIX.
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
fi
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
bsdi[45]*)
;;
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
hardcode_direct=no
if test "$GCC" = yes ; then
:
else
case $cc_basename in
xlc*)
;;
*)
ld_shlibs=no
;;
esac
fi
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
freebsd1*)
ld_shlibs=no
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd* | dragonfly*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
hpux10*)
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
fi
;;
hpux11*)
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
case $host_cpu in
hppa*64*|ia64*)
hardcode_direct=no
;;
*)
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
esac
fi
;;
irix5* | irix6* | nonstopux*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
openbsd*)
if test -f /usr/libexec/ld.so; then
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
else
ld_shlibs=no
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
case $host_vendor in
sni)
hardcode_direct=yes # is this really true???
;;
siemens)
hardcode_direct=no
;;
motorola)
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
;;
esac
;;
sysv4.3*)
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
;;
sysv5* | sco3.2v5* | sco5v6*)
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
hardcode_libdir_separator=':'
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
# only about the one the linker finds when passed -lNAME. This is the last
# element of library_names_spec in libtool.m4, or possibly two of them if the
# linker has special search rules.
library_names_spec= # the last element of library_names_spec in libtool.m4
libname_spec='lib$name'
case "$host_os" in
aix3*)
library_names_spec='$libname.a'
;;
aix[4-9]*)
library_names_spec='$libname$shrext'
;;
amigaos*)
library_names_spec='$libname.a'
;;
beos*)
library_names_spec='$libname$shrext'
;;
bsdi[45]*)
library_names_spec='$libname$shrext'
;;
cygwin* | mingw* | pw32* | cegcc*)
shrext=.dll
library_names_spec='$libname.dll.a $libname.lib'
;;
darwin* | rhapsody*)
shrext=.dylib
library_names_spec='$libname$shrext'
;;
dgux*)
library_names_spec='$libname$shrext'
;;
freebsd1*)
;;
freebsd* | dragonfly*)
case "$host_os" in
freebsd[123]*)
library_names_spec='$libname$shrext$versuffix' ;;
*)
library_names_spec='$libname$shrext' ;;
esac
;;
gnu*)
library_names_spec='$libname$shrext'
;;
hpux9* | hpux10* | hpux11*)
case $host_cpu in
ia64*)
shrext=.so
;;
hppa*64*)
shrext=.sl
;;
*)
shrext=.sl
;;
esac
library_names_spec='$libname$shrext'
;;
interix[3-9]*)
library_names_spec='$libname$shrext'
;;
irix5* | irix6* | nonstopux*)
library_names_spec='$libname$shrext'
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
linux* | k*bsd*-gnu)
library_names_spec='$libname$shrext'
;;
knetbsd*-gnu)
library_names_spec='$libname$shrext'
;;
netbsd*)
library_names_spec='$libname$shrext'
;;
newsos6)
library_names_spec='$libname$shrext'
;;
nto-qnx*)
library_names_spec='$libname$shrext'
;;
openbsd*)
library_names_spec='$libname$shrext$versuffix'
;;
os2*)
libname_spec='$name'
shrext=.dll
library_names_spec='$libname.a'
;;
osf3* | osf4* | osf5*)
library_names_spec='$libname$shrext'
;;
rdos*)
;;
solaris*)
library_names_spec='$libname$shrext'
;;
sunos4*)
library_names_spec='$libname$shrext$versuffix'
;;
sysv4 | sysv4.3*)
library_names_spec='$libname$shrext'
;;
sysv4*MP*)
library_names_spec='$libname$shrext'
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
library_names_spec='$libname$shrext'
;;
uts4*)
library_names_spec='$libname$shrext'
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Format of library name prefix.
libname_spec="$escaped_libname_spec"
# Library names that the linker finds when passed -lNAME.
library_names_spec="$escaped_library_names_spec"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
EOF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,102 @@
# List of browsers and their categories
# e.g., WORD delimited by tab(s) TYPE
#
# **IMPORTANT NOTE**:
# ---------------------
# The SIZE of the list is proportional to the run time.
# Thus, the longer the list, the more time GoAccess will take to parse it.
#
# Also, you should note that the higher the browser/item is on the list, the
# faster the parsing will be.
#
# The list needs to be specified using --browsers-file=<path>. This file is not
# parsed by default.
#
# The items below are sample crawlers, adjust as needed.
Chef Client Crawlers
Abonti Crawlers
SISTRIX Crawlers
DotBot Crawlers
Speedy Spider Crawlers
Sosospider Crawlers
BPImageWalker Crawlers
DoCoMo Crawlers
GSLFbot Crawlers
YodaoBot Crawlers
AddThis Crawlers
Purebot Crawlers
CCBot Crawlers
findlinks Crawlers
ichiro Crawlers
Linguee Bot Crawlers
Gigabot Crawlers
BacklinkCrawler Crawlers
distilator Crawlers
Aboundex Crawlers
UnwindFetchor Crawlers
SBIder Crawlers
TestNutch Crawlers
DomainCrawler Crawlers
NextGenSearchBot Crawlers
SEOENGWorldBot Crawlers
Cityreview Crawlers
PagePeeker Crawlers
JS-Kit Crawlers
ScreenerBot Crawlers
ShowyouBot Crawlers
SolomonoBot Crawlers
Domnutch Crawlers
MaxPoint Crawlers
NCBot Crawlers
TosCrawler Crawlers
Updownerbot Crawlers
OpenWebSpider Crawlers
WordPress Crawlers
PEAR Crawlers
ZumBot Crawlers
YisouSpider Crawlers
W3C Crawlers
vcheck Crawlers
PercolateCrawler Crawlers
NING Crawlers
gvfs Crawlers
CatchBot Crawlers
Combine Crawlers
A6-Indexer Crawlers
Altresium Crawlers
Comodo Crawlers
crawler4j Crawlers
Cricket Crawlers
EC2LinkFinder Crawlers
envolk Crawlers
GeoHasher Crawlers
HTMLParser Crawlers
MLBot Crawlers
Jaxified Crawlers
LinkWalker Crawlers
nutch Crawlers
PostRank Crawlers
keybase-proofs Crawlers
CommonCrawler Crawlers
X-CAD-SE Crawlers
Safeassign Crawlers
Nmap Crawlers
sqlmap Crawlers
Jorgee Crawlers
PxBroker Crawlers
Seekport Crawlers
adscanner Crawlers
AfD-Verbotsverfahren_JETZT! Crawlers
Vienna Feeds
Windows-RSS-Platform Feeds
newsbeuter Feeds
Wrangler Feeds
Fever Feeds
Tiny Feeds
FreshRSS Feeds
KrISS Feeds
SimplePie Feeds
Feedsubs Feeds
UniversalFeedParser Feeds

@ -0,0 +1,766 @@
######################################
# Time Format Options (required)
######################################
#
# The hour (24-hour clock) [00,23]; leading zeros are permitted but not required.
# The minute [00,59]; leading zeros are permitted but not required.
# The seconds [00,60]; leading zeros are permitted but not required.
# See `man strftime` for more details
#
# The following time format works with any of the
# Apache/NGINX's log formats below.
#
#time-format %H:%M:%S
#
# Google Cloud Storage or
# The time in microseconds since the Unix epoch.
#
#time-format %f
# Squid native log format
#
#time-format %s
######################################
# Date Format Options (required)
######################################
#
# The date-format variable followed by a space, specifies
# the log format date containing any combination of regular
# characters and special format specifiers. They all begin with a
# percentage (%) sign. See `man strftime`
#
# The following date format works with any of the
# Apache/NGINX's log formats below.
#
#date-format %d/%b/%Y
#
# AWS | Amazon CloudFront (Download Distribution)
# AWS | Elastic Load Balancing
# W3C (IIS)
#
#date-format %Y-%m-%d
#
# Google Cloud Storage or
# The time in microseconds since the Unix epoch.
#
#date-format %f
# Squid native log format
#
#date-format %s
######################################
# Log Format Options (required)
######################################
#
# The log-format variable followed by a space or \t for
# tab-delimited, specifies the log format string.
#
# NOTE: If the time/date is a timestamp in seconds or microseconds
# %x must be used instead of %d & %t to represent the date & time.
# NCSA Combined Log Format
#log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
# NCSA Combined Log Format with Virtual Host
#log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
# Common Log Format (CLF)
#log-format %h %^[%d:%t %^] "%r" %s %b
# Common Log Format (CLF) with Virtual Host
#log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b
# W3C
#log-format %d %t %h %^ %^ %^ %^ %r %^ %s %b %^ %^ %u %R
# Squid native log format
#log-format %^ %^ %^ %v %^: %x.%^ %~%L %h %^/%s %b %m %U
# AWS | Amazon CloudFront (Download Distribution)
#log-format %d\t%t\t%^\t%b\t%h\t%m\t%^\t%r\t%s\t%R\t%u\t%^
# Google Cloud Storage
#log-format "%x","%h",%^,%^,"%m","%U","%s",%^,"%b","%D",%^,"%R","%u"
# AWS | Elastic Load Balancing
#log-format %dT%t.%^ %^ %h:%^ %^ %T %^ %^ %^ %s %^ %b "%r" "%u"
# AWSS3 | Amazon Simple Storage Service (S3)
#log-format %^[%d:%t %^] %h %^"%r" %s %^ %b %^ %L %^ "%R" "%u"
# Virtualmin Log Format with Virtual Host
#log-format %h %^ %v %^[%d:%t %^] "%r" %s %b "%R" "%u"
# In addition to specifying the raw log/date/time formats, for
# simplicity, any of the following predefined log format names can be
# supplied to the log/date/time-format variables. GoAccess can also
# handle one predefined name in one variable and another predefined
# name in another variable.
#
#log-format COMBINED
#log-format VCOMBINED
#log-format COMMON
#log-format VCOMMON
#log-format W3C
#log-format SQUID
#log-format CLOUDFRONT
#log-format CLOUDSTORAGE
#log-format AWSELB
#log-format AWSS3
######################################
# UI Options
######################################
# Choose among color schemes
# 1 : Monochrome
# 2 : Green
# 3 : Monokai (if 256-colors supported)
#
#color-scheme 3
# Prompt log/date configuration window on program start.
#
config-dialog false
# Color highlight active panel.
#
hl-header true
# Specify a custom CSS file in the HTML report.
#
#html-custom-css /path/file.css
# Specify a custom JS file in the HTML report.
#
#html-custom-js /path/file.js
# Set default HTML preferences.
#
# NOTE: A valid JSON object is required.
# DO NOT USE A MULTILINE JSON OBJECT.
# The parser will only parse the value next to `html-prefs` (single line)
# It allows the ability to customize each panel plot. See example below.
#
#html-prefs {"theme":"bright","perPage":5,"layout":"horizontal","showTables":true,"visitors":{"plot":{"chartType":"bar"}}}
# Set HTML report page title and header.
#
#html-report-title My Awesome Web Stats
# Format JSON output using tabs and newlines.
#
json-pretty-print false
# Turn off colored output. This is the default output on
# terminals that do not support colors.
# true : for no color output
# false : use color-scheme
#
no-color false
# Don't write column names in the terminal output. By default, it displays
# column names for each available metric in every panel.
#
no-column-names false
# Disable summary metrics on the CSV output.
#
no-csv-summary false
# Disable progress metrics.
#
no-progress false
# Disable scrolling through panels on TAB.
#
no-tab-scroll false
# Disable progress metrics and parsing spinner.
#
#no-parsing-spinner true
# Do not show the last updated field displayed in the HTML generated report.
#
#no-html-last-updated true
# Enable mouse support on main dashboard.
#
with-mouse false
# Maximum number of items to show per panel.
# Note: Only the CSV and JSON outputs allow a maximum greater than the
# default value of 366.
#
#max-items 366
# Custom colors for the terminal output
# Tailor GoAccess to suit your own tastes.
#
# Color Syntax:
# DEFINITION space/tab colorFG#:colorBG# [[attributes,] PANEL]
#
# FG# = foreground color number [-1...255] (-1 = default terminal color)
# BG# = background color number [-1...255] (-1 = default terminal color)
#
# Optionally:
#
# It is possible to apply color attributes, such as:
# bold,underline,normal,reverse,blink.
# Multiple attributes are comma separated
#
# If desired, it is possible to apply custom colors per panel, that is, a
# metric in the REQUESTS panel can be of color A, while the same metric in the
# BROWSERS panel can be of color B.
#
# The following is a 256 color scheme (hybrid palette)
#
#color COLOR_MTRC_HITS color110:color-1
#color COLOR_MTRC_VISITORS color173:color-1
#color COLOR_MTRC_DATA color221:color-1
#color COLOR_MTRC_BW color167:color-1
#color COLOR_MTRC_AVGTS color143:color-1
#color COLOR_MTRC_CUMTS color247:color-1
#color COLOR_MTRC_MAXTS color186:color-1
#color COLOR_MTRC_PROT color109:color-1
#color COLOR_MTRC_MTHD color139:color-1
#color COLOR_MTRC_HITS_PERC color186:color-1
#color COLOR_MTRC_HITS_PERC_MAX color139:color-1
#color COLOR_MTRC_HITS_PERC_MAX color139:color-1 VISITORS
#color COLOR_MTRC_HITS_PERC_MAX color139:color-1 OS
#color COLOR_MTRC_HITS_PERC_MAX color139:color-1 BROWSERS
#color COLOR_MTRC_HITS_PERC_MAX color139:color-1 VISIT_TIMES
#color COLOR_MTRC_VISITORS_PERC color186:color-1
#color COLOR_MTRC_VISITORS_PERC_MAX color139:color-1
#color COLOR_PANEL_COLS color243:color-1
#color COLOR_BARS color250:color-1
#color COLOR_ERROR color231:color167
#color COLOR_SELECTED color7:color167
#color COLOR_PANEL_ACTIVE color7:color237
#color COLOR_PANEL_HEADER color250:color235
#color COLOR_PANEL_DESC color242:color-1
#color COLOR_OVERALL_LBLS color243:color-1
#color COLOR_OVERALL_VALS color167:color-1
#color COLOR_OVERALL_PATH color186:color-1
#color COLOR_ACTIVE_LABEL color139:color235 bold underline
#color COLOR_BG color250:color-1
#color COLOR_DEFAULT color243:color-1
#color COLOR_PROGRESS color7:color110
######################################
# Server Options
######################################
# Specify IP address to bind server to.
#
#addr 0.0.0.0
# Run GoAccess as daemon (if --real-time-html enabled).
#
#daemonize false
# Ensure clients send the specified origin header upon the WebSocket
# handshake.
#
#origin http://example.org
# The port to which the connection is being attempted to connect.
# By default GoAccess' WebSocket server listens on port 7890
# See man page or http://gwsocket.io for details.
#
#port 7890
# Write the PID to a file when used along the daemonize option.
#
#pid-file /var/run/goaccess.pid
# Enable real-time HTML output.
#
#real-time-html true
# Path to TLS/SSL certificate.
# Note that ssl-cert and ssl-key need to be used to enable TLS/SSL.
#
#ssl-cert /path/ssl/domain.crt
# Path to TLS/SSL private key.
# Note that ssl-cert and ssl-key need to be used to enable TLS/SSL.
#
#ssl-key /path/ssl/domain.key
# URL to which the WebSocket server responds. This is the URL supplied
# to the WebSocket constructor on the client side.
#
# Optionally, it is possible to specify the WebSocket URI scheme, such as ws://
# or wss:// for unencrypted and encrypted connections.
# e.g., ws-url wss://goaccess.io
#
# If GoAccess is running behind a proxy, you could set the client side
# to connect to a different port by specifying the host followed by a
# colon and the port.
# e.g., ws-url goaccess.io:9999
#
# By default, it will attempt to connect to localhost. If GoAccess is
# running on a remote server, the host of the remote server should be
# specified here. Also, make sure it is a valid host and NOT an http
# address.
#
#ws-url goaccess.io
# Path to read named pipe (FIFO).
#
#fifo-in /tmp/wspipein.fifo
# Path to write named pipe (FIFO).
#
#fifo-in /tmp/wspipeout.fifo
######################################
# File Options
######################################
# Specify the path to the input log file. If set, it will take
# priority over -f from the command line.
#
#log-file /var/log/apache2/access.log
# Send all debug messages to the specified file.
#
#debug-file debug.log
# Specify a custom configuration file to use. If set, it will take
# priority over the global configuration file (if any).
#
#config-file <filename>
# Log invalid requests to the specified file.
#
#invalid-requests <filename>
# Do not load the global configuration file.
#
#no-global-config false
######################################
# Parse Options
######################################
# Enable a list of user-agents by host. For faster parsing, do not
# enable this flag.
#
agent-list false
# Enable IP resolver on HTML|JSON|CSV output.
#
with-output-resolver false
# Exclude an IPv4 or IPv6 from being counted.
# Ranges can be included as well using a dash in between
# the IPs (start-end).
#
#exclude-ip 127.0.0.1
#exclude-ip 192.168.0.1-192.168.0.100
#exclude-ip ::1
#exclude-ip 0:0:0:0:0:ffff:808:804-0:0:0:0:0:ffff:808:808
# Include HTTP request method if found. This will create a
# request key containing the request method + the actual request.
#
# <yes|no> [default: yes]
#
http-method yes
# Include HTTP request protocol if found. This will create a
# request key containing the request protocol + the actual request.
#
# <yes|no> [default: yes]
#
http-protocol yes
# Write output to stdout given one of the following files and the
# corresponding extension for the output format:
#
# /path/file.csv - Comma-separated values (CSV)
# /path/file.json - JSON (JavaScript Object Notation)
# /path/file.html - HTML
#
# output /path/file.html
# Ignore request's query string.
# i.e., www.google.com/page.htm?query => www.google.com/page.htm
#
# Note: Removing the query string can greatly decrease memory
# consumption, especially on timestamped requests.
#
no-query-string false
# Disable IP resolver on terminal output.
#
no-term-resolver false
# Treat non-standard status code 444 as 404.
#
444-as-404 false
# Add 4xx client errors to the unique visitors count.
#
4xx-to-unique-count false
# Store accumulated processing time from parsing day-by-day logs.
# Only if configured with --enable-tcb=btree
#
#accumulated-time false
# IP address anonymization
# The IP anonymization option sets the last octet of IPv4 user IP addresses and
# the last 80 bits of IPv6 addresses to zeros.
# e.g., 192.168.20.100 => 192.168.20.0
# e.g., 2a03:2880:2110:df07:face:b00c::1 => 2a03:2880:2110:df07::
#
#anonymize-ip false
# Include static files that contain a query string in the static files
# panel.
# e.g., /fonts/fontawesome-webfont.woff?v=4.0.3
#
all-static-files false
# Include an additional delimited list of browsers/crawlers/feeds etc.
# See config/browsers.list for an example or
# https://raw.githubusercontent.com/allinurl/goaccess/master/config/browsers.list
#
#browsers-file <filename>
# Date specificity. Possible values: `date` (default), or `hr`.
#
#date-spec hr
# Decode double-encoded values.
#
double-decode false
# Enable parsing/displaying the given panel.
#
#enable-panel VISITORS
#enable-panel REQUESTS
#enable-panel REQUESTS_STATIC
#enable-panel NOT_FOUND
#enable-panel HOSTS
#enable-panel OS
#enable-panel BROWSERS
#enable-panel VISIT_TIMES
#enable-panel VIRTUAL_HOSTS
#enable-panel REFERRERS
#enable-panel REFERRING_SITES
#enable-panel KEYPHRASES
#enable-panel STATUS_CODES
#enable-panel REMOTE_USER
#enable-panel GEO_LOCATION
# Hide a referer but still count it. Wild cards are allowed. i.e., *.bing.com
#
#hide-referer *.google.com
#hide-referer bing.com
# Hour specificity. Possible values: `hr` (default), or `min` (tenth
# of a minute).
#
#hour-spec min
# Ignore crawlers from being counted.
# This will ignore robots listed under browsers.c
# Note that it will count them towards the total
# number of requests, but excluded from any of the panels.
#
ignore-crawlers false
# Parse and display crawlers only.
# This will ignore robots listed under browsers.c
# Note that it will count them towards the total
# number of requests, but excluded from any of the panels.
#
crawlers-only false
# Ignore static file requests.
# req : Only ignore request from valid requests
# panels : Ignore request from panels.
# Note that it will count them towards the total number of requests
# ignore-statics req
# Ignore parsing and displaying the given panel.
#
#ignore-panel VISITORS
#ignore-panel REQUESTS
#ignore-panel REQUESTS_STATIC
#ignore-panel NOT_FOUND
#ignore-panel HOSTS
#ignore-panel OS
#ignore-panel BROWSERS
#ignore-panel VISIT_TIMES
#ignore-panel VIRTUAL_HOSTS
ignore-panel REFERRERS
#ignore-panel REFERRING_SITES
ignore-panel KEYPHRASES
#ignore-panel STATUS_CODES
#ignore-panel REMOTE_USER
#ignore-panel GEO_LOCATION
# Ignore referers from being counted.
# This supports wild cards. For instance,
# '*' matches 0 or more characters (including spaces)
# '?' matches exactly one character
#
#ignore-referer *.domain.com
#ignore-referer ww?.domain.*
# Ignore parsing and displaying one or multiple status code(s)
#
#ignore-status 400
#ignore-status 502
# Number of lines from the access log to test against the provided
# log/date/time format. By default, the parser is set to test 10
# lines. If set to 0, the parser won't test any lines and will parse
# the whole access log.
#
#num-tests 10
# Parse log and exit without outputting data.
#
#process-and-exit false
# Display real OS names. e.g, Windows XP, Snow Leopard.
#
real-os true
# Sort panel on initial load.
# Sort options are separated by comma.
# Options are in the form: PANEL,METRIC,ORDER
#
# Available metrics:
# BY_HITS - Sort by hits
# BY_VISITORS - Sort by unique visitors
# BY_DATA - Sort by data
# BY_BW - Sort by bandwidth
# BY_AVGTS - Sort by average time served
# BY_CUMTS - Sort by cumulative time served
# BY_MAXTS - Sort by maximum time served
# BY_PROT - Sort by http protocol
# BY_MTHD - Sort by http method
# Available orders:
# ASC
# DESC
#
#sort-panel VISITORS,BY_DATA,ASC
#sort-panel REQUESTS,BY_HITS,ASC
#sort-panel REQUESTS_STATIC,BY_HITS,ASC
#sort-panel NOT_FOUND,BY_HITS,ASC
#sort-panel HOSTS,BY_HITS,ASC
#sort-panel OS,BY_HITS,ASC
#sort-panel BROWSERS,BY_HITS,ASC
#sort-panel VISIT_TIMES,BY_DATA,DESC
#sort-panel VIRTUAL_HOSTS,BY_HITS,ASC
#sort-panel REFERRERS,BY_HITS,ASC
#sort-panel REFERRING_SITES,BY_HITS,ASC
#sort-panel KEYPHRASES,BY_HITS,ASC
#sort-panel STATUS_CODES,BY_HITS,ASC
#sort-panel REMOTE_USER,BY_HITS,ASC
#sort-panel GEO_LOCATION,BY_HITS,ASC
# Consider the following extensions as static files
# The actual '.' is required and extensions are case sensitive
# For a full list, uncomment the less common static extensions below.
#
static-file .css
static-file .js
static-file .jpg
static-file .png
static-file .gif
static-file .ico
static-file .jpeg
static-file .pdf
static-file .csv
static-file .mpeg
static-file .mpg
static-file .swf
static-file .woff
static-file .woff2
static-file .xls
static-file .xlsx
static-file .doc
static-file .docx
static-file .ppt
static-file .pptx
static-file .txt
static-file .zip
static-file .ogg
static-file .mp3
static-file .mp4
static-file .exe
static-file .iso
static-file .gz
static-file .rar
static-file .svg
static-file .bmp
static-file .tar
static-file .tgz
static-file .tiff
static-file .tif
static-file .ttf
static-file .flv
#static-file .less
#static-file .ac3
#static-file .avi
#static-file .bz2
#static-file .class
#static-file .cue
#static-file .dae
#static-file .dat
#static-file .dts
#static-file .ejs
#static-file .eot
#static-file .eps
#static-file .img
#static-file .jar
#static-file .map
#static-file .mid
#static-file .midi
#static-file .ogv
#static-file .webm
#static-file .mkv
#static-file .odp
#static-file .ods
#static-file .odt
#static-file .otf
#static-file .pict
#static-file .pls
#static-file .ps
#static-file .qt
#static-file .rm
#static-file .svgz
#static-file .wav
#static-file .webp
######################################
# GeoIP Options
# Only if configured with --enable-geoip
######################################
# Standard GeoIP database for less memory usage.
#
#std-geoip false
# Specify path to GeoIP database file. i.e., GeoLiteCity.dat
# .dat file needs to be downloaded from maxmind.com.
#
# For IPv4 City database:
# wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gunzip GeoLiteCity.dat.gz
#
# For IPv6 City database:
# wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz
# gunzip GeoLiteCityv6.dat.gz
#
# For IPv6 Country database:
# wget -N http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz
# gunzip GeoIPv6.dat.gz
#
# For GeoIP2 City database:
# wget -N http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
# gunzip GeoLite2-City.mmdb.gz
#
# For GeoIP2 Country database:
# wget -N http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
# gunzip GeoLite2-Country.mmdb.gz
#
# Note: `geoip-city-data` is an alias of `geoip-database`
#
#geoip-database /usr/local/share/GeoIP/GeoLiteCity.dat
######################################
# Tokyo Cabinet Options
# Only if configured with --enable-tcb=btree
######################################
# GoAccess has the ability to process logs incrementally through the on-disk
# B+Tree database.
#
# It works in the following way:
# - A data set must be persisted first with --keep-db-files, then the same data
# set can be loaded with --load-from-disk.
# - If new data is passed (piped or through a log file), it will append it to
# the original data set.
# - To preserve the data at all times, --keep-db-files must be used.
# - If --load-from-disk is used without --keep-db-files, database files will be
# deleted upon closing the program.
# On-disk B+ Tree
# Persist parsed data into disk. This should be set to
# the first dataset prior to use `load-from-disk`.
# Setting it to false will delete all database files
# when exiting the program.
#keep-db-files true
# On-disk B+ Tree
# Load previously stored data from disk.
# Database files need to exist. See `keep-db-files`.
#load-from-disk false
# On-disk B+ Tree
# Path where the on-disk database files are stored.
# The default value is the /tmp/ directory
# Note the trailing forward-slash.
#
#db-path /tmp/
# On-disk B+ Tree
# Set the size in bytes of the extra mapped memory.
# The default value is 0.
#
#xmmap 0
# On-disk B+ Tree
# Max number of leaf nodes to be cached.
# Specifies the maximum number of leaf nodes to be cached.
# If it is not more than 0, the default value is specified.
# The default value is 1024.
#
#cache-lcnum 1024
# On-disk B+ Tree
# Specifies the maximum number of non-leaf nodes to be cached.
# If it is not more than 0, the default value is specified.
# The default value is 512.
#
#cache-ncnum 512
# On-disk B+ Tree
# Specifies the number of members in each leaf page.
# If it is not more than 0, the default value is specified.
# The default value is 128.
#
#tune-lmemb 128
# On-disk B+ Tree
# Specifies the number of members in each non-leaf page.
# If it is not more than 0, the default value is specified.
# The default value is 256.
#
#tune-nmemb 256
# On-disk B+ Tree
# Specifies the number of elements of the bucket array.
# If it is not more than 0, the default value is specified.
# The default value is 32749.
# Suggested size of the bucket array is about from 1 to 4
# times of the number of all pages to be stored.
#
#tune-bnum 32749
# On-disk B+ Tree
# Specifies that each page is compressed with ZLIB|BZ2 encoding.
# Disabled by default.
#
#compression zlib

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save