Compare commits

...

5 commits

Author SHA1 Message Date
GJS
e71ef7fea5
Merge b5fa9bf5a6 into 03beef8006 2025-01-22 18:31:10 +00:00
GJS
b5fa9bf5a6
Merge branch 'master' into feat-searchText-from-stringbase-to-regexbase 2025-01-22 19:31:07 +01:00
GJS
bd090b6e26
Merge branch 'master' into feat-searchText-from-stringbase-to-regexbase 2025-01-18 18:21:37 +01:00
GJS
33ebfefc58
Updated: Enhance null safety and set default URL in EditMonitor.vue
- Added optional chaining to safely access `this.monitor.hostname`.
- Introduced default URL (`https://`) assignment to `this.monitor.url`.
- Ensured `hostname` is trimmed after the URL is set.

modified: src/pages/EditMonitor.vue
2024-12-29 07:31:50 +01:00
GJS
488e542ad8
Refactored: Improved search functionality in MonitorList.vue
- Enhanced the search logic to support regular expressions with case-insensitive matching.
- Escaped special characters in the search text to prevent invalid regex patterns.
- Expanded search coverage to include `monitor.url`, `monitor.hostname`, and `monitor.dns_resolve_server`.
- Added error handling to catch and log invalid regex patterns, ensuring robustness.
- Maintained compatibility with existing search fields, such as monitor name and tags.

modified: src/components/MonitorList.vue

Co-authored-by: Ionys <Ionys320@users.noreply.github.com>
2024-12-29 07:30:40 +01:00
2 changed files with 33 additions and 8 deletions

View file

@ -320,15 +320,35 @@ export default {
}
}
// filter by search text
// finds monitor name, tag name or tag value
// Filter monitors based on the search text
// Matches monitor name, URL, hostname, DNS resolve server, or tag names and values
let searchTextMatch = true;
if (this.searchText !== "") {
const loweredSearchText = this.searchText.toLowerCase();
try {
// Escape special characters for use in the regular expression
const escapeRegExp = (string) => {
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
};
// Create a case-insensitive regex for the search text
const escapedSearchText = escapeRegExp(this.searchText);
const regex = new RegExp(escapedSearchText, "i");
// Test the regex against strings safely
const safeRegexTest = (str) => str && regex.test(str);
// Check if any relevant fields match the search text
searchTextMatch =
monitor.name.toLowerCase().includes(loweredSearchText)
|| monitor.tags.find(tag => tag.name.toLowerCase().includes(loweredSearchText)
|| tag.value?.toLowerCase().includes(loweredSearchText));
regex.test(monitor.name) ||
safeRegexTest(monitor.url) ||
safeRegexTest(monitor.hostname) ||
safeRegexTest(monitor.dns_resolve_server) ||
monitor.tags.some(tag => regex.test(tag.name) || safeRegexTest(tag.value));
} catch (e) {
// Log error if the regex pattern is invalid
console.error("Invalid regex pattern:", e);
searchTextMatch = false;
}
}
// filter by status

View file

@ -1719,7 +1719,12 @@ message HealthCheckResponse {
this.monitor.headers = JSON.stringify(JSON.parse(this.monitor.headers), null, 4);
}
if (this.monitor.hostname) {
// Check if the 'monitor' object exists and contains a 'hostname' property.
if (this.monitor?.hostname) {
// Initialize the 'url' property of 'monitor' to the base URL scheme.
this.monitor.url = "https://";
// Remove any leading or trailing spaces from the 'hostname' value.
this.monitor.hostname = this.monitor.hostname.trim();
}