mirror of
https://github.com/dromara/hertzbeat.git
synced 2026-09-17 18:19:02 +00:00
Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcb8beed50 | ||
|
|
39582f34e1 | ||
|
|
7cd302ca19 | ||
|
|
d14bfa227d | ||
|
|
265ca270b1 | ||
|
|
56a4d41fd4 | ||
|
|
f3050662f6 | ||
|
|
6c2710bf66 | ||
|
|
56ef35c4f9 |
@@ -17,9 +17,7 @@
|
||||
|
||||
/home export-ignore
|
||||
/hip export-ignore
|
||||
/template-marketplace export-ignore
|
||||
/.github export-ignore
|
||||
/.idea export-ignore
|
||||
/.devcontainer export-ignore
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
|
||||
@@ -13,7 +13,6 @@ mvnw.bat
|
||||
package-lock.json
|
||||
*.zip
|
||||
jdk/
|
||||
data/
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
@@ -55,5 +54,3 @@ node_modules
|
||||
application-dev.yml
|
||||
application-mysql.yml
|
||||
application-pg.yml
|
||||
/package.json
|
||||
/yarn.lock
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Apache HertzBeat (incubating)
|
||||
Copyright 2024-2025 The Apache Software Foundation
|
||||
Copyright 2024 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
@@ -17,44 +17,71 @@
|
||||
|
||||
-- ensure every sql can rerun without error
|
||||
|
||||
-- add repair table sql
|
||||
REPAIR TABLE HZB_ALERT_DEFINE;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE AddOrDropColumns()
|
||||
BEGIN
|
||||
DECLARE col_exists INT;
|
||||
|
||||
-- Check and add 'app' column if it does not exist
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='app';
|
||||
IF col_exists = 0 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE ADD COLUMN app VARCHAR(255);
|
||||
END IF;
|
||||
-- Drop 'app' column if it exists
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='app';
|
||||
IF col_exists = 1 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE DROP COLUMN app;
|
||||
END IF;
|
||||
|
||||
-- Check and add 'metric' column if it does not exist
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='metric';
|
||||
IF col_exists = 0 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE ADD COLUMN metric VARCHAR(255);
|
||||
END IF;
|
||||
-- Drop 'metric' column if it exists
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='metric';
|
||||
IF col_exists = 1 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE DROP COLUMN metric;
|
||||
END IF;
|
||||
|
||||
-- Check and add 'field' column if it does not exist
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='field';
|
||||
IF col_exists = 0 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE ADD COLUMN field VARCHAR(255);
|
||||
END IF;
|
||||
-- Drop 'field' column if it exists
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='field';
|
||||
IF col_exists = 1 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE DROP COLUMN field;
|
||||
END IF;
|
||||
|
||||
-- Check and add 'preset' column if it does not exist
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='preset';
|
||||
IF col_exists = 0 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE ADD COLUMN preset BOOLEAN;
|
||||
END IF;
|
||||
-- Drop 'preset' column if it exists
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='preset';
|
||||
IF col_exists = 1 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE DROP COLUMN preset;
|
||||
END IF;
|
||||
|
||||
-- Check and add 'priority' column if it does not exist
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='priority';
|
||||
IF col_exists = 0 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE ADD COLUMN priority INTEGER;
|
||||
END IF;
|
||||
-- Drop 'priority' column if it exists
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='priority';
|
||||
IF col_exists = 1 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE DROP COLUMN priority;
|
||||
END IF;
|
||||
|
||||
-- Check and add 'tags' column if it does not exist
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='tags';
|
||||
IF col_exists = 0 THEN
|
||||
ALTER TABLE HZB_ALERT_DEFINE ADD COLUMN tags VARCHAR(255);
|
||||
END IF;
|
||||
-- Drop 'tags' column if it exists
|
||||
SELECT COUNT(*) INTO col_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='HZB_ALERT_DEFINE' AND COLUMN_NAME='tags';
|
||||
IF col_exists = 1 THEN
|
||||
@@ -66,5 +93,4 @@ DELIMITER ;
|
||||
|
||||
|
||||
CALL AddOrDropColumns();
|
||||
DROP PROCEDURE IF EXISTS AddOrDropColumns;
|
||||
commit;
|
||||
DROP PROCEDURE IF EXISTS AddOrDropColumns;
|
||||
@@ -215,7 +215,6 @@ The release package are here:
|
||||
|
||||
- `dist/apache-hertzbeat-{version}-incubating-bin.tar.gz`
|
||||
- `dist/apache-hertzbeat-collector-{version}-incubating-bin.tar.gz`
|
||||
- `dist/apache-hertzbeat-{version}-incubating-docker-compose.tar.gz`
|
||||
|
||||
#### 3.4 Package the source code
|
||||
|
||||
@@ -258,9 +257,6 @@ apache-hertzbeat-1.6.0-incubating-src.tar.gz.sha512
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz.asc
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz.sha512
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz.asc
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz.sha512
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.asc
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.sha512
|
||||
@@ -294,8 +290,6 @@ apache-hertzbeat-1.6.0-incubating-src.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-src.tar.gz: OK
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz: OK
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz: OK
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz: OK
|
||||
```
|
||||
|
||||
@@ -9,7 +9,7 @@ keywords: [bulletin, custom]
|
||||
|
||||
### Add Bulletin Item
|
||||
|
||||
1. Click `Add New Bulletin Item`, enter the `Bulletin Name`, scroll down to select the `Monitoring Type`, select the associated `Monitoring Task Name`, You can filter `Monitor Task Name` by `Label`, and then select the `Monitoring Metrics` you want to show in the shuttle box.
|
||||
1. Click `Add New Bulletin Item`, enter the `Bulletin Name`, scroll down to select the `Monitoring Type`, select the associated `Monitoring Task Name`, and then select the `Monitoring Metrics` you want to show in the shuttle box.
|
||||
|
||||
2. Click `OK` button to finish creating the customized bulletin.
|
||||
|
||||
|
||||
@@ -215,7 +215,6 @@ mvn clean package -Pcluster
|
||||
|
||||
- `dist/apache-hertzbeat-{version}-incubating-bin.tar.gz`
|
||||
- `dist/apache-hertzbeat-collector-{version}-incubating-bin.tar.gz`
|
||||
- `dist/apache-hertzbeat-{version}-incubating-docker-compose.tar.gz`
|
||||
|
||||
#### 3.4 打包项目源代码
|
||||
|
||||
@@ -260,9 +259,6 @@ apache-hertzbeat-1.6.0-incubating-src.tar.gz.sha512
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz.asc
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz.sha512
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz.asc
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz.sha512
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.asc
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.sha512
|
||||
@@ -296,8 +292,6 @@ apache-hertzbeat-1.6.0-incubating-src.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-src.tar.gz: OK
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-bin.tar.gz: OK
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz
|
||||
apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz: OK
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz
|
||||
apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz: OK
|
||||
```
|
||||
|
||||
@@ -9,7 +9,7 @@ keywords: [看板, 自定义]
|
||||
|
||||
### 新增看板项
|
||||
|
||||
1. 点击新增看板项, 输入`看板名称`, 下拉选择`监控类型`, 可根据`标签`对`监控任务名称`进行筛选,再选择关联的`监控任务名称`, 最后在穿梭框中选择需要展示的`监控指标`。
|
||||
1. 点击新增看板项, 输入`看板名称`, 下拉选择`监控类型`, 再选择关联的`监控任务名称`, 最后在穿梭框中选择需要展示的`监控指标`。
|
||||
|
||||
2. 点击`确定`按钮, 即可完成自定义看板的创建。
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 78 KiB |
@@ -1,5 +1,5 @@
|
||||
Apache HertzBeat (incubating)
|
||||
Copyright 2024-2025 The Apache Software Foundation
|
||||
Copyright 2024 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Apache HertzBeat (incubating)
|
||||
Copyright 2024-2025 The Apache Software Foundation
|
||||
Copyright 2024 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
@@ -21,20 +21,20 @@ networks:
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mariadb:11.7
|
||||
image: mysql:8
|
||||
container_name: compose-mysql
|
||||
hostname: mysql
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||
interval: 10s
|
||||
test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --silent']
|
||||
interval: 3s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
start_period: 3m
|
||||
ports:
|
||||
- '13306:3306'
|
||||
- "3306"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
MARIADB_ROOT_PASSWORD: 123456
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
volumes:
|
||||
- ./dbdata/mysqldata:/var/lib/mysql/
|
||||
- ./conf/sql:/docker-entrypoint-initdb.d/
|
||||
@@ -55,8 +55,8 @@ services:
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
ports:
|
||||
- "18181:8181"
|
||||
- "16667:6667"
|
||||
- "8181"
|
||||
- "6667"
|
||||
volumes:
|
||||
- ./dbdata/iotdbdata:/iotdb/data
|
||||
networks:
|
||||
|
||||
@@ -21,20 +21,20 @@ networks:
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mariadb:11.7
|
||||
image: mysql:8
|
||||
container_name: compose-mysql
|
||||
hostname: mysql
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||
interval: 10s
|
||||
test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --silent']
|
||||
interval: 3s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
start_period: 3m
|
||||
ports:
|
||||
- '13306:3306'
|
||||
- "3306"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
MARIADB_ROOT_PASSWORD: 123456
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
volumes:
|
||||
- ./dbdata/mysqldata:/var/lib/mysql/
|
||||
- ./conf/sql:/docker-entrypoint-initdb.d/
|
||||
@@ -55,7 +55,7 @@ services:
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
ports:
|
||||
- "16041:6041"
|
||||
- "6041"
|
||||
volumes:
|
||||
- ./dbdata/taosdata:/var/lib/taos/
|
||||
networks:
|
||||
|
||||
@@ -21,20 +21,20 @@ networks:
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mariadb:11.7
|
||||
image: mysql:8
|
||||
container_name: compose-mysql
|
||||
hostname: mysql
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||
interval: 10s
|
||||
test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --silent']
|
||||
interval: 3s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
start_period: 3m
|
||||
ports:
|
||||
- '13306:3306'
|
||||
- "3306"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
MARIADB_ROOT_PASSWORD: 123456
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
volumes:
|
||||
- ./dbdata/mysqldata:/var/lib/mysql/
|
||||
- ./conf/sql:/docker-entrypoint-initdb.d/
|
||||
@@ -55,7 +55,7 @@ services:
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
ports:
|
||||
- "18428:8428"
|
||||
- "8428"
|
||||
volumes:
|
||||
- ./dbdata/tsdbdata:/victoria-metrics-data
|
||||
networks:
|
||||
|
||||
@@ -32,15 +32,14 @@ services:
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
ports:
|
||||
- '15432:5432'
|
||||
- '5432:5432'
|
||||
environment:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: 123456
|
||||
TZ: Asia/Shanghai
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
volumes:
|
||||
- ./dbdata/pgdata:/var/lib/postgresql/data
|
||||
- ./conf/sql:/docker-entrypoint-initdb.d/
|
||||
- ./dbdata/pgdata/data:/var/lib/postgresql/data
|
||||
- ./conf/sql:/docker-entrypoint-initdb.d/
|
||||
networks:
|
||||
- hertzbeat
|
||||
|
||||
@@ -58,7 +57,7 @@ services:
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
ports:
|
||||
- "18428:8428"
|
||||
- "8428"
|
||||
volumes:
|
||||
- ./dbdata/tsdbdata:/victoria-metrics-data
|
||||
networks:
|
||||
|
||||
@@ -41,7 +41,7 @@ COMMAND="docker buildx build --platform linux/arm64,linux/amd64 -t apache/hertzb
|
||||
|
||||
# Build Local
|
||||
|
||||
#COMMAND="docker build -t apache/hertzbeat-collector:$VERSION -f $CURRENT_DIR/Dockerfile $CONTEXT_DIR --build-arg VERSION="$VERSION" "
|
||||
#COMMAND="docker build -t apache/hertzbeat-collector:latest -f $CURRENT_DIR/Dockerfile $CONTEXT_DIR "
|
||||
|
||||
echo "$COMMAND"
|
||||
|
||||
|
||||
@@ -37,9 +37,13 @@ COMMAND="docker buildx build --platform ${IMAGE_PLATFORM:-linux/arm64,linux/amd6
|
||||
|
||||
# Build Local
|
||||
|
||||
#COMMAND="docker build -t apache/hertzbeat:$VERSION -f $CURRENT_DIR/Dockerfile $CONTEXT_DIR "
|
||||
#COMMAND="docker build -t apache/hertzbeat:latest -f $CURRENT_DIR/Dockerfile $CONTEXT_DIR "
|
||||
|
||||
#COMMAND="docker tag apache/hertzbeat:$VERSION apache/hertzbeat:${IMAGE_VERSION:-latest}"
|
||||
echo "$COMMAND"
|
||||
|
||||
$COMMAND
|
||||
|
||||
COMMAND="docker tag apache/hertzbeat:v$VERSION apache/hertzbeat:${IMAGE_VERSION:-latest}"
|
||||
|
||||
echo "$COMMAND"
|
||||
|
||||
|
||||
@@ -848,7 +848,7 @@ export class AlertSettingComponent implements OnInit {
|
||||
if (!this.define.labels) {
|
||||
this.define.labels = {};
|
||||
}
|
||||
this.define.labels = { ...this.define.labels, severity: this.severity };
|
||||
this.define.labels['severity'] = this.severity;
|
||||
}
|
||||
|
||||
onManageModalCancel() {
|
||||
|
||||
@@ -181,21 +181,6 @@
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
|
||||
<nz-form-item>
|
||||
<nz-form-label nzSpan="7" [nzFor]="'filterLabels'">{{ 'monitor.search.label' | i18n }} </nz-form-label>
|
||||
<nz-form-control nzSpan="8" [nzErrorTip]="'validation.required' | i18n">
|
||||
<app-form-field
|
||||
[item]="{
|
||||
field: 'labels',
|
||||
type: 'labels'
|
||||
}"
|
||||
[name]="'labels'"
|
||||
[(ngModel)]="filterLabels"
|
||||
(ngModelChange)="onFilterInputChange($event)"
|
||||
/>
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
|
||||
<nz-form-item>
|
||||
<nz-form-label [nzSpan]="7" nzFor="dropdown" nzRequired="true">{{ 'bulletin.monitor.name' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required' | i18n">
|
||||
@@ -208,7 +193,7 @@
|
||||
nzMode="multiple"
|
||||
required
|
||||
>
|
||||
<ng-container *ngFor="let monitor of filteredMonitors">
|
||||
<ng-container *ngFor="let monitor of monitors">
|
||||
<nz-option *ngIf="isMonitorListLoading" [nzValue]="monitor.id" [nzLabel]="monitor.name"></nz-option>
|
||||
</ng-container>
|
||||
</nz-select>
|
||||
|
||||
@@ -25,8 +25,7 @@ import { NzNotificationService } from 'ng-zorro-antd/notification';
|
||||
import { NzTableQueryParams } from 'ng-zorro-antd/table';
|
||||
import { TransferChange } from 'ng-zorro-antd/transfer';
|
||||
import { NzFormatEmitEvent, NzTreeNode, NzTreeNodeOptions } from 'ng-zorro-antd/tree';
|
||||
import { Subject } from 'rxjs';
|
||||
import { finalize, debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
||||
import { finalize } from 'rxjs/operators';
|
||||
|
||||
import { BulletinDefine } from '../../pojo/BulletinDefine';
|
||||
import { Fields } from '../../pojo/Fields';
|
||||
@@ -74,35 +73,22 @@ export class BulletinComponent implements OnInit, OnDestroy {
|
||||
refreshInterval: any;
|
||||
deadline = 30;
|
||||
countDownTime: number = 0;
|
||||
filterLabels: Record<string, string> = {};
|
||||
filteredMonitors: Monitor[] = [];
|
||||
private filterSubject = new Subject<string>(); //filter logic debouncing
|
||||
|
||||
ngOnInit() {
|
||||
this.loadTabs();
|
||||
this.refreshInterval = setInterval(() => {
|
||||
this.countDown();
|
||||
}, 1000); // every 30 seconds refresh the tabs
|
||||
this.filterSubject
|
||||
.pipe(
|
||||
debounceTime(300), // triggered after the user stops typing for 300ms
|
||||
distinctUntilChanged()
|
||||
)
|
||||
.subscribe(value => {
|
||||
this.filterMonitors();
|
||||
});
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
if (this.refreshInterval) {
|
||||
clearInterval(this.refreshInterval);
|
||||
}
|
||||
this.filterSubject.complete();
|
||||
}
|
||||
|
||||
sync() {
|
||||
this.loadCurrentBulletinData();
|
||||
this.clearFilters();
|
||||
}
|
||||
|
||||
configRefreshDeadline(deadlineTime: number) {
|
||||
@@ -172,7 +158,6 @@ export class BulletinComponent implements OnInit, OnDestroy {
|
||||
this.isManageModalVisible = false;
|
||||
// clear fields
|
||||
this.fields = {};
|
||||
this.clearFilters();
|
||||
}
|
||||
|
||||
resetManageModalData() {
|
||||
@@ -269,7 +254,6 @@ export class BulletinComponent implements OnInit, OnDestroy {
|
||||
message => {
|
||||
if (message.code === 0) {
|
||||
this.monitors = message.data;
|
||||
this.filterMonitors();
|
||||
if (this.monitors != null) {
|
||||
this.isMonitorListLoading = true;
|
||||
}
|
||||
@@ -584,47 +568,4 @@ export class BulletinComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
onFilterInputChange(value: string): void {
|
||||
this.filterSubject.next(value); // push the input value to the debounce Subject
|
||||
}
|
||||
|
||||
filterMonitors(): void {
|
||||
const validLabels = this.cleanFilterLabels(this.filterLabels);
|
||||
const activeFilters = Object.entries(validLabels).filter(([k, v]) => k !== '' && k !== 'null'); // Second filtering ensures key validity
|
||||
|
||||
if (activeFilters.length === 0) {
|
||||
this.filteredMonitors = [...this.monitors];
|
||||
return;
|
||||
}
|
||||
|
||||
this.filteredMonitors = this.monitors.filter(monitor => {
|
||||
if (!monitor.labels || typeof monitor.labels !== 'object') return false;
|
||||
|
||||
return activeFilters.every(([filterKey, filterValue]) => {
|
||||
const keyExists = Object.prototype.hasOwnProperty.call(monitor.labels, filterKey);
|
||||
const actualValue = (monitor.labels[filterKey] ?? '').toLowerCase();
|
||||
return filterValue === '' ? keyExists : actualValue.includes(filterValue.toLowerCase());
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private cleanFilterLabels(labels: any): Record<string, string> {
|
||||
const cleaned: Record<string, string> = {};
|
||||
Object.entries(labels ?? {}).forEach(([k, v]) => {
|
||||
if (typeof k === 'string') {
|
||||
const trimmedKey = k.trim();
|
||||
if (trimmedKey !== '' && trimmedKey !== 'null') {
|
||||
cleaned[trimmedKey] = (v ?? '').toString().trim();
|
||||
}
|
||||
}
|
||||
});
|
||||
return cleaned;
|
||||
}
|
||||
|
||||
clearFilters(): void {
|
||||
this.filterLabels = {};
|
||||
this.filterMonitors();
|
||||
this.cdr.detectChanges();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user