This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nezha-nezha-fronted/nezha-fronted/src/libs/bus.js

363 lines
11 KiB
JavaScript
Raw Normal View History

2021-03-19 18:52:19 +08:00
import Vue from 'vue'
2021-04-27 19:24:26 +08:00
import moment from 'moment-timezone'
2021-03-19 18:52:19 +08:00
Date.prototype.setStart = function () {
this.setHours(0)
this.setMinutes(0)
this.setSeconds(0)
}
Date.prototype.setEnd = function () {
this.setHours(23)
this.setMinutes(59)
this.setSeconds(59)
}
export default new Vue({
2021-03-19 18:52:19 +08:00
data () {
return {
selectDate: [], // 选中的时间段
emailReg: /^[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,5}\.[a-zA-Z0-9]{1,5}$/,
// 创建策略信息
buildRuleInfo: {
triggers: [],
2021-03-19 18:52:19 +08:00
actions: []
},
backtoRulelist: '', // 返回策略列表页信息
2021-03-19 18:52:19 +08:00
// role: md5(1),
role: 1,
// 创建图表信息
chartAddInfo: {
2021-03-19 18:52:19 +08:00
metricTarget: []
}
}
},
methods: {
// 获取初始化时间,默认最近一周
2021-03-19 18:52:19 +08:00
getDefaultDate () {
let start = this.getDays(-7)
let end = this.getDays(0)
start.setStart()
end.setEnd()
// let start = this.getHoursTime(-1);
// let end = this.getHoursTime(0);
2021-03-19 18:52:19 +08:00
start = this.timeFormate(start, 'yyyy-MM-dd hh:mm:ss')
end = this.timeFormate(end, 'yyyy-MM-dd hh:mm:ss')
this.selectDate = [start, end]
},
2021-03-19 18:52:19 +08:00
getHoursTime (hours) {
const today = new Date().getTime()
const date = new Date(today + (hours * 60 * 60 * 1000))
return date
},
// 初始化日期
2021-03-19 18:52:19 +08:00
getDays (days) {
const today = new Date().getTime()
const date = new Date(today + (days * 24 * 60 * 60 * 1000))
return date
},
2021-03-19 18:52:19 +08:00
formatDate (date, type) {
const yy = date.getFullYear()
const dateM = date.getMonth() + 1
const mm = dateM > 9 ? dateM : `0${dateM}`
const dateD = date.getDate()
const dd = dateD > 9 ? dateD : `0${dateD}`
if (type) {
2021-03-19 18:52:19 +08:00
return `${yy}${type}${mm}${type}${dd}`
}
2021-03-19 18:52:19 +08:00
return `${yy}${mm}${dd}`
},
2021-03-19 18:52:19 +08:00
timeFormate (date, fmt = 'yyyy-MM-dd hh:mm:ss') {
const time = new Date(date)
let fm = fmt
// fmt 自定义格式,如yy-MM-dd
2021-03-19 18:52:19 +08:00
let week = ''
switch (time.getDay()) {
case 0:
2021-03-19 18:52:19 +08:00
week = '周日'
break
case 1:
2021-03-19 18:52:19 +08:00
week = '周一'
break
case 2:
2021-03-19 18:52:19 +08:00
week = '周二'
break
case 3:
2021-03-19 18:52:19 +08:00
week = '周三'
break
case 4:
2021-03-19 18:52:19 +08:00
week = '周四'
break
case 5:
2021-03-19 18:52:19 +08:00
week = '周五'
break
case 6:
2021-03-19 18:52:19 +08:00
week = '周六'
break
default:
2021-03-19 18:52:19 +08:00
week = ''
break
}
const o = {
'M+': time.getMonth() + 1, // 月份
'd+': time.getDate(), // 日
2021-03-19 18:52:19 +08:00
hh: time.getHours(), // 小时
'm+': time.getMinutes(), // 分
's+': time.getSeconds(), // 秒
'q+': Math.floor((time.getMonth() + 3) / 3), // 季度
S: time.getMilliseconds(), // 毫秒
2021-03-19 18:52:19 +08:00
w: week
}
if (/(y+)/.test(fm)) {
2021-03-19 18:52:19 +08:00
fm = fm.replace(RegExp.$1, (time.getFullYear().toString()).substr(4 - RegExp.$1.length))
}
Object.keys(o).forEach((k) => {
if (new RegExp(`(${k})`).test(fm)) {
2021-03-19 18:52:19 +08:00
fm = fm.replace(RegExp.$1, (RegExp.$1.length === 1)
? (o[k])
: ((`00${o[k]}`).substr((`${o[k]}`).length)))
}
2021-03-19 18:52:19 +08:00
})
return fm
},
// 格式化tag为字符串表达式
2021-03-19 18:52:19 +08:00
tagsToString (metric, arr) {
let str = metric
let sepStr = ''
arr.forEach((item, index) => {
if (index === 0) {
2021-03-19 18:52:19 +08:00
str += '{'
if (item.value.length === 1) {
str += `${item.name}='${item.value.join('|')}'`
sepStr = ','
} else if (item.value.length > 1) {
str += `${item.name}=~'${item.value.join('|')}'`
sepStr = ','
}
} else {
2021-03-19 18:52:19 +08:00
if (item.value.length === 1) {
str += sepStr + `${item.name}='${item.value.join('|')}'`
sepStr = ','
} else if (item.value.length > 1) {
str += sepStr + `${item.name}=~'${item.value.join('|')}'`
sepStr = ','
}
}
2021-03-19 18:52:19 +08:00
})
if (str.indexOf('{') > -1) {
str += '}'
}
2021-03-19 18:52:19 +08:00
if (str.endsWith('{}')) {
str = str.substring(0, str.indexOf('{'))
}
2021-03-19 18:52:19 +08:00
return str
},
2021-03-19 18:52:19 +08:00
getStep (startTime, endTime) {
const start = new Date(startTime)
const end = new Date(endTime)
let step = '15s'
const numInterval = end.getTime() - start.getTime()
const oneDay = 86400000
const sevenDay = 604800000
const thirtyDay = 2592000000
if (numInterval < oneDay) { // 小于1天step为15s
step = '15s'
} else if (numInterval < sevenDay) {
step = '5m'
} else if (numInterval < thirtyDay) {
step = '10m'
} else {
step = '30m'
}
2021-03-19 18:52:19 +08:00
return step
},
2021-03-19 18:52:19 +08:00
isEmptyObject (obj) {
if (obj) {
2021-03-19 18:52:19 +08:00
let name = ''
// eslint-disable-next-line
for (name in obj) { return false; }
2021-03-19 18:52:19 +08:00
return true
}
2021-03-19 18:52:19 +08:00
return true
},
2021-03-19 18:52:19 +08:00
validateEmail (rule, value, callback) {
if (value === '') {
2021-03-19 18:52:19 +08:00
callback(new Error('请输入邮箱'))
} else if (!this.emailReg.test(value)) {
2021-03-19 18:52:19 +08:00
callback(new Error('邮箱格式不正确'))
} else {
2021-03-19 18:52:19 +08:00
callback()
}
},
2021-03-19 18:52:19 +08:00
getNumStr (num) {
if (num >= 1000) {
2021-03-19 18:52:19 +08:00
const kbNum = num / 1000
if (kbNum >= 1000) {
2021-03-19 18:52:19 +08:00
const mbNum = kbNum / 1000
if (mbNum > 1000) {
2021-03-19 18:52:19 +08:00
const gbNum = mbNum / 1000
if (gbNum > 1000) {
2021-03-19 18:52:19 +08:00
const tbNum = gbNum / 1000
if (tbNum > 1000) {
2021-03-19 18:52:19 +08:00
const pbNum = tbNum / 1000
return `${pbNum.toFixed(2)}PB`
}
2021-03-19 18:52:19 +08:00
return `${tbNum.toFixed(2)}TB`
}
2021-03-19 18:52:19 +08:00
return `${gbNum.toFixed(2)}GB`
}
2021-03-19 18:52:19 +08:00
return `${mbNum.toFixed(2)}MB`
}
2021-03-19 18:52:19 +08:00
return `${kbNum.toFixed(2)}KB`
}
2021-03-19 18:52:19 +08:00
return num.toFixed(2)
},
2021-03-19 18:52:19 +08:00
getSingleStatRlt (statistics, result) {
let dataArray = []
if (result) {
result.forEach((item) => {
dataArray.push(item[1])
})
}
2021-03-19 18:52:19 +08:00
let statisticsRlt = ''
if (dataArray.length > 0) {
if (statistics === 'min') { // min最小值
statisticsRlt = dataArray.reduce(function (a, b) {
return b < a ? b : a
})
} else if (statistics === 'max') { // max最大值
statisticsRlt = dataArray.reduce(function (a, b) {
return b > a ? b : a
})
} else if (statistics === 'average') { // average平均值
let sum = 0
dataArray.forEach((item) => {
sum = Number(sum) + Number(item)
})
statisticsRlt = sum / dataArray.length
} else if (statistics === 'total') { // total总计
dataArray.forEach((item) => {
statisticsRlt = Number(statisticsRlt) + Number(item)
})
2021-03-19 18:52:19 +08:00
} else if (statistics === 'first') { // first第一个值
statisticsRlt = dataArray[0]
} else if (statistics === 'last') { // last最后一个值
statisticsRlt = dataArray[dataArray.length - 1]
} else if (statistics === 'range') { // range : max - min
const min = dataArray.reduce(function (a, b) {
return b < a ? b : a
})
2021-03-19 18:52:19 +08:00
const max = dataArray.reduce(function (a, b) {
return b > a ? b : a
})
statisticsRlt = max - min
} else if (statistics === 'different') { // different : last - first
statisticsRlt = dataArray[dataArray.length - 1] - dataArray[0]
}
}
2021-03-19 18:52:19 +08:00
dataArray = null
return statisticsRlt
},
2021-03-19 18:52:19 +08:00
// 将本地时区转为系统配置的时区
computeTimezone: function (sourceTime) {
let offset = localStorage.getItem('nz-sys-timezone')
offset = moment.tz(offset).format('Z')
2021-03-19 18:52:19 +08:00
if (offset && offset !== 'undefined') {
offset = Number.parseInt(offset)
const date = new Date(sourceTime)
const localOffset = date.getTimezoneOffset() * 60 * 1000 // 默认 一分钟显示时区偏移的结果
const utcTime = sourceTime + localOffset
return utcTime + (offset * 60 * 60 * 1000)
} else {
return sourceTime
}
},
// 将本地时区转为系统配置的时区
computeTimezoneTime: function (sourceTime) {
let offset = localStorage.getItem('nz-sys-timezone')
offset = moment.tz(offset).format('Z')
if (offset && offset !== 'undefined') {
offset = Number.parseInt(offset)
const date = new Date(sourceTime)
const localOffset = date.getTimezoneOffset() * 60 * 1000 // 默认 一分钟显示时区偏移的结果
const utcTime = date.getTime() + localOffset
return utcTime + (offset * 60 * 60 * 1000)
} else {
return sourceTime
}
},
2021-03-19 18:52:19 +08:00
getTimezontDateRange: function (offset = -1) {
2020-09-07 11:43:45 +08:00
return [
new Date(new Date(this.computeTimezone(new Date().getTime())).setHours(new Date(this.computeTimezone(new Date().getTime())).getHours() + offset)),
new Date(this.computeTimezone(new Date().getTime()))
]
},
2021-03-19 18:52:19 +08:00
getOffsetTimezoneData (offset = 0) {
2020-09-07 11:43:45 +08:00
return new Date(this.computeTimezone(new Date().getTime())).setHours(new Date(this.computeTimezone(new Date().getTime())).getHours() + offset)
},
2021-03-19 18:52:19 +08:00
debounce (fn, delay) {
// 记录上一次的延时器
2021-03-19 18:52:19 +08:00
let timer = null
delay = delay || 200
return function () {
const args = arguments
const that = this
// 清除上一次延时器
clearTimeout(timer)
2021-03-19 18:52:19 +08:00
timer = setTimeout(function () {
fn.apply(that, args)
}, delay)
}
},
2021-03-19 18:52:19 +08:00
UTCTimeToConfigTimezone (utcTime) {
let offset = localStorage.getItem('nz-sys-timezone')
offset = moment.tz(offset).format('Z')
2021-03-19 18:52:19 +08:00
if (offset && offset !== 'undefined') {
let time = utcTime
if (typeof time === 'string' && /(\d+?-){2}\d+?\s(\d+?:)*\d+/.test(time)) {
time = new Date(time).getTime()
2020-10-16 19:26:50 +08:00
}
2021-03-19 18:52:19 +08:00
offset = Number.parseInt(offset)
time += offset * 60 * 60 * 1000
return time
} else {
return utcTime
2020-10-16 19:26:50 +08:00
}
},
2021-03-19 18:52:19 +08:00
configTimezoneToUTCTime: function (configTime) {
let offset = localStorage.getItem('nz-sys-timezone')
offset = moment.tz(offset).format('Z')
2021-03-19 18:52:19 +08:00
if (offset && offset !== 'undefined') {
let time = configTime
if (typeof time === 'string' && /(\d+?-){2}\d+?\s(\d+?:)*\d+/.test(time)) {
time = new Date(time).getTime()
2020-10-16 19:26:50 +08:00
}
2021-03-19 18:52:19 +08:00
offset = Number.parseInt(offset)
time -= offset * 60 * 60 * 1000
return time
} else {
return configTime
2020-10-16 19:26:50 +08:00
}
},
countDecimals (value) {
if ((value || value === 0) && Math.floor(value) !== value) {
const arr = value.toString().split('.')
if (Math.abs(arr[0] > 0) || arr.length < 2) {
return 2
}
const dot = arr[1].split('0').length + 1
return dot || 2
}
return 2
}
},
2021-03-19 18:52:19 +08:00
created () {
this.getDefaultDate()
},
computed: {
/*
isAdmin() {
return this.role === Cookies.get('owl_role');
},
*/
2021-03-19 18:52:19 +08:00
}
})