Skip to content

Tijdselectie op basis van RunID

Een van de krachtigste aspecten van het werken met de Bries data in Grafana is de mogelijkheid om een tijdsbereik dynamisch te bepalen op basis van een RunID. Dit document beschrijft hoe dit werkt.

Het probleem

Bij het analyseren van testritten wil je:

  1. Alleen data zien van een specifieke testrit
  2. Automatisch het juiste tijdsbereik selecteren
  3. Optioneel het tijdsbereik wat aanpassen (begin of einde)

De oplossing: RunID-gebaseerde tijdselectie

Deze template bepaalt automatisch het juiste tijdsbereik op basis van een geselecteerde RunID. Het vindt de eerste en laatste tijdstempel van een run en past optionele verschuivingen toe.

Parameters

  • RunID: Unieke identificatie van een specifieke testrun
  • Start_Verschuiving: Tijdsduur die wordt toegevoegd aan de starttijd (bijv. 10s, 1m)
  • Eind_Verschuiving: Tijdsduur die wordt afgetrokken van de eindtijd
  • BucketName: Naam van de InfluxDB bucket (bijv. "Bries")

Volledige query

// Lees de RunID en tijdsverschuivingen uit Grafana variabelen
runID = "${RunID}"
bucketName = "Bries"  // Vervang door de naam van je bucket

option startShift = duration(v: "${Start_Verschuiving}")
option endShift = duration(v: "${Eind_Verschuiving}")

// Vind de eerste tijdstempel voor deze specifieke run
minRecord = from(bucket: bucketName)
  |> range(start: -1y)  // Zoek binnen het afgelopen jaar
  |> filter(fn: (r) => r.runID == runID)
  |> keep(columns: ["_time"])
  |> first(column: "_time")
  |> findRecord(fn: (key) => true, idx: 0)

// Vind de laatste tijdstempel voor deze specifieke run
maxRecord = from(bucket: bucketName)
  |> range(start: -1y)
  |> filter(fn: (r) => r.runID == runID)
  |> keep(columns: ["_time"])
  |> last(column: "_time")
  |> findRecord(fn: (key) => true, idx: 0)

// Bereken het aangepaste tijdsbereik met de opgegeven verschuivingen
minTime = time(v: uint(v: minRecord._time) + uint(v: startShift))
maxTime = time(v: uint(v: maxRecord._time) - uint(v: endShift))

Uitleg van de tijdsberekening

  1. We zoeken eerst de eerste tijdstempel (minRecord._time) voor de opgegeven RunID
  2. We zoeken ook de laatste tijdstempel (maxRecord._time) voor dezelfde RunID
  3. We passen de Start_Verschuiving toe (positief = later starten)
  4. We passen de Eind_Verschuiving toe (positief = eerder stoppen)
  5. Het resultaat zijn minTime en maxTime variabelen die in andere queries gebruikt kunnen worden

Gebruik in andere queries

Na het definiƫren van minTime en maxTime, gebruik je deze in je andere queries:

// Voorbeeld van gebruik in een andere query
data = from(bucket: bucketName)
  |> range(start: minTime, stop: maxTime)  // Gebruik de berekende tijdsperiode
  |> filter(fn: (r) => r._measurement == "Wspeed" and r.runID == runID)
  // Verdere verwerking...

Dit garandeert dat al je queries precies hetzelfde tijdsbereik gebruiken.

Voordelen van deze aanpak

  • Consistent tijdsbereik: Alle grafieken tonen gegevens uit exact dezelfde periode
  • Gebruiksgemak: Gebruikers hoeven alleen een RunID te selecteren
  • Flexibiliteit: De verschuivingen maken fine-tuning mogelijk
  • Herbruikbaarheid: De tijdsvariabelen kunnen in alle queries worden gebruikt

Grafana variabelen configureren

Voor het gebruik van deze functionaliteit moet je de volgende variabelen configureren in je Grafana dashboard:

  1. RunID (query variabele):

    import "influxdata/influxdb/v1"
    v1.measurementTagValues(bucket: "Bries", measurement: "Wspeed", tag: "runID")
    

  2. Start_Verschuiving (tekst variabele):

  3. Naam: Start_Verschuiving
  4. Standaardwaarde: 0s
  5. Beschrijving: Tijdsduur die wordt toegevoegd aan de starttijd (bijv. 10s, 1m)

  6. Eind_Verschuiving (tekst variabele):

  7. Naam: Eind_Verschuiving
  8. Standaardwaarde: 0s
  9. Beschrijving: Tijdsduur die wordt afgetrokken van de eindtijd