Skip to content

Commit 81b1241

Browse files
committed
feat: 新版采集管理 - 清洗 --story=128400685
# Reviewed, transaction id: 71049
1 parent a81e3fd commit 81b1241

File tree

4 files changed

+152
-14
lines changed

4 files changed

+152
-14
lines changed

bklog/web/src/language/lang/en/content.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,4 +1253,14 @@ export default {
12531253
'本功能为灰度业务,请联系管理员开通':
12541254
'This feature is currently in a phased rollout phase. Please contact the administrator to activate it.',
12551255
任务未完成: 'Task not completed',
1256+
'Windows Event 日志': 'Windows Event Log',
1257+
容器标准输出: 'Container Standard Output',
1258+
容器文件采集: 'Container File Collection',
1259+
开启清洗: 'Enable Cleaning',
1260+
停用索引集: 'Disable Index Set',
1261+
'索引集停用后,该索引集将无法检索。': 'After the index set is disabled, it will no longer be searchable.',
1262+
请确认停用类型: 'Please confirm the disable type',
1263+
停用采集配置: 'Disable Collection Configuration',
1264+
'采集项停用后,在有效期内,您仍可检索历史日志。':
1265+
'After the collection item is disabled, you can still search historical logs within the validity period.',
12561266
};

bklog/web/src/router/manage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ const getManageRoutes = () => [
180180
},
181181
{
182182
path: 'oldAdd',
183-
name: 'collectAdd',
183+
name: 'oldCollectAdd',
184184
meta: {
185185
title: '日志采集',
186186
needBack: true,

bklog/web/src/views/manage-v2/log-collection/components/create-operation/step3-clean.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
.label-form-box .label-title {
66
width: 124px !important;
77
}
8+
.index-set-select {
9+
width: 45%;
10+
min-width: 680px;
11+
}
812
.format-error {
913
color: #ea3636;
1014
font-size: 12px;

bklog/web/src/views/manage-v2/log-collection/components/create-operation/step3-clean.tsx

Lines changed: 137 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import FieldList from '../business-comp/step3/field-list';
3636
import ReportLogSlider from '../business-comp/step3/report-log-slider';
3737
import InfoTips from '../common-comp/info-tips';
3838
import { useSpaceSelector } from '../../../hooks/use-space-selector';
39+
import * as authorityMap from '@/common/authority-map';
3940
import $http from '@/api';
4041

4142
import type { ISelectItem } from '../../type';
@@ -162,6 +163,12 @@ export default defineComponent({
162163

163164
const visibleBkBiz = ref([]);
164165
const cacheVisibleList = ref([]);
166+
/**
167+
* 采集项下拉选项
168+
*/
169+
const cleanCollectorList = ref([]);
170+
const cleanCollectorId = ref();
171+
const indexSetSelectLoading = ref(false);
165172

166173
const builtInFieldsList = ref([]);
167174
const defaultParticipleStr = ref('@&()=\'",;:<>[]{}/ \\n\\t\\r\\\\');
@@ -240,11 +247,15 @@ export default defineComponent({
240247

241248
const isClean = computed(() => cleaningMode.value !== 'bk_log_text');
242249

250+
const isEditCleanItem = computed(() => route.name === 'clean-edit');
251+
243252
onMounted(() => {
244-
console.log(props.isTempField, 'isTempField', isEditTemp.value, route.name);
245253
// 清洗列表进入
246254
if (props.isCleanField) {
247-
// this.initCleanItem();
255+
if (isEditCleanItem.value) {
256+
cleanCollectorId.value = Number(route.params.collectorId);
257+
}
258+
initCleanItem();
248259
return;
249260
}
250261
// 清洗模板进入
@@ -253,9 +264,32 @@ export default defineComponent({
253264
isEditTemp.value && initCleanTemp();
254265
return;
255266
}
256-
setDetail();
267+
const id = isUpdate.value ? route.params.collectorId : route.query.collectorId;
268+
setDetail(id);
257269
getTemplate();
258270
});
271+
/**
272+
* 当为清洗列表 - 创建/编辑清洗的时候,获取采集项下拉框内容
273+
*/
274+
const initCleanItem = () => {
275+
// 初始化清洗项
276+
indexSetSelectLoading.value = true;
277+
const query = {
278+
bk_biz_id: bkBizId.value,
279+
have_data_id: 1,
280+
};
281+
// 获取采集项列表
282+
$http
283+
.request('collect/getAllCollectors', { query })
284+
.then(res => {
285+
indexSetSelectLoading.value = false;
286+
const { data } = res;
287+
cleanCollectorList.value = data || [];
288+
})
289+
.catch(() => {
290+
indexSetSelectLoading.value = false;
291+
});
292+
};
259293

260294
const setTempDetail = data => {
261295
formData.value = {
@@ -266,7 +300,6 @@ export default defineComponent({
266300
templateName.value = data.name;
267301
cleaningMode.value = data.clean_type;
268302
visibleBkBiz.value = data.visible_bk_biz_id;
269-
console.log(data, 'res.data====');
270303
};
271304

272305
const initCleanTemp = () => {
@@ -345,7 +378,7 @@ export default defineComponent({
345378
};
346379

347380
// 新建、编辑采集项时获取更新详情
348-
const setDetail = () => {
381+
const setDetail = id => {
349382
/**
350383
* 初始化导入的配置
351384
*/
@@ -356,7 +389,7 @@ export default defineComponent({
356389
...props.configData,
357390
etl_fields: eltField,
358391
};
359-
const id = isUpdate.value ? route.params.collectorId : route.query.collectorId;
392+
360393
if (!id) {
361394
return;
362395
}
@@ -369,7 +402,7 @@ export default defineComponent({
369402
if (res.data) {
370403
store.commit('collect/setCurCollect', res.data);
371404
builtInFieldsList.value = curCollect.value.fields.filter(item => item.is_built_in);
372-
if (props.isEdit || props.isClone) {
405+
if (props.isEdit || props.isClone || props.isCleanField) {
373406
getDataLog('init');
374407
await getCleanStash(id);
375408
}
@@ -756,14 +789,102 @@ export default defineComponent({
756789
});
757790
return result;
758791
};
792+
/**
793+
* 在清洗列表进入的时候,选择采集项之后的操作
794+
* @param id
795+
* @returns
796+
*/
797+
const handleCollectorChange = async (id: number) => {
798+
cleanCollectorId.value = id;
799+
// 先校验有无采集项管理权限
800+
const paramData = {
801+
action_ids: [authorityMap.MANAGE_COLLECTION_AUTH],
802+
resources: [
803+
{
804+
type: 'collection',
805+
id,
806+
},
807+
],
808+
};
809+
const res = await store.dispatch('checkAndGetData', paramData);
810+
if (res.isAllowed === false) {
811+
return;
812+
}
813+
setDetail(id);
814+
};
815+
// 采集项列表点击申请采集项目管理权限
816+
const applyProjectAccess = async item => {
817+
try {
818+
const res = await store.dispatch('getApplyData', {
819+
action_ids: [authorityMap.MANAGE_COLLECTION_AUTH],
820+
resources: [
821+
{
822+
type: 'collection',
823+
id: item.collector_config_id,
824+
},
825+
],
826+
});
827+
window.open(res.data.apply_url);
828+
} catch (err) {
829+
console.warn(err);
830+
}
831+
};
759832
/** 清洗设置 */
760833
const renderSetting = () => (
761834
<div class='clean-setting'>
762-
<bk-alert
763-
class='clean-alert'
764-
title={t('通过字段清洗,可以格式化日志内容方便检索、告警和分析。')}
765-
type='info'
766-
/>
835+
{!props.isCleanField && !props.isTempField && (
836+
<bk-alert
837+
class='clean-alert'
838+
title={t('通过字段清洗,可以格式化日志内容方便检索、告警和分析。')}
839+
type='info'
840+
/>
841+
)}
842+
{props.isCleanField && (
843+
<div class='label-form-box'>
844+
<span class='label-title'>{t('采集项')}</span>
845+
<div class='form-box mt-5'>
846+
<bk-select
847+
class='index-set-select'
848+
searchable
849+
disabled={isEditCleanItem.value}
850+
loading={indexSetSelectLoading.value}
851+
value={cleanCollectorId.value}
852+
on-change={handleCollectorChange}
853+
>
854+
{cleanCollectorList.value.map(option => (
855+
<bk-option
856+
id={option.collector_config_id}
857+
key={option.collector_config_id}
858+
name={option.collector_config_name}
859+
>
860+
{!option.permission?.[authorityMap.MANAGE_COLLECTION_AUTH] ? (
861+
<div class='option-slot-container no-authority'>
862+
<span class='text'>
863+
<span>{option.collector_config_name}</span>
864+
<span style='color: #979ba5'>{`#${option.collector_config_id}`}</span>
865+
</span>
866+
<span
867+
class='apply-text'
868+
on-click={() => applyProjectAccess(option)}
869+
>
870+
{t('申请权限')}
871+
</span>
872+
</div>
873+
) : (
874+
<div
875+
class='option-slot-container'
876+
v-bk-overflow-tips
877+
>
878+
<span>{option.collector_config_name}</span>
879+
<span style='color: #979ba5'>{`#${option.collector_config_id}`}</span>
880+
</div>
881+
)}
882+
</bk-option>
883+
))}
884+
</bk-select>
885+
</div>
886+
</div>
887+
)}
767888
<div class='label-form-box'>
768889
<span class='label-title'>{t('原始日志')}</span>
769890
<div class='form-box'>
@@ -1246,7 +1367,7 @@ export default defineComponent({
12461367
* 编辑/创建清洗
12471368
* 未完成的情况下,调用创建清洗配置接口 (storage_cluster_id = -1 或者为空,都代表未完成)
12481369
*/
1249-
const isNeedCreate = isUpdate.value && !!storage_cluster_id;
1370+
const isNeedCreate = (isUpdate.value && !!storage_cluster_id) || props.isCleanField;
12501371
const url = isNeedCreate ? 'collect/fieldCollection' : 'clean/updateCleanStash';
12511372
const data = {
12521373
bk_biz_id: bkBizId.value,
@@ -1282,6 +1403,9 @@ export default defineComponent({
12821403
if (res?.result) {
12831404
const data = isNeedCreate ? { ...formData.value, ...curCollect.value } : formData.value;
12841405
emit('next', data);
1406+
if (props.isCleanField) {
1407+
emit('change-submit', true);
1408+
}
12851409
}
12861410
})
12871411
.catch(() => {

0 commit comments

Comments
 (0)