Compare commits
2 Commits
feature_En
...
feature#ub
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9e6b73852 | ||
|
|
7c54bf0203 |
@@ -1,10 +1,12 @@
|
|||||||
package com.usthe.alert;
|
package com.usthe.alert;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据仓储配置属性
|
* 数据仓储配置属性
|
||||||
|
*
|
||||||
* @author tom
|
* @author tom
|
||||||
* @date 2021/11/24 10:38
|
* @date 2021/11/24 10:38
|
||||||
*/
|
*/
|
||||||
@@ -12,11 +14,22 @@ import org.springframework.stereotype.Component;
|
|||||||
@ConfigurationProperties(prefix = "alerter")
|
@ConfigurationProperties(prefix = "alerter")
|
||||||
public class AlerterProperties {
|
public class AlerterProperties {
|
||||||
|
|
||||||
|
private String consoleUrl = "https://console.tancloud.cn";
|
||||||
|
|
||||||
|
public String getConsoleUrl() {
|
||||||
|
return consoleUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConsoleUrl(String url) {
|
||||||
|
this.consoleUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据入口配置属性
|
* 数据入口配置属性
|
||||||
*/
|
*/
|
||||||
private EntranceProperties entrance;
|
private EntranceProperties entrance;
|
||||||
|
|
||||||
|
|
||||||
public EntranceProperties getEntrance() {
|
public EntranceProperties getEntrance() {
|
||||||
return entrance;
|
return entrance;
|
||||||
}
|
}
|
||||||
@@ -25,6 +38,7 @@ public class AlerterProperties {
|
|||||||
this.entrance = entrance;
|
this.entrance = entrance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据入口配置属性
|
* 数据入口配置属性
|
||||||
* 入口可以是从kafka rabbitmq rocketmq等消息中间件获取数据
|
* 入口可以是从kafka rabbitmq rocketmq等消息中间件获取数据
|
||||||
@@ -98,4 +112,5 @@ public class AlerterProperties {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* todo 字段默认值
|
* todo 字段默认值
|
||||||
* Monitoring parameter definitions
|
|
||||||
* 监控参数定义
|
* 监控参数定义
|
||||||
*
|
|
||||||
* @author tomsun28
|
* @author tomsun28
|
||||||
* @date 2021/11/13 21:49
|
* @date 2021/11/13 21:49
|
||||||
*/
|
*/
|
||||||
@@ -34,68 +32,57 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE;
|
|||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@ApiModel(description = "en: Parameter structure definition entity,zh: 参数结构定义实体")
|
@ApiModel(description = "参数结构定义实体")
|
||||||
public class ParamDefine {
|
public class ParamDefine {
|
||||||
|
|
||||||
/**
|
|
||||||
* Parameter Structure ID
|
|
||||||
*/
|
|
||||||
@Id
|
@Id
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
@ApiModelProperty(value = "参数结构ID", example = "87584674384", accessMode = READ_ONLY, position = 0)
|
@ApiModelProperty(value = "参数结构ID", example = "87584674384", accessMode = READ_ONLY, position = 0)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitoring application type name
|
|
||||||
* 监控应用类型名称
|
* 监控应用类型名称
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "监控类型", example = "TanCloud", accessMode = READ_WRITE, position = 1)
|
@ApiModelProperty(value = "监控类型", example = "TanCloud", accessMode = READ_WRITE, position = 1)
|
||||||
private String app;
|
private String app;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameter field external display name
|
|
||||||
* 参数字段对外显示名称
|
* 参数字段对外显示名称
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "参数字段显示名称", example = "端口", accessMode = READ_WRITE, position = 2)
|
@ApiModelProperty(value = "参数字段显示名称", example = "端口", accessMode = READ_WRITE, position = 2)
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameter Field Identifier
|
|
||||||
* 参数字段标识符
|
* 参数字段标识符
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "参数字段标识符", example = "port", accessMode = READ_WRITE, position = 3)
|
@ApiModelProperty(value = "参数字段标识符", example = "port", accessMode = READ_WRITE, position = 3)
|
||||||
private String field;
|
private String field;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Field type, style (mostly map the input tag type attribute)
|
|
||||||
* 字段类型,样式(大部分映射input标签type属性)
|
* 字段类型,样式(大部分映射input标签type属性)
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "字段类型,样式(大部分映射input标签type属性)", example = "number", accessMode = READ_WRITE, position = 4)
|
@ApiModelProperty(value = "字段类型,样式(大部分映射input标签type属性)", example = "number", accessMode = READ_WRITE, position = 4)
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is it mandatory true-required false-optional
|
|
||||||
* 是否是必输项 true-必填 false-可选
|
* 是否是必输项 true-必填 false-可选
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "是否是必输项 true-必填 false-可选", example = "true", accessMode = READ_WRITE, position = 5)
|
@ApiModelProperty(value = "是否是必输项 true-必填 false-可选", example = "true", accessMode = READ_WRITE, position = 5)
|
||||||
private boolean required = false;
|
private boolean required = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameter Default Value
|
|
||||||
* 参数默认值
|
* 参数默认值
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "参数默认值", example = "12", accessMode = READ_WRITE, position = 6)
|
@ApiModelProperty(value = "参数默认值", example = "12", accessMode = READ_WRITE, position = 6)
|
||||||
private String defaultValue;
|
private String defaultValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameter input box prompt information
|
|
||||||
* 参数输入框提示信息
|
* 参数输入框提示信息
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "参数输入框提示信息", example = "请输入密码", accessMode = READ_WRITE, position = 7)
|
@ApiModelProperty(value = "参数输入框提示信息", example = "请输入密码", accessMode = READ_WRITE, position = 7)
|
||||||
private String placeholder;
|
private String placeholder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When type is number, use range to represent the range eg: 0-233
|
|
||||||
* 当type为number时,用range表示范围 eg: 0-233
|
* 当type为number时,用range表示范围 eg: 0-233
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "当type为number时,用range区间表示范围", example = "[0,233]", accessMode = READ_WRITE, position = 6)
|
@ApiModelProperty(value = "当type为number时,用range区间表示范围", example = "[0,233]", accessMode = READ_WRITE, position = 6)
|
||||||
@@ -103,7 +90,6 @@ public class ParamDefine {
|
|||||||
private String range;
|
private String range;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When type is text, use limit to indicate the limit size of the string. The maximum is 255
|
|
||||||
* 当type为text时,用limit表示字符串限制大小.最大255
|
* 当type为text时,用limit表示字符串限制大小.最大255
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "当type为text时,用limit表示字符串限制大小.最大255", example = "30", accessMode = READ_WRITE, position = 7)
|
@ApiModelProperty(value = "当type为text时,用limit表示字符串限制大小.最大255", example = "30", accessMode = READ_WRITE, position = 7)
|
||||||
@@ -111,11 +97,10 @@ public class ParamDefine {
|
|||||||
private Short limit;
|
private Short limit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When the type is radio radio box, checkbox checkbox, options represents a list of optional values
|
|
||||||
* 当type为radio单选框,checkbox复选框时,options表示可选项值列表
|
* 当type为radio单选框,checkbox复选框时,options表示可选项值列表
|
||||||
* eg: {
|
* eg: {
|
||||||
* "key1":"value1",
|
* "key1":"value1",
|
||||||
* "key2":"value2"
|
* "key2":"value2"
|
||||||
* }
|
* }
|
||||||
* key-值显示标签
|
* key-值显示标签
|
||||||
* value-真正值
|
* value-真正值
|
||||||
@@ -126,42 +111,36 @@ public class ParamDefine {
|
|||||||
private List<Option> options;
|
private List<Option> options;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Valid when type is key-value, indicating the alias description of the key
|
|
||||||
* 当type为key-value时有效,表示key的别名描述
|
* 当type为key-value时有效,表示key的别名描述
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "当type为key-value时有效,表示key的别名描述", example = "Name", accessMode = READ_WRITE, position = 9)
|
@ApiModelProperty(value = "当type为key-value时有效,表示key的别名描述", example = "Name", accessMode = READ_WRITE, position = 9)
|
||||||
private String keyAlias;
|
private String keyAlias;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Valid when type is key-value, indicating the alias description of value type
|
|
||||||
* 当type为key-value时有效,表示value的别名描述
|
* 当type为key-value时有效,表示value的别名描述
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "当type为key-value时有效,表示value的别名描述", example = "Value", accessMode = READ_WRITE, position = 10)
|
@ApiModelProperty(value = "当type为key-value时有效,表示value的别名描述", example = "Value", accessMode = READ_WRITE, position = 10)
|
||||||
private String valueAlias;
|
private String valueAlias;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is it an advanced hidden parameter true-yes false-no
|
|
||||||
* 是否是高级隐藏参数 true-是 false-否
|
* 是否是高级隐藏参数 true-是 false-否
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "是否是高级隐藏参数 true-是 false-否", example = "true", accessMode = READ_WRITE, position = 11)
|
@ApiModelProperty(value = "是否是高级隐藏参数 true-是 false-否", example = "true", accessMode = READ_WRITE, position = 11)
|
||||||
private boolean hide = false;
|
private boolean hide = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The creator of this record
|
|
||||||
* 此条记录创建者
|
* 此条记录创建者
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "此条记录创建者", example = "tom", accessMode = READ_ONLY, position = 11)
|
@ApiModelProperty(value = "此条记录创建者", example = "tom", accessMode = READ_ONLY, position = 11)
|
||||||
private String creator;
|
private String creator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This record was last modified by
|
|
||||||
* 此条记录最新修改者
|
* 此条记录最新修改者
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "此条记录最新修改者", example = "tom", accessMode = READ_ONLY, position = 12)
|
@ApiModelProperty(value = "此条记录最新修改者", example = "tom", accessMode = READ_ONLY, position = 12)
|
||||||
private String modifier;
|
private String modifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* record creation time
|
|
||||||
* 记录创建时间
|
* 记录创建时间
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "记录创建时间(毫秒时间戳)", example = "1612198922000", accessMode = READ_ONLY, position = 13)
|
@ApiModelProperty(value = "记录创建时间(毫秒时间戳)", example = "1612198922000", accessMode = READ_ONLY, position = 13)
|
||||||
@@ -169,7 +148,6 @@ public class ParamDefine {
|
|||||||
private LocalDateTime gmtCreate;
|
private LocalDateTime gmtCreate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Record the latest modification time
|
|
||||||
* 记录最新修改时间
|
* 记录最新修改时间
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "记录最新修改时间(毫秒时间戳)", example = "1612198444000", accessMode = READ_ONLY, position = 14)
|
@ApiModelProperty(value = "记录最新修改时间(毫秒时间戳)", example = "1612198444000", accessMode = READ_ONLY, position = 14)
|
||||||
@@ -181,12 +159,10 @@ public class ParamDefine {
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public static final class Option {
|
public static final class Option {
|
||||||
/**
|
/**
|
||||||
* value display label
|
|
||||||
* 值显示标签
|
* 值显示标签
|
||||||
*/
|
*/
|
||||||
private String label;
|
private String label;
|
||||||
/**
|
/**
|
||||||
* optional value
|
|
||||||
* 可选值
|
* 可选值
|
||||||
*/
|
*/
|
||||||
private String value;
|
private String value;
|
||||||
|
|||||||
18
home/docs/help/alert_console.md
Normal file
18
home/docs/help/alert_console.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
id: alert_console
|
||||||
|
title: 告警模板中自定义的控制台地址
|
||||||
|
sidebar_label: 告警模板登录台地址
|
||||||
|
---
|
||||||
|
|
||||||
|
> 阈值触发后发送告警信息,通过钉钉/企业微信/飞书机器人通知或者使用邮箱通知的时候,告警内容中有登录控制台的详情链接
|
||||||
|
|
||||||
|
|
||||||
|
### 自定义设置
|
||||||
|
|
||||||
|
在我们的启动配置文件application.yml中,找到下面的配置
|
||||||
|
```yml
|
||||||
|
alerter:
|
||||||
|
console-url: #这里就是我们的自定义控制台地址
|
||||||
|
```
|
||||||
|
|
||||||
|
默认值是赫兹跳动的官方控制台地址
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.usthe.manager.component.alerter;
|
package com.usthe.manager.component.alerter;
|
||||||
|
|
||||||
import com.usthe.alert.AlerterDataQueue;
|
import com.usthe.alert.AlerterDataQueue;
|
||||||
|
import com.usthe.alert.AlerterProperties;
|
||||||
import com.usthe.alert.AlerterWorkerPool;
|
import com.usthe.alert.AlerterWorkerPool;
|
||||||
import com.usthe.common.util.CommonUtil;
|
import com.usthe.common.util.CommonUtil;
|
||||||
import com.usthe.common.entity.alerter.Alert;
|
import com.usthe.common.entity.alerter.Alert;
|
||||||
@@ -24,6 +25,7 @@ import org.springframework.stereotype.Component;
|
|||||||
import org.springframework.web.client.ResourceAccessException;
|
import org.springframework.web.client.ResourceAccessException;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -48,6 +50,8 @@ public class DispatchAlarm {
|
|||||||
private JavaMailSender javaMailSender;
|
private JavaMailSender javaMailSender;
|
||||||
private RestTemplate restTemplate;
|
private RestTemplate restTemplate;
|
||||||
private MailService mailService;
|
private MailService mailService;
|
||||||
|
@Resource
|
||||||
|
private AlerterProperties alerterProperties;
|
||||||
|
|
||||||
@Value("${spring.mail.username}")
|
@Value("${spring.mail.username}")
|
||||||
private String emailFromUser;
|
private String emailFromUser;
|
||||||
@@ -177,13 +181,13 @@ public class DispatchAlarm {
|
|||||||
"\n所属监控ID :" + alert.getMonitorId() +
|
"\n所属监控ID :" + alert.getMonitorId() +
|
||||||
"\n所属监控名称 :" + alert.getMonitorName() +
|
"\n所属监控名称 :" + alert.getMonitorName() +
|
||||||
"\n告警级别 :" + CommonUtil.transferAlertPriority(alert.getPriority()) +
|
"\n告警级别 :" + CommonUtil.transferAlertPriority(alert.getPriority()) +
|
||||||
"\n内容详情 : " + alert.getContent();
|
"\n内容详情 : " + alert.getContent() + "\n";
|
||||||
flyBookContent.setText(text);
|
flyBookContent.setText(text);
|
||||||
contents1.add(flyBookContent);
|
contents1.add(flyBookContent);
|
||||||
FlyBookWebHookDto.FlyBookContent bookContent = new FlyBookWebHookDto.FlyBookContent();
|
FlyBookWebHookDto.FlyBookContent bookContent = new FlyBookWebHookDto.FlyBookContent();
|
||||||
bookContent.setTag("a");
|
bookContent.setTag("a");
|
||||||
bookContent.setText("登入控制台");
|
bookContent.setText("登入控制台");
|
||||||
bookContent.setHref("https://www.tancloud.cn");
|
bookContent.setHref(alerterProperties.getConsoleUrl());
|
||||||
contents1.add(bookContent);
|
contents1.add(bookContent);
|
||||||
contents.add(contents1);
|
contents.add(contents1);
|
||||||
zhCn.setTitle("[TanCloud探云告警通知]");
|
zhCn.setTitle("[TanCloud探云告警通知]");
|
||||||
@@ -214,14 +218,16 @@ public class DispatchAlarm {
|
|||||||
private void sendDingTalkRobotAlert(NoticeReceiver receiver, Alert alert) {
|
private void sendDingTalkRobotAlert(NoticeReceiver receiver, Alert alert) {
|
||||||
DingTalkWebHookDto dingTalkWebHookDto = new DingTalkWebHookDto();
|
DingTalkWebHookDto dingTalkWebHookDto = new DingTalkWebHookDto();
|
||||||
DingTalkWebHookDto.MarkdownDTO markdownDTO = new DingTalkWebHookDto.MarkdownDTO();
|
DingTalkWebHookDto.MarkdownDTO markdownDTO = new DingTalkWebHookDto.MarkdownDTO();
|
||||||
String content = "#### [TanCloud探云告警通知]\n##### **告警目标对象** : " +
|
StringBuilder content = new StringBuilder();
|
||||||
|
content.append("#### [TanCloud探云告警通知]\n##### **告警目标对象** : " +
|
||||||
alert.getTarget() + "\n " +
|
alert.getTarget() + "\n " +
|
||||||
"##### **所属监控ID** : " + alert.getMonitorId() + "\n " +
|
"##### **所属监控ID** : " + alert.getMonitorId() + "\n " +
|
||||||
"##### **所属监控名称** : " + alert.getMonitorName() + "\n " +
|
"##### **所属监控名称** : " + alert.getMonitorName() + "\n " +
|
||||||
"##### **告警级别** : " +
|
"##### **告警级别** : " +
|
||||||
CommonUtil.transferAlertPriority(alert.getPriority()) + "\n " +
|
CommonUtil.transferAlertPriority(alert.getPriority()) + "\n " +
|
||||||
"##### **内容详情** : " + alert.getContent();
|
"##### **内容详情** : " + alert.getContent());
|
||||||
markdownDTO.setText(content);
|
content.append("[点击跳转查看详情](" + alerterProperties.getConsoleUrl() + ")");
|
||||||
|
markdownDTO.setText(content.toString());
|
||||||
markdownDTO.setTitle("TanCloud探云告警通知");
|
markdownDTO.setTitle("TanCloud探云告警通知");
|
||||||
dingTalkWebHookDto.setMarkdown(markdownDTO);
|
dingTalkWebHookDto.setMarkdown(markdownDTO);
|
||||||
String webHookUrl = DingTalkWebHookDto.WEBHOOK_URL + receiver.getAccessToken();
|
String webHookUrl = DingTalkWebHookDto.WEBHOOK_URL + receiver.getAccessToken();
|
||||||
@@ -261,8 +267,10 @@ public class DispatchAlarm {
|
|||||||
content.append("告警级别 : <font color=\"comment\">")
|
content.append("告警级别 : <font color=\"comment\">")
|
||||||
.append(CommonUtil.transferAlertPriority(alert.getPriority())).append("</font>\n");
|
.append(CommonUtil.transferAlertPriority(alert.getPriority())).append("</font>\n");
|
||||||
}
|
}
|
||||||
content.append("内容详情 : ").append(alert.getContent());
|
content.append("内容详情 : ").append(alert.getContent() + "\n");
|
||||||
|
content.append("[点击跳转查看详情](" + alerterProperties.getConsoleUrl() + ")");
|
||||||
markdownDTO.setContent(content.toString());
|
markdownDTO.setContent(content.toString());
|
||||||
|
//TODO 增加控制台地址登录可控制
|
||||||
weWorkWebHookDTO.setMarkdown(markdownDTO);
|
weWorkWebHookDTO.setMarkdown(markdownDTO);
|
||||||
String webHookUrl = WeWorkWebHookDto.WEBHOOK_URL + receiver.getWechatId();
|
String webHookUrl = WeWorkWebHookDto.WEBHOOK_URL + receiver.getWechatId();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -29,20 +29,17 @@ import static com.usthe.common.util.CommonConstants.MONITOR_LOGIN_FAILED_CODE;
|
|||||||
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
|
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authentication registration TOKEN management API
|
|
||||||
* 认证注册TOKEN管理API
|
* 认证注册TOKEN管理API
|
||||||
*
|
|
||||||
* @author tomsun28
|
* @author tomsun28
|
||||||
* @date 13:11 2019-05-26
|
* @date 13:11 2019-05-26
|
||||||
*/
|
*/
|
||||||
@Api(tags = "en: Authentication registration TOKEN management API,zh: 认证注册TOKEN管理API")
|
@Api(tags = "认证注册TOKEN管理API")
|
||||||
@RestController()
|
@RestController()
|
||||||
@RequestMapping(value = "/account/auth", produces = {APPLICATION_JSON_VALUE})
|
@RequestMapping(value = "/account/auth", produces = {APPLICATION_JSON_VALUE})
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class AccountController {
|
public class AccountController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Token validity time in seconds
|
|
||||||
* TOKEN有效期时间 单位秒
|
* TOKEN有效期时间 单位秒
|
||||||
*/
|
*/
|
||||||
private static final long PERIOD_TIME = 3600L;
|
private static final long PERIOD_TIME = 3600L;
|
||||||
@@ -53,7 +50,7 @@ public class AccountController {
|
|||||||
private SurenessAccountProvider accountProvider = new DocumentAccountProvider();
|
private SurenessAccountProvider accountProvider = new DocumentAccountProvider();
|
||||||
|
|
||||||
@PostMapping("/form")
|
@PostMapping("/form")
|
||||||
@ApiOperation(value = "Account password login to obtain associated user information", notes = "账户密码登录获取关联用户信息")
|
@ApiOperation(value = "账户登录", notes = "账户密码登录获取关联用户信息")
|
||||||
public ResponseEntity<Message<Map<String, String>>> authGetToken(@RequestBody LoginDto loginDto) {
|
public ResponseEntity<Message<Map<String, String>>> authGetToken(@RequestBody LoginDto loginDto) {
|
||||||
|
|
||||||
SurenessAccount account = accountProvider.loadAccount(loginDto.getIdentifier());
|
SurenessAccount account = accountProvider.loadAccount(loginDto.getIdentifier());
|
||||||
@@ -79,7 +76,7 @@ public class AccountController {
|
|||||||
}
|
}
|
||||||
// Get the roles the user has - rbac
|
// Get the roles the user has - rbac
|
||||||
List<String> roles = account.getOwnRoles();
|
List<String> roles = account.getOwnRoles();
|
||||||
// Issue TOKEN 签发TOKEN
|
// 签发TOKEN
|
||||||
String issueToken = JsonWebTokenUtil.issueJwt(loginDto.getIdentifier(), PERIOD_TIME, roles);
|
String issueToken = JsonWebTokenUtil.issueJwt(loginDto.getIdentifier(), PERIOD_TIME, roles);
|
||||||
Map<String, Object> customClaimMap = new HashMap<>(1);
|
Map<String, Object> customClaimMap = new HashMap<>(1);
|
||||||
customClaimMap.put("refresh", true);
|
customClaimMap.put("refresh", true);
|
||||||
@@ -91,9 +88,9 @@ public class AccountController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/refresh/{refreshToken}")
|
@GetMapping("/refresh/{refreshToken}")
|
||||||
@ApiOperation(value = "Use refresh TOKEN to re-acquire TOKEN", notes = "使用刷新TOKEN重新获取TOKEN")
|
@ApiOperation(value = "TOKEN刷新", notes = "使用刷新TOKEN重新获取TOKEN")
|
||||||
public ResponseEntity<Message<Map<String, String>>> refreshToken(
|
public ResponseEntity<Message<Map<String, String>>> refreshToken(
|
||||||
@ApiParam(value = "en: Refresh TOKEN,zh: 刷新TOKEN", example = "xxx")
|
@ApiParam(value = "刷新TOKEN", example = "xxx")
|
||||||
@PathVariable("refreshToken") @NotNull final String refreshToken) {
|
@PathVariable("refreshToken") @NotNull final String refreshToken) {
|
||||||
String userId;
|
String userId;
|
||||||
boolean isRefresh;
|
boolean isRefresh;
|
||||||
@@ -119,7 +116,7 @@ public class AccountController {
|
|||||||
return ResponseEntity.ok(message);
|
return ResponseEntity.ok(message);
|
||||||
}
|
}
|
||||||
List<String> roles = account.getOwnRoles();
|
List<String> roles = account.getOwnRoles();
|
||||||
// Issue TOKEN 签发TOKEN
|
// 签发TOKEN
|
||||||
String issueToken = JsonWebTokenUtil.issueJwt(userId, PERIOD_TIME, roles);
|
String issueToken = JsonWebTokenUtil.issueJwt(userId, PERIOD_TIME, roles);
|
||||||
Map<String, Object> customClaimMap = new HashMap<>(1);
|
Map<String, Object> customClaimMap = new HashMap<>(1);
|
||||||
customClaimMap.put("refresh", true);
|
customClaimMap.put("refresh", true);
|
||||||
|
|||||||
@@ -21,13 +21,11 @@ import java.util.List;
|
|||||||
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
|
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitoring Type Management API
|
|
||||||
* 监控类型管理API
|
* 监控类型管理API
|
||||||
*
|
|
||||||
* @author tomsun28
|
* @author tomsun28
|
||||||
* @date 2021/11/14 16:47
|
* @date 2021/11/14 16:47
|
||||||
*/
|
*/
|
||||||
@Api(tags = "en: Monitoring Type Management API,zh: 监控类型管理API")
|
@Api(tags = "监控类型管理API")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping(path = "/apps", produces = {APPLICATION_JSON_VALUE})
|
@RequestMapping(path = "/apps", produces = {APPLICATION_JSON_VALUE})
|
||||||
public class AppController {
|
public class AppController {
|
||||||
@@ -36,32 +34,31 @@ public class AppController {
|
|||||||
private AppService appService;
|
private AppService appService;
|
||||||
|
|
||||||
@GetMapping(path = "/{app}/params")
|
@GetMapping(path = "/{app}/params")
|
||||||
@ApiOperation(value = "The structure of the input parameters required to specify the monitoring type according to the app query", notes = "根据app查询指定监控类型的需要输入参数的结构")
|
@ApiOperation(value = "查询监控类型的参数结构", notes = "根据app查询指定监控类型的需要输入参数的结构")
|
||||||
public ResponseEntity<Message<List<ParamDefine>>> queryAppParamDefines(
|
public ResponseEntity<Message<List<ParamDefine>>> queryAppParamDefines(
|
||||||
@ApiParam(value = "en: Monitoring type name,zh: 监控类型名称", example = "api") @PathVariable("app") final String app) {
|
@ApiParam(value = "监控类型名称", example = "api") @PathVariable("app") final String app) {
|
||||||
List<ParamDefine> paramDefines = appService.getAppParamDefines(app.toLowerCase());
|
List<ParamDefine> paramDefines = appService.getAppParamDefines(app.toLowerCase());
|
||||||
return ResponseEntity.ok(new Message<>(paramDefines));
|
return ResponseEntity.ok(new Message<>(paramDefines));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(path = "/{app}/define")
|
@GetMapping(path = "/{app}/define")
|
||||||
@ApiOperation(value = "The definition structure of the specified monitoring type according to the app query", notes = "根据app查询指定监控类型的定义结构")
|
@ApiOperation(value = "查询监控类型的结构定义", notes = "根据app查询指定监控类型的定义结构")
|
||||||
public ResponseEntity<Message<Job>> queryAppDefine(
|
public ResponseEntity<Message<Job>> queryAppDefine(
|
||||||
@ApiParam(value = "en: Monitoring type name,zh: 监控类型名称", example = "api") @PathVariable("app") final String app) {
|
@ApiParam(value = "监控类型名称", example = "api") @PathVariable("app") final String app) {
|
||||||
Job define = appService.getAppDefine(app.toLowerCase());
|
Job define = appService.getAppDefine(app.toLowerCase());
|
||||||
return ResponseEntity.ok(new Message<>(define));
|
return ResponseEntity.ok(new Message<>(define));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(path = "/hierarchy")
|
@GetMapping(path = "/hierarchy")
|
||||||
@ApiOperation(value = "Query all monitored types-indicator group-indicator level, output in a hierarchical structure", notes = "查询所有监控的类型-指标组-指标层级,以层级结构输出")
|
@ApiOperation(value = "查询全部监控指标层级", notes = "查询所有监控的类型-指标组-指标层级,以层级结构输出")
|
||||||
public ResponseEntity<Message<List<Hierarchy>>> queryAppsHierarchy(
|
public ResponseEntity<Message<List<Hierarchy>>> queryAppsHierarchy(
|
||||||
@ApiParam(value = "en: language type,zh: 语言类型",
|
@ApiParam(value = "语言类型", example = "zh-CN", defaultValue = "zh-CN")
|
||||||
example = "zh-CN", defaultValue = "zh-CN")
|
|
||||||
@RequestParam(name = "lang", required = false) String lang) {
|
@RequestParam(name = "lang", required = false) String lang) {
|
||||||
if (lang == null || "".equals(lang)) {
|
if (lang == null || "".equals(lang)) {
|
||||||
lang = "zh-CN";
|
lang = "zh-CN";
|
||||||
}
|
}
|
||||||
lang = "zh-cn".equalsIgnoreCase(lang) ? "zh-CN" : lang;
|
lang = "zh-cn".equalsIgnoreCase(lang)? "zh-CN" : lang;
|
||||||
lang = "en-us".equalsIgnoreCase(lang) ? "en-US" : lang;
|
lang = "en-us".equalsIgnoreCase(lang)? "en-US" : lang;
|
||||||
List<Hierarchy> appHierarchies = appService.getAllAppHierarchy(lang);
|
List<Hierarchy> appHierarchies = appService.getAllAppHierarchy(lang);
|
||||||
return ResponseEntity.ok(new Message<>(appHierarchies));
|
return ResponseEntity.ok(new Message<>(appHierarchies));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,20 +6,16 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Param Define Database Operations
|
|
||||||
* ParamDefine数据库操作
|
* ParamDefine数据库操作
|
||||||
*
|
|
||||||
* @author tomsun28
|
* @author tomsun28
|
||||||
* @date 2021/11/14 11:27
|
* @date 2021/11/14 11:27
|
||||||
*/
|
*/
|
||||||
public interface ParamDefineDao extends JpaRepository<ParamDefine, Long> {
|
public interface ParamDefineDao extends JpaRepository<ParamDefine, Long> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query the parameter definitions under it according to the monitoring type
|
|
||||||
* 根据监控类型查询其下的参数定义
|
* 根据监控类型查询其下的参数定义
|
||||||
*
|
* @param app 监控类型
|
||||||
* @param app Monitoring type 监控类型
|
* @return 参数定义列表
|
||||||
* @return parameter definition list 参数定义列表
|
|
||||||
*/
|
*/
|
||||||
List<ParamDefine> findParamDefinesByApp(String app);
|
List<ParamDefine> findParamDefinesByApp(String app);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,8 @@ import java.util.List;
|
|||||||
import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE;
|
import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hierarchical structure
|
|
||||||
* 层级关系结构
|
* 层级关系结构
|
||||||
* eg: Monitoring Type Indicator Group Indicator Information Hierarchy Relationship
|
|
||||||
* eg: 监控类型指标组指标信息层级关系
|
* eg: 监控类型指标组指标信息层级关系
|
||||||
*
|
|
||||||
* @author tom
|
* @author tom
|
||||||
* @date 2021/12/12 16:23
|
* @date 2021/12/12 16:23
|
||||||
*/
|
*/
|
||||||
@@ -24,33 +21,18 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE;
|
|||||||
@Data
|
@Data
|
||||||
public class Hierarchy {
|
public class Hierarchy {
|
||||||
|
|
||||||
/**
|
|
||||||
* Category value
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "类别值", example = "os", accessMode = READ_WRITE, position = 0)
|
@ApiModelProperty(value = "类别值", example = "os", accessMode = READ_WRITE, position = 0)
|
||||||
String category;
|
String category;
|
||||||
|
|
||||||
/**
|
|
||||||
* Attribute value
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "属性值", example = "linux", accessMode = READ_WRITE, position = 1)
|
@ApiModelProperty(value = "属性值", example = "linux", accessMode = READ_WRITE, position = 1)
|
||||||
String value;
|
String value;
|
||||||
|
|
||||||
/**
|
|
||||||
* Attribute internationalization tag
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "属性国际化标签", example = "Linux系统", accessMode = READ_WRITE, position = 2)
|
@ApiModelProperty(value = "属性国际化标签", example = "Linux系统", accessMode = READ_WRITE, position = 2)
|
||||||
String label;
|
String label;
|
||||||
|
|
||||||
/**
|
|
||||||
* Is it a leaf node
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "是否是叶子节点", example = "true", accessMode = READ_WRITE, position = 3)
|
@ApiModelProperty(value = "是否是叶子节点", example = "true", accessMode = READ_WRITE, position = 3)
|
||||||
Boolean isLeaf = false;
|
Boolean isLeaf = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* Next level of association
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "下一关联层级", accessMode = READ_WRITE, position = 4)
|
@ApiModelProperty(value = "下一关联层级", accessMode = READ_WRITE, position = 4)
|
||||||
private List<Hierarchy> children;
|
private List<Hierarchy> children;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,7 @@ import javax.validation.constraints.NotBlank;
|
|||||||
import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY;
|
import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Login registered account information transfer body username phone email
|
|
||||||
* 登录注册账户信息传输体 username phone email
|
* 登录注册账户信息传输体 username phone email
|
||||||
*
|
|
||||||
* @author tomsun28
|
* @author tomsun28
|
||||||
* @date 20:36 2019-08-01
|
* @date 20:36 2019-08-01
|
||||||
*/
|
*/
|
||||||
@@ -23,27 +21,17 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY;
|
|||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@ApiModel(description = "en: Account information transfer body,zh: 账户信息传输体")
|
@ApiModel(description = "账户信息传输体")
|
||||||
public class LoginDto {
|
public class LoginDto {
|
||||||
|
|
||||||
/**
|
|
||||||
* type
|
|
||||||
* 1. Account (email username and mobile phone number) password login 2. github login 3. WeChat login
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "类型", example = "1", accessMode = READ_ONLY, position = 0)
|
@ApiModelProperty(value = "类型", example = "1", accessMode = READ_ONLY, position = 0)
|
||||||
@Range(min = 0, max = 4, message = "1.账户(邮箱用户名手机号)密码登录 2.github登录 3.微信登录")
|
@Range(min = 0, max = 4, message = "1.账户(邮箱用户名手机号)密码登录 2.github登录 3.微信登录")
|
||||||
private Byte type;
|
private Byte type;
|
||||||
|
|
||||||
/**
|
|
||||||
* User ID
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "用户标识", example = "1", accessMode = READ_ONLY, position = 0)
|
@ApiModelProperty(value = "用户标识", example = "1", accessMode = READ_ONLY, position = 0)
|
||||||
@NotBlank(message = "Identifier can not null")
|
@NotBlank(message = "Identifier can not null")
|
||||||
private String identifier;
|
private String identifier;
|
||||||
|
|
||||||
/**
|
|
||||||
* key
|
|
||||||
*/
|
|
||||||
@ApiModelProperty(value = "密钥", example = "1", accessMode = READ_ONLY, position = 0)
|
@ApiModelProperty(value = "密钥", example = "1", accessMode = READ_ONLY, position = 0)
|
||||||
@NotBlank(message = "Credential can not null")
|
@NotBlank(message = "Credential can not null")
|
||||||
private String credential;
|
private String credential;
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitoring Type Management Interface
|
|
||||||
* 监控类型管理接口
|
* 监控类型管理接口
|
||||||
*
|
*
|
||||||
* @author tomsun28
|
* @author tomsun28
|
||||||
@@ -17,11 +16,10 @@ import java.util.Map;
|
|||||||
public interface AppService {
|
public interface AppService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query the defined parameter structure based on the monitoring type
|
|
||||||
* 根据监控类型查询定义的参数结构
|
* 根据监控类型查询定义的参数结构
|
||||||
*
|
*
|
||||||
* @param app Monitoring type 监控类型
|
* @param app 监控类型
|
||||||
* @return list of parameter structures 参数结构列表
|
* @return 参数结构列表
|
||||||
*/
|
*/
|
||||||
List<ParamDefine> getAppParamDefines(String app);
|
List<ParamDefine> getAppParamDefines(String app);
|
||||||
|
|
||||||
@@ -37,20 +35,18 @@ public interface AppService {
|
|||||||
Job getAppDefine(String app) throws IllegalArgumentException;
|
Job getAppDefine(String app) throws IllegalArgumentException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get defined monitoring I 18 N resources
|
|
||||||
* 获取定义的监控I18N资源
|
* 获取定义的监控I18N资源
|
||||||
*
|
*
|
||||||
* @param lang Language type 语言类型
|
* @param lang 语言类型
|
||||||
* @return I18N Resources I18N资源
|
* @return I18N资源
|
||||||
*/
|
*/
|
||||||
Map<String, String> getI18nResources(String lang);
|
Map<String, String> getI18nResources(String lang);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query all types of monitoring - indicator group - indicator level
|
|
||||||
* 查询所有监控的类型-指标组-指标层级
|
* 查询所有监控的类型-指标组-指标层级
|
||||||
*
|
*
|
||||||
* @param lang language 语言
|
* @param lang 语言
|
||||||
* @return level information 层级信息
|
* @return 层级信息
|
||||||
*/
|
*/
|
||||||
List<Hierarchy> getAllAppHierarchy(String lang);
|
List<Hierarchy> getAllAppHierarchy(String lang);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.usthe.manager.service.impl;
|
package com.usthe.manager.service.impl;
|
||||||
|
|
||||||
|
import com.usthe.alert.AlerterProperties;
|
||||||
import com.usthe.common.entity.alerter.Alert;
|
import com.usthe.common.entity.alerter.Alert;
|
||||||
import com.usthe.common.util.CommonUtil;
|
import com.usthe.common.util.CommonUtil;
|
||||||
import com.usthe.manager.service.MailService;
|
import com.usthe.manager.service.MailService;
|
||||||
@@ -11,6 +12,7 @@ import org.thymeleaf.context.Context;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Mailbox sending service interface implementation class
|
||||||
* 邮箱发送服务接口实现类
|
* 邮箱发送服务接口实现类
|
||||||
*
|
*
|
||||||
* @author 花城
|
* @author 花城
|
||||||
@@ -23,16 +25,20 @@ public class MailServiceImpl implements MailService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TemplateEngine templateEngine;
|
private TemplateEngine templateEngine;
|
||||||
|
@Resource
|
||||||
|
private AlerterProperties alerterProperties;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String buildAlertHtmlTemplate(final Alert alert) {
|
public String buildAlertHtmlTemplate(final Alert alert) {
|
||||||
|
// Introduce thymeleaf context parameters to render pages
|
||||||
// 引入thymeleaf上下文参数渲染页面
|
// 引入thymeleaf上下文参数渲染页面
|
||||||
Context context = new Context();
|
Context context = new Context();
|
||||||
context.setVariable("target",alert.getTarget());
|
context.setVariable("target", alert.getTarget());
|
||||||
context.setVariable("monitorId",alert.getMonitorId());
|
context.setVariable("monitorId", alert.getMonitorId());
|
||||||
context.setVariable("monitorName",alert.getMonitorName());
|
context.setVariable("monitorName", alert.getMonitorName());
|
||||||
context.setVariable("priority", CommonUtil.transferAlertPriority(alert.getPriority()));
|
context.setVariable("priority", CommonUtil.transferAlertPriority(alert.getPriority()));
|
||||||
context.setVariable("content",alert.getContent());
|
context.setVariable("content", alert.getContent());
|
||||||
|
context.setVariable("consoleUrl", alerterProperties.getConsoleUrl());
|
||||||
return templateEngine.process("mailAlarm", context);
|
return templateEngine.process("mailAlarm", context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,4 +68,9 @@ warehouse:
|
|||||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
||||||
url: jdbc:TAOS-RS://localhost:6041/hertzbeat
|
url: jdbc:TAOS-RS://localhost:6041/hertzbeat
|
||||||
username: root
|
username: root
|
||||||
password: taosdata
|
password: taosdata
|
||||||
|
|
||||||
|
#自定义告警控制台地址
|
||||||
|
alerter:
|
||||||
|
#这里就是我们的自定义控制台地址
|
||||||
|
console-url: https://console.tancloud.cn
|
||||||
|
|||||||
247
manager/src/main/resources/define/app/centos.yml
Normal file
247
manager/src/main/resources/define/app/centos.yml
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
|
||||||
|
category: os
|
||||||
|
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
|
||||||
|
app: centos
|
||||||
|
name:
|
||||||
|
zh-CN: Centos Linux
|
||||||
|
en-US: Centos Linux
|
||||||
|
# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串
|
||||||
|
# 强制固定必须参数 - host
|
||||||
|
configmap:
|
||||||
|
- key: host
|
||||||
|
type: 1
|
||||||
|
- key: port
|
||||||
|
type: 0
|
||||||
|
- key: username
|
||||||
|
type: 1
|
||||||
|
- key: password
|
||||||
|
type: 2
|
||||||
|
- key: timeout
|
||||||
|
type: 0
|
||||||
|
# 指标组列表
|
||||||
|
metrics:
|
||||||
|
# 第一个监控指标组 basic
|
||||||
|
# 注意:内置监控指标有 (responseTime - 响应时间)
|
||||||
|
- name: basic
|
||||||
|
# 指标组调度优先级(0-127)越小优先级越高,优先级低的指标组会等优先级高的指标组采集完成后才会被调度,相同优先级的指标组会并行调度采集
|
||||||
|
# 优先级为0的指标组为可用性指标组,即它会被首先调度,采集成功才会继续调度其它指标组,采集失败则中断调度
|
||||||
|
priority: 0
|
||||||
|
# 指标组中的具体监控指标
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: hostname
|
||||||
|
type: 1
|
||||||
|
instance: true
|
||||||
|
- field: version
|
||||||
|
type: 1
|
||||||
|
- field: uptime
|
||||||
|
type: 1
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: (uname -r ; hostname ; uptime | awk -F "," '{print $1}' | sed "s/ //g") | sed ":a;N;s/\n/^/g;ta" | awk -F '^' 'BEGIN{print "version hostname uptime"} {print $1, $2, $3}'
|
||||||
|
# 响应数据解析方式:oneRow, multiRow
|
||||||
|
parseType: multiRow
|
||||||
|
|
||||||
|
- name: cpu
|
||||||
|
priority: 1
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: info
|
||||||
|
type: 1
|
||||||
|
- field: cores
|
||||||
|
type: 0
|
||||||
|
unit: 核数
|
||||||
|
- field: interrupt
|
||||||
|
type: 0
|
||||||
|
unit: 个数
|
||||||
|
- field: load
|
||||||
|
type: 1
|
||||||
|
- field: context_switch
|
||||||
|
type: 0
|
||||||
|
unit: 个数
|
||||||
|
- field: usage
|
||||||
|
type: 0
|
||||||
|
unit: '%'
|
||||||
|
# (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换
|
||||||
|
aliasFields:
|
||||||
|
- info
|
||||||
|
- cores
|
||||||
|
- interrupt
|
||||||
|
- load
|
||||||
|
- context_switch
|
||||||
|
- idle
|
||||||
|
# (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值
|
||||||
|
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
|
||||||
|
calculates:
|
||||||
|
- info=info
|
||||||
|
- cores=cores
|
||||||
|
- interrupt=interrupt
|
||||||
|
- load=load
|
||||||
|
- context_switch=context_switch
|
||||||
|
- usage=100-idle
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: "LANG=C lscpu | awk -F: '/Model name/ {print $2}';awk '/processor/{core++} END{print core}' /proc/cpuinfo;uptime | sed 's/,/ /g' | awk '{for(i=NF-2;i<=NF;i++)print $i }' | xargs;vmstat 1 1 | awk 'NR==3{print $11}';vmstat 1 1 | awk 'NR==3{print $12}';vmstat 1 1 | awk 'NR==3{print $15}'"
|
||||||
|
parseType: oneRow
|
||||||
|
|
||||||
|
- name: memory
|
||||||
|
priority: 2
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: total
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: used
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: free
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: buff_cache
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: available
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: usage
|
||||||
|
type: 0
|
||||||
|
unit: '%'
|
||||||
|
# (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换
|
||||||
|
aliasFields:
|
||||||
|
- total
|
||||||
|
- used
|
||||||
|
- free
|
||||||
|
- buff_cache
|
||||||
|
- available
|
||||||
|
# (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值
|
||||||
|
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
|
||||||
|
calculates:
|
||||||
|
- total=total
|
||||||
|
- used=used
|
||||||
|
- free=free
|
||||||
|
- buff_cache=buff_cache
|
||||||
|
- available=available
|
||||||
|
- usage=(used / total) * 100
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: free -m | grep Mem | awk 'BEGIN{print "total used free buff_cache available"} {print $2,$3,$4,$6,$7}'
|
||||||
|
parseType: multiRow
|
||||||
|
|
||||||
|
- name: disk
|
||||||
|
priority: 3
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: disk_num
|
||||||
|
type: 0
|
||||||
|
unit: 块数
|
||||||
|
- field: partition_num
|
||||||
|
type: 0
|
||||||
|
unit: 分区数
|
||||||
|
- field: block_write
|
||||||
|
type: 0
|
||||||
|
unit: 块数
|
||||||
|
- field: block_read
|
||||||
|
type: 0
|
||||||
|
unit: 块数
|
||||||
|
- field: write_rate
|
||||||
|
type: 0
|
||||||
|
unit: iops
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: vmstat -D | awk 'NR==1{print $1}';vmstat -D | awk 'NR==2{print $1}';vmstat 1 1 | awk 'NR==3{print $10}';vmstat 1 1 | awk 'NR==3{print $9}';vmstat 1 1 | awk 'NR==3{print $16}'
|
||||||
|
parseType: oneRow
|
||||||
|
|
||||||
|
- name: interface
|
||||||
|
priority: 4
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: interface_name
|
||||||
|
type: 1
|
||||||
|
instance: true
|
||||||
|
- field: receive_bytes
|
||||||
|
type: 0
|
||||||
|
unit: byte
|
||||||
|
- field: transmit_bytes
|
||||||
|
type: 0
|
||||||
|
unit: byte
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: cat /proc/net/dev | tail -n +3 | awk 'BEGIN{ print "interface_name receive_bytes transmit_bytes"} {print $1,$2,$10}'
|
||||||
|
parseType: multiRow
|
||||||
|
|
||||||
|
- name: disk_free
|
||||||
|
priority: 5
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: filesystem
|
||||||
|
type: 1
|
||||||
|
- field: used
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: available
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: usage
|
||||||
|
type: 0
|
||||||
|
unit: '%'
|
||||||
|
- field: mounted
|
||||||
|
type: 1
|
||||||
|
instance: true
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: df -m | tail -n +2 | awk 'BEGIN{ print "filesystem used available usage mounted"} {print $1,$3,$4,$5,$6}'
|
||||||
|
parseType: multiRow
|
||||||
247
manager/src/main/resources/define/app/ubuntu.yml
Normal file
247
manager/src/main/resources/define/app/ubuntu.yml
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
|
||||||
|
category: os
|
||||||
|
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
|
||||||
|
app: ubuntu
|
||||||
|
name:
|
||||||
|
zh-CN: Ubuntu Linux
|
||||||
|
en-US: Ubuntu Linux
|
||||||
|
# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串
|
||||||
|
# 强制固定必须参数 - host
|
||||||
|
configmap:
|
||||||
|
- key: host
|
||||||
|
type: 1
|
||||||
|
- key: port
|
||||||
|
type: 0
|
||||||
|
- key: username
|
||||||
|
type: 1
|
||||||
|
- key: password
|
||||||
|
type: 2
|
||||||
|
- key: timeout
|
||||||
|
type: 0
|
||||||
|
# 指标组列表
|
||||||
|
metrics:
|
||||||
|
# 第一个监控指标组 basic
|
||||||
|
# 注意:内置监控指标有 (responseTime - 响应时间)
|
||||||
|
- name: basic
|
||||||
|
# 指标组调度优先级(0-127)越小优先级越高,优先级低的指标组会等优先级高的指标组采集完成后才会被调度,相同优先级的指标组会并行调度采集
|
||||||
|
# 优先级为0的指标组为可用性指标组,即它会被首先调度,采集成功才会继续调度其它指标组,采集失败则中断调度
|
||||||
|
priority: 0
|
||||||
|
# 指标组中的具体监控指标
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: hostname
|
||||||
|
type: 1
|
||||||
|
instance: true
|
||||||
|
- field: version
|
||||||
|
type: 1
|
||||||
|
- field: uptime
|
||||||
|
type: 1
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: (uname -r ; hostname ; uptime | awk -F "," '{print $1}' | sed "s/ //g") | sed ":a;N;s/\n/^/g;ta" | awk -F '^' 'BEGIN{print "version hostname uptime"} {print $1, $2, $3}'
|
||||||
|
# 响应数据解析方式:oneRow, multiRow
|
||||||
|
parseType: multiRow
|
||||||
|
|
||||||
|
- name: cpu
|
||||||
|
priority: 1
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: info
|
||||||
|
type: 1
|
||||||
|
- field: cores
|
||||||
|
type: 0
|
||||||
|
unit: 核数
|
||||||
|
- field: interrupt
|
||||||
|
type: 0
|
||||||
|
unit: 个数
|
||||||
|
- field: load
|
||||||
|
type: 1
|
||||||
|
- field: context_switch
|
||||||
|
type: 0
|
||||||
|
unit: 个数
|
||||||
|
- field: usage
|
||||||
|
type: 0
|
||||||
|
unit: '%'
|
||||||
|
# (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换
|
||||||
|
aliasFields:
|
||||||
|
- info
|
||||||
|
- cores
|
||||||
|
- interrupt
|
||||||
|
- load
|
||||||
|
- context_switch
|
||||||
|
- idle
|
||||||
|
# (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值
|
||||||
|
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
|
||||||
|
calculates:
|
||||||
|
- info=info
|
||||||
|
- cores=cores
|
||||||
|
- interrupt=interrupt
|
||||||
|
- load=load
|
||||||
|
- context_switch=context_switch
|
||||||
|
- usage=100-idle
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: "LANG=C lscpu | awk -F: '/Model name/ {print $2}';awk '/processor/{core++} END{print core}' /proc/cpuinfo;uptime | sed 's/,/ /g' | awk '{for(i=NF-2;i<=NF;i++)print $i }' | xargs;vmstat 1 1 | awk 'NR==3{print $11}';vmstat 1 1 | awk 'NR==3{print $12}';vmstat 1 1 | awk 'NR==3{print $15}'"
|
||||||
|
parseType: oneRow
|
||||||
|
|
||||||
|
- name: memory
|
||||||
|
priority: 2
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: total
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: used
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: free
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: buff_cache
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: available
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: usage
|
||||||
|
type: 0
|
||||||
|
unit: '%'
|
||||||
|
# (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换
|
||||||
|
aliasFields:
|
||||||
|
- total
|
||||||
|
- used
|
||||||
|
- free
|
||||||
|
- buff_cache
|
||||||
|
- available
|
||||||
|
# (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值
|
||||||
|
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
|
||||||
|
calculates:
|
||||||
|
- total=total
|
||||||
|
- used=used
|
||||||
|
- free=free
|
||||||
|
- buff_cache=buff_cache
|
||||||
|
- available=available
|
||||||
|
- usage=(used / total) * 100
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: free -m | grep Mem | awk 'BEGIN{print "total used free buff_cache available"} {print $2,$3,$4,$6,$7}'
|
||||||
|
parseType: multiRow
|
||||||
|
|
||||||
|
- name: disk
|
||||||
|
priority: 3
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: disk_num
|
||||||
|
type: 0
|
||||||
|
unit: 块数
|
||||||
|
- field: partition_num
|
||||||
|
type: 0
|
||||||
|
unit: 分区数
|
||||||
|
- field: block_write
|
||||||
|
type: 0
|
||||||
|
unit: 块数
|
||||||
|
- field: block_read
|
||||||
|
type: 0
|
||||||
|
unit: 块数
|
||||||
|
- field: write_rate
|
||||||
|
type: 0
|
||||||
|
unit: iops
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: vmstat -D | awk 'NR==1{print $1}';vmstat -D | awk 'NR==2{print $1}';vmstat 1 1 | awk 'NR==3{print $10}';vmstat 1 1 | awk 'NR==3{print $9}';vmstat 1 1 | awk 'NR==3{print $16}'
|
||||||
|
parseType: oneRow
|
||||||
|
|
||||||
|
- name: interface
|
||||||
|
priority: 4
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: interface_name
|
||||||
|
type: 1
|
||||||
|
instance: true
|
||||||
|
- field: receive_bytes
|
||||||
|
type: 0
|
||||||
|
unit: byte
|
||||||
|
- field: transmit_bytes
|
||||||
|
type: 0
|
||||||
|
unit: byte
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: cat /proc/net/dev | tail -n +3 | awk 'BEGIN{ print "interface_name receive_bytes transmit_bytes"} {print $1,$2,$10}'
|
||||||
|
parseType: multiRow
|
||||||
|
|
||||||
|
- name: disk_free
|
||||||
|
priority: 5
|
||||||
|
fields:
|
||||||
|
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
|
||||||
|
- field: filesystem
|
||||||
|
type: 1
|
||||||
|
- field: used
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: available
|
||||||
|
type: 0
|
||||||
|
unit: Mb
|
||||||
|
- field: usage
|
||||||
|
type: 0
|
||||||
|
unit: '%'
|
||||||
|
- field: mounted
|
||||||
|
type: 1
|
||||||
|
instance: true
|
||||||
|
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
|
||||||
|
protocol: ssh
|
||||||
|
# 当protocol为http协议时具体的采集配置
|
||||||
|
ssh:
|
||||||
|
# 主机host: ipv4 ipv6 域名
|
||||||
|
host: ^_^host^_^
|
||||||
|
# 端口
|
||||||
|
port: ^_^port^_^
|
||||||
|
username: ^_^username^_^
|
||||||
|
password: ^_^password^_^
|
||||||
|
timeout: ^_^timeout^_^
|
||||||
|
script: df -m | tail -n +2 | awk 'BEGIN{ print "filesystem used available usage mounted"} {print $1,$3,$4,$5,$6}'
|
||||||
|
parseType: multiRow
|
||||||
28
manager/src/main/resources/define/param/centos.yml
Normal file
28
manager/src/main/resources/define/param/centos.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
app: centos
|
||||||
|
param:
|
||||||
|
- field: host
|
||||||
|
name: 主机Host
|
||||||
|
type: host
|
||||||
|
required: true
|
||||||
|
- field: port
|
||||||
|
name: 端口
|
||||||
|
type: number
|
||||||
|
range: '[0,65535]'
|
||||||
|
required: true
|
||||||
|
defaultValue: 22
|
||||||
|
placeholder: '请输入端口'
|
||||||
|
- field: timeout
|
||||||
|
name: 超时时间
|
||||||
|
type: number
|
||||||
|
required: false
|
||||||
|
defaultValue: 6000
|
||||||
|
placeholder: '超时时间'
|
||||||
|
- field: username
|
||||||
|
name: 用户名
|
||||||
|
type: text
|
||||||
|
limit: 20
|
||||||
|
required: true
|
||||||
|
- field: password
|
||||||
|
name: 密码
|
||||||
|
type: password
|
||||||
|
required: false
|
||||||
28
manager/src/main/resources/define/param/ubuntu.yml
Normal file
28
manager/src/main/resources/define/param/ubuntu.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
app: ubuntu
|
||||||
|
param:
|
||||||
|
- field: host
|
||||||
|
name: 主机Host
|
||||||
|
type: host
|
||||||
|
required: true
|
||||||
|
- field: port
|
||||||
|
name: 端口
|
||||||
|
type: number
|
||||||
|
range: '[0,65535]'
|
||||||
|
required: true
|
||||||
|
defaultValue: 22
|
||||||
|
placeholder: '请输入端口'
|
||||||
|
- field: timeout
|
||||||
|
name: 超时时间
|
||||||
|
type: number
|
||||||
|
required: false
|
||||||
|
defaultValue: 6000
|
||||||
|
placeholder: '超时时间'
|
||||||
|
- field: username
|
||||||
|
name: 用户名
|
||||||
|
type: text
|
||||||
|
limit: 20
|
||||||
|
required: true
|
||||||
|
- field: password
|
||||||
|
name: 密码
|
||||||
|
type: password
|
||||||
|
required: false
|
||||||
@@ -700,7 +700,7 @@
|
|||||||
<span style="font-family:Arial, Verdana; font-size:14px;color:#FFFFFF;"><a
|
<span style="font-family:Arial, Verdana; font-size:14px;color:#FFFFFF;"><a
|
||||||
target="_blank"
|
target="_blank"
|
||||||
style="color:#FFFFFF;text-decoration:none;"
|
style="color:#FFFFFF;text-decoration:none;"
|
||||||
href="https://console.tancloud.cn"
|
th:href="${consoleUrl}"
|
||||||
data-link-type="web">登入控制台</a></span>
|
data-link-type="web">登入控制台</a></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user