⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.19
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
grafana
/
public
/
app
/
features
/
trails
/
View File Name :
relatedMetrics.ts
import leven from 'leven'; export function sortRelatedMetrics(metricList: string[], metric: string) { return metricList.sort((aValue, bValue) => { const a = getLevenDistances(aValue, metric); const b = getLevenDistances(bValue, metric); return a.halfLeven + a.wholeLeven - (b.halfLeven + b.wholeLeven); }); } type LevenDistances = { halfLeven: number; wholeLeven: number }; type TargetToLevenDistances = Map
; const metricToTargetLevenDistances = new Map
(); // Provides the Levenshtein distance between a metric to be sorted // and a targetMetric compared to which all other metrics are being sorted // There are two distances: once for the first half and once for the whole string. // This operation is not expected to be symmetric; order of parameters matters // since only `metric` is split. function getLevenDistances(metric: string, targetMetric: string) { let targetToDistances: TargetToLevenDistances | undefined = metricToTargetLevenDistances.get(metric); if (!targetToDistances) { targetToDistances = new Map
(); metricToTargetLevenDistances.set(metric, targetToDistances); } let distances: LevenDistances | undefined = targetToDistances.get(targetMetric); if (!distances) { const metricSplit = metric.split('_'); const metricHalf = metricSplit.slice(0, metricSplit.length / 2).join('_'); const halfLeven = leven(metricHalf, targetMetric!) || 0; const wholeLeven = leven(metric, targetMetric!) || 0; distances = { halfLeven, wholeLeven }; targetToDistances.set(targetMetric, distances); } return distances; }