)]}'
{
  "commit": "f2e86e3edf082a9cad76fe72b2ae35828a14b97a",
  "tree": "57dad026e168a605137769116ed92fb85ed20e7e",
  "parents": [
    "aa4b551befb9c8fcdb880503e27a8b9f8e1550f8"
  ],
  "author": {
    "name": "JackieTien97",
    "email": "jackietien97@gmail.com",
    "time": "Sat Apr 18 14:37:59 2026 +0800"
  },
  "committer": {
    "name": "JackieTien97",
    "email": "jackietien97@gmail.com",
    "time": "Sat Apr 18 14:37:59 2026 +0800"
  },
  "message": "[IOTDB-xxxx] Add OpenTelemetry (OTLP/HTTP) receiver for storing AI coding assistant telemetry\n\nAdd an OTLP/HTTP receiver to IoTDB\u0027s REST service that accepts\nOpenTelemetry traces, metrics, and logs via standard OTLP/HTTP\nendpoints. This enables storing telemetry data from AI coding\nassistants (Claude Code, Codex, Gemini CLI, etc.) directly into\nIoTDB\u0027s table model for local analytics.\n\nKey design decisions:\n- Reuses the existing REST service (Jetty + Jersey) on port 18080\n  rather than introducing a new server or gRPC dependency\n- Database name is derived dynamically from each request\u0027s\n  service.name resource attribute (e.g. claude-code -\u003e claude_code,\n  codex -\u003e codex), so different tools land in separate databases\n- OTLP attributes are flattened into typed TAG/ATTRIBUTE/FIELD\n  columns instead of being stored as opaque JSON blobs, enabling\n  efficient time-series queries without JSON parsing\n- Schema (database + tables) is created automatically on first\n  ingest via idempotent DDL\n\nNew files (external-service-impl/rest/.../protocol/otlp/v1/):\n- OtlpTracesResource/MetricsResource/LogsResource: JAX-RS endpoints\n  at /rest/v1/otlp/v1/{traces,metrics,logs}\n- OtlpService: singleton managing per-database sessions and schema\n- OtlpSchemaInitializer: idempotent CREATE DATABASE/TABLE DDL\n- OtlpIngestor + OtlpTableBatch: column-major batch -\u003e InsertTablet\n- OtlpTracesConverter/MetricsConverter/LogsConverter: OTLP -\u003e rows\n- OtlpConverter: timestamp precision, hex encoding, attribute helpers\n- OtlpHttp: protobuf/JSON request parsing and response rendering\n\nModified files:\n- rest/pom.xml: added opentelemetry-proto + protobuf-java-util deps\n- AuthorizationFilter: bypass auth for /rest/v1/otlp/ paths\n- IoTDBRestServiceConfig/Descriptor: added otlp_username/password\n- iotdb-system.properties.template: documented OTLP config section\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "63b2443a8e0abddcba61e7bea29356ad635bfa79",
      "old_mode": 33188,
      "old_path": "external-service-impl/rest/pom.xml",
      "new_id": "847f88b0fe0437bac1d63b9df33c0205f888f35b",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/pom.xml"
    },
    {
      "type": "modify",
      "old_id": "d973933260cdb75c8ee49ede28015c2c4c99fe6c",
      "old_mode": 33188,
      "old_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/AuthorizationFilter.java",
      "new_id": "1de9ebc0d5a4d818b44c1a871008977f7e1bb291",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/AuthorizationFilter.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "298a9b7da1eec37a2a926fcc6e08aabe774323ac",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpConverter.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4169ab37b8a79f1f494899b50fb2454966c4a8af",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpHttp.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "46d2b952d423a668a8c48e2177b55fe21526d7c3",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpIngestor.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ff507146a6c0611286cebe8e851d65f6618de010",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpLogsConverter.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d3d81d018828038b3b591ae271c9533013363783",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpLogsResource.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0e27b19070ad0c4ecdabdb0b3d62ec97c43b273c",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpMetricsConverter.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "50945ac2cf5d7897440828cbfb2d07a1d3a7db11",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpMetricsResource.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "05b32d924b0853f49e6156f971a58de70260fd7c",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpSchemaInitializer.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bc40e5edc7611a7578637ad05bea73eefc42bfd5",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpService.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0160ec6daba87331afe82dbda22b3df78e1154c9",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpTracesConverter.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "06e21051fe22ac5318dd2868003c84debe481ae3",
      "new_mode": 33188,
      "new_path": "external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/otlp/v1/OtlpTracesResource.java"
    },
    {
      "type": "modify",
      "old_id": "64c0f65fe30344361fb11d91083f6b1534e19865",
      "old_mode": 33188,
      "old_path": "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceConfig.java",
      "new_id": "c720c3815274cfb78028c389a8c871399932a1e0",
      "new_mode": 33188,
      "new_path": "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceConfig.java"
    },
    {
      "type": "modify",
      "old_id": "c4f9d131de958eb841de7d387fe3b9cc175f6b14",
      "old_mode": 33188,
      "old_path": "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java",
      "new_id": "3d9a602c690bee525337fe0cba21c5fd5f60b292",
      "new_mode": 33188,
      "new_path": "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java"
    },
    {
      "type": "modify",
      "old_id": "378a6226cbffda697aa769044a01c4b3bdbf1b45",
      "old_mode": 33188,
      "old_path": "iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template",
      "new_id": "7a7f3314aa04791d158321ec454610ae0e11a78f",
      "new_mode": 33188,
      "new_path": "iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template"
    }
  ]
}
