Compare commits
60 Commits
yuankaifen
...
master
After Width: | Height: | Size: 2.2 MiB |
@ -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,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
|
||||
*/
|
||||
|
After Width: | Height: | Size: 710 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 313 KiB |
After Width: | Height: | Size: 148 KiB |
After Width: | Height: | Size: 173 KiB |
After Width: | Height: | Size: 164 KiB |
After Width: | Height: | Size: 155 KiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 237 KiB |
After Width: | Height: | Size: 533 KiB |
After Width: | Height: | Size: 740 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 409 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 204 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 516 B |
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
|
||||
}
|
||||
]
|
@ -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);
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 255 KiB |
After Width: | Height: | Size: 1006 B |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 2.8 KiB |
@ -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';
|
||||
|
@ -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,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">×</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>
|
@ -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.
|
||||
|
@ -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
|
@ -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:
|
@ -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:
|
@ -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
|
@ -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
|