diff --git a/build/config/substation.libsonnet b/build/config/substation.libsonnet index dc0ee779..ee06d080 100644 --- a/build/config/substation.libsonnet +++ b/build/config/substation.libsonnet @@ -113,7 +113,7 @@ options: { query: null }, }, kv_store: { - options: { type: null, prefix: null, offset_ttl: null, kv_options: null }, + options: { type: null, prefix: null, ttl_key: null, offset_ttl: null, kv_options: null }, }, math: { options: { operation: null }, diff --git a/process/kv_store.go b/process/kv_store.go index 36200e59..2340d4d6 100644 --- a/process/kv_store.go +++ b/process/kv_store.go @@ -170,6 +170,11 @@ func (p procKVStore) Apply(ctx context.Context, capsule config.Capsule) (config. if err := p.kvStore.SetWithTTL(ctx, key, capsule.Get(p.Key).String(), ttl); err != nil { return capsule, fmt.Errorf("process: kv_store: %v", err) } + } else if p.Options.TTLKey != "" { + ttl := capsule.Get(p.Options.TTLKey).Int() + if err := p.kvStore.SetWithTTL(ctx, key, capsule.Get(p.Key).String(), ttl); err != nil { + return capsule, fmt.Errorf("process: kv_store: %v", err) + } } else if p.Options.OffsetTTL != 0 { ttl := time.Now().Add(time.Duration(p.Options.OffsetTTL) * time.Second).Unix() if err := p.kvStore.SetWithTTL(ctx, key, capsule.Get(p.Key).String(), ttl); err != nil {