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 open-source telemetry, ensuring transparency and user privacy. Moving forward, we will collect completely anonymous telemetry data from Quine.

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

Participating in our telemetry is anonymous, optional, and can be easily opted out.

Why is telemetry important

Our current process of collecting feedback is manual through community interactions, user interviews and community feedback. While this type of feedback is important, it cannot give us a big picture of how the community is interacting with Quine as a whole.

What are we collecting

Telemetry Object 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"
}

Example:

{
  "service": "Quine",
  "version": "{{quineVer}}",
  "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
}
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.

Which events do we track

Quine’s open source telemetry currently only reports instance.started and instance.heartbeat events. More events might be included in the future. The release notes and this document will always descibe any telemetry events added in the future.

How do I inspect what Quine reports

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

java -Dthatdot.loglevel="INFO" -jar {{quine}}
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": "{{quineVer}}",
  "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
}
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": "{{quineVer}}",
  "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
}

How to opt out

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

Opting out of telemetry via system properties

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

Opting out of telemetry via configuration file

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

Questions

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