Skip to content

Telemetry

As a company and an open-source community, our goal is to enhance the overall user experience for everyone. Your feedback is invaluable in helping us achieve this objective. To facilitate this, we have implemented telemetry for Quine, ensuring transparency and user privacy. The data we collect is completely anonymous.

Your participation in our open source telemetry contributes to the continuous improvement of Quine. Thank you for helping us make Quine better every day.

Participation in our telemetry is anonymous and optional (you may easily opt out).

Why is telemetry important?

Without telemetry, collecting feedback is entirely manual. We value gathering feedback through community interactions, user interviews and community feedback, but they alone cannot give us a complete picture of how the community is interacting with Quine.

What are we collecting?

Telemetry Event Schema:

{
  "service": "string",
  "version": "string",
  "host_hash": "base64",
  "event": "string",
  "time": "ISO-8601",
  "session_id": "UUID",
  "uptime": "integer",
  "persistor": "string",
  "sources": [ "string" ],
  "sinks": [ "string" ],
  "recipe": "boolean",
  "recipe_canonical_name": "string",
  "recipe_info": {
    "recipe_name_hash": "string",
    "recipe_contents_hash": "string",
  },
  "api-key" "string",
}

Example:

{
  "service": "Quine",
  "version": "v1.8.2",
  "host_hash": "A5BYxvLAy0ksUzsKTRTvd8wPeKvMztUofYShogEc+4E=",
  "event": "instance.start",
  "time": "2024-01-18T15:14:11−07:00",
  "session_id": "72f51619-828a-4d45-9866-f484f45da4f5",
  "uptime": 10809,
  "persistor": "rocksdb",
  "sources": ["file", "kafka"],
  "sinks": ["stdout", "http", "file"],
  "recipe": false,
  "recipe_canonical_name": null,
  "recipe_info": null,
  "api-key": null,
}
Metric Description
service This will always be "Quine".
version The release version of the quine.jar.
host_hash An anonymous one way hash identifying your instance of Quine.
event A type of event that we track. One of [ "instance.started", "instance.heartbeat" ].
time The local time of the event.
session_id Unique identifier for the current invocation of Quine.
uptime Number of seconds the current Quine instance has been active.
persistor Which persistor is configured for use. Does not include any authentication information, only the type.
sources Which sources are currently being used for ingests. Does not include any authentication information, only the type.
sinks Which sinks are currently being used for standing query outputs. Does not include any authentication information, only the type.
recipe Boolean value of whether a recipe is currently being used or not.
recipe_canonical_name String value of the current named recipe being used, if there is one.
recipe_info An object comprising a hash of the recipe name and joined hashes of its contents, like ingestion and query definitions.
api-key The API Key used in a trial, if a trial version is in use.

Which events do we track?

Telemetry for Quine currently reports instance.started and instance.heartbeat events, which share a schema (above). More events might be included in the future. We endeavor to keep release notes and this document up-to-date regarding telemetry event types and details.

How do I inspect what Quine reports?

You can inspect the telemetry object by setting the loglevel to INFO when you launch Quine.

Accessing Telemetry Logs

Quine is used for this example.

java -Dthatdot.loglevel="INFO" -jar quine-1.8.2.jar

2024-01-24 15:27:30,526 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.persistor.ExceptionWrappingPersistenceAgent - No version was set in the persistence backend for: core quine data, initializing to: Version(13.1.0)
2024-01-24 15:27:30,612 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.graph.GraphService - Adding a new local shard at idx: 0
2024-01-24 15:27:30,614 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.graph.GraphService - Adding a new local shard at idx: 1
2024-01-24 15:27:30,614 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.graph.GraphService - Adding a new local shard at idx: 2
2024-01-24 15:27:30,614 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.graph.GraphService - Adding a new local shard at idx: 3
2024-01-24 15:27:30,623 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.persistor.ExceptionWrappingPersistenceAgent - No version was set in the persistence backend for: Quine app state, initializing to: Version(1.2.0)
Graph is ready
2024-01-24 15:27:30,786 INFO [NotFromActor] [main] com.thatdot.quine.app.ImproveQuine$Enabled - Sending anonymous usage data: {
  "event": "instance.started",
  "service": "Quine",
  "version": "v1.8.2",
  "host_hash": "9PaNiOS3c9VZEStlT9zSn7iNgp4uBmjW0AmQgjsCCRw=",
  "time": "2024-01-24T15:27:30.786545-06:00"
  "session_id": "72f51619-828a-4d45-9866-f484f45da4f5",
  "uptime": 0,
  "persistor": "rocksdb",
  "sources": ["file"],
  "sinks": ["stdout", "http"],
  "recipe": false,
  "recipe_canonical_name": null,
  "recipe_info": null,
  "api-key": null
}
Quine web server available at http://127.0.0.1:8080
2024-01-24 15:42:32,786 INFO [NotFromActor] [graph-service-pekko.actor.default-dispatcher-4] com.thatdot.quine.app.ImproveQuine$TelemetryRequest - Sending anonymous usage data: {
  "event": "instance.heartbeat",
  "service": "Quine",
  "version": "v1.8.2",
  "host_hash": "9PaNiOS3c9VZEStlT9zSn7iNgp4uBmjW0AmQgjsCCRw=",
  "time": "2024-01-24T15:42:32.786545-06:00",
  "session_id": "72f51619-828a-4d45-9866-f484f45da4f5",
  "uptime": 902,
  "persistor": "rocksdb",
  "sources": ["file", "kafka"],
  "sinks": ["stdout", "http"],
  "recipe": false,
  "recipe_canonical_name": null,
  "recipe_info": null,
  "api-key": null
}

How to opt out

We added a configuration option, quine.help-make-quine-better, which defaults to true when you first launch Quine. You can opt out by adding a quine.help-make-quine-better configuration option to your CONF file and setting it to false.

Quine is used for these examples. For other products, the configuration option is the same, but the JAR used would be different.

Opting out of telemetry via system properties

java \
  -Dquine.help-make-quine-better=false \
  -jar quine-1.8.2.jar

Opting out of telemetry via configuration file

quine.conf
quine {
  help-make-quine-better = false
}
java \
  -Dconfig.file=quine.conf \
  -jar quine-1.8.2.jar

Questions

Have questions about our telemetry? Please reach out to the team on Discord. We are happy to hear any feedback that you have!