Skip to content

Commit 8928cd0

Browse files
committed
feat: add doc for telemetry and usage data
The telemetry investigation in podman-desktop#3788 led to a couple issues being opened to improve the events we're sending, but one of the comments was that we don't really have this written down anywhere. Some other projects contain a USAGE_DATA.md file, so this is my attempt to both write down what we collect and why for users, but also start some coding notes for committers. Feedback appreciated. Fixes podman-desktop#3788. Signed-off-by: Tim deBoer <[email protected]>
1 parent e64005c commit 8928cd0

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

USAGE_DATA.md

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Data Collection
2+
3+
Podman Desktop uses telemetry to collect anonymous usage data in order to identify issues and improve our user experience. You can read our privacy statement
4+
[here](https://developers.redhat.com/article/tool-data-collection).
5+
6+
Users are prompted during first startup to accept or decline telemetry. This setting can be
7+
changed at any time in Settings > Preferences > Telemetry.
8+
9+
On disk this is stored in the `"telemetry.*"` keys within the settings file,
10+
at `~/.local/share/containers/podman-desktop/configuration/settings.json`.
11+
12+
## What's included in the telemetry data
13+
14+
- General information, including operating system, machine architecture, and country.
15+
- When Podman Desktop starts and stops.
16+
- Which extensions are installed.
17+
- Which providers are used, and counts of objects like containers and images.
18+
- Pages navigated to in the UI.
19+
- Actions taken in the UI and interactions with providers, whether they succeeded, and how long they took.
20+
21+
No personally identifiable information is captured. An anonymous id is used so that we can correlate the actions of a user even if we can't tell who they are.
22+
23+
## Notes for committers
24+
25+
As committers it is our responsibility to protect the user's information and collect it responsibly.
26+
27+
### Personally Identifiable Information (PII)
28+
29+
When adding telemetry, all reasonable steps must be taken to ensure no PII is captured. Information like user-specified provider instance names and folder names should generally not be captured. If it is required, these must be stripped or hashed to avoid collecting PII.
30+
31+
Likewise, content like error messages often contains user-identifiable data like folder names. These must also be stripped or hashed.
32+
33+
### What to collect
34+
35+
Telemetry should never be collected 'because we can', but because we want to see current behaviour in order to improve it. This means that we should only collect the minimal data in order to meet those goals, but conversely that we also collect enough to be able to act. For instance, collecting command pass/fail would tell us how often it failed, but not why it's failing in order to fix a bug or improve usability.
36+
37+
When we capture information about commands and whether they succeed, they should be sent using logUsage() as a single event after an action completes, with optional error attributes. This makes it much easier to track the success rate and correlate failures with differences in environment or usage. logError() is typically used for independent or background errors.
38+
39+
When calling logUsage() after an external commandline process or REST interface has failed, include an error object that contains the standard properties, e.g.:
40+
41+
```
42+
error {
43+
message : string
44+
statusCode : int - for HTTP calls
45+
exitCode : int - for processes
46+
...
47+
}
48+
```

0 commit comments

Comments
 (0)