From ebec0c6f2a3ee24686006fae2ffe2f2b152d60f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E6=81=92?= <2323333339@qq.com> Date: Thu, 20 May 2021 18:39:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/joe.census.min.css | 2 +- assets/css/joe.census.min.scss | 110 +++++--- assets/js/joe.census.js | 470 +++++++++++++++++++-------------- assets/js/joe.census.min.js | 2 +- census.php | 81 +++--- core/core.php | 3 + core/function.php | 2 +- core/route.php | 43 ++- package.json | 2 +- 9 files changed, 442 insertions(+), 273 deletions(-) diff --git a/assets/css/joe.census.min.css b/assets/css/joe.census.min.css index c605c7f..3fa507e 100644 --- a/assets/css/joe.census.min.css +++ b/assets/css/joe.census.min.css @@ -1 +1 @@ -.joe_census__basic{display:grid;grid-template-columns:repeat(4, 1fr);gap:15px;margin-bottom:15px}.joe_census__basic-item{display:flex;align-items:center;justify-content:space-between;background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-inner) var(--radius-wrap) var(--radius-wrap) var(--radius-inner);padding:12px 15px}.joe_census__basic-item .count h6{font-size:12px;margin-bottom:10px;color:var(--seat)}.joe_census__basic-item .count p{font-size:22px;font-weight:700}.joe_census__basic-item .icon{fill:var(--classA)}.joe_census__basic-item:nth-child(1){border-left:5px solid #1cc88a;color:#1cc88a}.joe_census__basic-item:nth-child(2){border-left:5px solid #36b9cc;color:#36b9cc}.joe_census__basic-item:nth-child(3){border-left:5px solid #2196f3;color:#2196f3}.joe_census__basic-item:nth-child(4){border-left:5px solid #9c27b0;color:#9c27b0}.joe_census__server{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px}.joe_census__server-item{background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-wrap)}.joe_census__server-item .title{display:flex;align-items:center;height:45px;padding:0 12px;border-bottom:1px solid var(--classD);color:var(--main);justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.joe_census__server-item .title .count{color:var(--minor);font-size:12px}.joe_census__server-item .title .count .split{margin:0 5px}.joe_census__server-item .content{padding:15px}.joe_census__server-item .content #work,.joe_census__server-item .content #flow{height:348px} +.joe_census__basic{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px;margin-bottom:15px}.joe_census__basic-item.list{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px}.joe_census__basic-item.list .list{display:flex;align-items:center;justify-content:space-between;background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-inner) var(--radius-wrap) var(--radius-wrap) var(--radius-inner);padding:15px 15px 12px}.joe_census__basic-item.list .list .count{display:flex;flex-direction:column;justify-content:space-between;height:100%}.joe_census__basic-item.list .list .count h6{font-size:12px;margin-bottom:10px;color:var(--seat)}.joe_census__basic-item.list .list .count p{font-size:28px;font-weight:700}.joe_census__basic-item.list .list .icon{fill:var(--classA)}.joe_census__basic-item.list .list:nth-child(1){border-left:5px solid #1cc88a;color:#1cc88a}.joe_census__basic-item.list .list:nth-child(2){border-left:5px solid #36b9cc;color:#36b9cc}.joe_census__basic-item.list .list:nth-child(3){border-left:5px solid #2196f3;color:#2196f3}.joe_census__basic-item.list .list:nth-child(4){border-left:5px solid #9c27b0;color:#9c27b0}.joe_census__basic-item.category{background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-wrap)}.joe_census__basic-item.category #category{height:230px}.joe_census__lately{background:var(--background);margin-bottom:15px;border-radius:var(--radius-wrap);box-shadow:var(--box-shadow)}.joe_census__lately .title{display:flex;align-items:center;height:45px;padding:0 12px;border-bottom:1px solid var(--classC);color:var(--main);justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.joe_census__lately #lately{height:320px}.joe_census__server{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px}.joe_census__server-item{background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-wrap)}.joe_census__server-item .title{display:flex;align-items:center;height:45px;padding:0 12px;border-bottom:1px solid var(--classC);color:var(--main);justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.joe_census__server-item .title .count{color:var(--minor);font-size:12px}.joe_census__server-item .title .count .split{margin:0 5px}.joe_census__server-item .content{padding:15px}.joe_census__server-item .content #work,.joe_census__server-item .content #flow{height:348px} diff --git a/assets/css/joe.census.min.scss b/assets/css/joe.census.min.scss index ca3d8dd..7cbda8d 100644 --- a/assets/css/joe.census.min.scss +++ b/assets/css/joe.census.min.scss @@ -1,47 +1,85 @@ .joe_census { &__basic { display: grid; - grid-template-columns: repeat(4, 1fr); + grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 15px; &-item { + &.list { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 15px; + .list { + display: flex; + align-items: center; + justify-content: space-between; + background: var(--background); + box-shadow: var(--box-shadow); + border-radius: var(--radius-inner) var(--radius-wrap) var(--radius-wrap) var(--radius-inner); + padding: 15px 15px 12px; + .count { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; + h6 { + font-size: 12px; + margin-bottom: 10px; + color: var(--seat); + } + p { + font-size: 28px; + font-weight: 700; + } + } + .icon { + fill: var(--classA); + } + &:nth-child(1) { + border-left: 5px solid #1cc88a; + color: #1cc88a; + } + &:nth-child(2) { + border-left: 5px solid #36b9cc; + color: #36b9cc; + } + &:nth-child(3) { + border-left: 5px solid #2196f3; + color: #2196f3; + } + &:nth-child(4) { + border-left: 5px solid #9c27b0; + color: #9c27b0; + } + } + } + &.category { + background: var(--background); + box-shadow: var(--box-shadow); + border-radius: var(--radius-wrap); + #category { + height: 230px; + } + } + } + } + &__lately { + background: var(--background); + margin-bottom: 15px; + border-radius: var(--radius-wrap); + box-shadow: var(--box-shadow); + .title { display: flex; align-items: center; + height: 45px; + padding: 0 12px; + border-bottom: 1px solid var(--classC); + color: var(--main); justify-content: space-between; - background: var(--background); - box-shadow: var(--box-shadow); - border-radius: var(--radius-inner) var(--radius-wrap) var(--radius-wrap) var(--radius-inner); - padding: 12px 15px; - .count { - h6 { - font-size: 12px; - margin-bottom: 10px; - color: var(--seat); - } - p { - font-size: 22px; - font-weight: 700; - } - } - .icon { - fill: var(--classA); - } - &:nth-child(1) { - border-left: 5px solid #1cc88a; - color: #1cc88a; - } - &:nth-child(2) { - border-left: 5px solid #36b9cc; - color: #36b9cc; - } - &:nth-child(3) { - border-left: 5px solid #2196f3; - color: #2196f3; - } - &:nth-child(4) { - border-left: 5px solid #9c27b0; - color: #9c27b0; - } + user-select: none; + } + #lately { + height: 320px; } } &__server { @@ -57,7 +95,7 @@ align-items: center; height: 45px; padding: 0 12px; - border-bottom: 1px solid var(--classD); + border-bottom: 1px solid var(--classC); color: var(--main); justify-content: space-between; user-select: none; diff --git a/assets/js/joe.census.js b/assets/js/joe.census.js index 44d66f9..9dacf9f 100644 --- a/assets/js/joe.census.js +++ b/assets/js/joe.census.js @@ -1,208 +1,296 @@ document.addEventListener('DOMContentLoaded', () => { - /* 转换字节 */ - const bytesToSize = bytes => { - const k = 1024, - sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - i = Math.floor(Math.log(bytes) / Math.log(k)); - return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]; - }; + { + /* 转换字节 */ + const bytesToSize = bytes => { + const k = 1024, + sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], + i = Math.floor(Math.log(bytes) / Math.log(k)); + return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]; + }; - const categories = []; - const upSeries = []; - const downSeries = []; + const categories = []; + const upSeries = []; + const downSeries = []; - const flowDom = document.querySelector('#flow'); - const workDom = document.querySelector('#work'); - const flowChart = flowDom && echarts.init(flowDom); - const workChart = workDom && echarts.init(workDom); - if (flowDom && workDom) initChart(); + const flowDom = document.querySelector('#flow'); + const workDom = document.querySelector('#work'); + const flowChart = flowDom && echarts.init(flowDom); + const workChart = workDom && echarts.init(workDom); + if (flowDom && workDom) initChart(); - function initChart() { + function initChart() { + $.ajax({ + url: Joe.BASE_API, + type: 'POST', + dataType: 'json', + data: { + routeType: 'server_status' + }, + success(res) { + { + $('.joe_census__server-item .count .up').html(`总发送:${bytesToSize(res.upTotal)}`); + $('.joe_census__server-item .count .down').html(`总接收:${bytesToSize(res.downTotal)}`); + const stamp = new Date(); + const hours = String(stamp.getHours()).padStart(2, 0); + const minutes = String(stamp.getMinutes()).padStart(2, 0); + const seconds = String(stamp.getSeconds()).padStart(2, 0); + const time = `${hours}:${minutes}:${seconds}`; + categories.push(time); + upSeries.push(res.up); + downSeries.push(res.down); + if (categories.length > 5) categories.shift(); + if (upSeries.length > 5) upSeries.shift(); + if (downSeries.length > 5) downSeries.shift(); + flowChart.setOption({ + title: { + subtext: '单位 KB/s' + }, + grid: { + left: '3%', + right: '4%', + bottom: '0', + containLabel: true + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross', + label: { + backgroundColor: '#6a7985' + } + } + }, + xAxis: { + axisTick: { + show: false + }, + type: 'category', + boundaryGap: false, + data: categories + }, + yAxis: { + type: 'value' + }, + series: [ + { + type: 'line', + name: '上行', + smooth: true, + showSymbol: false, + itemStyle: { + normal: { + color: '#f39494', + areaStyle: { + color: '#f39494' + }, + lineStyle: { + width: 2, + color: '#f39494' + } + } + }, + stack: '总量', + data: upSeries + }, + { + type: 'line', + name: '下行', + smooth: true, + showSymbol: false, + itemStyle: { + normal: { + color: '#9dd3e8', + areaStyle: { + color: '#9dd3e8' + }, + lineStyle: { + width: 2, + color: '#9dd3e8' + } + } + }, + stack: '总量', + data: downSeries + } + ] + }); + } + { + /* CPU占用 */ + const cpuUse = res.cpu[0]; + /* 内存占用 */ + const memoryRealUse = Math.round((res.memory.memRealUsed / res.memory.memTotal) * 1000) / 10; + /* 内存缓冲 */ + const memoryCacheUse = Math.round((res.memory.memCached / res.memory.memTotal) * 1000) / 10; + /* 系统缓冲 */ + const memoryBufferUse = Math.round((res.memory.memBuffers / res.memory.memTotal) * 1000) / 10; + /* 系统负载 */ + const systemLoad = Math.round((res.load.one / res.load.max) * 100) > 100 ? 100 : Math.round((res.load.one / res.load.max) * 100); + workChart.setOption({ + title: { + subtext: '单位 百分比' + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + grid: { + left: '3%', + right: '3%', + bottom: '3%', + containLabel: true + }, + xAxis: { + type: 'category', + axisTick: { + show: false + }, + data: ['CPU占用', '内存占用', '系统缓冲', '内存缓冲', '系统负载'] + }, + yAxis: { + type: 'value' + }, + series: { + data: [ + { + name: 'CPU占用', + value: cpuUse, + itemStyle: { + color: '#b3c25a' + } + }, + { + name: '内存占用', + value: memoryRealUse, + itemStyle: { + color: '#67b580' + } + }, + { + name: '系统缓冲', + value: memoryBufferUse, + itemStyle: { + color: '#86ba71' + } + }, + { + name: '内存缓冲', + value: memoryCacheUse, + itemStyle: { + color: '#feb041' + } + }, + { + name: '系统负载', + value: systemLoad, + itemStyle: { + color: '#fd7e55' + } + } + ], + type: 'bar', + showBackground: true, + label: { + show: true, + color: '#ffffff', + formatter: params => `${params.data.value} %` + }, + backgroundStyle: { + color: 'rgba(180, 180, 180, 0.2)' + } + } + }); + } + setTimeout(initChart, 2000); + } + }); + } + } + + /* 初始化统计 */ + { + const categoryDom = document.querySelector('#category'); + const categoryChart = echarts.init(categoryDom); + const seriesData = []; + $('.joe_census__basic-item.category ul li').each((index, item) => { + seriesData.push({ + name: item.getAttribute('data-name'), + value: item.getAttribute('data-value') + }); + }); + categoryChart.setOption({ + tooltip: { + trigger: 'item' + }, + series: [ + { + type: 'pie', + roseType: 'area', + itemStyle: { + borderRadius: 8 + }, + data: seriesData + } + ] + }); + } + + /* 初始化评论统计 */ + { + const latelyDom = document.querySelector('#lately'); + const latelyChart = echarts.init(latelyDom); $.ajax({ url: Joe.BASE_API, type: 'POST', dataType: 'json', data: { - routeType: 'server_status' + routeType: 'comment_lately' }, success(res) { - { - $('.joe_census__server-item .count .up').html(`总发送:${bytesToSize(res.upTotal)}`); - $('.joe_census__server-item .count .down').html(`总接收:${bytesToSize(res.downTotal)}`); - const stamp = new Date(); - const hours = String(stamp.getHours()).padStart(2, 0); - const minutes = String(stamp.getMinutes()).padStart(2, 0); - const seconds = String(stamp.getSeconds()).padStart(2, 0); - const time = `${hours}:${minutes}:${seconds}`; - categories.push(time); - upSeries.push(res.up); - downSeries.push(res.down); - if (categories.length > 5) categories.shift(); - if (upSeries.length > 5) upSeries.shift(); - if (downSeries.length > 5) downSeries.shift(); - flowChart.setOption({ - title: { - subtext: '单位 KB/s' - }, - grid: { - left: '3%', - right: '4%', - bottom: '0', - containLabel: true - }, - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross', - label: { - backgroundColor: '#6a7985' - } - } - }, - xAxis: { - axisTick: { - show: false - }, - type: 'category', - boundaryGap: false, - data: categories - }, - yAxis: { - type: 'value' - }, - series: [ - { - type: 'line', - name: '上行', - smooth: true, - showSymbol: false, - itemStyle: { - normal: { - color: '#f39494', - areaStyle: { - color: '#f39494' - }, - lineStyle: { - width: 2, - color: '#f39494' - } - } - }, - stack: '总量', - data: upSeries - }, - { - type: 'line', - name: '下行', - smooth: true, - showSymbol: false, - itemStyle: { - normal: { - color: '#9dd3e8', - areaStyle: { - color: '#9dd3e8' - }, - lineStyle: { - width: 2, - color: '#9dd3e8' - } - } - }, - stack: '总量', - data: downSeries - } - ] - }); - } - { - /* CPU占用 */ - const cpuUse = res.cpu[0]; - /* 内存占用 */ - const memoryRealUse = Math.round((res.memory.memRealUsed / res.memory.memTotal) * 1000) / 10; - /* 内存缓冲 */ - const memoryCacheUse = Math.round((res.memory.memCached / res.memory.memTotal) * 1000) / 10; - /* 系统缓冲 */ - const memoryBufferUse = Math.round((res.memory.memBuffers / res.memory.memTotal) * 1000) / 10; - /* 系统负载 */ - const systemLoad = Math.round((res.load.one / res.load.max) * 100) > 100 ? 100 : Math.round((res.load.one / res.load.max) * 100); - workChart.setOption({ - title: { - subtext: '单位 百分比' - }, - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - grid: { - left: '3%', - right: '3%', - bottom: '3%', - containLabel: true - }, - xAxis: { - type: 'category', - axisTick: { - show: false - }, - data: ['CPU占用', '内存占用', '系统缓冲', '内存缓冲', '系统负载'] - }, - yAxis: { - type: 'value' - }, - series: { - data: [ - { - name: 'CPU占用', - value: cpuUse, - itemStyle: { - color: '#b3c25a' - } - }, - { - name: '内存占用', - value: memoryRealUse, - itemStyle: { - color: '#67b580' - } - }, - { - name: '系统缓冲', - value: memoryBufferUse, - itemStyle: { - color: '#86ba71' - } - }, - { - name: '内存缓冲', - value: memoryCacheUse, - itemStyle: { - color: '#feb041' - } - }, - { - name: '系统负载', - value: systemLoad, - itemStyle: { - color: '#fd7e55' - } - } - ], - type: 'bar', - showBackground: true, + latelyChart.setOption({ + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross', label: { - show: true, - color: '#ffffff', - formatter: params => `${params.data.value} %` - }, - backgroundStyle: { - color: 'rgba(180, 180, 180, 0.2)' + backgroundColor: '#6a7985' } } - }); - } - setTimeout(initChart, 2000); + }, + grid: { + left: '3%', + right: '3%', + bottom: '3%', + containLabel: true + }, + xAxis: { + type: 'category', + axisTick: { + show: false + }, + data: res.categories + }, + yAxis: { + type: 'value' + }, + series: { + name: '数量', + itemStyle: { + normal: { + color: '#91cc75', + lineStyle: { + width: 2, + color: '#91cc75' + } + } + }, + data: res.series, + type: 'line', + smooth: true + } + }); } }); } diff --git a/assets/js/joe.census.min.js b/assets/js/joe.census.min.js index 07a62d6..9b8525f 100644 --- a/assets/js/joe.census.min.js +++ b/assets/js/joe.census.min.js @@ -1 +1 @@ -document.addEventListener("DOMContentLoaded",()=>{function e(){$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"server_status"},success(l){{$(".joe_census__server-item .count .up").html(`总发送:${t(l.upTotal)}`),$(".joe_census__server-item .count .down").html(`总接收:${t(l.downTotal)}`);const e=new Date,n=String(e.getHours()).padStart(2,0),i=String(e.getMinutes()).padStart(2,0),m=String(e.getSeconds()).padStart(2,0),d=`${n}:${i}:${m}`;o.push(d),a.push(l.up),r.push(l.down),o.length>5&&o.shift(),a.length>5&&a.shift(),r.length>5&&r.shift(),s.setOption({title:{subtext:"单位 KB/s"},grid:{left:"3%",right:"4%",bottom:"0",containLabel:!0},tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},xAxis:{axisTick:{show:!1},type:"category",boundaryGap:!1,data:o},yAxis:{type:"value"},series:[{type:"line",name:"上行",smooth:!0,showSymbol:!1,itemStyle:{normal:{color:"#f39494",areaStyle:{color:"#f39494"},lineStyle:{width:2,color:"#f39494"}}},stack:"总量",data:a},{type:"line",name:"下行",smooth:!0,showSymbol:!1,itemStyle:{normal:{color:"#9dd3e8",areaStyle:{color:"#9dd3e8"},lineStyle:{width:2,color:"#9dd3e8"}}},stack:"总量",data:r}]})}{const e=l.cpu[0],t=Math.round(l.memory.memRealUsed/l.memory.memTotal*1e3)/10,o=Math.round(l.memory.memCached/l.memory.memTotal*1e3)/10,a=Math.round(l.memory.memBuffers/l.memory.memTotal*1e3)/10,r=Math.round(l.load.one/l.load.max*100)>100?100:Math.round(l.load.one/l.load.max*100);i.setOption({title:{subtext:"单位 百分比"},tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},grid:{left:"3%",right:"3%",bottom:"3%",containLabel:!0},xAxis:{type:"category",axisTick:{show:!1},data:["CPU占用","内存占用","系统缓冲","内存缓冲","系统负载"]},yAxis:{type:"value"},series:{data:[{name:"CPU占用",value:e,itemStyle:{color:"#b3c25a"}},{name:"内存占用",value:t,itemStyle:{color:"#67b580"}},{name:"系统缓冲",value:a,itemStyle:{color:"#86ba71"}},{name:"内存缓冲",value:o,itemStyle:{color:"#feb041"}},{name:"系统负载",value:r,itemStyle:{color:"#fd7e55"}}],type:"bar",showBackground:!0,label:{show:!0,color:"#ffffff",formatter:e=>`${e.data.value} %`},backgroundStyle:{color:"rgba(180, 180, 180, 0.2)"}}})}setTimeout(e,2e3)}})}const t=e=>{const t=1024,o=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],a=Math.floor(Math.log(e)/Math.log(t));return(e/Math.pow(t,a)).toPrecision(3)+" "+o[a]},o=[],a=[],r=[],l=document.querySelector("#flow"),n=document.querySelector("#work"),s=l&&echarts.init(l),i=n&&echarts.init(n);l&&n&&e()}); \ No newline at end of file +document.addEventListener("DOMContentLoaded",()=>{{const t=e=>{const t=1024,o=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],a=Math.floor(Math.log(e)/Math.log(t));return(e/Math.pow(t,a)).toPrecision(3)+" "+o[a]},o=[],a=[],r=[],l=document.querySelector("#flow"),i=document.querySelector("#work"),s=l&&echarts.init(l),n=i&&echarts.init(i);function e(){$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"server_status"},success(l){{$(".joe_census__server-item .count .up").html(`总发送:${t(l.upTotal)}`),$(".joe_census__server-item .count .down").html(`总接收:${t(l.downTotal)}`);const e=new Date,i=String(e.getHours()).padStart(2,0),n=String(e.getMinutes()).padStart(2,0),c=String(e.getSeconds()).padStart(2,0),m=`${i}:${n}:${c}`;o.push(m),a.push(l.up),r.push(l.down),o.length>5&&o.shift(),a.length>5&&a.shift(),r.length>5&&r.shift(),s.setOption({title:{subtext:"单位 KB/s"},grid:{left:"3%",right:"4%",bottom:"0",containLabel:!0},tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},xAxis:{axisTick:{show:!1},type:"category",boundaryGap:!1,data:o},yAxis:{type:"value"},series:[{type:"line",name:"上行",smooth:!0,showSymbol:!1,itemStyle:{normal:{color:"#f39494",areaStyle:{color:"#f39494"},lineStyle:{width:2,color:"#f39494"}}},stack:"总量",data:a},{type:"line",name:"下行",smooth:!0,showSymbol:!1,itemStyle:{normal:{color:"#9dd3e8",areaStyle:{color:"#9dd3e8"},lineStyle:{width:2,color:"#9dd3e8"}}},stack:"总量",data:r}]})}{const e=l.cpu[0],t=Math.round(l.memory.memRealUsed/l.memory.memTotal*1e3)/10,o=Math.round(l.memory.memCached/l.memory.memTotal*1e3)/10,a=Math.round(l.memory.memBuffers/l.memory.memTotal*1e3)/10,r=Math.round(l.load.one/l.load.max*100)>100?100:Math.round(l.load.one/l.load.max*100);n.setOption({title:{subtext:"单位 百分比"},tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},grid:{left:"3%",right:"3%",bottom:"3%",containLabel:!0},xAxis:{type:"category",axisTick:{show:!1},data:["CPU占用","内存占用","系统缓冲","内存缓冲","系统负载"]},yAxis:{type:"value"},series:{data:[{name:"CPU占用",value:e,itemStyle:{color:"#b3c25a"}},{name:"内存占用",value:t,itemStyle:{color:"#67b580"}},{name:"系统缓冲",value:a,itemStyle:{color:"#86ba71"}},{name:"内存缓冲",value:o,itemStyle:{color:"#feb041"}},{name:"系统负载",value:r,itemStyle:{color:"#fd7e55"}}],type:"bar",showBackground:!0,label:{show:!0,color:"#ffffff",formatter:e=>`${e.data.value} %`},backgroundStyle:{color:"rgba(180, 180, 180, 0.2)"}}})}setTimeout(e,2e3)}})}l&&i&&e()}{const e=document.querySelector("#category"),t=echarts.init(e),o=[];$(".joe_census__basic-item.category ul li").each((e,t)=>{o.push({name:t.getAttribute("data-name"),value:t.getAttribute("data-value")})}),t.setOption({tooltip:{trigger:"item"},series:[{type:"pie",roseType:"area",itemStyle:{borderRadius:8},data:o}]})}{const e=document.querySelector("#lately"),t=echarts.init(e);$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"comment_lately"},success(e){t.setOption({tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},grid:{left:"3%",right:"3%",bottom:"3%",containLabel:!0},xAxis:{type:"category",axisTick:{show:!1},data:e.categories},yAxis:{type:"value"},series:{name:"数量",itemStyle:{normal:{color:"#91cc75",lineStyle:{width:2,color:"#91cc75"}}},data:e.series,type:"line",smooth:!0}})}})}}); \ No newline at end of file diff --git a/census.php b/census.php index c244d57..b8f49dd 100644 --- a/census.php +++ b/census.php @@ -27,44 +27,59 @@ to($item); ?>
-
-
-
文章数
-

publishedPostsNum); ?>

+
+
+
+
文章数
+

publishedPostsNum); ?>

+
+ + +
- - - -
-
-
-
评论数
-

publishedCommentsNum); ?>

+
+
+
评论数
+

publishedCommentsNum); ?>

+
+ + + +
- - - - -
-
-
-
分类数
-

categoriesNum); ?>

+
+
+
分类数
+

categoriesNum); ?>

+
+ + + +
- - - - -
-
-
-
页面数
-

publishedPagesNum + $item->publishedPostsNum); ?>

+
+
+
页面数
+

publishedPagesNum + $item->publishedPostsNum); ?>

+
+ + +
- - -
+
+ widget('Widget_Metas_Category_List')->to($item); ?> +
    + next()) : ?> +
  • + +
+
+
+
+
+
最近评论
+
options->JBTPanel && $this->options->JBTKey) : ?>
diff --git a/core/core.php b/core/core.php index 14e2bf7..0595a8e 100644 --- a/core/core.php +++ b/core/core.php @@ -64,6 +64,9 @@ function themeInit($self) case 'server_status': _getServerStatus($self); break; + case 'comment_lately': + _getCommentLately($self); + break; }; } diff --git a/core/function.php b/core/function.php index 016b517..8845c8d 100644 --- a/core/function.php +++ b/core/function.php @@ -2,7 +2,7 @@ /* 获取主题当前版本号 */ function _getVersion() { - return "7.0.3"; + return "7.0.4"; }; /* 判断是否是手机 */ diff --git a/core/route.php b/core/route.php index b1184b5..f4cbbac 100644 --- a/core/route.php +++ b/core/route.php @@ -314,8 +314,8 @@ function _getServerStatus($self) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_panel . '/system?action=GetNetWork'); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3000); - curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3000); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3000); + curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3000); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array("request_time" => $request_time, "request_token" => $request_token)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); @@ -326,18 +326,43 @@ function _getServerStatus($self) curl_close($ch); $self->response->throwJson(array( /* 上行流量KB */ - "up" => $response["up"], + "up" => $response["up"] ? $response["up"] : 0, /* 下行流量KB */ - "down" => $response["down"], + "down" => $response["down"] ? $response["down"] : 0, /* 总发送(字节数) */ - "upTotal" => $response["upTotal"], + "upTotal" => $response["upTotal"] ? $response["upTotal"] : 0, /* 总接收(字节数) */ - "downTotal" => $response["downTotal"], + "downTotal" => $response["downTotal"] ? $response["downTotal"] : 0, /* 内存占用 */ - "memory" => $response["mem"], + "memory" => $response["mem"] ? $response["mem"] : ["memBuffers" => 0, "memCached" => 0, "memFree" => 0, "memRealUsed" => 0, "memTotal" => 0], /* CPU */ - "cpu" => $response["cpu"], + "cpu" => $response["cpu"] ? $response["cpu"] : [0, 0, [0], 0, 0, 0], /* 系统负载 */ - "load" => $response["load"], + "load" => $response["load"] ? $response["load"] : ["fifteen" => 0, "five" => 0, "limit" => 0, "max" => 0, "one" => 0, "safe" => 0], )); } + +function _getCommentLately($self) +{ + header("HTTP/1.1 200 OK"); + header('Access-Control-Allow-Origin:*'); + header("Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept"); + $time = time(); + $num = 7; + $categories = []; + $series = []; + $db = Typecho_Db::get(); + $prefix = $db->getPrefix(); + for ($i = 0; $i < $num; $i++) { + $date = date('Y/m/d', strtotime('+' . $i - ($num - 1) . ' days', $time)); + $sql = "SELECT coid FROM `{$prefix}comments` WHERE FROM_UNIXTIME(created, '%Y/%m/%d') = '{$date}' limit 100"; + $count = count($db->fetchAll($sql)); + $categories[] = $date; + $series[] = $count; + } + /* 抛出JSON */ + $self->response->throwJson([ + "categories" => $categories, + "series" => $series + ]); +} diff --git a/package.json b/package.json index 0c88eb5..fb51063 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typecho-joe-next", - "version": "7.0.3", + "version": "7.0.4", "description": "A Theme Of Typecho", "main": "index.php", "keywords": [