Skip to content

Story 15.2 — Daily product-instance telemetry ping (elasticsql: enum/ProductType, TelemetryConfig, REPL + strategy seam) #116

Description

@fupelaqu

Epic 15 / Story 15.2 — the elasticsql slice of the daily product-instance telemetry ping (stacked on #111 / feature/15.3).

Scope (elasticsql, default JDK, cross-compiled 2.12+2.13)

  • licensing/.../package.scala (A11): LicenseType.values; new sealed trait ProductType extends Feature + object ProductType; AdbcDriver replaces OdbcDriver, Repl added; Feature.values/fromString/toSnakeCase now 8 entries (snake jdbc_driver|adbc_driver|flight_sql|federation|repl).
  • NEW TelemetryConfig.load reading the NEW top-level softclient4es.telemetry.enabled opt-out (A8), DISTINCT from softclient4es.license.telemetry.enabled; NEW softclient4es.telemetry { enabled = true } block in reference.conf.
  • NEW LicenseRefreshStrategy.emitInstancePing(...) seam (A15, default no-op) so the REPL (core, Apache) can emit the ping through the strategy without depending on the ELv2 extensions transport.
  • REPL (Repl.scala): session timing, commands_executed counted in executeStatement+executeBatch (NOT the shared executeStatementDirect — OQ-3/P3), session-end ping with a ~2s bounded await, >24h daily timer; executors widened to ElasticClientApi to reach the strategy.

Tests

FeatureSpec/FeatureFromStringSpec/LicenseKeySpec/LicenseManagerSpec updated (8 features, AdbcDriver/Repl); NEW ProductTypeSpec + TelemetryConfigSpec. 62 licensing tests pass; cross-compile clean 2.12+2.13.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions