diff --git a/spug_api/apps/monitor/models.py b/spug_api/apps/monitor/models.py
index 97f8824..177375a 100644
--- a/spug_api/apps/monitor/models.py
+++ b/spug_api/apps/monitor/models.py
@@ -21,6 +21,7 @@ class Detection(models.Model, ModelMixin):
)
name = models.CharField(max_length=50)
type = models.CharField(max_length=2, choices=TYPES)
+ group = models.CharField(max_length=255, null=True)
addr = models.CharField(max_length=255)
extra = models.TextField(null=True)
desc = models.CharField(max_length=255, null=True)
diff --git a/spug_api/apps/monitor/views.py b/spug_api/apps/monitor/views.py
index c072b2e..e9ba109 100644
--- a/spug_api/apps/monitor/views.py
+++ b/spug_api/apps/monitor/views.py
@@ -13,12 +13,14 @@ import json
class DetectionView(View):
def get(self, request):
detections = Detection.objects.all()
- return json_response(detections)
+ groups = [x['group'] for x in detections.order_by('group').values('group').distinct()]
+ return json_response({'groups': groups, 'detections': [x.to_dict() for x in detections]})
def post(self, request):
form, error = JsonParser(
Argument('id', type=int, required=False),
Argument('name', help='请输入任务名称'),
+ Argument('group', help='请选择任务分组'),
Argument('addr', help='请输入监控地址'),
Argument('type', filter=lambda x: x in dict(Detection.TYPES), help='请选择监控类型'),
Argument('extra', required=False),
diff --git a/spug_web/.gitignore b/spug_web/.gitignore
index 4d29575..e080423 100644
--- a/spug_web/.gitignore
+++ b/spug_web/.gitignore
@@ -4,6 +4,7 @@
/node_modules
/.pnp
.pnp.js
+/.idea/
# testing
/coverage
diff --git a/spug_web/src/pages/monitor/Step1.js b/spug_web/src/pages/monitor/Step1.js
index 0453ea5..1aea148 100644
--- a/spug_web/src/pages/monitor/Step1.js
+++ b/spug_web/src/pages/monitor/Step1.js
@@ -5,6 +5,7 @@
*/
import React, { useState, useEffect } from 'react';
import { observer } from 'mobx-react';
+import { ExclamationCircleOutlined } from '@ant-design/icons';
import { Modal, Form, Input, Select, Button } from 'antd';
import TemplateSelector from '../exec/task/TemplateSelector';
import { LinkButton, ACEditor } from 'components';
@@ -22,7 +23,7 @@ export default observer(function () {
const [showTmp, setShowTmp] = useState(false);
useEffect(() => {
- const {type, addr} = store.record;
+ const { type, addr } = store.record;
if (type === '1' && addr) {
store.record.sitePrefix = addr.startsWith('http://') ? 'http://' : 'https://';
store.record.domain = store.record.addr.replace(store.record.sitePrefix, '')
@@ -31,14 +32,14 @@ export default observer(function () {
function handleTest() {
setLoading(true)
- const {type, sitePrefix, domain} = store.record;
+ const { type, sitePrefix, domain } = store.record;
if (type === '1') store.record.addr = sitePrefix + domain;
- http.post('/api/monitor/test/', store.record, {timeout: 120000})
+ http.post('/api/monitor/test/', store.record, { timeout: 120000 })
.then(res => {
if (res.is_success) {
- Modal.success({content: res.message})
+ Modal.success({ content: res.message })
} else {
- Modal.warning({content: res.message})
+ Modal.warning({ content: res.message })
}
})
.finally(() => setLoading(false))
@@ -48,39 +49,59 @@ export default observer(function () {
store.record.type = v;
store.record.addr = undefined;
store.record.extra = undefined;
+ };
+
+ function handleAddGroup() {
+ Modal.confirm({
+ icon: ,
+ title: '添加监控分组',
+ content: (
+
+ store.record.group = e.target.value} />
+
+
+
+ ),
+ onOk: () => {
+ if (store.record.group) {
+ store.groups.push(store.record.group);
+ }
+ },
+ })
}
const SiteBefore = (
-