Merge branch 'dev-2.0' of https://git.mesalab.cn/nezha/nezha-fronted into dev-2.0

This commit is contained in:
@changcode
2021-08-18 15:28:53 +08:00
6 changed files with 253 additions and 44 deletions

View File

@@ -1003,7 +1003,29 @@ const cn = {
sysLogo: '系统Logo',
scrapeTimeout: '指标抓取超时',
snmpTrapPort: 'SNMP trap端口',
logoTip: 'Logo支持格式为jpg、jpeg、png且大小小于2M的图片'
logoTip: 'Logo支持格式为jpg、jpeg、png且大小小于2M的图片',
mfa: 'Mfa auth enable'
},
monitor: {
monitor: '监控',
alertApi: 'Alert api',
prometheusFederation: 'Prometheus federation',
asset_ping_from: 'Asset ping from',
metrics_storage_retention: '指标存储天数',
metrics_storage_type: '指标存储模式',
metrics_storage_s3_endpoint: '指标 s3 endpoint',
metrics_storage_s3_bucket: '指标 s3 bucket',
metrics_storage_s3_access_key: '指标 s3 access',
metrics_storage_s3_secret_access_key: '指标 s3 secret access',
logs_storage_retention: '日志存储天数',
logs_storage_type: '日志存储模式',
logs_storage_s3_endpoint: '日志 s3 endpoint',
logs_storage_s3_bucket: '日志 s3 bucket',
logs_storage_s3_access_key: '日志 s3 access',
logs_storage_s3_secret_access_key: '日志 s3 secret access',
logs_query_range_default_limit: '日志查询最大条数',
local: '本地文件存储',
s3: 'S3对象存储'
},
email: {
email: '邮件',

View File

@@ -984,7 +984,7 @@ const en = {
day: 'day',
sessionTimeout: 'Session timeout',
minute: 'minute',
maxSeries: 'Query max series',
maxSeries: 'Metrics query max series',
unsaved: 'Unsaved prompt',
mapConfig: 'Map center',
mapTitle: 'Configurate map',
@@ -995,7 +995,29 @@ const en = {
sysLogo: 'System logo',
scrapeTimeout: 'Scrape timeout',
snmpTrapPort: 'SNMP trap port',
logoTip: 'Logo format only can be jpg、jpeg、png,and less than 2M'
logoTip: 'Logo format only can be jpg、jpeg、png,and less than 2M',
mfa: 'Mfa auth enable'
},
monitor: {
monitor: 'Monitor',
alertApi: 'Alert api',
prometheusFederation: 'Prometheus federation',
asset_ping_from: 'Asset ping from',
metrics_storage_retention: 'Metrics storage days',
metrics_storage_type: 'Metrics storage mode',
metrics_storage_s3_endpoint: 'Metrics s3 endpoint',
metrics_storage_s3_bucket: 'Metrics s3 bucket',
metrics_storage_s3_access_key: 'Metrics s3 access',
metrics_storage_s3_secret_access_key: 'Metrics s3 secret access',
logs_storage_retention: 'Logs storage days',
logs_storage_type: 'Logs storage mode',
logs_storage_s3_endpoint: 'Logs s3 endpoint',
logs_storage_s3_bucket: 'Logs s3 bucket',
logs_storage_s3_access_key: 'Logs s3 access',
logs_storage_s3_secret_access_key: 'Logs s3 secret access',
logs_query_range_default_limit: 'Logs query max series',
local: 'LocalStorage',
s3: 'S3 object storage'
},
email: {
email: 'Email',

View File

@@ -40,9 +40,26 @@
</el-form-item>
<!--asset-->
<el-form-item :label='$t("project.module.asset")' label-width="125px" prop="assetId" v-if="!disabled">
<el-select id="module-box-input-asset" @change="renderEndpoint" v-model="editEndpoint.assetId" :disabled="disabled" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" value-key="id">
<el-option v-for="item in assetList" :id="'asset-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<!-- <el-select id="module-box-input-asset" @change="renderEndpoint" v-model="editEndpoint.assetId" :disabled="disabled" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" value-key="id">-->
<!-- <el-option v-for="item in assetList" :id="'asset-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option>-->
<!-- </el-select>-->
<v-selectpage
:data="assetList"
:tb-columns="columns"
:params="{
varType: 2, panelId: 0,
returnChildren:0,groupId:0,
}"
@values="renderEndpoint"
:multiple="false"
:language="language"
title="ChartSearch"
key-field="id"
show-field="name"
v-model="editEndpoint.assetId"
class="form-control"
:result-format="resultFormat"
></v-selectpage>
</el-form-item>
<el-form-item :label='$t("project.module.asset")' label-width="125px" prop="assetName" v-if="disabled">
<el-input id="module-box-input-assetName" v-model="editEndpoint.assetName" :disabled="disabled" placeholder="" show-word-limit size="small"></el-input>
@@ -228,16 +245,16 @@
<!--authtype 1-->
<el-form-item v-if="authType === 1" :label='$t("project.endpoint.username")' class="half-form-item" prop="configs.0.config.basic_auth.username" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input id="module-box-input-uername" v-model.number="editEndpoint.configs[0].config.basic_auth.username" placeholder='' size="small"></el-input>
<el-input id="module-box-input-uername" v-model="editEndpoint.configs[0].config.basic_auth.username" placeholder='' size="small"></el-input>
</el-form-item>
<el-form-item v-if="authType === 1" :label='$t("project.endpoint.pin")' class="half-form-item" prop="configs.0.config.basic_auth.pin" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input id="module-box-input-password" v-model.number="editEndpoint.configs[0].config.basic_auth.pin" type="password" autocomplete="new-password" placeholder='' size="small"></el-input>
<el-input id="module-box-input-password" v-model="editEndpoint.configs[0].config.basic_auth.pin" type="password" autocomplete="new-password" placeholder='' size="small"></el-input>
</el-form-item>
<!--authtype 2-->
<el-form-item v-if="authType === 2" :label='$t("project.endpoint.bearer_token")' prop="configs.0.config.bearer_token" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input id="module-box-input-bearer_token" v-model.number="editEndpoint.configs[0].config.bearer_token" placeholder='' size="small"></el-input>
<el-input id="module-box-input-bearer_token" v-model="editEndpoint.configs[0].config.bearer_token" placeholder='' size="small"></el-input>
</el-form-item>
</el-tab-pane>
@@ -652,6 +669,37 @@ export default {
}
]
}],
columns: [
{ title: 'id', data: 'id' },
{
title: 'name',
data: function (row) {
if (row.name.length > 15) {
return row.name.substring(0, 12) + '...'
}
return row.name
}
},
{ title: 'Manage Ip', data: 'manageIp' },
{
title: 'Type',
data: (row) => {
return row.type ? row.type.name : ''
}
},
{
title: 'Model',
data: (row) => {
return row.model ? row.model.name : ''
}
},
{
title: 'Datacenter',
data: (row) => {
return row.dc ? row.dc.name : ''
}
}
],
timestampList: ['ANSIC', 'UnixDate', 'RubyDate', 'RFC822', 'RFC822Z', 'RFC850', 'RFC1123', 'RFC1123Z', 'RFC3339', 'RFC3339Nano', 'Unix', 'UnixMs', 'UnixUs', 'UnixNs'],
metricsShow: true,
logsShow: true

View File

@@ -225,16 +225,16 @@
<!--authtype 1-->
<el-form-item v-if="authType === 1" :label='$t("project.endpoint.username")' class="half-form-item" prop="configs.0.config.basic_auth.username" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input id="module-box-input-uername" v-model.number="editModule.configs[0].config.basic_auth.username" placeholder='' size="small"></el-input>
<el-input id="module-box-input-uername" v-model="editModule.configs[0].config.basic_auth.username" placeholder='' size="small"></el-input>
</el-form-item>
<el-form-item v-if="authType === 1" :label='$t("project.endpoint.pin")' class="half-form-item" prop="configs.0.config.basic_auth.pin" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input id="module-box-input-password" v-model.number="editModule.configs[0].config.basic_auth.pin" type="password" autocomplete="new-password" placeholder='' size="small"></el-input>
<el-input id="module-box-input-password" v-model="editModule.configs[0].config.basic_auth.pin" type="password" autocomplete="new-password" placeholder='' size="small"></el-input>
</el-form-item>
<!--authtype 2-->
<el-form-item v-if="authType === 2" :label='$t("project.endpoint.bearer_token")' prop="configs.0.config.bearer_token" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input id="module-box-input-bearer_token" v-model.number="editModule.configs[0].config.bearer_token" placeholder='' size="small"></el-input>
<el-input id="module-box-input-bearer_token" v-model="editModule.configs[0].config.bearer_token" placeholder='' size="small"></el-input>
</el-form-item>
</el-tab-pane>

View File

@@ -103,11 +103,6 @@ export default {
show: true,
minWidth: 200,
sortable: 'custom'
}, {
label: this.$t('project.module.type'),
prop: 'type',
show: false,
width: 200
}, {
label: this.$t('project.project.projectName'),
prop: 'project',

View File

@@ -21,37 +21,11 @@
<el-form-item :label="$t('config.system.basic.systemName')" prop="system_name">
<el-input v-model="basic.system_name" id="system-baisc-system_name"></el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.curUrl')" prop="alert_api">
<el-input id="system-baisc-alert_api" v-model="basic.alert_api"></el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.sessionTimeout')" prop="session_timeout">
<el-input v-model.number="basic.session_timeout" >
<template slot="append"><span >{{$t('config.system.basic.minute')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.assetPingInterval')" prop="asset_ping_interval">
<el-input v-model.number="basic.asset_ping_interval" >
<template slot="append"><span >{{$t('config.system.basic.second')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.scrapeInterval')" prop="default_scrape_interval">
<el-input v-model.number="basic.default_scrape_interval" >
<template slot="append"><span >{{$t('config.system.basic.second')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.scrapeTimeout')" prop="default_scrape_timeout">
<el-input v-model.number="basic.default_scrape_timeout" >
<template slot="append"><span >{{$t('config.system.basic.second')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.storageRetention')" prop="storage_local_retention" style="width:458px;">
<el-input v-model.number="basic.storage_local_retention" id="system-baisc-storage_local_retention">
<template slot="append"><span >{{$t('config.system.basic.day')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.maxSeries')" prop="storage_local_retention">
<el-input-number v-model="basic.query_max_series" controls-position="right" :min="-1" :max="1000" :precision="0" id="system-baisc-query_max_series"></el-input-number>
</el-form-item>
<el-form-item :label="$t('config.system.basic.defaultCabinetUsize')" prop="default_cabinet_usize">
<el-input v-model.number="basic.default_cabinet_usize" id="system-baisc-default_cabinet_usize"></el-input>
</el-form-item>
@@ -73,7 +47,11 @@
<el-input v-model="basic.snmp_trap_listen_port" id="system-baisc-snmp_trap_listen_port"></el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.unsaved')" prop="unsaved_change">
<el-switch v-model.number="basic.unsaved_change" active-color="rgb(238, 157, 63)" active-value='on' inactive-value='off' id="system-baisc-unsaved_change">
<el-switch v-model="basic.unsaved_change" active-color="rgb(238, 157, 63)" active-value='on' inactive-value='off' id="system-baisc-unsaved_change">
</el-switch>
</el-form-item>
<el-form-item :label="$t('config.system.basic.mfa')" prop="mfa_auth_enable">
<el-switch v-model="basic.mfa_auth_enable" active-color="rgb(238, 157, 63)" :active-value='"1"' :inactive-value='"0"' id="system-baisc-mfs_change">
</el-switch>
</el-form-item>
<el-form-item>
@@ -86,6 +64,111 @@
</el-form>
</div >
</el-tab-pane>
<el-tab-pane :label="$t('config.system.monitor.monitor')" name="monitor">
<div class="system-config-form basicForm" v-if="activeTab === 'monitor'">
<el-form :model="monitor" label-width="208px" size="small" ref="monitorForm" :rules="monitorRules" :validate-on-rule-change="false">
<el-form-item :label="$t('config.system.monitor.alertApi')" prop="asset_ping_interval">
<el-input v-model="monitor.alert_api" id="monitor-alert-api"></el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.prometheusFederation')" prop="prometheus_federation_enabled">
<el-switch v-model="monitor.prometheus_federation_enabled " active-color="rgb(238, 157, 63)" active-value='1' inactive-value='0' id="system-monitor-prometheus_federation_enabled">
</el-switch>
</el-form-item>
<el-form-item :label="$t('config.system.basic.scrapeInterval')" prop="default_scrape_interval">
<el-input v-model.number="monitor.default_scrape_interval" >
<template slot="append"><span >{{$t('config.system.basic.second')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.scrapeTimeout')" prop="default_scrape_timeout">
<el-input v-model.number="monitor.default_scrape_timeout" >
<template slot="append"><span >{{$t('config.system.basic.second')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.assetPingInterval')" prop="asset_ping_interval">
<el-input v-model.number="monitor.asset_ping_interval" >
<template slot="append"><span >{{$t('config.system.basic.second')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.asset_ping_from')" prop="asset_ping_from">
<el-select v-model="monitor.asset_ping_from">
<el-option label="Global" value="1"></el-option>
<el-option label="Per-datacenter" value="2"></el-option>
</el-select>
</el-form-item>
<!--metrics-->
<el-form-item :label="$t('config.system.monitor.metrics_storage_retention')" prop="metrics_storage_retention">
<el-input v-model.number="monitor.metrics_storage_retention" id="monitor-metrics_storage_retention">
<template slot="append"><span >{{$t('config.system.basic.day')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.metrics_storage_type')" prop="metrics_storage_type">
<el-select v-model="monitor.metrics_storage_type">
<el-option :label="$t('config.system.monitor.local')" value="1"></el-option>
<el-option :label="$t('config.system.monitor.s3')" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.metrics_storage_s3_endpoint')" prop="metrics_storage_s3_endpoint" :rules=" [ { required: monitor.metrics_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.metrics_storage_s3_endpoint" id="monitor-metrics_storage_s3_endpoint">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.metrics_storage_s3_bucket')" prop="metrics_storage_s3_bucket" :rules=" [ { required: monitor.metrics_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.metrics_storage_s3_bucket" id="monitor-metrics_storage_s3_bucket">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.metrics_storage_s3_access_key')" prop="metrics_storage_s3_access_key" :rules=" [ { required: monitor.metrics_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.metrics_storage_s3_access_key" id="monitor-metrics_storage_s3_access_key">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.metrics_storage_s3_secret_access_key')" prop="metrics_storage_s3_secret_access_key" :rules=" [ { required: monitor.metrics_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.metrics_storage_s3_secret_access_key" id="monitor-metrics_storage_s3_secret_access_key">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.basic.maxSeries')" prop="metrics_query_max_series">
<el-input-number v-model="monitor.metrics_query_max_series" controls-position="right" :min="-1" :max="1000" :precision="0" id="system-monitor-metrics_query_max_series"></el-input-number>
</el-form-item>
<!--logs-->
<el-form-item :label="$t('config.system.monitor.logs_storage_retention')" prop="logs_storage_retention">
<el-input v-model.number="monitor.logs_storage_retention" id="monitor-logs_storage_retention">
<template slot="append"><span >{{$t('config.system.basic.day')}}</span></template>
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.logs_storage_type')" prop="logs_storage_type">
<el-select v-model="monitor.logs_storage_type">
<el-option :label="$t('config.system.monitor.local')" value="1"></el-option>
<el-option :label="$t('config.system.monitor.s3')" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.logs_storage_s3_endpoint')" prop="logs_storage_s3_endpoint" :rules=" [ { required: monitor.logs_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.logs_storage_s3_endpoint" id="monitor-logs_storage_s3_endpoint">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.logs_storage_s3_bucket')" prop="logs_storage_s3_bucket" :rules=" [ { required: monitor.logs_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.logs_storage_s3_bucket" id="monitor-logs_storage_s3_bucket">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.logs_storage_s3_access_key')" prop="logs_storage_s3_access_key" :rules=" [ { required: monitor.logs_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.logs_storage_s3_access_key" id="monitor-logs_storage_s3_access_key">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.logs_storage_s3_secret_access_key')" prop="logs_storage_s3_secret_access_key" :rules=" [ { required: monitor.logs_storage_type == 2, message: this.$t('validate.required'), trigger: 'blur' }]">
<el-input v-model="monitor.logs_storage_s3_secret_access_key" id="monitor-logs_storage_s3_secret_access_key">
</el-input>
</el-form-item>
<el-form-item :label="$t('config.system.monitor.logs_query_range_default_limit')" prop="logs_query_range_default_limit">
<el-input-number v-model="monitor.logs_query_range_default_limit" controls-position="right" :min="-1" :max="1000" :precision="0" id="system-monitor-logs_query_range_default_limit"></el-input-number>
</el-form-item>
<el-form-item>
<!-- <button-->
<!-- @click="resetForm('basicForm','basic')" class="nz-btn nz-btn-size-normal-new nz-btn-style-light-new" type="button" id="system-basic-reset"-->
<!-- :disabled="prevent_opt.save" :class="{'nz-btn-disabled':prevent_opt.save}"-->
<!-- >{{$t('overall.reset')}}</button>-->
<button id="system-monitor-save" @click="saveSetInfo('monitor','monitorForm')" class="nz-btn nz-btn-size-normal-new nz-btn-style-normal-new" type="button" v-has="'system_basic_save'" :disabled="prevent_opt.save" :class="{'nz-btn-disabled':prevent_opt.save}">{{$t('overall.submit')}}</button>
</el-form-item>
</el-form>
</div>
</el-tab-pane>
<el-tab-pane :label="$t('config.system.email.email')" name="email" >
<div class="system-config-form" v-if="activeTab === 'email'">
<el-form :model="email" label-width="180px" size="small" ref="emailForm" :rules="email.email_enable=='on'?emailRules:{}" :validate-on-rule-change="false">
@@ -300,6 +383,42 @@ export default {
email_test_account: '',
email_security_type: 'NONE'
},
monitor: {
alert_api: '',
asset_ping_from: '',
asset_ping_interval: '',
default_scrape_interval: '',
default_scrape_timeout: '',
logs_query_range_default_limit: '',
logs_storage_retention: '',
logs_storage_s3_access_key: '',
logs_storage_s3_bucket: '',
logs_storage_s3_endpoint: '',
logs_storage_s3_secret_access_key: '',
logs_storage_type: '',
metrics_query_max_series: '',
metrics_storage_retention: '',
metrics_storage_s3_access_key: '',
metrics_storage_s3_bucket: '',
metrics_storage_s3_endpoint: '',
metrics_storage_s3_secret_access_key: '',
metrics_storage_type: '',
prometheus_federation_enabled: ''
},
monitorRules: {
alert_api: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
asset_ping_from: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
asset_ping_interval: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
default_scrape_interval: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
default_scrape_timeout: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
logs_query_range_default_limit: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
logs_storage_retention: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
logs_storage_type: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
metrics_query_max_series: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
metrics_storage_retention: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
metrics_storage_type: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }],
prometheus_federation_enabled: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]
},
emailCopy: null,
emailRules: {
email_host: [
@@ -436,6 +555,9 @@ export default {
if (type == 'email') {
this.email.email_auth_password = ''
this.$refs.emailForm.clearValidate()
}
if (type == 'monitor') {
}
this[type + 'Copy'] = Object.assign({}, this[type])
}