chroe: add view error logs redirect
This commit is contained in:
@@ -37,7 +37,7 @@ type LogsResult struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetSendLogs 获取所有日志记录
|
// GetSendLogs 获取所有日志记录
|
||||||
func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps interface{}) ([]LogsResult, error) {
|
func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps map[string]interface{}) ([]LogsResult, error) {
|
||||||
var logs []LogsResult
|
var logs []LogsResult
|
||||||
logt := db.NewScope(SendTasksLogs{}).TableName()
|
logt := db.NewScope(SendTasksLogs{}).TableName()
|
||||||
taskt := db.NewScope(SendTasks{}).TableName()
|
taskt := db.NewScope(SendTasks{}).TableName()
|
||||||
@@ -47,6 +47,13 @@ func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps int
|
|||||||
Select(fmt.Sprintf("%s.*, %s.name as task_name", logt, taskt)).
|
Select(fmt.Sprintf("%s.*, %s.name as task_name", logt, taskt)).
|
||||||
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
||||||
|
|
||||||
|
dayVal, ok := maps["day_created_on"]
|
||||||
|
if ok {
|
||||||
|
delete(maps, "day_created_on")
|
||||||
|
query = query.Where(fmt.Sprintf("DATE(%s.created_on) = ?", logt), dayVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.Where(maps)
|
||||||
if name != "" {
|
if name != "" {
|
||||||
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
|
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
|
||||||
}
|
}
|
||||||
@@ -63,13 +70,21 @@ func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps int
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetSendLogsTotal 获取所有日志总数
|
// GetSendLogsTotal 获取所有日志总数
|
||||||
func GetSendLogsTotal(name string, taskId string, maps interface{}) (int, error) {
|
func GetSendLogsTotal(name string, taskId string, maps map[string]interface{}) (int, error) {
|
||||||
var total int
|
var total int
|
||||||
logt := db.NewScope(SendTasksLogs{}).TableName()
|
logt := db.NewScope(SendTasksLogs{}).TableName()
|
||||||
taskt := db.NewScope(SendTasks{}).TableName()
|
taskt := db.NewScope(SendTasks{}).TableName()
|
||||||
query := db.
|
query := db.
|
||||||
Table(logt).
|
Table(logt).
|
||||||
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
||||||
|
|
||||||
|
dayVal, ok := maps["day_created_on"]
|
||||||
|
if ok {
|
||||||
|
delete(maps, "day_created_on")
|
||||||
|
query = query.Where(fmt.Sprintf("DATE(%s.created_on) = ?", logt), dayVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.Where(maps)
|
||||||
if name != "" {
|
if name != "" {
|
||||||
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
|
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ func GetTaskSendLogsList(c *gin.Context) {
|
|||||||
appG := app.Gin{C: c}
|
appG := app.Gin{C: c}
|
||||||
name := c.Query("name")
|
name := c.Query("name")
|
||||||
taskId := c.Query("taskid")
|
taskId := c.Query("taskid")
|
||||||
|
query := c.Query("query")
|
||||||
|
|
||||||
offset, limit := util.GetPageSize(c)
|
offset, limit := util.GetPageSize(c)
|
||||||
logsService := send_logs_service.SendTaskLogsService{
|
logsService := send_logs_service.SendTaskLogsService{
|
||||||
@@ -20,6 +21,7 @@ func GetTaskSendLogsList(c *gin.Context) {
|
|||||||
Name: name,
|
Name: name,
|
||||||
PageNum: offset,
|
PageNum: offset,
|
||||||
PageSize: limit,
|
PageSize: limit,
|
||||||
|
Query: query,
|
||||||
}
|
}
|
||||||
ways, err := logsService.GetAll()
|
ways, err := logsService.GetAll()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
package send_logs_service
|
package send_logs_service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"message-nest/models"
|
"message-nest/models"
|
||||||
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SendTaskLogsService struct {
|
type SendTaskLogsService struct {
|
||||||
ID int
|
ID int
|
||||||
TaskId string
|
TaskId string
|
||||||
Name string
|
Name string
|
||||||
|
Query string
|
||||||
|
|
||||||
PageNum int
|
PageNum int
|
||||||
PageSize int
|
PageSize int
|
||||||
@@ -27,5 +31,17 @@ func (st *SendTaskLogsService) GetAll() ([]models.LogsResult, error) {
|
|||||||
|
|
||||||
func (st *SendTaskLogsService) getMaps() map[string]interface{} {
|
func (st *SendTaskLogsService) getMaps() map[string]interface{} {
|
||||||
maps := make(map[string]interface{})
|
maps := make(map[string]interface{})
|
||||||
|
if len(st.Query) > 0 {
|
||||||
|
decodedString, err := url.QueryUnescape(st.Query)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("queryUrl编码解码失败: %s", err)
|
||||||
|
return maps
|
||||||
|
}
|
||||||
|
err = json.Unmarshal([]byte(decodedString), &maps)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("queryJson反序列化失败: %s", err)
|
||||||
|
return maps
|
||||||
|
}
|
||||||
|
}
|
||||||
return maps
|
return maps
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,14 +134,13 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const filterFunc = async () => {
|
const filterFunc = async () => {
|
||||||
await queryListData(state.currPage, state.pageSize, state.search, state.optionValue);
|
await queryListData(state.currPage, state.pageSize, state.search, state.optionValue);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const queryListData = async (page, size, name = '', taskid = '') => {
|
const queryListData = async (page, size, name = '', taskid = '', query = '') => {
|
||||||
let params = { page: page, size: size, name: name, taskid: taskid };
|
let params = { page: page, size: size, name: name, taskid: taskid, query: query };
|
||||||
const rsp = await request.get('/sendlogs/list', { params: params });
|
const rsp = await request.get('/sendlogs/list', { params: params });
|
||||||
state.tableData = await rsp.data.data.lists;
|
state.tableData = await rsp.data.data.lists;
|
||||||
state.total = await rsp.data.data.total;
|
state.total = await rsp.data.data.total;
|
||||||
@@ -149,7 +148,7 @@ export default {
|
|||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
state.search = router.query.name;
|
state.search = router.query.name;
|
||||||
await queryListData(1, state.pageSize, router.query.name, router.query.taskid);
|
await queryListData(1, state.pageSize, router.query.name, router.query.taskid, router.query.query);
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -32,6 +32,11 @@
|
|||||||
今日发送失败数
|
今日发送失败数
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<template #suffix>
|
||||||
|
<el-icon :size="14">
|
||||||
|
<ArrowRight v-if="data.today_failed_num > 0" @click="clickErrorNumDetail()" />
|
||||||
|
</el-icon>
|
||||||
|
</template>
|
||||||
</el-statistic>
|
</el-statistic>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -42,7 +47,7 @@
|
|||||||
|
|
||||||
<div class="echarts-box">
|
<div class="echarts-box">
|
||||||
<div id="daily-chart" style="width: 65%; height: 350px;"></div>
|
<div id="daily-chart" style="width: 65%; height: 350px;"></div>
|
||||||
<div id="send-cate-chart" style="width: 35%; height: 300px;"></div>
|
<div id="send-cate-chart" style="width: 35%; height: 350px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -50,17 +55,23 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script >
|
<script >
|
||||||
// import {
|
import {
|
||||||
// ArrowRight,
|
ArrowRight,
|
||||||
// CaretBottom,
|
CaretBottom,
|
||||||
// CaretTop,
|
CaretTop,
|
||||||
// Warning,
|
Warning,
|
||||||
// } from '@element-plus/icons-vue'
|
} from '@element-plus/icons-vue'
|
||||||
import { reactive, toRefs, onMounted, onUnmounted ,inject } from 'vue'
|
import { reactive, toRefs, onMounted, onUnmounted, inject } from 'vue'
|
||||||
import { request } from '@/api/api'
|
import { request } from '@/api/api'
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import { CommonUtils } from "@/util/commonUtils.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
components: {
|
||||||
|
ArrowRight,
|
||||||
|
},
|
||||||
setup() {
|
setup() {
|
||||||
|
const router = useRouter();
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: {},
|
data: {},
|
||||||
dailyChart: {},
|
dailyChart: {},
|
||||||
@@ -77,6 +88,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 格式化发送失败的数字样式
|
||||||
const formatFailedNumStyle = () => {
|
const formatFailedNumStyle = () => {
|
||||||
let style = {};
|
let style = {};
|
||||||
if (state.data.today_failed_num) {
|
if (state.data.today_failed_num) {
|
||||||
@@ -85,6 +97,13 @@ export default {
|
|||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const clickErrorNumDetail = () => {
|
||||||
|
let query = { status: 0, day_created_on: CommonUtils.getCurrentTimeStr().slice(0, 10) };
|
||||||
|
let queryStr = encodeURIComponent(JSON.stringify(query));
|
||||||
|
router.push('/sendlogs?query=' + queryStr, { replace: true });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await getStatisticData();
|
await getStatisticData();
|
||||||
formatFailedNumStyle();
|
formatFailedNumStyle();
|
||||||
@@ -179,7 +198,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state), formatFailedNumStyle
|
...toRefs(state), formatFailedNumStyle, clickErrorNumDetail
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user