Add support for `elapsed` in the Flux DSL
aivinog1 opened this issue · comments
Proposal:
The Flux already has the elapsed
function. But the Flux DSL is missing this function.
Current behavior:
There is no such function in the com.influxdb.query.dsl.Flux
class.
Desired behavior:
I should be able to use the elapsed
function, something like this:
Flux flux = Flux
.from("telegraf")
.groupBy("_measurement")
.elaspsed(); // the default unit is 1s
Alternatives considered:
I can't see any alternatives.
Use case:
I am using this while I am building queries:
public static class ElapsedFunction extends AbstractParametrizedFlux {
public ElapsedFunction(final Flux source) {
super(source);
}
@NotNull
@Override
protected String operatorName() {
return "elapsed";
}
public ElapsedFunction withUnit(final Long amount,
@Nullable final ChronoUnit unit) {
this.withPropertyValue("unit", amount, unit);
return this;
}
}
final Flux query = Flux
.from(INFLUX_DB_CONTAINER.getBucket())
.withBucket(INFLUX_DB_CONTAINER.getBucket())
.range().withStart(Instant.now(clock).minus(1, ChronoUnit.HOURS)).withStop(Instant.now(clock).plus(1, ChronoUnit.HOURS))
.filter(Restrictions.measurement().equal("measurement"))
.filter(Restrictions.tag("someTag").equal("someValue"))
.groupBy("_value")
.function(ElapsedFunction.class).withUnit(1L, ChronoUnit.NANOS)
.group()
.quantile().withColumn("elapsed").withQuantile(0.9999f)
Hi @aivinog1,
thanks for your suggestion.
Is this something you would be willing to help with? All PR is welcome and we will be happy to review your submission.
Regards
I think this is an inherent function. Without the FLUX DSL in Java and the possibility of prepare statements, any development with the Java API is quite complicated and time-consuming, as you should not simply pass the string queries to the DB (risk of injection).