1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import { TimeRange } from '@grafana/data';
- function roundMsToMin(milliseconds: number): number {
- return roundSecToMin(milliseconds / 1000);
- }
- function roundSecToMin(seconds: number): number {
- return Math.floor(seconds / 60);
- }
- export function shouldRefreshLabels(range?: TimeRange, prevRange?: TimeRange): boolean {
- if (range && prevRange) {
- const sameMinuteFrom = roundMsToMin(range.from.valueOf()) === roundMsToMin(prevRange.from.valueOf());
- const sameMinuteTo = roundMsToMin(range.to.valueOf()) === roundMsToMin(prevRange.to.valueOf());
- // If both are same, don't need to refresh
- return !(sameMinuteFrom && sameMinuteTo);
- }
- return false;
- }
- // Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),
- // so every character that matches something in that list has to be escaped.
- // the list of meta characters is: *+?()|\.[]{}^$
- // we make a javascript regular expression that matches those characters:
- const RE2_METACHARACTERS = /[*+?()|\\.\[\]{}^$]/g;
- function escapeLokiRegexp(value: string): string {
- return value.replace(RE2_METACHARACTERS, '\\$&');
- }
- // based on the openmetrics-documentation, the 3 symbols we have to handle are:
- // - \n ... the newline character
- // - \ ... the backslash character
- // - " ... the double-quote character
- export function escapeLabelValueInExactSelector(labelValue: string): string {
- return labelValue.replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/"/g, '\\"');
- }
- export function escapeLabelValueInRegexSelector(labelValue: string): string {
- return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));
- }
- export function escapeLabelValueInSelector(labelValue: string, selector?: string): string {
- return isRegexSelector(selector)
- ? escapeLabelValueInRegexSelector(labelValue)
- : escapeLabelValueInExactSelector(labelValue);
- }
- export function isRegexSelector(selector?: string) {
- if (selector && (selector.includes('=~') || selector.includes('!~'))) {
- return true;
- }
- return false;
- }
|