Robotico.Time 1.0.1
Robotico.Time
Application ports for time-series + wide-event ("observability") stores (ITimeStore / ITimeSession).
- NuGet:
Robotico.Time - Feed:
https://download.robotico.dev/nuget/v3/index.json - Brokkr:
https://brokkr.robotico.dev/robotico/robotico-time-csharp
Engine adapters (e.g. Robotico.Time.MishimaTime) implement these ports.
This package is not an IRepository.
Quick start
ITimeStore store = new InMemoryTimeStore(); // tests/samples only
Result<ITimeSession> opened = store.Create("mem://demo");
using ITimeSession session = opened.ExpectSuccess();
Result<ulong> series = session.RegisterSeries(
new TimeSeriesKey("cpu.load", new Dictionary<string, string> { ["host"] = "a" }));
session.AppendSample(series.ExpectSuccess(), timestampUnixNanos: 1_000_000_000, value: 0.42);
Result<TimeDoctorReport> doctor = session.Doctor(); // always available — required, not optional
Production apps should use Robotico.Time.MishimaTime (or Nexus Client Time when available).
Design notes
- Doctor is required.
ITimeSession.Doctor()is a non-optional member of the port — every implementation (in-memory or engine-backed) must return an operational health report (series/event counts, storage paths, byte lengths, format versions). There is no capability check or feature flag; callers can always callDoctor(). - Series keys are opaque.
RegisterSeriesreturns aulonghandle; callers must not assume anything about its value (e.g. dense allocation, ordering) beyond stability for the lifetime of the store. Registering the sameTimeSeriesKeytwice returns the same id (idempotent). - Ranges are half-open.
QueryRange/QueryEventstake[fromInclusive, toExclusive)— consistent with typical time-bucket semantics and safe to chain without double-counting boundary samples. - Wide events are schema'd (
TimeEventTableSchema→ orderedTimeEventFields) with optional secondary indexes per field:None,Inverted(exact-match lookups),FullText(token-overlap search). Cell values are carried inTimeCell, a flat DTO covering the common scalar wire kinds (Utf8,I64,U64,F64,Boolean) plusIsNull.
Quality gate
Same Library 10 bar as other Robotico C# packages:
- Analyzers on (
TreatWarningsAsErrors, Meziantou MA0004/MA0042/MA0155, IDE0008/IDE0090/IDE0301/IDE0330) dotnet testwith coverlet ≥ 90% line coverage onRobotico.Time- Woodpecker / GitHub CI run
bash scripts/woodpecker-verify.sh
Build
bash scripts/woodpecker-verify.sh
bash scripts/pack-release.sh
Showing the top 20 packages that depend on Robotico.Time.
| Packages | Downloads |
|---|---|
|
Robotico.Nexus.Client
Unified Nexus client SDK: connect via nexus+graph|time|document|relational URIs, get Robotico.Graph / Robotico.Time ports bound to a remote Nexus database over gRPC, plus thin Document/Relational client factories. Does not reference Mishima.Nexus.Node.* host assemblies.
|
19 |
|
Robotico.Nexus.Client
Unified Nexus client SDK: connect via nexus+graph|time|document|relational URIs, get Robotico.Graph / Robotico.Time ports bound to a remote Nexus database over gRPC, plus thin Document/Relational client factories. Does not reference Mishima.Nexus.Node.* host assemblies.
|
4 |
|
Robotico.Time.MishimaTime
ITimeStore / ITimeSession backed by embedded MishimaTime. Series + wide-event tables, inverted/full-text lookup, and a required Doctor ops report; Result-mapped engine errors. Does not expose MishimaTime types on the public surface.
|
3 |
|
Robotico.Time.MishimaTime
ITimeStore / ITimeSession backed by embedded MishimaTime. Series + wide-event tables, inverted/full-text lookup, and a required Doctor ops report; Result-mapped engine errors. Does not expose MishimaTime types on the public surface.
|
1 |
.NET 10.0
- Robotico.Result (>= 1.0.3)